Enquanto eu estava viajando no futuro, notei um jogo engraçado entre crianças por volta de 2275. Quando eles não querem que seus tataravós entendam o que estão dizendo, eles usam a fala do BIBABOBU . Obviamente, eu também não conseguia entender nada com o meu cérebro da era pré-ciborgue e me senti (ou tecnicamente: me sentirei ) muito bobo. Então, eu precisaria de um decodificador para minha próxima visita.
BIBABOBU?
Embora tenha sido descontinuado por um longo tempo, o ASCII ainda é comumente usado na cultura pop de 2275 e esse idioma é baseado nele.
Uma sequência é codificada em BIBABOBU dessa maneira:
- Converta todos os caracteres em seus códigos ASCII.
Pegue a representação hexadecimal de 2 dígitos de cada código e converta-os usando a seguinte tabela:
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
Exemplo
"Hello!" → 48 65 6C 6C 6F 21 → "BIDIBADI BIDOBIDA BIDOBODI BIDOBODI BIDOBODU BOBA"
No entanto, a entrada correspondente seria fornecida sem espaço para imitar a entonação monótona que as crianças estão usando para tornar isso ainda mais difícil de entender sem implantes:
"BIDIBADIBIDOBIDABIDOBODIBIDOBODIBIDOBODUBOBA"
Esclarecimentos e regras
- Lembre-se de que preciso de um decodificador , não de um codificador.
- É garantido que os caracteres decodificados estejam no intervalo [32 ... 126] .
- A entrada é garantida para conter um número par de dígitos hexadecimais codificados em BIBABOBU.
- Você pode receber entradas em minúsculas ou maiúsculas. Casos mistos não são permitidos.
- Como os flips de bits são bastante comuns durante uma viagem no tempo, esse é um código de golfe para minimizar os riscos.
Casos de teste
Nota: os feeds de linha são usados abaixo apenas para fins de formatação. Você não deveria lidar com eles.
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!
fonte
Respostas:
05AB1E ,
363533 bytesGuardado 1 byte graças a Mr.Xcoder
Guardado 2 bytes graças a KevinCruijssen
Experimente online! ou como um conjunto de testes
Explicação
fonte
'B©¡¦®ì®D…IAO©â'D«‚˜®'U«âJskh2ôJHçJ
funciona para 35 bytes.©
. Obrigado :)'B
parać
e a remoção do¦
, uma vez que a entrada será sempre começam com um 'B'.ć
. Obrigado!Geléia ,
26242322201715 bytesExperimente online!
Como funciona
fonte
Perl 6 , 58 bytes
Experimente online!
Fortemente inspirado na solução de Dennis 'Jelly. Usa uma função mágica diferente
x³ % 87 % 4
que também mapeia os códigos ASCII deIAOUBD
para012302
.Versão alternativa
7574 bytes-1 byte graças a Jo King
Experimente online!
Versão alternativa de 85 bytes
Experimente online!
fonte
(^16)>>.base(16)
-1 bytePython 2 ,
100979695 bytes-1 byte graças ao ovs
-1 byte graças ao GB
Experimente online!
fonte
Perl 5 -p, 67 bytes
Experimente online!
fonte
05AB1E (legado),
68656059 bytesA entrada está em minúscula.
-3 bytes implicitamente, graças à mudança de @Emigna
'b¡εg>}s£
para'b©¡®ì
.Experimente online ou verifique todos os casos de teste .
Além disso, definitivamente pode ser jogado com algo mais inteligente do que as enormes cordas compactadas. Mais uma olhada mais tarde.Resposta mais curta já fornecida por @Emigna , por isso, vote nele!Explicação:
fonte
Perl 6 ,
88 8684 bytesExperimente online!
fonte
R ,
141135 bytesExperimente online!
Obrigado a JayCe por economizar 6 bytes!
É provável que usar alguma magia modular seja mais curta, mas estou muito feliz com isso como um primeiro passe ingênuo.
fonte
%*%
que vejo. :-) Você também pode colocar`:`
como argumento de função, caso queira usá-lo em conjunto com outra coisa!Japonês,
432928 bytesSem surpresa, um porto da solução Dennis 'Jelly funciona muito mais curto.
Produz uma matriz de caracteres.
Tente
Original, 42 bytes
Tente
Explicação
fonte
C (gcc) ,
181138136 bytesEspero que haja um compilador C no futuro para compilar isso! :-)
Obrigado a Max Yekhlakov e tetocat pelas sugestões.
Experimente online!
Caso o compilador C do futuro entenda apenas ASCII :-) BIBABOBU:
(Codificador Experimente online! )
fonte
c=printf(&v),v=0
vez dev=!putchar(v),c=1
JavaScript (Node.js) ,
131128 bytesExperimente online! O link inclui casos de teste. Versão alternativa, também 131 bytes:
Experimente online! O link inclui casos de teste. Editar: economiza 3 bytes graças ao @Shaggy.
fonte
unescape()
é uma boa ideia.indexOf
->search
para salvar um byte.r
.Bash + utilitários comuns do Linux, 75 bytes
Experimente online!
fonte
Scala , 305 bytes
Bem, eu tenho certeza que isso pode ser jogado fora. Mas ainda existe. Leva a entrada em minúsculas.
f
imprime o resultado em stdout.EDIT: -8 caracteres graças a eu não ser mais burra (espaços); -13 caracteres graças a crater2150
Experimente online!
fonte
dropRight(1)
porinit
,Seq("").drop(1)
porSeq[String]()
emap(b=>a+b)
commap(a+_)
map(a+_)
trabalhar, mas eu sabia que poderia fazer isso. obrigado por outras dicas!Python 2 ,
142139127118 bytesExperimente online!
fonte
Python 2 , 93 bytes
Experimente online!
fonte
Ruby ,
8675 bytesExperimente online!
fonte
Dyalog APL,
7472 bytesSolução de nível iniciante no Dyalog APL (comecei a aprender isso há alguns dias!). Define um dfn que recebe um argumento correto (a entrada). 72 caracteres, 72 bytes ao usar a codificação dyalog. Baseado na solução da Emigna em 05AB1E.
fonte
Geléia , 39 bytes
Experimente online!
A técnica utilizada é muito semelhante à de Emigna . Vou jogar isso ainda mais em breve, espero.
fonte
Flacidez Cerebral , 178 bytes
Experimente online!
Explicação
fonte
05AB1E , 30 bytes
Porto da resposta insana Jelly do @Dennis (apenas com componentes menos convenientes). Portanto, certifique-se de votá-lo!
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Java (JDK 10) , 199 bytes
Experimente online!
Créditos
fonte
-~d
vez de(d+1)
?char
s e, quando voltei para a minha primeira versão, esqueci completamente. ;)VBA (Excel), com incríveis
322244 bytesSim, e eu amo hexadecimal. (Ainda não há fonte de sarcasmo, por isso estou usando itálico)
. Vou adicionar comentários se alguém quiser, mas acho que é auto-explicativo.O golfe aconteceu.Com comentários:
Eu realmente tentei colocar isso na janela do VB Immediate, mas parece que não funciona lá ... isso cortaria 11 caracteres, eu acho. Eu também queria colocar a instrução Match entre colchetes, mas isso sempre causa um erro silencioso. A ajuda é apreciada: D
fonte
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")
eNot IsError(c)
->IsError(c)=0
Haxe , 228 bytes
Não são os melhores nomes de função de biblioteca padrão são muito grandes :(
Experimente online!
fonte
Pitão, 35 bytes
Saída como uma lista de caracteres.
Experimente aqui
Explicação
fonte
Carvão , 36 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Faça um loop sobre cada caractere de entrada e alterne.
Se for um
B
, pressione0
a lista vazia predefinida.Se for um
D
pop, clique no último valor, aumente, multiplique4
e pressione novamente.Caso contrário, encontre o índice na cadeia
AOU
, aumente-o e adicione o último valor.Divida a lista em pares de valores, decodifique como base 16, converta em ASCII e imprima implicitamente.
fonte
Limpo ,
145134 bytesExperimente online!
Explicado:
fonte
PHP, 119 bytes
assume entrada em maiúsculas. Execute como pipe
-nR
ou experimente online .requer PHP 7.1
para PHP antigo, use
substr($m,-3,1)
e emsubstr($m,-1)
vez de$m[-<x>]
(+16 bytes);para os mais jovens PHP, put
B
,XIAO
eIAOU
entre aspas para evitar mensagens de aviso (+10 bytes).fonte
05AB1E , 40 bytes
Experimente online!
fonte
PHP, 163 bytes
Ligue
f(string $s)
com a sequência apropriada de caracteres codificados em bibabobu e ela imprimirá a sequência decodificada.fonte
Python 3, 199 bytes
Não é o mais curto, mas sem loops.
fonte