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

De WikiBR
m (initiale - promo)
 
Aucun résumé des modifications
 
(8 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[BR2006]]
[[BR2006]]
==Infos==
===Qui===
Nom réel : Recherchez moi sur Polytechnique.org ou sur Frankiz (promo 2006).
Pseudos :
* insane0
* ia0
* tout ce qui matche <tt><nowiki>i[a-z]{2}a[a-z]{2}0</nowiki></tt>
===Quoi===
Mes postes :
* root
* news
* TV
* WiFi
* support@linux
* BLL
===Quand===
Promo [[BR2006|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 [[BR:BR2006_citations_polos#Insane0|deux citations de polos 2006]] étaient :
* <tt><nowiki> (-[z]rtyg--p)  (aen)</nowiki></tt>
* <tt><nowiki>(dv-[ra]e-jn-c) (oki)</nowiki></tt>
===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 <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.
====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 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

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