Kiedy dzieci otwierają usta, nie tylko wypluwają bełkot. Mówią w bardzo zaawansowanym, odpornym na dorosłych szyfrach ...
Szyfr Baby-talk
Gdy dziecko mówi, może wyglądać gogooa gagooook aagaaoooy
mniej więcej tak: Każda sekcja oddzielona pojedynczymi spacjami reprezentuje postać (więc powyższy przykład reprezentuje 3 znaki).
Aby odszyfrować sekcję, musimy policzyć liczbę zawartych w niej As i Os. Liczymy jednak tylko te, które sąsiadują z inną samogłoską. Na przykład A w „kneblowaniu” nie będzie się liczyło, ale zarówno A, jak i O w „gaogu” byłyby ważne.
Liczenie powyższego przykładu wyglądałoby następująco:
Section | Num Os | Num As
gogooa | 2 | 1
gagooook | 4 | 0
aagaaoooy | 3 | 4
Następnie używamy tych wartości do konwersji danych wejściowych na tekst jawny na kwadracie Polybius. Jest to reprezentacja alfabetu angielskiego w formacie 5x5, z pominięciem „J” (pamiętaj, że w rozmowach dla dzieci obowiązują zasady liczenia 0)
0 1 2 3 4
0 A B C D E
1 F G H I K
2 L M N O P
3 Q R S T U
4 V W X Y Z
Wykorzystując liczbę Os jako kolumnę i liczbę As jako wiersz, znajdujemy znak, który reprezentuje każda sekcja:
Section | Num Os | Num As | Character
gogooa | 2 | 1 | (2,1) -> H
gagooook | 4 | 0 | (4,0) -> E
aagaaoooy | 3 | 4 | (3,4) -> Y
Co mówi nam, że dziecko mówiło „HEJ”.
Uwagi :
- Jeśli sekcja reprezentująca postać ma więcej niż 4 As lub Os, zignoruj dodatki, ponieważ 4 to maksymalna wartość na stole. - W tym zadaniu Y nie jest samogłoską - tylko A, E, I, O i U.
Wyzwanie
Twoim zadaniem jest stworzenie pełnego programu, który pobiera jedno wejście, słowo w języku niemowlęcym i drukuje je w postaci zwykłego tekstu.
- Twój program musi mieć możliwość wprowadzania danych wielkimi i małymi literami oraz ich kombinacji.
- Dane wejściowe będą zawierać tylko litery alfabetu ASCII (AZ i az), z pojedynczymi spacjami, aby oddzielić słowa dziecka.
- Tekst wyjściowy może być w każdym przypadku.
- Powinieneś wziąć dane wejściowe
STDIN
i wydrukować tekst jawnySTDOUT
. Jeśli twój język ich nie ma, użyj najbliższego odpowiednika. - To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach - ale każde rozwiązanie jest mile widziane.
Przypadki testowe
'GLOOG KAKAAOOO ARGOOO OOOOOGUGUU' -> CODE
'oaka pooopaa gaau augu' -> GOLF
'Aoao U oOOAoa oaoAoo aoAoAOa' -> NAPPY
'GUG gAGaA gOougOou' -> ALE
'OOaGOG GoGOOoGoU gAA bLAA GOUGoOUgAIGAI' -> HELLO
'GUG gAGaA gOougOou' -> 'ALE'
Dzieci piją piwo? : D.toUpperCase()
lub podobne wywołanie funkcji, a nie stymulujące wyzwaniegogooa
ma 2 o? A w jaki sposóbgagooook
mają 0 a?FAG
: POdpowiedzi:
05AB1E , 46 bajtów
Wypróbuj online!
Objaśnienie w krokach
źródło
Perl, 82 bajty
Obejmuje +1 dla
-a
Podaj dane wejściowe STDIN:
baby.pl
:Zakłada się, że jest to dość aktualna wersja perla, jeśli to
-a
sugeruje-n
. Jeśli twój perl jest za stary, musisz dodać wyraźną-n
opcję.Zakłada również, że dzieci nie mogą powiedzieć ogólnych ciągów ASCII, które zaczynają się od cyfr takich jak
1 this will not work
źródło
pieprzenie mózgu, 656 bajtów
To był całkiem dobry sposób na zabicie kilku godzin.
Wymaga interpretera pieprzenia mózgu, który wykorzystuje 8-bitowe zawijanie komórek, pozwala przejść w lewo od komórki 0 i zwraca 0, jeśli
,
jest używany, gdy standardowe wejście jest puste. Z mojego doświadczenia są to najczęstsze ustawienia.Ten program nie uważa Y za samogłoskę, ale jeśli OP tego chce, jest to łatwa poprawka.
Wygląda na to, że napisanie tego byłoby zniechęcającym zadaniem, ale jeśli znasz język, w kodzie nie ma nic zaskakującego ani nowego. Standardowa taktyka: „odczytaj dane wejściowe”, ale pamiętaj, aby zostawić kilka pustych komórek między bajtami, użyj tych pustych komórek do przechowywania danych o danych wejściowych, wykorzystaj zapisane dane, aby zdecydować, jak je przekształcić i wypluć coś na końcu . W tym przypadku uzyskano dane wejściowe, ustawiono je na wielkie litery, ustalono, które komórki są samogłoskami, wyrzucono tę informację po użyciu jej do ustalenia, które komórki znajdują się obok samogłosek, ustawiono wszystko, co nie jest obok samogłoski wartość, która nigdy nie będzie istotna, więc nie przeszkadzają później, a ty w zasadzie skończyłeś. Stamtąd po prostu trzeba liczyć
A
s iO
s, należy pomnożyćA
s przez 5 i dodaj liczbęO
s, specjalny przypadek powyżej 8, aby uniknąć J i wyjścia. Zdecydowałem się poradzić sobie z tym jednym słowem na raz, zamiast brać cały wkład naraz, więc musiałem ustawić część kodu, która odczytuje stdin, by przerwać na 0 lub 32, ale to nie jest zbyt duży problem (po prostu odejmij odejmowanie o 32 w warunkowe, aby nie zdarzyło się, jeśli wartość wynosi już 0, a następnie popraw dowolne<
lub>
instrukcje, które przegapiłeś później).Nie wiem, jak bardzo będzie pomocna, ponieważ napisałem ją głównie po to, aby moje myśli były proste, a nie prawdziwe wyjaśnienie, ale oto kod z moimi komentarzami i jego oryginalnymi wcięciami:
źródło
JavaScript (ES6), 145 bajtów
Zastępuje każde słowo (i następną spację) odpowiednią literą.
s.split` `.map().join``
ma 3 bajty dłużej:źródło
Perl, 159 +1 = 160 bajtów
+1 bajt dla flagi -n. Białe znaki nie są częścią kodu i służą wyłącznie do odczytu.
Kod dzieli dane wejściowe na spacje i konwertuje każde słowo dziecka na małe litery przed kontynuowaniem. Wyrażenie regularne znajduje wszystkie samogłoski a lub o, po których następuje kolejna samogłoska lub poprzedza je samogłoska, i sortuje je, a na początku, o na końcu, a następnie znajduje indeks pierwszego „o”. Jeśli pozostała liczba dopasowań (czyli liczba „a”) jest większa niż 4, wówczas dbamy o 4 a, a jeśli jest więcej niż 4 o, dbamy o 4 o. Następnie wyciąga odpowiednią literę z matrycy i drukuje ją, a następnie przechodzi do następnego słowa dla dziecka.
źródło
Brainfuck, 283 bajtów
Sformatowany:
Działa to z końcowym znakiem nowej linii lub bez niego.
Wypróbuj online.
Każdy znak jest przetwarzany mod 32 (z przepływem sterowania takim, że kod implementujący działanie mod występuje tylko raz w programie). Umożliwia to niewrażliwość na wielkość liter, a także spakowanie znaku spacji i EOF w jeden przypadek. Końcowy znak nowej linii jest traktowany tak samo, jak
J
, co nie wpływa na wynik.Szkic układu pamięci:
0 x C c y a A b B
gdzie
c
jest znakiem wejściowym,C
jest char mod 32,x
jest to, czy jest to samogłoska,y
czy to, czy poprzedni znak był samogłoską,A
iB
są to odpowiednio liczby poprawnych (obok samogłosek)a
io
znakówa
orazb
są ich odpowiednimi buforami, które zostać skopiowane lub wyczyszczone w zależności od tego, czy istnieje sąsiadująca samogłoska.Po osiągnięciu spacji lub EOF odbywa się żonglerka w celu zmniejszenia liczby większych niż 4 i pominięcia litery
J
, a następnie drukowany jest dekodowany znak.źródło
PHP, 163 bajty
Bardziej czytelna wersja:
Testy:
źródło
Java 8,
272266251249 bajtów-6 bajtów dzięki @Joba .
-1 bajt konwertujący z Javy 7 na 8 i
1416 dodatkowych bajtów zapisanych przez zmianę części do wydruku.Wyjaśnienie:
Wypróbuj tutaj.
źródło
Python 3,
163162157146 bajtówUżywa wyrażenia regularnego, aby znaleźć cały ciąg samogłosek większych niż 2, liczy As i Os z maksimum 4, a następnie drukuje.
źródło
APL, 60
Zauważ, że ⎕IO ← 0 i ⎕ML ← 3
Przykład:
Działa w Dyalog 15.0 , ponieważ jest to wersja, w której 819⌶ wprowadzono do małych ciągów znaków.
źródło
Pyth, 64 bajty
Prawdopodobnie można dalej grać w golfa. Wypróbuj tutaj!
źródło
R, 261 bajtów
Myślę, że spędziłem zdecydowanie za dużo czasu, żeby to zadziałać i uważam, że jest to niepotrzebnie skomplikowane rozwiązanie, chociaż działa. Pobiera dane wejściowe ze standardowego wejścia, ważne jest, aby ciąg był ujęty w cudzysłów.
Zastosowanie czterech zagnieżdżonych
apply
rodzin można teoretycznie ograniczyć do zaledwie dwóch, wykorzystującmapply
zamiast tego. Ale ponieważ nakłady namapply
nie będą tej samej długości, krótszy jest poddawany recyklingowi, co komplikuje rzeczy i nie mogłem znaleźć działającego rozwiązania.Jeśli ktoś jest zainteresowany, dodam później niewyjaśnione wyjaśnienie.
Wypróbuj wszystkie przypadki testowe na skrzypcach R.
Należy pamiętać, że ta wersja pobiera dane wejściowe jako argument funkcji zamiast stdin, ponieważ
scan
nie działa na skrzypcach R. Ponadto dodano nowy wiersz, aby ułatwić czytanie.źródło
Python 3, 262 bajty
Mniej golfa (komentarze to zmienne w skróconym kodzie):
Wypróbuj online!
źródło
blaoaoaog
: samogłoski z przeplotem są liczone więcej niż jeden raz, podając,z
kiedy powinnyt
(choć działa tylkoaaaooo
, choć nie mogę zrozumieć, dlaczego ....)aooa
== (2,2) ==n
,aoaoao
== (3,3) ==t
gaoaoaog
drukuje Z zamiast T. Myślę, że to dlatego, że Twój regex się podnosi[ao,oa,ao,oa,ao]
, co się liczy5,5
, a następnie ogranicza go4,4
, drukując Z.Kotlin ,
221209 bajtówTeraz o wiele bardziej brzydkie i wolne, wszystko w imieniu 11 bajtów
Zapisz go w pliku (np.
BabyTalk.kts
), Aby uruchomić jako skrypt. Lub powyższy kod można uzupełnićfun main(z:Array<String>)=
i skompilować normalnie za koszt o 26 bajtów więcej.Wypróbuj online!
Zębaty:
źródło
PHP,
124 129 121 120125 bajtówPobiera dane wejściowe z argumentów wiersza poleceń. Uruchom
-nr
lub wypróbuj online .awaria
źródło
J , 109 bajtów
Wypróbuj online!
źródło