Mientras viajaba en el futuro, noté un juego divertido entre los niños alrededor del año 2275. Cuando no quieren que sus tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-tatara-, tatara-tatara-tatara-tatara tienen para hablar lo que están diciendo, usan el discurso BIBABOBU . Obviamente, tampoco podía entender nada con mi cerebro de la era anterior al cyborg y me sentí (o técnicamente: me sentiré ) realmente tonto. Entonces, necesitaría un decodificador para mi próxima visita.
BIBABOBU?
Si bien ha quedado en desuso durante mucho tiempo, ASCII todavía se usa comúnmente en la cultura pop de 2275 y este lenguaje se basa en él.
Una cadena está codificada en BIBABOBU de esa manera:
- Convierta todos los caracteres a sus códigos ASCII.
Tome la representación hexadecimal de 2 dígitos de cada código y conviértalos usando la siguiente tabla:
0: BI 4: BIDI 8: BADI C: BODI 1: BA 5: BIDA 9: BADA D: BODA 2: BO 6: BIDO A: BADO E: BODO 3: BU 7: BIDU B: BADU F: BODU
Ejemplo
"Hello!" → 48 65 6C 6C 6F 21 → "BIDIBADI BIDOBIDA BIDOBODI BIDOBODI BIDOBODU BOBA"
Sin embargo, la entrada correspondiente se daría sin espacio para imitar la entonación monótona que los niños están usando para hacer esto aún más difícil de entender sin implantes:
"BIDIBADIBIDOBIDABIDOBODIBIDOBODIBIDOBODUBOBA"
Aclaraciones y reglas.
- Recuerda que necesito un decodificador , no un codificador.
- Los caracteres decodificados están garantizados para estar en el rango [32 ... 126] .
- Se garantiza que la entrada contiene un número par de dígitos hexadecimales codificados con BIBABOBU.
- Puede tomar la entrada en minúsculas o mayúsculas. No se permiten casos mixtos.
- Debido a que los cambios de bit son bastante comunes durante un viaje en el tiempo, este es un código de golf para minimizar los riesgos.
Casos de prueba
Nota: los avances de línea se utilizan a continuación solo con fines de formateo. Se supone que no debes manejarlos.
Input:
BIDABIDIBIDOBIDABIDUBUBIDUBIDI
Output:
Test
Input:
BIDABIDUBIDOBIDABIDOBODIBIDOBUBIDOBODUBIDOBODABIDOBIDABOBIBIDUBIDIBIDOBODUBOBIBUBOBUBOBUBI
DUBUBIDABOBA
Output:
Welcome to 2275!
Input:
BIDIBADIBIDOBIDABIDOBODIBIDOBODIBIDOBODUBOBODIBOBIBIDABIDIBIDOBADABIDOBODABIDOBIDABOBIBIDA
BIDIBIDUBOBIDOBABIDUBIDOBIDOBIDABIDOBODIBIDOBIDABIDUBOBOBABOBIBIDABADABIDOBODUBIDUBIDABOBI
BIDOBODIBIDOBODUBIDOBODUBIDOBADUBOBIBIDUBUBIDOBODUBOBIBIDOBIDOBIDUBIDABIDOBODOBIDOBODOBIDU
BADABOBA
Output:
Hello, Time Traveler! You look so funny!
Input:
BIDIBABIDOBODOBIDOBIDIBOBIBIDUBADABIDOBODUBIDUBIDABOBIBIDOBIDIBIDOBODUBIDOBODOBOBIDUBIDUBI
DIBOBIBIDUBIDABIDOBODOBIDOBIDIBIDOBIDABIDUBOBIDUBUBIDUBIDIBIDOBABIDOBODOBIDOBIDIBOBIBIDUBI
DUBIDOBADIBIDOBABIDUBIDIBOBIBIDIBADABOBIDUBIDOBODABOBIBIDUBUBIDOBABIDUBADABIDOBADABIDOBODO
BIDOBIDUBOBODIBOBIBIDOBIDIBIDOBODUBOBIBIDUBADABIDOBODUBIDUBIDABUBODUBOBIBIDIBADIBIDOBABOBI
BIDOBADIBIDOBABOBIBIDOBADIBIDOBABOBA
Output:
And you don't understand what I'm saying, do you? Ha ha ha!
fuente
Respuestas:
05AB1E ,
363533 bytesGuardado 1 byte gracias a Mr.Xcoder
Guardado 2 bytes gracias a KevinCruijssen
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
'B©¡¦®ì®D…IAO©â'D«‚˜®'U«âJskh2ôJHçJ
funciona para 35 bytes.©
. Gracias :)'B
ać
y retirar el¦
, ya que la entrada siempre se iniciará con una 'B'.ć
. ¡Gracias!Gelatina ,
26242322201715 bytesPruébalo en línea!
Cómo funciona
fuente
Perl 6 , 58 bytes
Pruébalo en línea!
Muy inspirado por la solución Jelly de Dennis. Utiliza una función mágica diferente
x³ % 87 % 4
que también asigna los códigos ASCII deIAOUBD
a012302
.Versión alternativa de
7574 bytes-1 byte gracias a Jo King
Pruébalo en línea!
Versión alternativa de 85 bytes
Pruébalo en línea!
fuente
(^16)>>.base(16)
-1 byte?Python 2 ,
100979695 bytes-1 byte gracias a ovs
-1 byte gracias a GB
Pruébalo en línea!
fuente
Perl 5 -p, 67 bytes
Pruébalo en línea!
fuente
05AB1E (heredado),
68656059 bytesLa entrada está en minúsculas.
-3 bytes implícitamente gracias a @Emigna cambiando
'b¡εg>}s£
a'b©¡®ì
.Pruébelo en línea o verifique todos los casos de prueba .
Además, definitivamente se puede jugar con algo más inteligente que las enormes cuerdas comprimidas. Echaremos otro vistazo más adelante.Respuesta más corta ya proporcionada por @Emigna , ¡así que asegúrese de votarlo!Explicación:
fuente
Perl 6 ,
88 8684 bytesPruébalo en línea!
fuente
R ,
141135 bytesPruébalo en línea!
¡Gracias a JayCe por guardar 6 bytes!
Es probable que usar algo de magia modular sea más corto, pero estoy bastante contento con esto como un primer paso ingenuo.
fuente
%*%
que veo. :-) ¡También puede poner`:`
como argumento una función en caso de que quiera usar esto junto con algo más!Japt,
432928 bytesComo era de esperar, un puerto de la solución Jelly de Dennis funciona mucho más corto.
Emite una matriz de caracteres.
Intentalo
Original, 42 bytes
Intentalo
Explicación
fuente
C (gcc) ,
181138136 bytes¡Esperemos que haya un compilador de C en el futuro para compilar esto! :-)
Gracias a Max Yekhlakov y ceilingcat por las sugerencias.
Pruébalo en línea!
En caso de que el compilador C del futuro solo comprenda ASCII BIBABOBU-ified :-)
(Codificador ¡ Pruébelo en línea! )
fuente
c=printf(&v),v=0
lugar dev=!putchar(v),c=1
JavaScript (Node.js) ,
131128bytesPruébalo en línea! El enlace incluye casos de prueba. Versión alternativa, también 131 bytes:
Pruébalo en línea! El enlace incluye casos de prueba. Editar: ahorra 3 bytes gracias a @Shaggy.
fuente
unescape()
es una buena idea.indexOf
->search
para guardar un byte.r
.Bash + utilidades comunes de Linux, 75 bytes
Pruébalo en línea!
fuente
Scala , 305 bytes
Bueno, estoy bastante seguro de que esto se puede jugar. Pero aún así, existe. Toma la entrada en minúscula.
f
imprime el resultado en stdout.EDITAR: -8 caracteres gracias a que ya no soy tonto (espacios); -13 caracteres gracias a crater2150
Pruébalo en línea!
fuente
dropRight(1)
coninit
,Seq("").drop(1)
conSeq[String]()
ymap(b=>a+b)
conmap(a+_)
map(a+_)
trabajar pero sabía que podía hacerlo. gracias por otros consejos!Python 2 ,
142139127118 bytesPruébalo en línea!
fuente
Python 2 , 93 bytes
Pruébalo en línea!
fuente
Ruby ,
8675 bytesPruébalo en línea!
fuente
Dyalog APL,
7472 bytesSolución de nivel principiante en Dyalog APL (¡recién comencé a aprender esto hace un par de días!). Define un dfn que toma un argumento correcto (la entrada). 72 caracteres, 72 bytes cuando se usa la codificación dyalog. Basado en la solución de Emigna en 05AB1E.
fuente
Jalea , 39 bytes
Pruébalo en línea!
La técnica utilizada es muy similar a la de Emigna . Voy a jugar al golf más pronto, con suerte.
fuente
Brain-Flak , 178 bytes
Pruébalo en línea!
Explicación
fuente
05AB1E , 30 bytes
Puerto de la respuesta de jalea loca de @Dennis (solo con incorporaciones menos convenientes). ¡Así que asegúrate de votarlo!
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Java (JDK 10) , 199 bytes
Pruébalo en línea!
Créditos
fuente
-~d
lugar de(d+1)
?char
s en su lugar y cuando regresé a mi primera versión, lo olvidé por completo nuevamente. ;)VBA (Excel), con un increíble
322244 bytesSí, y ME ENCANTA el hexadecimal. (Todavía no hay una fuente de sarcasmo, por lo que estoy usando cursiva por ahora)
Agregaré comentarios si alguien quiere, pero creo que se explica por sí mismo.El golf sucedió.Con comentarios:
Realmente intenté poner esto en la Ventana Inmediata de VB, pero no parece funcionar allí ... creo que cortaría 11 caracteres. También quería poner la declaración Match entre paréntesis, pero eso causa un error silencioso cada vez. Se agradece la ayuda: D
fuente
Array("I","A","O","U","II","IA","IO","IU","AI","AA","AO","AU","IO","OA","OO","OU")
->Split("I A O U II IA IO IU AI AA AO AU IO OA OO OU")
yNot IsError(c)
->IsError(c)=0
Haxe , 228 bytes
No es el mejor, los nombres de función de biblioteca estándar son demasiado grandes :(
Pruébalo en línea!
fuente
Pyth, 35 bytes
Salidas como una lista de caracteres.
Pruébalo aquí
Explicación
fuente
Carbón , 36 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Pase sobre cada carácter de entrada y cambie.
Si es un,
B
entonces empuje0
a la lista vacía predefinida.Si es un a
D
continuación, haga estallar el último valor, increméntelo, multiplique por4
y empújelo nuevamente.De lo contrario, busque el índice en la cadena
AOU
, increméntelo y agréguelo al último valor.Divida la lista en pares de valores, decodifique como base 16, convierta a ASCII e imprima implícitamente.
fuente
Limpio ,
145134bytesPruébalo en línea!
Explicado:
fuente
PHP, 119 bytes
asume una entrada en mayúscula. Ejecutar como tubería
-nR
o probarlo en línea .requiere PHP 7.1
para PHP anterior, use
substr($m,-3,1)
y ensubstr($m,-1)
lugar de$m[-<x>]
(+16 bytes);para los más pequeños PHP, put
B
,XIAO
yIAOU
entre comillas para evitar mensajes de advertencia (+10 bytes).fuente
05AB1E , 40 bytes
Pruébalo en línea!
fuente
PHP, 163 bytes
Llame
f(string $s)
con la cadena apropiada de caracteres codificados con bibabobu, e imprimirá la cadena decodificada.fuente
Python 3, 199 bytes
No es el más corto pero sin bucles.
fuente