Hay una vieja historia sobre un picapedrero que nunca estuvo satisfecho con lo que era. Deseó poder convertirse en el sol, y así fue. Bloqueado por las nubes, deseaba ser, y se convirtió, en una nube. Cuando soplaba el viento, deseaba ser el viento. Detenido por la montaña, deseaba ser una montaña, y así se convirtió en uno. Pronto, sin embargo, estaba siendo pirateado por un cantero y deseaba ser un cantero.
De manera similar, su tarea es escribir un programa que nunca esté satisfecho con el idioma en el que se encuentra. Su programa debe generar un conjunto de reemplazos de expresiones regulares para convertirlo en un idioma diferente. Y así.
Reglas
- Escriba un programa en el idioma que elija.
- El programa debería generar una serie de al menos dos segmentos. Un segmento es un montón de texto, separado por punto y coma. Sin embargo, si un punto y coma está contenido dentro de una expresión regular, de modo que dividirlo allí dará como resultado una sintaxis no válida, no separa los segmentos. Mira el ejemplo.
- El primer segmento es un patrón de expresiones regulares para encontrar, y el segundo segmento es el patrón de reemplazo. El tercero es otro patrón de "búsqueda", y el cuarto es un patrón de "reemplazo", y así sucesivamente.
- Aplicar los patrones de expresiones regulares al programa. Reemplace el patrón en el primer segmento con uno en el segundo; reemplace el tercer patrón con el del cuarto, y así sucesivamente.
- El resultado debería ser un programa en un idioma diferente, que, en sí mismo, siga las reglas 2 a 4.
- Los idiomas utilizados deben formar un ciclo infinito y repetitivo.
- Por ejemplo, Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python -> ...
- Tu puntaje es el período del ciclo. Los lazos se rompen por la longitud de código inicial más corta.
- En el ejemplo anterior, la puntuación es tres.
- En cada iteración del ciclo, no se puede usar ningún idioma más de una vez.
- Para las reglas 5 y 7, los lenguajes compatibles (C y C ++) y las diferentes versiones del mismo lenguaje (Python 2 y Python 3) se consideran iguales.
- Los programas en sí mismos no necesitan repetirse.
- En el ejemplo anterior, el primer y el cuarto programa pueden ser diferentes.
- Cualquier versión de regex es aceptable, pero se debe usar la misma para todos los programas.
- La salida total para cada programa no puede exceder los 100 caracteres.
- Cada salida debe contener instrucciones para cambiar realmente el programa. Es decir, no hay dos programas consecutivos en el ciclo que puedan ser iguales.
Ejemplo
Python -> Ruby -> Python -> ...
print "uts;Z;rint;uts;Z(?=;Z);rint"
Salidas:
uts;Z;rint;uts;Z(?=;Z);rint
Los segmentos son:
FIND ; REPLACE
uts ; Z
rint ; uts
Z(?=;Z ; rint (breaking the first segment in two would result in invalid syntax)
La aplicación de los reemplazos de expresiones regulares, en orden, nos da:
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"
Ejecutar la última línea nos da las instrucciones para volver a convertir esto en código Python.
\;
;)