Napisać program lub funkcję, która pobiera ciąg znaków -=o.
, gdzie -=o
's i .
jest zawsze na przemian, charakter do charakteru. Ciąg będzie miał nieparzystą długość większą niż jeden i zawsze zaczyna się i kończy w jednym z -=o
.
Zasadniczo dane wejściowe będą wyglądać jak linia emotikonów, które dzielą oczy w różnych stanach senności, np
o.=.=.-.-.o.o
Twoim celem jest wydrukowanie lub zwrócenie twarzy, która jest albo najbardziej śpiąca, albo najbardziej obudzona (to zależy od ciebie). Jeśli istnieje wiele opcji określających, kto jest najbardziej śpiący / najbardziej przebudzony, wówczas może zostać wyświetlony jeden z nich.
Istnieje dziewięć różnych twarzy i pięć poziomów senności:
-.- is 100% sleepy
-.= is 75% sleepy
-.o is 50% sleepy
=.- is 75% sleepy
=.= is 50% sleepy
=.o is 25% sleepy
o.- is 50% sleepy
o.= is 25% sleepy
o.o is 0% sleepy
W przypadku, gdy nie jest to jasne, procent senności jest obliczany przez przypisanie 1
do -
pełnego uśpienia, 0.5
do =
półśpienia i 0
do o
przebudzenia. Następnie suma dwóch wartości oka podzielonych przez dwa jest procentem.
Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
Najbardziej śpiący
-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES -.=
=.-.= GIVES =.- OR -.=
o.-.= GIVES -.=
-.-.= GIVES -.-
o.o.- GIVES o.-
=.=.=.o GIVES =.=
-.=.=.= GIVES -.=
=.o.-.= GIVES -.=
o.-.o.=.= GIVES o.- OR -.o OR =.=
-.o.-.=.= GIVES -.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES -.-
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES -.= OR =.-
Przebudźcie się
-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES o.-
=.-.= GIVES =.- OR -.=
o.-.= GIVES o.-
-.-.= GIVES -.=
o.o.- GIVES o.o
=.=.=.o GIVES =.o
-.=.=.= GIVES =.=
=.o.-.= GIVES =.o
o.-.o.=.= GIVES o.=
-.o.-.=.= GIVES -.o OR o.- OR =.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES o.o
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES o.o
-.-
Odpowiedzi:
Pyth,
1210 bajtówDrukuje najbardziej śpiący emotikon. Sprawdź wszystkie przypadki testowe jednocześnie w kompilatorze Pyth .
Podziękowania dla @ Sp3000 za pomysł użycia sortowania .
Jak to działa
źródło
hS%2.:z3
?=.-
być bardziej śpiący-.o
, ale oni są posortowani w drugą stronę. Popełniłem ten sam błąd.Python 2,
5453 bajtówJest to funkcja zwracająca budzącą się twarz.
Ogromne podziękowania dla xnor za udostępnienie wielu sztuczek taktycznych w celu skrócenia mojego oryginalnego algorytmu.
źródło
max
zamiast powtarzać:f=lambda s:s[3:]and max(s[:3],f(s[2:]))or s
=.-.o
, ponieważ=.-
vs-.o
jest wyjątkiem od reguły sortowania.,key=sorted
byłoby to rozwiązanie, ale to 11 znaków, więc twój jest prawdopodobnie krótszy.CJam, 12 bajtów
Drukuje najbardziej śpiący emotikon. Wypróbuj to skrzypce lub zestaw testowy w interprecie CJam.
Podziękowania dla @ Sp3000 za pomysł użycia sortowania .
Jak to działa
źródło
Dyalog APL,
3528 bajtówJest to monadyczna funkcja, która pobiera ciąg po prawej stronie i wyświetla najbardziej zaspaną twarz.
źródło
{(⊃⍒3+/'.??o='⍳⍵)⊃3,/⍵}
??
jest to również niepotrzebne.Prolog,
205189 bajtówKod
Wyjaśnienie
Przykład
Edycja: Zapisano 16 bajtów poprzez ujednolicenie klauzul r z OR.
źródło
Clojure, 82 bajty
Bonus: następująca mniejsza funkcja drukuje tę samą twarz, ale w większym stylu!
Przetestuj tutaj.
źródło
Ruby, 59 bajtów
Funkcja zwraca senną twarz za pomocą sztuczki sortowania.
Nazywany tak:
Działa na niewygodnej kolejności oczu ze względu na wewnętrzne oczy:
źródło
Minkolang 0.12 , 119 bajtów
Na początku próbowałem robić to krótko i naprawdę golfowo. Zrezygnowałem i zdecydowałem się na coś bardziej „zabawnego”, ale wciąż stosunkowo golfowego.
Wypróbuj tutaj!
Wyjaśnienie
Ale tak naprawdę kliknij powyższy link i kliknij Slow! Tak czy inaczej...
Pomija to
fv
, co będzie ważne później.Wszystko, co to zrobiło, znalazło się
^
obok pasujących twarzy. Więc teraz codbox może wyglądać tak:Oczywiście bez komentarzy. Teraz
40w
tunel czasoprzestrzenny wysłał wskaźnik instrukcjiv
, na który natychmiast przekierowuje goF
. TerazF
jest poleceniem „gosub”. To jak goto, ale możesz wrócić do miejsca, w którym to nazwałeś. W momencieF
napotkania stos jest[3,1]
, więc przeskakuje do1
(być może) w drugim rzędzie. Gdy licznik programu zmierza w dół, kontynuuje, przesuwając1
s na stos po drodze. To jest ... dopóki nie uderzy w^
, w którym to momencie jest przekierowywany z powrotem w górę, gdzie naciska1
ponownie. Następnie wskaźnik instrukcji uderzaf
, co przywraca jego pozycję i kierunek (kiedyF
wcześniej się napotkano). Dla wygody wezmę następujący kod i zmienię jego układ. (The</\
służą do przekierowania wskaźnika instrukcji w razie potrzeby).Jestem naprawdę dumny z tego, że użyłem wielu funkcji unikalnych dla Minkolang, z których często nie korzystałem. Głównie trójskładnikowy i gosub. W każdym razie, masz!
źródło
C, 70 bajtów
Funkcja zwraca najbardziej rozbudzoną twarz. Zmienia wejściowy ciąg znaków, aby zwrócić ciąg zakończony znakiem null.
źródło
Python 2/3, 54
56bajtówPo prostu chciałem zastosować alternatywny hals do rekurencyjnej odpowiedzi xsot.
To zajmuje najlepszą (lub najgorszą?) Krotkę sąsiednich par oczu i łączy je razem.
Zamień max na min, aby zwrócić najbardziej śpiący (ponieważ to zwraca najbardziej przebudzony)
Wydaje się działać, stosując następujący test:
Co daje następujący wynik:
źródło
f=
część jest wymagana jako część rozmiaru kodu dla tego wyzwania? Jeśli tego nie zrobię, utworzy lambdę, a następnie natychmiast ją wyrzuci ...f=
wtedy obecny konsensus wydaje się, że anonimowe funkcje są domyślnie w porządku, więc można upuścićf=
w tym przypadku ( xsot potrzebuje go, ponieważ jest rekurencyjny)Brachylog , 10 bajtów
Wypróbuj online!
Przetłumaczone z odpowiedzi Dennisa na Pythona.
źródło
Mathematica, 61 bajtów
Idzie najbardziej senny.
źródło
%
której się opiera.F # 60
Zwraca najbardziej obudzić twarz (zmiana
max
przezmin
dla śpisz)źródło
Perl 5, 127 bajtów
(Jestem pewien, że jest to wykonalne w skrócie.) Jak to działa:
--pos
robi).źródło
ES6,
8172 bajtówPrawdopodobnie wymaga Chrome 45 lub Firefox 41.
Dzięki @ETHproductions za oszczędność 9 bajtów.
źródło
"=.-"
powinno się je zamieniać"-.o"
; to samo z"=.o"
i"o.-"
. Ponadto możesz zapisać niektóre bajty, umieszczając wszystko w jednym ciągu, oddzielając je przecinkami i używając.split`,`
.> <> , 55 bajtów
spróbuj tutaj!
Wyprowadza najbardziej rozbudzoną twarz.
Ponieważ wartości ASCII odpowiednio dla -, = i o wzrosły, mogłem to wykorzystać na swoją korzyść. Zasadniczo dodaje wartości bieżącej i poprzedniej części oka, sprawdza, czy jest to wyższa wartość niż wcześniej, jeśli tak, zapisuje nową wartość i aktualizuje reprezentowaną powierzchnię, a następnie zapętla się do końca wejścia. Następnie wyprowadza twarz, która pozostaje. (Jestem bardzo zadowolony z tego, jak dobrze cały kod pasuje na swoim miejscu)
źródło
Perl 5
-MList::Util=max -p
, 68 bajtówWypróbuj online!
Pobiera każdy zestaw trzech znaków, ignoruje
.
środek, mapuje dodanie pozostałych dwóch na liczbę całkowitą z zakresu 0-4, łączy to z przodu twarzy emotikonu, a następnie sortuje według tego. Pobiera ostatni wpis (najbardziej przebudzony), usuwa numer z przodu i wysyła go.źródło