Es gibt eine alte Geschichte über einen Steinmetz, der nie zufrieden war mit dem, was er war. Er wünschte, er könnte die Sonne werden, und so war er. Von den Wolken blockiert, wollte und wurde er eine Wolke. Als der Wind wehte, wünschte er sich, der Wind zu sein. Vom Berg angehalten, wollte er ein Berg sein und wurde so einer. Bald jedoch wurde er von einem Steinmetz gehackt und wollte Steinmetz werden.
Ebenso besteht Ihre Aufgabe darin, ein Programm zu schreiben, das mit der Sprache, in der es sich befindet, niemals zufrieden ist. Ihr Programm muss eine Reihe von Regex-Ersetzungen ausgeben, um es in eine andere Sprache umzuwandeln. Und so weiter.
Regeln
- Schreiben Sie ein Programm in einer Sprache Ihrer Wahl.
- Das Programm sollte eine Reihe von mindestens zwei Segmenten ausgeben. Ein Segment ist ein Textbündel, der durch Semikolons getrennt ist. Wenn jedoch ein Semikolon in einem regulären Ausdruck enthalten ist, sodass das Aufbrechen dort zu einer ungültigen Syntax führt, werden keine Segmente getrennt. Siehe das Beispiel.
- Das erste Segment ist ein zu findendes Regex-Muster, und das zweite Segment ist das Ersatzmuster. Das dritte ist ein anderes "Such" -Muster, und das vierte ist ein "Ersetzen" -Muster und so weiter.
- Wenden Sie die Regex-Muster auf das Programm an. Ersetzen Sie das Muster im ersten Segment durch eines im zweiten. Ersetzen Sie das dritte Muster durch das vierte Muster und so weiter.
- Das Ergebnis sollte ein Programm in einer anderen Sprache sein, das selbst den Regeln 2 bis 4 folgt.
- Die verwendeten Sprachen müssen einen unendlichen, sich wiederholenden Zyklus bilden.
- Zum Beispiel Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python -> ...
- Ihre Punktzahl ist die Periode des Zyklus. Krawatten werden durch die kürzeste anfängliche Codelänge unterbrochen.
- Im obigen Beispiel beträgt die Punktzahl drei.
- In jeder Iteration des Zyklus darf keine Sprache mehr als einmal verwendet werden.
- Für die Regeln 5 und 7 werden kompatible Sprachen (C und C ++) und verschiedene Versionen derselben Sprache (Python 2 und Python 3) als gleich angesehen.
- Die Programme selbst müssen nicht wiederholt werden.
- Im obigen Beispiel können das erste und das vierte Programm unterschiedlich sein.
- Jede Version von Regex ist akzeptabel, muss jedoch für alle Programme gleich verwendet werden.
- Die Gesamtausgabe für jedes Programm darf 100 Zeichen nicht überschreiten.
- Jede Ausgabe muss Anweisungen enthalten, um das Programm tatsächlich zu ändern. Das heißt, keine zwei aufeinanderfolgenden Programme im Zyklus dürfen gleich sein.
Beispiel
Python -> Ruby -> Python -> ...
print "uts;Z;rint;uts;Z(?=;Z);rint"
Ausgänge:
uts;Z;rint;uts;Z(?=;Z);rint
Die Segmente sind:
FIND ; REPLACE
uts ; Z
rint ; uts
Z(?=;Z ; rint (breaking the first segment in two would result in invalid syntax)
Wenn wir die Regex-Ersetzungen der Reihe nach anwenden, erhalten wir:
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"
Wenn Sie die letzte Zeile ausführen, erhalten Sie die Anweisungen, wie Sie dies wieder in Python-Code umwandeln können.
\;
;)