IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Vérifier si une chaine de caractères est un ambigramme


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2024
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Vérifier si une chaine de caractères est un ambigramme
    Bonjour,

    je voudrai écrire un pgm en C qui permet de vérifier si une chaine de caractères est un ambigramme (Un mot ou une phrase qui peut être lue de la même manière même lorsqu'il elle est tournée ou inversée. Par exemple, le mot « SWIMS » peut être lu de la même manière lorsqu'il est tourné à 180 degrés).

    Par avance merci pour votre aide.

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 693
    Points : 2 415
    Points
    2 415
    Par défaut
    Bonjour, bienvenue sur le forum

    Conformément aux règles de ce forum (section IV-N), on préfèrera t'assister pour faire l'exercice, mais pas te fournir une solution toute faite.

    En l’occurrence, réfléchir avec papier et stylo permet de visualiser la solution, à savoir faire une boucle qui va comparer :
    • le premier et le dernier caractère
    • le deuxième et l'avant dernier caractère
    • le troisième et l'avant-avant dernier
    • etc

    La comparaison se fera avec une fonction particulière (qui dira W=M ou M=W, etc)
    Si toutes les comparaisons sont OK, on retourne true.
    Si une des comparaisons ne va pas, on quitte la fonction en retournant false.

    Je te laisse convertir ça en C, et si tu as des questions n'hésite pas à revenir vers nous
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 545
    Points : 30 653
    Points
    30 653
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Bizarre comme algo parce qu'il y a peu de lettres qui matchent. Seules les lettres H, I, N, O, S et Z peuvent se retourner sans changer de sens. Plus M et W qui deviennent l'une l'autre.
    Donc déjà éliminer tout mot qui contient une des 18 lettres restantes. Ensuite un test d'anagramme avec un cas particulier sur "M" et "W"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre éclairé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 367
    Points : 733
    Points
    733
    Par défaut
    opodo ? en minuscule.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 611
    Points : 10 517
    Points
    10 517
    Par défaut
    L'algo peut être simple

    On prend la moitié du mot et on la parcourt
    1. on arrête et on retourne faux si on a 1 lettre qui ne se retourne pas - A, B, L, … à déterminer
    2. on remplace toutes les lettres qui "ne se retournent pas à l'identique" - M -> W, W -> M, effectivement p -> d, d -> p … à déterminer


    Ensuite il faut faire 1 test anagramme en partant du milieu - ]milieu .. début] == ]milieu .. fin]

    Édit: En regardant la page Wikipédia d'ambigramme cela semble être 1 gros délire symétrie, rotation, horizontale, 180°, 45°, mathématique, …
    Mais cela dépend bien de la police utilisée : donc bonne chance
    ambigramme est 1 ambigramme (rotation en prenant le r comme milieu) en bidouillant le a/g et le deuxième m pour qui ressemble à ib : donc bon, certains sont assez illisibles

    LOUL "Le logo inOui des TGV de la SNCF est un ambigramme pivotant."

  6. #6
    Membre éclairé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 367
    Points : 733
    Points
    733
    Par défaut
    là où ça devient difficile, c'est de le faire avec du chinois / japonais

  7. #7
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 278
    Points : 4 002
    Points
    4 002
    Par défaut
    Bonjour foetus,

    Citation Envoyé par foetus Voir le message
    L'algo peut être simple
    On prend la moitié du mot et on la parcourt
    ...
    Pas exactement la moitié mais (length(str) + 1)/2 - division entière. Ou, en reprenant la proposition de parcours, un indice qui croit du début et un indice qui décroit depuis la fin avec arrêt quand l'indice montant devient supérieur à l'indice qui descend (l'égalité éventuelle doit être conservée même si cela induit un test supplémentaire).

    On retrouve le même problème avec la notion de "milieu".

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 545
    Points : 30 653
    Points
    30 653
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Guesset Voir le message
    Pas exactement la moitié mais (length(str) + 1)/2 - division entière.
    En plus de ça, la lettre milieu ne peut pas faire partie des lettre spéciales M/W et p/d car si elle pivote à 180° elle change de signification...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 278
    Points : 4 002
    Points
    4 002
    Par défaut
    Bonjour Sve,

    Citation Envoyé par Sve@r Voir le message
    En plus de ça, la lettre milieu ne peut pas faire partie des lettre spéciales M/W et p/d car si elle pivote à 180° elle change de signification...
    Oui, c'est pour ça que j'ai conservé le milieu, s'il existe, car C[i] aura du mal à être à la fois 'M' et 'W'

    Je crois que je n'explicite pas assez. Heureusement que certains ne laissent rien passer.

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2024
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    MERCI à tous pour vos réponses.

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 545
    Points : 30 653
    Points
    30 653
    Billets dans le blog
    1
    Par défaut
    Sur le site de wikipedia donné par foetus, le "a" est écrit sans sa petite queue en bas à droite, de telle façon qu'il devient un "e" quand on le pivote. De même le "r" est écrit lui avec une petite queue en plus pour qu'il redonne "r" à l'arrivée. Et le "b" et "i" eux il sont carrément accolés/arrangés pour former ensembles un "m".
    Peut-être qu'on peut inclure ces règles dans la fonction (sinon c'est un peu trop facile quoi...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 611
    Points : 10 517
    Points
    10 517
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Peut-être qu'on peut inclure ces règles dans la fonction (sinon c'est un peu trop facile quoi...)
    C'est justement pour cela que j'ai regardé la page Wikipédia parce que c'est plus "du dessin" qu'autre chose.

    Et donc, le meilleur algo c'est 1) détection des contours 2) trouver la boite englobante (assez facile, c'est juste 1 rectangle)
    À partir de là je pense que tu peux tout gérer : rotation, symétrie, symétrie centrale, … (avec 1 taux de ressemblance)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/10/2007, 16h54
  2. Vérifier qu'une chaine de caractère est bien présente
    Par kilian67 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/09/2007, 19h10
  3. Verifier si une chaine de caractere est situe dans une chaine de caractere
    Par gregounnet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2007, 16h31
  4. Réponses: 9
    Dernier message: 19/10/2006, 18h02
  5. Réponses: 4
    Dernier message: 07/09/2006, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo