Napisz program, który przyjmuje jako dane wejściowe emotikon i wypisuje, jeśli emotikon jest szczęśliwy lub smutny.
Program akceptuje ciąg jako parametr wejściowy lub parametr i powinien wyświetlać ciąg „szczęśliwy”, jeśli dane wejściowe znajdują się na liście szczęśliwych emotikonów, lub „smutny”, jeśli dane wejściowe znajdują się na liście smutnych emotikonów.
Możesz założyć, że dane wejściowe są zawsze prawidłowymi (szczęśliwymi lub smutnymi) emotikonami, bez spacji i znaków tabulacji.
Oto rozdzielona spacjami lista szczęśliwych emotikonów:
:-) :) :D :o) :] :3 :c) :> =] 8) =) :} :^) :-D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D (-: (: (o: [: <: [= (8 (= {: (^:
Oto rozdzielona spacjami lista smutnych emotikonów:
>:[ :-( :( :-c :c :-< :< :-[ :[ :{ 8( 8-( ]:< )-: ): >-: >: ]-: ]: }: )8 )-8
To jest golf golfowy, więc wygrywa najkrótszy program.
:'D
,:')
(szczęśliwy) i:@
(zły)Odpowiedzi:
Python, 86 bajtów
Powinienem zostać wysłany do więzienia.
Najkrótszy, jaki mogłem wymyślić, był równoważny z odpowiedzią Martina na CJam, więc zdecydowałem, że ukryję wszystkie smutne emoji (bez środkowego znaku, jeśli w ogóle) na odwrocie mojego kodu i
__file__
użyję oszukiwanego kodu Pythona .Muahahaha.
źródło
c:
8) (8 :] [:
CJam,
3332 bajtyDzięki Dennisowi za zaoszczędzenie 1 bajtu.
Wygląda na to, że krócej jest zrobić to samo bez wyrażenia regularnego ...
Sprawdź to tutaj.
Wyjaśnienie
Opiera się to na tej samej obserwacji, co odpowiedź Retiny, ale tym razem dopasowanie szczęśliwych twarzy nie przynosi żadnych korzyści, więc zamiast tego dopasujemy smutne twarze (ponieważ jest o jedno usta mniej do wzięcia pod uwagę). W przeciwnym razie rozwiązanie jest dokładnie takie samo, z tym wyjątkiem, że nie jest zaimplementowane przez podstawienie wyrażenia regularnego:
źródło
Siatkówka ,
3836 bajtówMożemy rozpoznać wszystkie emotikony po ich ustach, ponieważ żadne usta nie są używane jako kapelusz lub oczy w drugim zestawie (tylko w tym samym zestawie). Szczęśliwi mają jeszcze jedno usta do wzięcia pod uwagę, ale mają tę zaletę, że usta wcale nie pojawiają się w drugim zestawie, nawet jako nosy (odwrotność nie jest prawdą:
c
jest to zarówno usta smutne, jak i szczęśliwe nos). Oznacza to, że możemy uniknąć używania kotwic, ale po prostu upewnij się, że po drugiej stronie ust jest więcej znaków.Tak więc ważne usta dla szczęśliwych twarzy znajdują
] ) D 3 > }
się po prawej lub< [ ( {
po lewej stronie. Dopasowujemy je.+[])D3>}]|[<[({].+
i zastępujemy nimihappy
. Jeśli nie pasujemy, w łańcuchu będą dwa lub trzy znaki (emotikon), ale jeśli tak się stanie, będzie ich pięć (happy
). Tak więc w drugim kroku zamieniamy dwa lub trzy znaki nasad
.źródło
We can recognise all emoticons by their mouths, because none of the mouths is used as a hat.
Cóż,]:<
emotikon używa ust jak kapelusza, mówiąc tylko..
w mojej odpowiedzi nie ma słowa „hat”. ;) „... jak kapelusz lub oczy w innym zestawie (tylko w tym samym zestawie).”JavaScript (ES6), 46
Używanie wyrażenia regularnego do znajdowania smutnych emotikonów, które zaczynają się na
>)]}
lub kończą na<([{c
. Uwaga dodatkowa: inne wyrażenia regularne mogą być krótsze, ale nie jestem pewien, czy je rozumiem.Zwykła uwaga: przetestuj fragment kodu w dowolnej przeglądarce zgodnej z EcmaScript 6 (zwłaszcza
nie wnajnowszym Chrome, ale nie MSIE. Testowałem na Firefox, Safari 9 mogłaby przejść)Wielka wiadomość Wygląda na to, że funkcje strzałek w końcu dotarły do krainy Chrome! Rel 45, sierpień 2015
źródło
=>
? Brakowało mi tej wiadomościJulia,
8769 bajtów - dzięki Alexowi A. zaoszczędzono 18 bajtówźródło
if
/else
i umieszczając trójkę wewnątrz,print
aby uniknąć konieczności przypisywaniat
.Python 3 ,
777574726155 bajtówWypróbuj online!
Jak to działa
Jeśli sznurek twarzy zaczyna się
])>}
lub kończy[(c<{
, jest smutny, w przeciwnym razie jest szczęśliwy. Indeksowanie krotkowe jest używane jakoif
.źródło
x
jest niedozwolone.Brachylog , 50 bajtów
Wyjaśnienie
źródło
Python, 159 bajtów.
źródło
MATLAB,
8583 bajtyTutaj musi być sposób na zmniejszenie rozmiaru.
Dane wejściowe to buźka. Pierwsza i ostatnia postać zostaną porównane, aby ustalić, czy to smutne. Jeśli nie, to jest szczęśliwy.
Udało mi się zapisać 2 bajty, nie wyświetlając żadnego z nich, ale przypisując je do domyślnej zmiennej MATLAB (ans), a następnie wyświetlając ans po instrukcji if. Jestem jednak przekonany, że można to jakoś ulepszyć.
2 bajty poprawy przez zmianę funkcji s (e) na e = input (''); .
źródło
PowerShell, 92 bajty
Trochę nieprzyjemny, ale jako bonus nie używa wyrażenia regularnego!
Wykorzystuje to
<string>.IndexOf()
funkcję .NET, która zwraca,-1
jeśli znak nie zostanie znaleziony w ciągu. Tak więc, jeśli pierwsza postać nie jest postacią „szczęśliwą”, pierwszaIndexOf()
będzie równa -1 - podobnie dla ostatniej postaci. Tak więc, jeśli jest to smutna twarz,IndexOf()
s zawsze będzie sumować -2, co oznacza, że-eq-2
jest$TRUE
, i w ten sposóbsad
zostanie wydrukowane.Wariant bonusowy: PowerShell z Regex, 95 bajtów
źródło
Python 3 , 75 bajtów
Wypróbuj online
Import wyrażeń regularnych powoduje, że jest on zbyt długi, a także niemożność użycia go
None
jako indeksu tablicy. Ale lubię wyrażenia regularne :)źródło
Java 8, 52 bajty
Wypróbuj online.
Wyjaśnienie:
Jawa
String#matches
domyślnie dodaje,^...$
aby dopasować cały ciąg, dlatego krótsze jest sprawdzanie smutnych twarzy zamiast sprawdzania szczęśliwych twarzy, jak większość innych odpowiedzi.+[\\])D3>}]|[<\\[({].+
(ponieważ mój regex zawiódłby na przykład w odpowiedzi Retina @MartinEnder z powodu szczęśliwy przypadek testowy:c)
).Wyjaśnienie Regex:
źródło