Inspiracją do wyzwania było to, co gdzieś widziałem:
Słowo „zakonnica” to tylko litera n robiąca koło zamachowe
Twoim zadaniem jest wziąć ciąg i ustalić, czy jest to pierwsza litera robiąca koło zamachowe.
Zasady
Łańcuch to litera wykonująca koło zamachowe, jeżeli:
- Pierwsza litera jest taka sama jak ostatnia litera. (List nie może wylądować na głowie.)
- Łańcuch naprzemiennie zmienia litery każdego koła.
Koła w kartach są n
i u
, m
oraz w
, b
i q
. Należy pamiętać, że n
i w
razem są nie cartwheeling litery, a nie są w
i b
.
- Weźmiesz ciąg znaków przy użyciu dowolnej z naszych standardowych metod wprowadzania.
- Wypisujesz wartość prawdy, jeśli ciąg znaków jest literą koła, a fałszem, jeśli nie jest. Dane wyjściowe można wykonać przy użyciu standardowych metod wyjściowych.
Dodatkowe zasady:
- Należy obchodzić się tylko z małymi literami
n
/u
/m
/w
/b
/q
. - Możesz założyć, że dane wejściowe nigdy nie są puste.
- Ciąg jednoznakowy nie jest prawidłowym kołem zamachowym.
Przypadki testowe
Input -> Output
nun -> truthy
nunun -> truthy
nunununu -> falsy
wmw -> truthy
wmwun -> falsy
bqbqbqbqbqb -> truthy
v^v^v -> falsy
AVAVA -> falsy
OOO -> falsy
ununununu -> truthy
nunwmwnun -> falsy
nun unun -> falsy
nunwmw -> falsy
nnuunnuunnuu -> falsy
nwnwnwnwn -> falsy
m -> falsy
nunuuunun -> falsy
Zwycięzca
Podobnie jak w przypadku golfa kodowego, wygrywa najkrótszy kod (w każdym języku)!
b
cartwheels wq
, prawda?d
ip
są także kumplami z koła. Kluczem jest to, że obracają się, a nie odwracają.uwuwuwuwuwu
bqb
jednak niepdp
?dpd
,pdp
i tak nie działa, myślę, że trzeba mieć je w przypadkach test z falsy odpowiedzi.Odpowiedzi:
Galaretka , 23 bajty
Zajęło to więcej pracy, niż mogłoby się wydawać!
Monadyczny link zawierający listę znaków i powracający
1
(prawda) lub0
(falsey).Wypróbuj online! lub zobacz zestaw testowy .
W jaki sposób?
Znajduje indeks każdego znaku wejścia na 1-indeksowej liście znaków
nmbuwq
. Ciąg ten jest ułożony w taki sposób, że indeksy par są oddalone od siebie o trzy, jako że przyrostowa różnica indeksów dla prawidłowych kartwheli będzie powtórzeniami jednego z[-3,3]
lub[3,-3]
.Gdy element nie znajduje się na liście według „indeksu” atomu,
i
zwraca0
, co sparowałoby nieuzasadnione znakib
, wprowadzając dane jakbxbxb
prawdziwe. Tak więc0
s są zastępowane10
wartością większą niż trzy od jakiejkolwiek innej wartości przed sprawdzeniem ważności.źródło
sed 4.2.2 , 30 + 1
-r
=4331 bajtówZaoszczędź 12 bajtów dzięki @Neil, skracając pierwszą linię
Wypróbuj online!
Usuwa dane wejściowe, jeśli falsey, w przeciwnym razie nic nie robi na danych wejściowych.
Wyjaśnienie
Z
-r
flagą nie musimy używać\(
i\)
do przechwytywania grup, a to oszczędza bajty.źródło
sed
kreator ...sed
wygląda na magię. : Punu
inun
zawierają,nu
a drugi wiersz zapewnia, że reszta liter pasuje do tych dwóch.JavaScript (ES6),
827877 bajtówZapisano 1 bajt przy użyciu dwóch wartości fałszowania, jak sugerują ThePirateBay i MD XF.
Przypadki testowe
Pokaż fragment kodu
źródło
&&
zamiast&
?&
spowoduje albofalse
albo0
.)&
; Podałem (na czacie), że dozwolone są niespójne wartości fałszowania.Python 3 , 111 bajtów
-2 bajty dzięki Mr. Xcoder.
Wypróbuj online!
źródło
nunununu
.Python 2 , 63 bajty
Wypróbuj online!
źródło
"nu un nm mn bp pb".split()
aby zaoszczędzić 4 bajty i usunąć trochę białych znaków. 75 bajtów:lambda s:any(s==c[-1]+c*max(len(s)/2,1)for c in"nu un nm mn bp pb".split())
s[0]
zamiastc[-1]
.unmnu
iunmwnu
. Naprawdę zwraca fałszywe alarmy, gdy(s==s[::-1])+len(set(s))
ma 4, co jest łatwe do wymuszenia. Nawet tylko 4 różne postacie sprawiają, że zwraca True.Python 3 , 71 bajtów
Wypróbuj online!
-1 dzięki @HyperNeutrino i -13 dzięki @ovs
Jeśli powyższe badanie zakończy się niepowodzeniem dla dowolnego przypadku testowego, istnieje alternatywa:
Wypróbuj online!
Wyjaśnienie
''.join(sorted(list({*n[1::2]}).union({*n[::2]}))))
- Pobiera znaki o indeksach nieparzystych i znaki o indeksach parzystych, usuwa duplikaty i sortuje listę utworzoną przez ich związek.in'nu,mw,bq'
- Sprawdza, czy są to prawidłowe kombinacje kart-list.n[0]==n[-1]
- Sprawdza, czy pierwszy znak jest taki sam jak ostatni.źródło
uwuwuwuwuwu
wyniki są prawdziwenuuun -> True
. To nie jest w porządku.JavaScript (ES6), 40 bajtów
Sprawdza, czy łańcuch wejściowy połączony z drugim znakiem łańcucha wejściowego jest łańcuchem powtarzającym się z tej samej pary znaków koła zamachowego.
Testy:
źródło
Clojure, 156 bajtów
To było zwodniczo trudne! Skończyło się na podzieleniu go na 3 problemy podrzędne:
Z pewnością nie wygrałem, ale było to ćwiczenie na poranek! Pełne wyjaśnienie poniżej:
źródło
Haskell,
8078 bajtówWypróbuj online!
Jak to działa:
źródło
Python 2, 45 bytes
Try it online!
The spaces in the string are
DEL
characters.źródło
|u|
is interpreted as a cartwheel.DEL
characters to be clear.s[:3]in'bqbqnunuwmwm'
Retina, 24 bytes
Outputs 1 for truthy, 0 for falsy.
Port of Cows quack's answer.
Try it online!
źródło
nunwmwnun
(when it should be false), which was why I had the\1*
in my sed answer.G`nu|mw|bp
since all truthy strings contain one of those letter pairs and the second line will ensure that all of the rest of the string contains those letters too..ununununu
Grime, 28 bytes
Try it online! Prints
1
for truthy inputs and0
for falsy ones.Explanation
Grime syntax resembles regular expressions, and a Grime program specifies a pattern that may or may not match a rectangle of characters.
Some features of Grime that helped shorten this:
""
changes this: syntax elements are escaped but literals are not. Without the quotes, the part that enumerates the character pairs would be(\n\u|\b\p|\m\w)oT
.-
) act on its result:..-#!"…"oT
is equivalent to(..-"…"oT)#!
.v
s lower the precedence of the syntax elements that follow them. A lone&
has higher precedence than-
, butv&
has lower. Similarly,..+
is parsed as.(.+)
, but..v+
is equivalent to(..)+
.źródło
Python 2, 69 bytes
Try it online!
źródło
Pyth, 27 bytes
Test Suite.
Outputs
1
for truthy andFalse
or0
for falsy, as the OP allowed in chat.źródło
Jelly, 27 bytes
Try it online!
How it works
źródło
Python 2, 103 bytes
Try it online!
źródło
Japt, 47 bytes
Try it online!
źródło
Python 3, 88 bytes
len(x)%2
: an even-length string can't end on the first characterx[:2] in
: check for any of the 6 valid beginning pairslen(set())
: get the length of the sets of characters at 0,2,4... and 1,3,5...Returns
True
if the list of evaluations is equal to [1,1,1,1], elseFalse
.Try it online!
źródło
Perl 5, 55 + 1 (-p) = 56 bytes
Try it online!
Prints the "upside down" version of the first character for true, nothing for false.
źródło
PHP, 59+1 bytes
Run as pipe with
-F
.partly regex solution, 101+1 bytes:
Empty output for falsy. Run as pipe with
-nR
.źródło
Java 8, 57 bytes
Try it here.
Simple regex to match all six cases. Note that Java's
String#matches
automatically matches the entire String, so there is no need for^...$
.źródło
MATL, 25 bytes
The ouput is a non-empty numeric column vector, which is truthy if all its entries are nonzero, and falsy otherwise. Try it online!
To verify all test cases, an
if
branch is added in the footer that replaces any truthy value by the string'truthy'
, or any falsy value by the string'falsy'
, and then displays the string.Explanation
źródło
Python 2, 74 bytes
Try it online! This take on the problem is surprisingly competitive.
źródło
Clojure, 115 bytes
Build a regex out of each letter pair and see if the input matches one. Lots of more elegant ways to do all of these parts, but they're all more verbose. Such is life with Clojure golfing.
źródło
Perl 5, 68 + 1 = 69 bytes
Run with
-n
.Explanation:
źródło
TXR Lisp, 50 bytes
Run:
f^$
is a combinator which takes a regex object and returns a function which matches that regex in an anchored way. (By itself, a regex object is function-callable object which takes a string and searches for itself through it.)źródło
Python 3, 66 bytes
Try it online!
źródło
TXR:
7874 bytesRun, from system prompt. Number in prompt is termination status: 0 = success, 1 = failure:
Explanation:
@{x 2}
: match two characters, bind tox
variable.@(rep :gap 0)@x@(end)
: repeated match with no skipped gaps: zero or more occurrences ofx
, the previously matched digraph.@y
: remainder of line matched, captured intoy
.@(bind(x y)(foo bar))
: bindx
tofoo
, y tobar
. Sincex
andy
are already bound, they have to matchfoo
andbar
, or else there is a failure.foo
is#"nu un mw wm bq qb"
, a word list literal, syntactic sugar for the Lisp list("nu" "un" ... "qb")
. Abind
match between a variable and a list means that the variable must match an element.bar
is@[x 0..1]
: the one-character substring ofx
from its beginning. Thebind
match betweeny
and this forces the last letter of the line to match the first.źródło
C++, 268 bytes
źródło
n
= 110,u
= 117,m
= 109,w
= 119,q
= 113. So using ASCII values or not does not matter for any chars higher thanc
( 99 )JavaScript (ES6), 63 bytes
Returns
1
or0
.Explanation
All cartwheel strings will have one or more of bq, wm, or un. We test for that with:
If you replace all instances of the first two letters of a cartwheel string with nothing, you're left with the first letter of the string. We test for that with:
Show code snippet
źródło