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

De WikiBR
Aucun résumé des modifications
 
(Une version intermédiaire par le même utilisateur non affichée)
Ligne 5 : Ligne 5 :
===Qui===
===Qui===


Nom réel : [http://www.polytechnique.org/profile/julien.cretin.2006 Julien Cretin]
Nom réel : Recherchez moi sur Polytechnique.org ou sur Frankiz (promo 2006).


Pseudos :
Pseudos :
Ligne 70 : Ligne 70 :


Il y a trois opérations :
Il y a trois opérations :
* le branchement conditionnel qui :
* le branchement conditionnel sur 'a' qui :
** mange un caractère sur son flux et sort par la pointe si c'est le bon caractère
** mange un 'a' sur son flux et sort par la pointe si c'est possible
** sort par le côté sinon
** ne mange rien et sort par le côté sinon
* le déplacement qui mange un caractère de son flux et le recopie
* 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 copie qui copie le caractère de son flux sans le manger

Version actuelle datée du 13 septembre 2010 à 19:45

BR2006

Infos

Qui

Nom réel : Recherchez moi sur Polytechnique.org ou sur Frankiz (promo 2006).

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 sur 'a' qui :
    • mange un 'a' sur son flux et sort par la pointe si c'est possible
    • ne mange rien et sort par le côté sinon
  • 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