Joe es tu desarrollador promedio de BF. Está a punto de revisar los cambios de su código en su repositorio cuando recibe una llamada de su jefe. "¡Joe! ¡La máquina del nuevo cliente está rota! El jodido intérprete establece todas las celdas en valores aleatorios antes de la ejecución del programa. No hay tiempo para arreglarlo, tu código tendrá que lidiar con eso". Joe no piensa mucho en eso, y está a punto de escribir un programa para poner a cero el primer millón de celdas, cuando su jefe lo interrumpe nuevamente - "... y no piense en usar la fuerza bruta, el código tiene que ser lo más pequeño posible ". ¡Ahora tienes que ayudar al pobre Joe!
Especificaciones
- Obtendrá un código válido de brainfuck como entrada
- Su programa luego modificará el código para que funcione en un intérprete aleatorio brainfuck
- Esto significa que antes de la ejecución del programa, las celdas se pueden establecer en cualquier valor.
- El nuevo programa debe tener exactamente el mismo comportamiento sin importar las condiciones iniciales.
- El intérprete tendrá un valor máximo de celda de 255 con envoltura y una cinta de longitud infinita.
Puntuación
Su puntaje es 10 veces el tamaño del compilador en bytes más la suma de los tamaños de los casos de prueba . Obviamente, el puntaje más bajo gana. Para mitigar la optimización de casos de prueba, me reservo el derecho de cambiar los casos de prueba si sospecho algo, y probablemente lo haré antes de elegir un ganador.
Casos de prueba
( Obtuve esto de la página de esolangs y esta página web: http://www.hevanet.com/cristofd/brainfuck/ ). También gracias a @Sparr por el último caso de prueba.
- Hola Mundo:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
- Entrada inversa:
>,[>,]<[.<]
- Poderes de dos (flujo infinito):
>++++++++++>>+<+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<]>.>[->[ <++>-[<++>-[<++>-[<++>-[<-------->>[-]++<-[<++>-]]]]]]<[>+<-]+>>]<<]
- Cuadrados menores de 10000:
++++[>+++++<-]>[<+++++>-]+<+[>[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+>>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]<<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]
- Corriente de Fibonacci:
>++++++++++>+>+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>[[-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>]<<<]
- Secuencia ASCII hasta la entrada:
,[.[>+<-]>-]
(esta requiere números de celda variables según la entrada)
Respuestas:
sed, compilador de 46 bytes
No me di cuenta de que también se suponía que el resultado era golf hasta después de escribir el programa, así que iré al compilador corto. También fue demasiado trabajo para probar, así que notifique si no funciona correctamente :)
fuente
C ++
Tamaño del compilador: 630 bytes (-10 bytes gracias a Zacharý)
Tamaño del resultado de la compilación Hello World: 139
Cuadrado bajo 10000: 319
Compilador:
El intérprete aleatorio brainfuck:
Algunas notas :
fuente
pii
aP
, y cambiando la definición deR
am[p<0?p%30000+30000:p]
, y modificando todas las llamadas / referencias a ellos en consecuencia. Además, modificó los casos de prueba. No he comprobado esto, pero podría guardar algunos bytes para definir algo30000
, ya que lo usa con tanta frecuencia.R
am[p<0?p%S+S:p]
trabajar?R
debería ahorrar unos pocos bytes.rs , 33 bytes, Puntuación: 2659
Principalmente solo un puerto simple de la
sed
respuesta.fuente