Wyzwanie
Inspirowany tym filmem
Jak zapewne wiesz, palindrom to słowo, które jest pisane tak samo do przodu, jak i do tyłu. Słowo „PULP” nie jest palindromem, ale po przetłumaczeniu na kod Morse'a (z usuniętymi odstępami między literami) „PULP” staje się „. - ...-.-...--.” który jest palindromem. Twoim zadaniem jest napisanie programu lub funkcji, która pobiera ciąg znaków i zwraca, czy to słowo jest palindromem w międzynarodowym kodzie Morse'a.
A: .-
B: -...
C: -.-.
D: -..
E: .
F: ..-.
G: --.
H: ....
I: ..
J: .---
K: -.-
L: .-..
M: --
N: -.
O: ---
P: .--.
Q: --.-
R: .-.
S: ...
T: -
U: ..-
V: ...-
W: .--
X: -..-
Y: -.--
Z: --..
Zasady
Wejście
Dane wejściowe można przyjmować w dowolnym rozsądnym formacie. Łańcuch wejściowy będzie zawierał tylko litery w każdym przypadku, który wolisz. Ciąg nie będzie zawierał spacji, cyfr ani interpunkcji.
Wynik
Twój program powinien wypisać 1 z 2 stałych, odrębnych wyników na podstawie tego, czy dane wejściowe są palindromem, np. True / False, 1/0, HOTDOG / NOTHOTDOG
Punktacja
To jest golf golfowy więc wygrywa najkrótsza odpowiedź w bajtach. Standardowe luki są zabronione.
Przypadki testowe
Dane wejściowe => Dane wyjściowe
"PULP" => True
"RESEARCHER" => True
"HOTDOGS" => True
"" => True
"A" => False
"RACECAR" => False
"PROGRAMMING"=> False
"PUZZLES" => False
źródło
Odpowiedzi:
Galaretka , 28 bajtów
Wypróbuj online!
Napisałem tę odpowiedź, patrząc na jeden z nich (przeczytaj rzędy od prawej do lewej, a dostaniesz mój magiczny ciąg!):
źródło
73,540,211,105,102,870,315,464,559,332nd
... co?! Jak znalazłeś ten numer? Również jak to nie trwa wiecznie ?00ABCDEFGHIJKLMNOPQRSTUVWXYZ
. Galaretka ma wbudowane funkcje przekształcania permutacji w taką liczbę, a taką liczbę z powrotem w permutację. Zobacz bazę silni na podstawie Wikipedii.00ABCDEFGHIJKLMNOPQRSTUVWXYZ
Galaretka ,
35 32 2725 bajtów-2 dzięki Dennisowi (przesuń permutację, aby uniknąć
%32
)Pobiera dane dużymi literami; wyjście jest
1
prawdziwe, a0
fałszywe.Wypróbuj online! Lub zobacz pakiet testowy .
W jaki sposób?
Poprzednie rozwiązanie 35-bajtowe (również pobiera duże litery) ...
źródło
Dyalog APL , 24 bajty
Wypróbuj online!
dfns
nigdy nie przestaje zadziwiaćźródło
MBASIC , 325 bajtów
Pierwsza próba, zanim dotrą tu duże pistolety :-)
Wynik
źródło
JavaScript (Node.js) , 111 bajtów
Wypróbuj online!
źródło
Perl 6 , 87 bajtów
Wypróbuj online!
Konwertuje słowo na ciąg 1 i 0 i sprawdza, czy jest ono palindromiczne.
Wyjaśnienie:
źródło
Python 3 ,
172148104 bajtówPierwszy kod golfowy w historii. Bądź uprzejmy i zaoferuj wszelką pomoc :)
Jest to oparte na odpowiedzi w języku C #: /codegolf//a/175126/83877 . Wziąłem te same pomysły i zastosowałem je w Pythonie 3. Starałem się jak najlepiej zagrać w golfa, ale jestem pewien, że jest o wiele więcej do zrobienia.
EDYCJA 1: Dzięki @Stephen i @Cowabunghole za pomoc w usunięciu białych znaków i niepotrzebnego kodu.
EDYCJA 2: Dzięki @JoKing za sugestię zrobienia tego w wersji binarnej. To naprawdę fajna sztuczka, w której „-” i „.” nie są nawet konieczne. Doprowadziło to do ogromnego zmniejszenia bajtów.
Rozwiązanie
Wypróbuj online!
źródło
while i > 0:
na,while i>0:
aby zapisać 2 bajty. Mogę się również mylić, ale myślę, że możesz> 0
całkowicie zrezygnować z tego i po prostu użyćwhile i:
. Po drugie, instrukcja w pętli while może iść w tym samym wierszu co while, zapisując nową linię i wcięcie. Wreszcie, jest to okropna rada wszędzie, z wyjątkiem gry w golfa, ale jeśli używasz Python 2 zamiast Python 3, możesz zaoszczędzić 1 bajt/
zamiast używać//
do dzielenia.~-i
zamiasti-1
. Jest to ta sama liczba bajtów, ale możesz pominąć nawiasy, które oszczędzają 2 bajty.-
i.
. 105 bajtówPyth,
3533 bajtówKod zawiera znaki niedrukowalne, więc oto zrzut heksowy.
Wypróbuj online. Zestaw testowy.
Wyjaśnienie
Zaczynając od
."
końca kodu, generuje alfabet Morse'a, z kropkami jako\x08
i myślnikami jako\x07
i oddzielonymi tabulatorami.c
dzieli ciąg według zakładek.XzG
tłumaczy (X
) input (z
) z alfabetu (G
) na ten „alfabet Morse'a”.s
sumuje (łączy) symbole Morse'a razem. W przypadku pustych danych wejściowych zwraca 0, ale nie stanowi to problemu._I
sprawdza, czy wynik nie zmienia się (I
) po odwróceniu (_
). W przypadku pustych danych wejściowych sprawdza, czy 0 nie zmienia się po zanegowaniu.źródło
Retina 0.8.2 , 87 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Wszystkie kody Morse'a dla liter w tym zestawie kończą się na
.
.Wszystkie kody Morse'a dla liter w tym zestawie kończą się na
-
.Zastąp każdą literę literą, której kod Morse'a jest prefiksem tej litery (tutaj
E
iT
są po prostu usuwane przez nieskalowane_
, ale normalnie byłyby zamienione na spacje). Na przykład,P
to kod Morse'aW
z dodatkowym.
na końcu; dodaliśmy.
powyższe, więc teraz pozostaje tylko odkodowaćW
.Powtarzaj powyższe etapy, aż nie pozostaną żadne litery.
Jeśli pierwszy i ostatni znak są takie same, usuń je oba.
Powtórz dla dowolnej liczby pasujących znaków.
Jeśli był to palindrom, pozostała co najwyżej jedna postać.
źródło
Wolfram Language (Mathematica) , 107 bajtów
Wypróbuj online!
Podobna do tej Jelly odpowiedź: myślimy o kodzie Morse'a jako binarne i zanotować ciąg
" ETIANMSURWDKGOHVF L PJBXCYZQ"
gdzie pozycja znaku w formacie binarnym, daje nam swój kod Morse'a. Ale z dodanym dodatkowym 1, ponieważ chcemy rozróżnićS = 000
iH = 0000
na przykład. Następnie##2&@@@
jednocześnie pozbywa się tej wiodącej 1 i spłaszcza się.źródło
05AB1E , 37 bajtów
Wypróbuj online!
Koduje alfabet w bazie 3, przekonwertowany na bazę 255:
Baza 255:
Następnie w zasadzie dzielę go na zera, konstruuję ciąg według pozycji i sprawdzam palindrom.
źródło
C # (.NET Core) , 191 bajtów
Wypróbuj online!
Część tej odpowiedzi została zaadaptowana z golfa Morse'a Nicka Larsena . Opierając się na komentarzach do odpowiedzi, można potencjalnie pograć w golfa.
Nie golfowany:
źródło
PowerShell ,
204187 bajtówWypróbuj online!
Błędy w łańcuchu zerowym ... Czy ktoś może w tym pomóc?
Kod testowy (po zawinięciu kodu w blok skryptu i przypisaniu do zmiennej $ Z ...):
Wynik:
źródło