Il y a une vieille histoire à propos d'un tailleur de pierre qui n'a jamais été satisfait de ce qu'il était. Il souhaitait pouvoir devenir le soleil, et il l'était. Bloqué par les nuages, il souhaitait être - et est devenu - un nuage. Quand le vent a soufflé, il s'est souhaité devenir le vent. Arrêté par la montagne, il souhaitait être une montagne, et le devint ainsi. Bientôt, cependant, il était piraté par un tailleur de pierre et souhaitait être tailleur de pierre.
De même, votre tâche consiste à écrire un programme qui n'est jamais satisfait de la langue dans laquelle il se trouve. Votre programme doit produire un ensemble de remplacements d'expressions régulières pour le transformer en une langue différente. Etc.
Règles
- Écrivez un programme dans la langue de votre choix.
- Le programme doit produire une série d'au moins deux segments. Un segment est un groupe de texte, séparé par des points-virgules. Cependant, si un point-virgule est contenu dans une expression régulière, de sorte que sa décomposition entraînera une syntaxe non valide, il ne sépare pas les segments. Voir l'exemple.
- Le premier segment est un modèle d'expression régulière à rechercher, et le second segment est le modèle de remplacement. Le troisième est un autre motif de «recherche», et le quatrième est un motif de «remplacement», etc.
- Appliquez les modèles d'expression régulière au programme. Remplacez le motif sur le premier segment par un sur le second; remplacez le troisième motif par celui du quatrième, et ainsi de suite.
- Le résultat devrait être un programme dans une langue différente, qui, elle-même, suit les règles 2 à 4.
- Les langues utilisées doivent former un cycle infini et répétitif.
- Par exemple, Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python -> ...
- Votre score est la période du cycle. Les liens sont rompus par la longueur de code initiale la plus courte.
- Dans l'exemple ci-dessus, le score est de trois.
- À chaque itération du cycle, aucune langue ne peut être utilisée plus d'une fois.
- Pour les règles 5 et 7, les langages compatibles (C et C ++) et les différentes versions du même langage (Python 2 et Python 3) sont considérés comme identiques.
- Les programmes eux-mêmes n'ont pas besoin de se répéter.
- Dans l'exemple ci-dessus, les premier et quatrième programmes peuvent être différents.
- Toute version de regex est acceptable, mais la même doit être utilisée pour tous les programmes.
- La sortie totale de chaque programme ne doit pas dépasser 100 caractères.
- Chaque sortie doit contenir des instructions pour modifier réellement le programme. Autrement dit, deux programmes consécutifs du cycle peuvent ne pas être identiques.
Exemple
Python -> Ruby -> Python -> ...
print "uts;Z;rint;uts;Z(?=;Z);rint"
Les sorties:
uts;Z;rint;uts;Z(?=;Z);rint
Les segments sont:
FIND ; REPLACE
uts ; Z
rint ; uts
Z(?=;Z ; rint (breaking the first segment in two would result in invalid syntax)
L'application des remplacements d'expressions régulières, dans l'ordre, nous donne:
print "Z;Z;rint;Z;Z(?=;Z);rint" # replace each "uts" with "Z"
puts "Z;Z;uts;Z;Z(?=;Z);uts" # replace each "rint" with "uts"
puts "rint;Z;uts;rint;Z(?=;Z);uts" # replace each "Z" followed by ";Z" with "rint"
L'exécution de la dernière ligne nous donne les instructions pour transformer cela en code Python.
\;
;)