Cubically es demasiado tedioso para escribir manualmente cualquier código. Su desafío es traducir el texto ASCII al código fuente Cubically.
Cúbicamente
Esto es solo un descuido rápido de Cubically; El repositorio tiene una guía y detalles más completos.
Cúbicamente es un esolang que escribí hace un tiempo, diseñado para ser doloroso de usar. Contiene dos piezas de memoria, un Cubo de Rubik 3x3x3 y un registro llamado "bloc de notas".
Memoria
El cubo interno de Rubik se inicializa así:
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 down face
555
Después de realizar un giro de 90 ° en sentido horario en la cara derecha, el cubo de memoria se vería así:
002
002
002
111225333044
111225333044
111225333044
554
554
554
Comandos
Un carácter no entero establece el comando predeterminado. Para cada número entero antes de que el comando predeterminado se establezca una vez más, el comando se ejecuta con ese número entero. Por ejemplo, x524y312
realizaría un comando x
con 5, luego con 2, luego con 4, luego realizaría un comando y
con 3, luego con 1, luego con 2.
Los enteros que usan los comandos representan índices faciales. Por x0
lo tanto, se realizaría x
en la cara UP (índice 0). x1
funcionaría x
en la IZQUIERDA (1 índice), y así sucesivamente.
La ejecución de cualquier comando con 6
ejecutará ese comando en el valor del bloc de notas. La ejecución de cualquier comando con un número entero mayor de 6 dará como resultado un error.
Aquí hay algunos comandos de ejemplo:
R1
- gire la cara DERECHA 90 ° en sentido horario para que el cubo interno se vea como el segundo ejemplo anteriorR11
- gire la cara DERECHA 90 ° en sentido horario dos veces, idéntico aR2
+0
- agregue todos los valores de la cara ARRIBA al bloc de notas+000
- Agregue todos los valores de la cara ARRIBA al bloc de notas tres veces@6
- imprima la cara (memoria) sexta indexada inexistente como un carácter%4
- imprime la suma de todos los valores en la cara POSTERIOR como un entero
Una lista completa de comandos y sintaxis está disponible en el repositorio .
Desafío
Tomará el texto ASCII como entrada e imprimirá un programa cúbico como salida.
Ejemplos (robados de aquí y de aquí ):
Input -> Output
Hello, World! -> +53@6+1F2L2+0@6L2F2U3R3F1L1+2@66L3F3R1U1B3+0@6:4U1R1+00@6-000@6*0-4+000@6-00@6+2-000000@6-5+4000@6-00@6/0+00@6:0+0/0+00@6
1$2$3$4$5$6$7$8$9$10$ -> B1+2/2%6@4+00/0%6@4+00/1%6@4+21/1%6@4+30/0%6@4+22/1%6@4+22/1%6@4+40/1%6@4+52/1%6@4+42/1%6@4
Reglas
- Es posible que su programa no contenga un diccionario que contenga las traducciones para los 100 casos de prueba.
- Su programa debe finalizar en menos de 180 segundos (no hay programas de fuerza bruta que demoren semanas).
- Su programa debe generar un código cúbico válido que finalice en menos de 180 segundos.
- Su programa tomará la entrada a través de la entrada estándar, a menos que desee meterse con el controlador de prueba.
- Su programa debe generar código cúbico que no produce nada más que la entrada de su programa cuando se ejecuta. ಠ_ಠ
Puntuación
Probará su programa con 100 cadenas pseudoaleatorias de longitud pseudoaleatoria. (Se proporciona un script de bash que lo hará por usted). Así es como puntuará:
- Deje que la longitud del programa de salida sea o .
- Deje que la longitud de la cadena de entrada sea l .
- Deje que una variable r sea el resultado de o / l .
- Encuentre el promedio de todos los r : (r 1 + r 2 + r ... + r 100 ) / 100 .
Prueba con este script. Tendrás que modificarlo según las instrucciones. Tenga en cuenta que el programa no verifica si la salida es válida Código cúbico. Si no puede hacer que el script funcione, puedo ayudarlo. Envíame un ping en la sala de chat Cubically .
@6
preciso imprimir la suma de la cara inexistente del sexto índice (bloc de notas) como un carácter"? ¿ %4
También es una suma? ¿Los +
comandos suman cara y luego los agregan a todos los valores o ...?
@6
/ %6
solo imprime directamente el valor del bloc de notas como un carácter / entero. @x
/ %x
(donde x es cualquier cara existente) agrega todos los valores en la x
cara indexada e imprime la suma como un carácter / entero. +
agrega todos los valores en la cara especificada al registro.