Podczas podróży w przyszłości zauważyłem zabawną grę wśród dzieci około 2275 roku. Kiedy nie chcą, aby ich pra-pra-pra-pra-pra-dziadek zrozumiała, co mówią, używają języka BIBABOBU . Oczywiście nie mogłem nic zrozumieć z moim mózgiem z czasów przed cyborga i czułem się (lub technicznie: będę się czuł ) naprawdę głupio. Potrzebuję więc dekodera na następną wizytę.
BIBABOBU?
Chociaż od dawna jest przestarzały, ASCII jest nadal powszechnie używany w popkulturze 2275 i ten język jest na nim oparty.
Łańcuch jest kodowany w BIBABOBU w ten sposób:
- Konwertuj wszystkie znaki na ich kody ASCII.
Weź dwucyfrową reprezentację szesnastkową każdego kodu i przekonwertuj je, korzystając z poniższej tabeli:
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
Przykład
"Hello!" → 48 65 6C 6C 6F 21 → "BIDIBADI BIDOBIDA BIDOBODI BIDOBODI BIDOBODU BOBA"
Jednak odpowiedni wkład zostałby podany bez miejsca naśladującego monotonną intonację, której używają dzieci, aby uczynić to jeszcze trudniejszym do zrozumienia bez implantów:
"BIDIBADIBIDOBIDABIDOBODIBIDOBODIBIDOBODUBOBA"
Wyjaśnienia i zasady
- Pamiętaj, że potrzebuję dekodera , a nie kodera.
- Dekodowane postacie z pewnością znajdują się w przedziale [32 ... 126] .
- Gwarantujemy, że dane wejściowe zawierają en parzystą liczbę cyfr szesnastkowych zakodowanych w systemie BIBABOBU.
- Możesz wprowadzać dane pisane wielkimi lub małymi literami. Mieszane przypadki są niedozwolone.
- Ponieważ przewracanie bitów jest dość powszechne podczas podróży w czasie, jest to gra w golfa w celu zminimalizowania ryzyka.
Przypadki testowe
Uwaga: Kanały liniowe są używane poniżej wyłącznie do celów formatowania. Teraz nie ma z nimi radzić.
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!
źródło
Odpowiedzi:
05AB1E ,
363533 bajtówZapisano 1 bajt dzięki Mr.Xcoder
Zapisano 2 bajty dzięki KevinCruijssen
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
'B©¡¦®ì®D…IAO©â'D«‚˜®'U«âJskh2ôJHçJ
działa na 35 bajtów.©
. Dzięki :)'B
doć
i usuwania¦
, ponieważ wejście będzie zawsze zaczynać się od „B”.ć
. Dzięki!Galaretka ,
26242322201715 bajtówWypróbuj online!
Jak to działa
źródło
Perl 6 , 58 bajtów
Wypróbuj online!
Mocno zainspirowany galaretką Dennisa. Używa innej magicznej funkcji,
x³ % 87 % 4
która mapuje również kody ASCIIIAOUBD
na012302
.Alternatywna wersja
7574 bajtów-1 bajt dzięki Jo King
Wypróbuj online!
Alternatywna wersja 85 bajtów
Wypróbuj online!
źródło
(^16)>>.base(16)
na -1 bajtPython 2 ,
100979695 bajtów-1 bajt dzięki ovs
-1 bajt dzięki GB
Wypróbuj online!
źródło
Perl 5- p, 67 bajtów
Wypróbuj online!
źródło
05AB1E ( starsza wersja ),
68656059 bajtówDane wejściowe są pisane małymi literami.
-3 bajty domyślnie dzięki zmianie @Emigna
'b¡εg>}s£
na'b©¡®ì
.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Ponadto można zdecydowanie grać w golfa za pomocą czegoś mądrzejszego niż ogromne skompresowane struny. Przyjrzymy się później.Krótsza odpowiedź została już podana przez @Emigna , więc upewnij się, że go głosujesz!Wyjaśnienie:
źródło
Perl 6 ,
88 8684 bajtówWypróbuj online!
źródło
R ,
141135 bajtówWypróbuj online!
Dzięki JayCe za oszczędność 6 bajtów!
Używanie magii modułowej prawdopodobnie będzie krótsze, ale jestem całkiem zadowolony z tego jako naiwnego pierwszego przejścia.
źródło
%*%
Widzę nawet używanie go z pierwszeństwem przed nim . :-) Możesz również podać`:`
jako argument funkcji, na wypadek gdybyś chciał użyć tego w parze z czymś innym!Japt,
432928 bajtówNic dziwnego, że port galaretki Dennisa działa znacznie krócej.
Zwraca tablicę znaków.
Spróbuj
Oryginalny, 42 bajty
Spróbuj
Wyjaśnienie
źródło
C (gcc) ,
181138136 bajtówMam nadzieję, że w przyszłości będzie kompilator C, który to skompiluje! :-)
Podziękowania dla Maxa Yekhlakova i ceilingcat za sugestie.
Wypróbuj online!
W przypadku, gdy przyszły kompilator C rozumie tylko BIBABOBU-ified ASCII :-)
(Enkoder Wypróbuj online! )
źródło
c=printf(&v),v=0
zamiastv=!putchar(v),c=1
JavaScript (Node.js) ,
131128 bajtówWypróbuj online! Link zawiera przypadki testowe. Alternatywna wersja, także 131 bajtów:
Wypróbuj online! Link zawiera przypadki testowe. Edycja: Zapisuje 3 bajty dzięki @Shaggy.
źródło
unescape()
to fajny pomysł.indexOf
->,search
aby zapisać bajt.r
.Bash + typowe narzędzia Linux, 75 bajtów
Wypróbuj online!
źródło
Scala , 305 bajtów
Cóż, jestem prawie pewien, że można to rozegrać. Ale nadal istnieje. Bierze małe litery na wejściu.
f
wypisuje wynik na standardowe wyjście.EDYCJA: -8 znaków dzięki czemu nie jestem już głupi (spacje); -13 znaków dzięki crater2150
Wypróbuj online!
źródło
dropRight(1)
zinit
,Seq("").drop(1)
zSeq[String]()
, orazmap(b=>a+b)
zmap(a+_)
map(a+_)
działać, ale wiedziałem, że mogę to zrobić. dzięki za inne wskazówki!Python 2 ,
142139127118 bajtówWypróbuj online!
źródło
Python 2 , 93 bajty
Wypróbuj online!
źródło
Rubin ,
8675 bajtówWypróbuj online!
źródło
Dyalog APL,
7472 bajtyRozwiązanie dla początkujących w aplikacji Dyalog APL (dopiero kilka dni temu zacząłem się tego uczyć!). Definiuje dfn, który przyjmuje jeden właściwy argument (dane wejściowe). 72 znaki, 72 bajty przy korzystaniu z kodowania dyalog. W oparciu o rozwiązanie Emigna w 05AB1E.
źródło
Galaretka , 39 bajtów
Wypróbuj online!
Zastosowana technika jest bardzo podobna do Emigny . Mam nadzieję, że wkrótce zagram w golfa.
źródło
Brain-Flak , 178 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
05AB1E , 30 bajtów
Port szalonej odpowiedzi @Dennis na Jelly (tylko z mniej wygodnymi wbudowaniami). Pamiętaj więc, aby go zagłosować!
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Java (JDK 10) , 199 bajtów
Wypróbuj online!
Kredyty
źródło
-~d
zamiast(d+1)
?char
zamiast tego s, a kiedy wróciłem do mojej pierwszej wersji, zupełnie zapomniałem o tym. ;)VBA (Excel), z niesamowitymi
322244 bajtamiTak, i UWIELBIAM szesnastkowy. (Nie ma jeszcze czcionki sarkazmowej, więc na razie używam kursywy)
Dodam komentarze, jeśli ktoś chce, ale myślę, że to oczywiste.Grało się w golfa.Z komentarzami:
Naprawdę starałem się wprowadzić to do okna natychmiastowego VB, ale wydaje się, że tam nie działa ... to mogłoby przeciąć 11 znaków. Chciałem również umieścić instrukcję Match w nawiasach, ale to powoduje cichy błąd za każdym razem. Doceniamy pomoc: D
źródło
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")
iNot IsError(c)
->IsError(c)=0
Haxe , 228 bajtów
Nie najlepsze, standardowe nazwy funkcji bibliotecznych są zbyt duże :(
Wypróbuj online!
źródło
Pyth, 35 bajtów
Wyjście jako lista znaków.
Wypróbuj tutaj
Wyjaśnienie
źródło
Węgiel drzewny , 36 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Pętla nad każdym znakiem wejściowym i przełącznikiem.
Jeśli jest
B
to push0
do predefiniowanej pustej listy.Jeśli jest to a
D
następnie wstaw ostatnią wartość, zwiększ ją, pomnóż4
i wciśnij ponownie.W przeciwnym razie znajdź indeks w ciągu
AOU
, zwiększ go i dodaj do ostatniej wartości.Podziel listę na pary wartości, zdekoduj jako podstawę 16, przekonwertuj na ASCII i niejawnie wydrukuj.
źródło
Czysty ,
145134 bajtówWypróbuj online!
Wyjaśniono:
źródło
PHP, 119 bajtów
zakłada wprowadzanie wielkich liter. Uruchom jako potok z
-nR
lub spróbuj online .wymaga PHP 7.1
dla starszych PHP, użyj
substr($m,-3,1)
isubstr($m,-1)
zamiast$m[-<x>]
(+16 bajtów);Dla młodszych PHP, umieścić
B
,XIAO
aIAOU
w cudzysłów, aby uniknąć komunikatów ostrzegawczych (+10 bajtów).źródło
05AB1E , 40 bajtów
Wypróbuj online!
źródło
PHP, 163 bajty
Wywołaj
f(string $s)
z odpowiednim ciągiem znaków zakodowanych na bibabobu, a wydrukuje zdekodowany ciąg.źródło
Python 3, 199 bajtów
Nie najkrótszy, ale bez pętli.
źródło