Un lenguaje que es muy útil en fuentes restringidas y otros desafíos similares es Unary , un derivado de brainfuck en el que los programas se escriben con un solo carácter. Su trabajo es escribir un programa para convertir programas de brainfuck a unary y un programa para hacer lo contrario, ambos programas en el mismo idioma. Su puntaje será la suma de las duraciones de los dos programas.
¿Cómo se convierte de brainfuck a unario?
- Primero convierta su código de brainfuck a binario de acuerdo con esta tabla:
- Ahora concatene el código en un número binario gigante en el orden del código.
- Anteponga a
1
a la cadena para asegurar un número binario único. - Convierte de un número binario a un número unario usando cualquier carácter.
- Ej:
+.
sería000000000000000000000000000000000000000000000000000000000000000000000000000000000000
(84 ceros).
Brainfuck -> Especificaciones Unarias
- Dado que los programas resultantes serán imposiblemente enormes, no imprima el programa real sino simplemente la duración del programa resultante.
- Tome el programa brainfuck como una cadena a través de stdin, función arg, etc. y genere la longitud.
- El programa siempre será válido y solo tendrá esos 8 caracteres.
Unary -> Especificaciones Brainfuck
- Tendrá que implementar el reverso del algoritmo anterior.
- Nuevamente, debido a los enormes tamaños en cuestión, la entrada será un número que describa la longitud del código Unary.
- Las mismas reglas de E / S que siempre.
- El programa siempre será válido y solo tendrá esos 8 caracteres.
Casos de prueba
- Hola mundo -
++++++[>++++++++++++<-]>.>++++++++++[>++++++++++<-]>+.+++++++..+++.>++++[>+++++++++++<-]>.<+++[>----<-]>.<<<<<+++[>+++++<-]>.>>.+++.------.--------.>>+.
=239234107117088762456728667968602154633390994619022073954825877681363348343524058579165785448174718768772358485472231582844556848101441556
- Fibonacci -
++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++>++++++++++++++++>>+<<[>>>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[<+>-]>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<<<++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<<.>.>>[>>+<<-]>[>+<<+>-]>[<+>-]<<<-]<<++...
=13067995222095367150854793937817629722033205198624522624687536186118993888926522550140580142585590431635487113180955099384652678100247403485397450658564826143160529351955621991895221530908461364045400531236124980271740502887704217664044858614821622360156740992393765239123681327824577149595724956207165558106099868913919959549896553103116795519592552089266360725543244154867904980260
Este es el código de golf, por lo que gana la puntuación más baja en bytes.
¿Alguien quiere una solución en Unary? ;PAG
code-golf
brainfuck
base-conversion
compiler
Maltysen
fuente
fuente
10101010101010
1010010010010
Respuestas:
Pyth, 17 + 17 = 34 bytes
BF -> Unario, 17 bytes
Unario -> BF, 17 bytes
fuente
brainfuck ,
563 335 318 316296 +529 373 366336 = 632 bytesDado que obviamente faltaba una solución en un lenguaje relacionado, aquí está la solución en brainfuck y Golunar. No pude publicar una respuesta en unario, porque eso necesitaría unas pocas veces más de memoria que los átomos en el universo ^^
La rutina "atrás" no verificará si el código Golunar / Unary es válido. Si el conteo de bits mod 3! = 1, se ejecutará en un bucle sin fin imprimiendo muchos ">" s.
Gracias a Nitrodon por ayudarme a obtener menos de 300 caracteres para el código bf a unario
brainfuck a unary
Pruébalo en línea!
y de regreso
Pruébalo en línea!
Golunar / unarios-dígitos,
509 303 288 286268 +478 337 331304 = 572 bytesbrainfuck a unary
y de regreso
Códigos fuente
brainfuck a unary
y de regreso
fuente
Python 2,
80796355 +8664 = 119 BytesGracias a Sp3000 por sus numerosas sugerencias, ahorrando muchos bytes.
Brainfuck a Unary,
78776153 + 2 = 55 bytesSe agregaron dos bytes para dar cuenta de los "s" de entrada.
Unario a Brainfuck,
8664 bytesÉchale un vistazo a ideone aquí.
fuente
CJam, 35 bytes
Brainfuck a Unary, 17 bytes
Pruébalo en línea.
Cómo funciona
Unario a Brainfuck, 18 bytes
Pruébalo en línea.
Cómo funciona
fuente
Bash + coreutils, 39 + 47 = 86
b2u.sh
:u2b.sh
:Prueba de salida:
fuente
tr -dc 0-9
(y en el código de golf se puede suponer que?
está bien sinJapt , 13 + 13 = 26 bytes
Brainfuck a Unary
¡Intentalo!
Explicación:
Unario a Brainfuck
¡Intentalo!
Explicación:
Notas
No puedo encontrar la meta publicación, pero si mi memoria funciona correctamente, las respuestas pueden limitar la E / S a números que su idioma puede admitir, siempre que implementen un algoritmo que funcione si el idioma comienza a admitir números más grandes. Ese es el caso aquí, la capacidad de Japt para tratar una cadena como "base
n
usando estosn
caracteres para los dígitos" solo puede usar elnumber
tipo de datos en el otro lado de la operación y, por lo tanto, los casos de prueba no se ejecutarán con éxito; la salida del primer programa y la entrada del segundo programa obligarán al número a uno que puede representarse como anumber
, en lugar de usar el número real. Para números que pueden ser perfectamente representados por Japt'snumber
tipo de datos, estos programas funcionarán según lo deseado, y si elnumber
tipo de datos cambia para admitir números más grandes, estos programas también comenzarán a admitir esos números.fuente
05AB1E , 33 (17 + 16) bytes
Brainfuck a Unary-length:
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Longitud unaria a Brainfuck
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Dart , 77 + 142 = 219 bytes
Pruébalo en línea!
fuente
C (gcc) , 254 bytes
Pruébalo en línea!
Determina en qué dirección ir en función de input (
i
), almacena el resultado en el búfer pasado (o
). Tenga en cuenta que algunos compiladores permiten guardar 4 bytes en función del orden definido por la implementación de o ++. En estos casos, la solución provista truncará un carácter adicional de la conversión Unary-> BF yo[1]
todos pueden reemplazarse*o
para recuperar el comportamiento.fuente
#include <string.h>
el pie de página en lugar del encabezado para mostrar que funciona sin esa importación. Además, ¿C ++ no sería más corto debido a la sobrecarga de su operador? : Psi
aui
tal vez*i>47&*i<58
->*i%48<10
?mpz_init_set_str
->mpz_set_str