« Utilisateur:Insane0 » : différence entre les versions

De WikiBR
m (typo)
(ajout d'un graphe de contrôle)
Ligne 62 : Ligne 62 :
Le résultat pour la citation de mon polo est dans la variable <tt>i</tt>.  Le résultat pour mon anti-polo est dans la variable <tt>a</tt>.  Les deux variables sont de type <tt>[Char]</tt>.
Le résultat pour la citation de mon polo est dans la variable <tt>i</tt>.  Le résultat pour mon anti-polo est dans la variable <tt>a</tt>.  Les deux variables sont de type <tt>[Char]</tt>.
Normalement ça devrait pas être trop dur de deviner les mots et de voir la relation entre polo et anti-polo.
Normalement ça devrait pas être trop dur de deviner les mots et de voir la relation entre polo et anti-polo.
====Graphe de contrôle====
On peut aussi représenter l'algorithme comme un graphe de contrôle sur deux chaînes de caractères cycliques et produisant une autre chaîne de caractères cyclique (c'est ce que symbolisent les parenthèses dans les citations).
[[Image:Citations_Insane0.png]]
Il y a trois opérations :
* le branchement conditionnel qui mange un caractère sur son flux et sort par la branche correspondante
* le déplacement qui mange un caractère de son flux et le recopie
* la copie qui copie le caractère de son flux sans le manger
La couleur de l'opération désigne le flux utilisé pour la lecture.
Comme on travaille sur des flux infinis, il faut un point de synchronisation dans le graphe et dans les flux.  Celui-ci est symbolisé pour un flou vert.
Les chaînes de caractères cycliques solutions (représentables de manière finie sont) :
* (azertygennap) pour l'anti-polo
* (dvorakekijnioc) pour le polo
On voit bien les six termes qui s'opposent deux à deux :
* azerty -> dvorak
* gen -> ekij
* nap -> nioc

Version du 29 novembre 2009 à 19:46

BR2006

Infos

Qui

Nom réel : Julien Cretin

Pseudos :

  • insane0
  • ia0
  • tout ce qui matche i[a-z]{2}a[a-z]{2}0

Quoi

Mes postes :

  • root
  • news
  • TV
  • WiFi
  • support@linux
  • BLL

Quand

Promo 2006.

Comment

8173.

Explication des citations

Apparemment tout le monde n'a pas eu droit à l'explication de mes citations. Sachant qu'en plus il y a plein de manières de les expliquer. Je vais juste en donner quelques unes ici au fur et à mesure.

Les citations

Mes deux citations de polos 2006 étaient :

  • (-[z]rtyg--p) (aen)
  • (dv-[ra]e-jn-c) (oki)

Les solutions

Il y a plusieurs manières de résoudre ces citations. J'en rajouterai quand je trouverai le temps.

Algorithme en Haskell

Voici une première présentation de solution. Il s'agit d'un algorithme en Haskell (pourtant pas compliqué à deviner quand on voit les citations).

f ('-':i) (c:a) = c:g i a
f (b:i) a = b:f i a
g ('[':i) a = h i a
g i a@(c:_) = c:f i a
h (']':i) a = g i a
h (b:i) a = b:h i a
p y (*) i a = y i*y a
y a = a++y a
m = p y f
i = m "dv-[ra]e-jn-c" "oki"
a = m "-[z]rtyg--p" "aen"

Le résultat pour la citation de mon polo est dans la variable i. Le résultat pour mon anti-polo est dans la variable a. Les deux variables sont de type [Char]. Normalement ça devrait pas être trop dur de deviner les mots et de voir la relation entre polo et anti-polo.

Graphe de contrôle

On peut aussi représenter l'algorithme comme un graphe de contrôle sur deux chaînes de caractères cycliques et produisant une autre chaîne de caractères cyclique (c'est ce que symbolisent les parenthèses dans les citations).

Citations Insane0.png

Il y a trois opérations :

  • le branchement conditionnel qui mange un caractère sur son flux et sort par la branche correspondante
  • le déplacement qui mange un caractère de son flux et le recopie
  • la copie qui copie le caractère de son flux sans le manger

La couleur de l'opération désigne le flux utilisé pour la lecture.

Comme on travaille sur des flux infinis, il faut un point de synchronisation dans le graphe et dans les flux. Celui-ci est symbolisé pour un flou vert.

Les chaînes de caractères cycliques solutions (représentables de manière finie sont) :

  • (azertygennap) pour l'anti-polo
  • (dvorakekijnioc) pour le polo

On voit bien les six termes qui s'opposent deux à deux :

  • azerty -> dvorak
  • gen -> ekij
  • nap -> nioc