We wcześniejszym wyzwaniu poprosiłem golfistów o napisanie ciągów, które kopiują każdy znak w ciągu. Na przykład:
TThhiiss iiss ddoouubbllee ssppeeaakk!!
Wyzwanie polega po prostu na wykryciu, czy jakiś tekst spełnia definicję ciągu podwójnie mówionego.
- Jest parzysta liczba znaków.
- Po podzieleniu na pary każda para składa się z dwóch takich samych postaci.
Wyzwanie
- To jest golf golfowy, zrób to w kilka bajtów.
- Użyj dowolnego wybranego języka.
- Podaj link do tłumacza online.
- Kod zaakceptuje trochę tekstu.
- Dla uproszczenia dane wejściowe będą składały się wyłącznie z drukowalnych znaków ASCII
- Zwróci wskazanie, czy wejście jest podwójnym mówieniem. Mogłoby być:
- Wartość logiczna
- Ciągi znaków („prawda”, „fałsz”, „tak”, „nie” itp.)
- Liczby całkowite 0 lub 1
Przypadki testowe:
- aba - fałsz
- abba - false
- aabb - prawda
- aaabb - fałsz
- tthhiiss - prawda
- ttthhhiiisss - false
code-golf
string
decision-problem
AJFaraday
źródło
źródło
abba
który powinien być falseyaabbbb
który powinien być prawdą0
który powinien być falsey.Odpowiedzi:
Python 3 , 24 bajty
Wypróbuj online!
źródło
pieprzenie mózgu , 20 bajtów
Zaoszczędzono 1 bajt dzięki Jo Kingowi.
Wypróbuj online!
Czytelny wynik!
Pobiera dane po dwa znaki na raz i odsuwa się od 1 na taśmie, jeśli którakolwiek para nie pasuje. EOF jest traktowany jako 0 i dlatego jest obsługiwany automatycznie.
Dane wyjściowe to bajt zerowy, jeśli ciąg nie mówi podwójnie, a 0x01, jeśli jest. Czytelna wersja wyświetla je jako znaki, kosztem 14 bajtów.
źródło
MATL , 4 bajty
Dane wejściowe to ciąg znaków, zamknięty pojedynczymi qoutami. Wyjście jest
0
dla podwójnego mówienia, w1
przeciwnym razie.Wypróbuj online!
Wyjaśnienie
Rozważ dane wejściowe
'TThhiiss iiss ddoouubbllee ssppeeaakk!!'
jako przykład.źródło
05AB1E ,
652 bajtyWprowadź jako listę znaków.
-3 bajty przez przeniesienie odpowiedzi @ Shaggy's Japt , więc upewnij się, że go głosujesz!
Wypróbuj online lub sprawdź kilka innych przypadków testowych .
Wyjaśnienie:
źródło
Japt , 4 bajty
Spróbuj
Alternatywny
Spróbuj
źródło
Siatkówka , 9 bajtów
Wypróbuj online.
Wyjaśnienie:
Usuń wszystkie pary tych samych znaków:
Sprawdź, czy nie pozostały żadne znaki:
źródło
^$
jako ostatniego etapu.false
wyjście jako prawdomówne itrue
falsey (ale jeśli oszczędza bajt i jest dozwolone, nadal będę go używać). ;) Ale ponieważ jest to rozwiązanie o równych bajtach, generujące oczekiwane wyniki, jest to lepsze.Galaretka , 3 bajty
Wypróbuj online!
źródło
¹©s2L€=2Ạa®s2E€Ạ
...ḢƝs2E€Ạ
... ale nie udało mi się zdobyć tego, czego chciałem, a potem zobaczyłemŒœ
lolStax , 5 bajtów
Uruchom i debuguj
Procedura:
źródło
PHP ,
5856 bajtówWypróbuj online!
Jako funkcja rekurencyjna.
PHP ,
615652 bajtyWypróbuj online!
Lub samodzielny program. Łańcuch wejściowy przez
STDIN
, wyjściem jesttruthy
(1
), jeśli jest to podwójne mówienie, ifalsey
(0
), jeśli nie jest podwójne mówienie.-4 bajtów dzięki @ Night2 !
źródło
kod maszynowy x86,
97 bajtówŁańcuch wejściowy w
SI
, długość łańcucha wejściowego wCX
. Wyjście,ZF
jeśli mów podwójnie.Lub 14 bajtów jako kompletny plik wykonywalny DOS na PC:
Wejście odbywa się za pośrednictwem
STDIN
potoku lub interaktywne. Powtórzy echo wejścia „zdublowanego”, dopóki nie zostanie wykryty znak, który nie zostanie podwojony, w którym to momencie nastąpi wyjście (być może zginanie we / wy trochę rządzi, ale jest to tylko odpowiedź dodatkowa).Zbuduj i przetestuj ISDBL2.COM przy użyciu
xxd -r
:Oryginalny 24-bajtowy plik wykonywalny DOS na PC:
Wejście z wiersza poleceń, wyjście na ekran,
'Y'
jeśli podwójne,'N'
jeśli nie.Zbuduj i przetestuj ISDBL.COM przy użyciu
xxd -r
:Kredyty:
źródło
LOOPE
zamiastJNZ
/LOOP
do zapisania 2 bajtów.Lua ,
676663593332 bajty-25 bajtów dzięki Giuseppe
-1 bajtów dzięki val
Wypróbuj online!
Usuwa każdy podwójny znak, a następnie sprawdza, czy wynik jest pusty.
źródło
i:gsub("(.)%1","")
i sprawdzić, czyi==""
?"(.)%1"
samo w sobie obejmuje kolizje, ale nie przyszło mi do głowy, że zastąpienie go raz na zawsze wystarczy. Czy powinienem wdrożyć twoje rozwiązanie, czy powinieneś napisać własną odpowiedź? I dzięki!arg[1]
można zastąpić przez,(...)
aby zapisać jeden bajt.Perl 5 , 15 bajtów
Wypróbuj online!
Wyjścia 1 dla podwójnego mówienia, nic dla podwójnego mówienia.
źródło
MathGolf , 2 bajty
Wypróbuj online!
Zasadniczo to samo co odpowiedź 05AB1E,
½
dzieli ciąg na parzyste i nieparzyste znaki, a następnie sprawdza równość. Przechodzi do pustego ciągu.źródło
JavaScript, 28 bajtów
Wypróbuj online!
23 bajty przy użyciu wyrażenia regularnego wastl
Wypróbuj online!
źródło
null
dla false: Wypróbuj online!s=>!s.some((x,y)=>x>s[y|1])
>
z!=
Haskell ,
2823 bajtówWypróbuj online!
Bardzo proste. Podwójne mówienie jest tylko puste lub powtarzana postać poprzedza podwójne mówienie.
Teraz mniej proste. Wyprowadza przez obecność lub brak błędu, zgodnie z meta-konsensusem ; brak błędu oznacza podwójne mówienie. Dopasowanie wzorca kończy się niepowodzeniem, gdy dwa pierwsze znaki różnią się lub gdy liczba znaków jest nieparzysta. Dzięki Laikoni za te oszczędności!
źródło
V (vim) , 7 bajtów
Wypróbuj online! lub Zweryfikuj przypadki testowe
Hexdump:
Tylko dwa wyrażenia regularne. Wyjaśnienie:
źródło
Brachylog , 5 bajtów
Wypróbuj online!
Sukces lub porażka.
źródło
PowerShell ,
3938 bajtówWypróbuj online!
gdzie
$p
zawiera poprzedni znak.Bez rekurencji , bez wyrażeń regularnych :). Pobiera dane wejściowe jako tablicę znaków za pomocą łańcucha rozpryskiwania (patrz link TIO).
PowerShell , 48 bajtów
Wypróbuj online!
Bez rekurencji , bez wyrażenia regularnego i bez potoku: D. Pobiera również dane wejściowe jako tablicę znaków za pomocą łańcucha rozpryskiwania.
$b-eq$a
Zamiast tego stosuje$a-eq$b
się w przypadku, gdy ostatni znak ma kod # 0.źródło
PowerShell ,
6459 bajtówWypróbuj online!
Funkcja rekurencyjna, bez wyrażeń regularnych. Pobiera dane wejściowe jako
char
tablicę (patrz link TIO). Odrywa pierwsze dwa elementy do$a
i$b
, a pozostałe przechowuje$r
. Jeśli nadal mamy elementy, wróć wraz z$a -eq $b
. W przeciwnym razie po prostu sprawdź, czy$a -eq $b
. Wynik jest niejawny.-5 bajtów dzięki mazzy
źródło
$
bloku przed wyciągiem i nie mogłem zrozumieć, dlaczego to nie działa.Julia 1.0 , 25 bajtów
Wypróbuj online!
źródło
f
, np!a=...
. Lub użyć funkcji anonimowej:s->...
J ,
131110 bajtówWypróbuj online!
-2 bajty dzięki Adámowi
-1 bajt dzięki milom
Wyjaśnienie TLDR: Czy dane wejściowe są takie same, jak każdy inny znak danych wejściowych podwajany?
źródło
-:]#~2 0$~#
-:2#_2{.\]
powinien zapisać kolejny bajtShakespeare Programming Language ,
204156 bajtów-48 bajtów dzięki Jo Kingowi (głównie przez zmianę metody wyjściowej)
Wypróbuj online!
Wychodzi z błędem, jeśli wejście jest podwójnym mówieniem, oraz z ostrzeżeniem, jeśli nie jest to podwójne mówienie (co jest domyślnie dozwolone ).
źródło
Keg ,
1917 znakówWyjaśnienie:
Wypróbuj online!
źródło
R ,
5334 bajty-19 bajtów dzięki Giuseppe
Wypróbuj online!
źródło
gsub("(.)\\1","",a)==""
zrobiłbym to samo; wiele innych używa tego samego wyrażenia regularnego.function(a)!sum(rle(a)$l%%2)
dla 28Brain-Flak ,
26, 22 bajtówWypróbuj online!
Wyjście 1 dla wartości false i 0 dla wartości true.
Wersja do odczytu:
Pierwotnie miałem to:
Co jest o 10 bajtów dłuższe.
źródło
({({}[{}]){{}}{}})
QuadR , 11 bajtów
Wypróbuj online!
''≡⍵
wynikiem jest pusty ciąg, gdy(.)\1
postać, po której następuje samajest zastąpiony przez nic
źródło
JavaScript,
2623 bajtówWypróbuj online!
Rozwiązanie rekurencyjne, 30 bajtów
Dziękujemy Arnauldowi za naprawę kosztem 0 bajtów.
Wypróbuj online!
źródło
Czerwony , 36 bajtów
Wypróbuj online!
Dłuższa alternatywa:
Czerwony , 40 bajtów
Wypróbuj online!
źródło
Zsh , 36 bajtów
Wychodzi z prawdy (0), jeśli NIE mówi podwójnie, i falsy (1), jeśli mówi podwójnie. (Zgodnie z komentarzem.)
Wypróbuj online!
źródło
Prolog (SWI) ,
6045 bajtówdzięki niepowiązanemu ciągowi
Wypróbuj online!
Przekształcenie go z łańcucha na listę atomów zepsuło wynik, ale cóż ...
źródło
atom_chars
zamiast tegostring_chars
, nawet jeśli bierzesz łańcuch jako dane wejściowe, a nie atom. Ale może to nie mieć znaczenia, jeśli możesz wziąć ciąg rozdzielany znakami wstecznymi - to znaczy listę kodów znaków.