Pendant que je voyageais dans le futur, j'ai remarqué un jeu amusant parmi les enfants vers 2275. Lorsqu'ils ne veulent pas que leurs arrière-arrière-arrière-arrière-arrière-petits-parents comprennent ce qu'ils disent, ils utilisent le langage BIBABOBU . De toute évidence, je ne pouvais rien comprendre non plus avec mon cerveau d'avant l'ère cyborg et je me sentais (ou techniquement: je vais me sentir ) vraiment stupide. Donc, il me faudrait un décodeur pour ma prochaine visite.
BIBABOBU?
Bien qu'il soit obsolète depuis longtemps, l'ASCII est encore couramment utilisé dans la culture pop de 2275 et ce langage est basé sur celui-ci.
Une chaîne est codée BIBABOBU de cette façon:
- Convertir tous les caractères en leurs codes ASCII.
Prenez la représentation hexadécimale à 2 chiffres de chaque code et convertissez-les en utilisant le tableau suivant:
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
Exemple
"Hello!" → 48 65 6C 6C 6F 21 → "BIDIBADI BIDOBIDA BIDOBODI BIDOBODI BIDOBODU BOBA"
Cependant, l' entrée correspondante serait donnée sans aucun espace pour imiter l'intonation monotone que les enfants utilisent pour rendre cela encore plus difficile à comprendre sans implants:
"BIDIBADIBIDOBIDABIDOBODIBIDOBODIBIDOBODUBOBA"
Clarifications et règles
- Rappelez-vous que j'ai besoin d'un décodeur , pas d'un encodeur.
- Les caractères décodés sont assurés d'être dans la plage [32 ... 126] .
- Il est garanti que l’entrée contient un nombre pair de chiffres hexadécimaux codés par BIBABOBU.
- Vous pouvez entrer des entrées en minuscules ou en majuscules. Les cas mixtes ne sont pas autorisés.
- Parce que les bits sont très fréquents lors d’un voyage dans le temps, il s'agit de code-golf afin de minimiser les risques.
Cas de test
NB: Les sauts de ligne sont utilisés ci-dessous uniquement à des fins de formatage. Vous n'êtes pas censé les gérer.
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!
la source
Réponses:
05AB1E ,
363533 octetsSauvé 1 octet grâce à Mr.Xcoder
Sauvé 2 octets grâce à KevinCruijssen
Essayez-le en ligne! ou en tant que suite de tests
Explication
la source
'B©¡¦®ì®D…IAO©â'D«‚˜®'U«âJskh2ôJHçJ
travaille pour 35 octets.©
. Merci :)'B
àć
et enlever la¦
, car l'entrée commence toujours par un « B ».ć
. Merci!Jelly ,
26242322201715 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Perl 6 , 58 octets
Essayez-le en ligne!
Fortement inspiré par la solution Jelly de Dennis. Utilise une fonction différente et magique
x³ % 87 % 4
qui associe également les codes ASCIIIAOUBD
à012302
.Version alternative
75 de74 octets-1 octet grâce à Jo King
Essayez-le en ligne!
Version alternative de 85 octets
Essayez-le en ligne!
la source
(^16)>>.base(16)
pour -1 octetPython 2 ,
100979695 octets-1 octet grâce à ovs
-1 octet grâce à GB
Essayez-le en ligne!
la source
Perl 5 -p, 67 octets
Essayez-le en ligne!
la source
05AB1E (héritage),
68656059 octetsLa saisie est en minuscule.
-3 octets implicitement grâce à @Emigna changer
'b¡εg>}s£
à'b©¡®ì
.Essayez-le en ligne ou vérifiez tous les cas de test .
En outre, peut certainement être joué avec quelque chose de plus intelligent que les énormes chaînes compressées. Je reviendrai plus tard.Réponse plus courte déjà fournie par @Emigna , alors assurez-vous de le réévaluer!Explication:
la source
Perl 6 ,
88 8684 octetsEssayez-le en ligne!
la source
R ,
141135 octetsEssayez-le en ligne!
Merci à JayCe d' avoir sauvé 6 octets!
L'utilisation de la magie modulaire sera probablement plus courte, mais je suis assez content de cela comme d'une première passe naïve.
la source
%*%
je vois. :-) Vous pouvez aussi mettre`:`
un argument de fonction au cas où vous voudriez utiliser cela en tandem avec autre chose!Japt,
432928 octetsSans surprise, la solution Jelly de Dennis au port est beaucoup plus courte.
Sort un tableau de caractères.
L'essayer
Original, 42 octets
L'essayer
Explication
la source
C (gcc) ,
181138136 octetsEspérons qu’il y aura un compilateur C à l’avenir pour compiler cela! :-)
Merci à Max Yekhlakov et ceilingcat pour les suggestions.
Essayez-le en ligne!
Au cas où le compilateur C du futur ne comprend que l'ASCII BIBABOBU-ified :-)
(Encoder Essayez-le en ligne! )
la source
c=printf(&v),v=0
lieu dev=!putchar(v),c=1
JavaScript (Node.js) ,
131128 octetsEssayez-le en ligne! Le lien inclut des cas de test. Version alternative, également 131 octets:
Essayez-le en ligne! Le lien inclut des cas de test. Edit: enregistre 3 octets grâce à @Shaggy.
la source
unescape()
est une bonne idée.indexOf
->search
pour sauvegarder un octet.r
.Bash + utilitaires Linux courants, 75 octets
Essayez-le en ligne!
la source
Scala , 305 octets
Eh bien, je suis à peu près sûr que cela peut être joué au golf. Mais encore, ça existe. Prend la saisie en minuscule.
f
affiche le résultat en stdout.EDIT: -8 caractères grâce à moi de ne plus être muet (espaces); -13 caractères grâce à crater2150
Essayez-le en ligne!
la source
dropRight(1)
avecinit
,Seq("").drop(1)
avecSeq[String]()
etmap(b=>a+b)
avecmap(a+_)
map(a+_)
pas travailler mais je savais que je pouvais le faire. merci pour d'autres conseils!Python 2 ,
142139127118 octetsEssayez-le en ligne!
la source
Python 2 , 93 octets
Essayez-le en ligne!
la source
Ruby ,
8675 octetsEssayez-le en ligne!
la source
Dyalog APL,
7472 octetsSolution de niveau débutant dans Dyalog APL (cela ne fait que l’apprendre il ya quelques jours!). Définit un dfn qui prend un argument correct (l’entrée). 72 caractères, 72 octets lors de l’utilisation du codage dyalog. Basé sur la solution d'Emigna dans 05AB1E.
la source
Gelée , 39 octets
Essayez-le en ligne!
La technique utilisée est très similaire à celle d' Emigna . Je vais jouer au golf plus tard, avec un peu de chance.
la source
Brain-Flak , 178 octets
Essayez-le en ligne!
Explication
la source
05AB1E , 30 octets
La réponse insensée de Jelly du port de @Dennis (avec des commandes moins pratiques). Alors assurez-vous de le revivre!
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Java (JDK 10) , 199 octets
Essayez-le en ligne!
Crédits
la source
-~d
au lieu de(d+1)
?char
plutôt s et quand je suis revenu à ma première version, je l'ai encore complètement oublié. ;)VBA (Excel), avec un incroyable
322244 octetsOui, et j'adore hexadécimal. (Il n'y a pas encore de police sarcasme, donc j'utilise l'italique pour le moment)
Je vais ajouter des commentaires si quelqu'un le souhaite, mais je pense que cela va de soi.Le golf est arrivé.Avec commentaires:
J'ai vraiment essayé de faire entrer cela dans la fenêtre Immédiate de VB, mais cela ne semble pas fonctionner là-bas ... cela réduirait 11 caractères, je pense. Je voulais également mettre l'instruction Match entre crochets, mais cela provoque une erreur silencieuse à chaque fois. L'aide est appréciée: D
la source
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")
etNot IsError(c)
->IsError(c)=0
Haxe , 228 octets
Pas le meilleur, les noms de fonction de bibliothèque standard sont trop grands :(
Essayez-le en ligne!
la source
Pyth, 35 octets
Affiche une liste de caractères.
Essayez-le ici
Explication
la source
Charbon de bois , 36 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Boucle sur chaque caractère d'entrée et commutateur.
Si c'est un
B
puis appuyez0
sur la liste vide prédéfinie.Si c'est un
D
puis pop la dernière valeur, incrémentez-le, multipliez par4
, et appuyez à nouveau.Sinon, recherchez l'index dans la chaîne
AOU
, incrémentez-le et ajoutez-le à la dernière valeur.Divisez la liste en paires de valeurs, décodez-la en base 16, convertissez-la en ASCII et imprimez-la de manière implicite.
la source
Propre ,
145134 octetsEssayez-le en ligne!
A expliqué:
la source
PHP, 119 octets
suppose une entrée en majuscule. Exécuter en pipe
-nR
ou essayer en ligne .nécessite PHP 7.1
pour les anciens PHP, utilisez
substr($m,-3,1)
etsubstr($m,-1)
au lieu de$m[-<x>]
(+16 octets);pour PHP plus jeune, mettre
B
,XIAO
etIAOU
entre guillemets pour éviter les messages d' avertissement (+ 10 octets).la source
05AB1E , 40 octets
Essayez-le en ligne!
la source
PHP, 163 octets
Appelez
f(string $s)
avec la chaîne appropriée de caractères encodés en bibabobu, et la chaîne décodée sera imprimée.la source
Python 3, 199 octets
Pas le plus court mais sans boucles.
la source