Desafío: Implemente ROT-47 en un código que funcione tanto como sí mismo como como la versión ROT-47 de sí mismo.
Tanteo:
Su puntaje se calcula como un porcentaje de bytes usados elegibles para ROT-47 en total de ambas versiones del programa dividido por el total de bytes (todos los caracteres) de ambas versiones .
Un byte usado elegible para ROT-47 es cualquier carácter que el cifrado ROT-47 convertiría que no sea parte de un comentario o que el compilador / intérprete ignore. Por ejemplo, cualquier carácter en un programa de brainfuck que no lo +-<>[],.
sea no se considera un byte usado, y cualquier personaje en un programa C que incluya y después //
o dentro /* */
no se considera un byte usado. Todos los símbolos especiales en APL no se consideran usados, como lo son todos los caracteres en un programa de espacios en blanco (lo siento).
El programa con más votos positivos romperá los lazos. Si todavía hay un empate, entonces gana el programa más corto.
Ejemplo de puntuación:
C: 62/64 = 96.875%
Observe que hay un espacio en este programa. Obviamente también, este programa no es una entrada válida porque ni siquiera se compila, pero quería mostrar cómo funciona la puntuación.
main(){printf("Hello World!");}
fuente
>2:?WXLAC:?E7WQw6==@ (@C=5PQXjN
compila?Respuestas:
Ruby, 100% (74 caracteres)
Entrada en STDIN, salida en STDOUT.
La segunda línea es la primera línea ROT-47'd. Por lo tanto, cuando ROT-47 ejecuta todo el programa, se convierte en:
Mi estrategia aquí se basa en el hecho de que:
V
es'
cuando ROT-47'dj
es;
cuando ROT-47'dPor lo tanto, se
Vj=...Vj;
convierte en';l...';
, que es esencialmente un no-opVj=...Vj;
puede admitir la ejecución de cualquier código como podría hacerloVj=0;{INSERT ANY CODE};Vj;
, y eso se hará'...';
cuando ROT-47'd. Solo debes tener cuidado de no usarV
ese código, ya que eso lo romperá.Se puede usar una lógica similar en reversa para producir la segunda mitad (en
jV
lugar deVj
)fuente
C - 54,6%
Cuando ROT-47-traducido, obtenemos
Ambos programas compilan y ROT-47 traduce el primer argumento:
fuente
GolfScript, 120/120 bytes = 100%
o, en ROT-47:
Sin comentarios ni abuso de cadenas. El comando indefinido
LiUUbamUUZadckYLfZfZhcTbbZNYNT
(que equivale al resto del código en ROT-47) no funciona, pero el intérprete todavía lo ejecuta, por lo que creo que cuenta como usado.Este fue realmente un desafío bastante fácil en GolfScript. La principal dificultad fue evitar el dígito
1
, que ROT-47 asigna al comando GolfScript`
. Los comandos.
,-
,,
,\
,[
,/
,]
y^
también tuvieron que ser evitado, pero que era bastante fácil, en este caso, ya que la tarea requiere ningún edificio matriz.Prima:
Aquí hay una quine del período 2 de GolfScript (es decir, un programa que imprime un segundo programa que imprime el primer programa nuevamente) donde los dos programas son las transformaciones ROT-47 entre sí:
Este programa se genera con codificación ROT-47, produciendo otro programa GolfScript:
que, a su vez, también se genera con codificación ROT-47, produciendo el programa anterior nuevamente. Por lo tanto, este programa también es una quine giratoria .
fuente
A
en brainfuck contaría en el numerador pero no en el denominador. ¿Es esto lo mismo o diferente?LiUUbamUUZadckYLfZfZhcTbbZNYNT
es un identificador válido en GolfScript y se ejecutará como un comando. Sin embargo, no es uno de los comandos integrados , ni el programa le asigna un significado, por lo que, por defecto, simplemente no hace nada.pitón, 96.1% (?)
Según su definición, ¿las cadenas cuentan como código usado?
fuente