Wyzwanie
W przypadku tego wyzwania górzysty sznurek jest zgodny z regułą gramatyczną, w M: x(Mx)*
której przy każdej produkcji wszystkie x mają ten sam charakter. Po wcięciu górski ciąg może wyglądać mniej więcej tak:
A
B
C
D
C
E
F
E
C
B
A
Jak widać, z boku wygląda trochę jak góra.
Definicja formalna
- Każda pojedyncza postać
a
jest górzysta. - Jeśli
S
jest górzystym ciągiem ia
jest postacią, toaSa
jest górzysty, gdzie zestawienie reprezentuje konkatenację struny. - Jeśli
aSa
iaTa
są strunami górzystymi, toaSaTa
jest to struna górzysta. Zauważ, że ta reguła oznacza, że ten wzór obowiązuje dla dowolnej liczby powtórzeń. (czyliaSaTaUa
,aSaTaUaVa
,aSaTaUaVaWa
... są górzyste).
Przykłady
Wszystkie palindromy o nieparzystej długości są górzyste, na przykład:
t
a
c
o
c
a
t
qwertytrasdfdgdsarewqjklkjq
jest mniej trywialnym przykładem:
q
w
e
r
t
y
t
r
a
s
d
f
d
g
d
s
a
r
e
w
q
j
k
l
k
j
q
Przykładowe wyniki
a ==> true
aaa ==> true
mom ==> true
tacocat ==> true
qwertytrasdfdgdsarewqjklkjq ==> true
wasitacaroraratisaw ==> true
abcbcbcbcba ==> true
aaaaabcbbba ==> true
<empty string> ==> false
aa ==> false
pie ==> false
toohottohoot ==> false
asdfdghgfdsa ==> false
myhovercraftisfullofeels ==> false
Zasady
- Jest to problem decyzyjny, więc każda reprezentacja prawdy lub fałszu jest prawidłowym wyjściem, o ile jest poprawna, spójna, jednoznaczna, a program kończy się w określonym czasie. Pamiętaj, aby podać konwencję wyjściową ze swoim rozwiązaniem.
- Ustalenie, czy dane wyjściowe wskazują prawda, czy fałsz, nie musi być trywialne, bez konieczności znajomości łańcucha wejściowego. Zauważ, że nie oznacza to, że dane wyjściowe zgodne z prawdą lub fałszem muszą być stałe, jednak konwencja „drukuj górzysty sznurek, jeśli sznur jest górzysty, a nie-górzysty sznur, jeśli nie jest górzysty”, jest z oczywistych powodów zabroniona.
- Z drugiej strony, konwencja typu „zgłasza wyjątek dla fałszu i kończy cicho dla prawdy”, a także „drukuje pojedynczy znak dla prawdy, a wszystko inne dla fałszu”
- To jest golf golfowy, więc wygrywa najkrótszy program.
- Standardowe luki są zabronione.
code-golf
string
decision-problem
Wołowina
źródło
źródło
aaa
byłby dobry, w którym ta sama postać musi być używana na wielu poziomach.wasitacaroraratisaw
? Wydaje mi się, że jest górąwasitacaroraratisaw
jest rzeczywiście górzysty AFAICTaaa
sprawiają, że to nie działa.Odpowiedzi:
Japt v2 ,
1413 bajtówPrzetestuj online!
źródło
Czysty ,
94898780 bajtówWypróbuj online!
źródło
Perl, 22 bajty
Obejmuje
+
dlap
Drukuje 1 za prawdę, nic za fałsz
źródło
Brain-Flak , 78 bajtów
Wypróbuj online!
Drukuje 1 dla prawdy, nic dla fałszu.
Aby zweryfikować słowo górzyste, wystarczy założyć, że słowo „schodzi” z góry, gdy tylko jest to możliwe.
źródło
Python 2 ,
8983 bajtówWypróbuj online!
Dzięki ovs za 6 bajtów.
źródło
Prolog (SWI) , 29 bajtów
Wypróbuj online!
Ten program definiuje regułę DCG,
a//0
która pasuje do dowolnego łańcucha (listy znaków), który jest łańcuchem górzystym.Wyjaśnienie
W tym programie używam nieco innej, ale równoważnej definicji łańcuchów górskich niż ta opisana w wyzwaniu: Górzysty łańcuch znaków jest postacią,
c
po której następuje liczba (może być zero) łańcuchów górskichc
przyczepiona do ich końców. W bardziej zwięzłej notacji pochodnej wyrażenia regularnego, łańcuch górski musi pasować do wzoru, wc(Mc)*
którymM
łańcuch górski, i*
oznacza, że wyrażenie w nawiasach jest powtarzane zero lub więcej razy. Zauważ, że chociaż każdyc
musi być tego samego znaku,M
nie musi to być ten sam górzysty sznurek.Dowód równoważności
Oczywiste jest, że reguły 1 i 2 z wyzwania są równoważne z moją zasadą, w której
Mc
występuje odpowiednio zero i jeden raz.W przypadku, gdy górzysty sznurek
Mc
występował wn
czasach, w którychn > 1
sznurek można przepisać, tak jakcMcSc
gdzieS
są te ostatnien - 1
czasy, zMc
wyjątkiem ostatniegoc
(należy pamiętać, żeM
jest to dowolny sznurek górzysty i niekoniecznie taki sam jak innyM
). PonieważM
jest to górzysty sznur, zgodnie z regułą 2,cMc
musi być górzystym sznurkiem. AlboS
jest to górzysty sznurek, w którymcSc
to przypadku jest to górzysty sznurek, alboS
można go przepisać, tak jakcMcTc
tam, gdzieT
występują te ostatnien - 2
czasy, zMc
wyłączeniem ostatniegoc
. Ta linia rozumowania może być stosowana, dopóki sznurek nie ma gwarancji, że zawiera górzysteMc
kiedyś, co oznaczałoby, że musiałoby to być również górzyste. Skoro więccMc
jest górzysty, a jeślicMc
icM'c
górzysty, tocMcM'c
musi być górzysty, cały sznurek musi być górzysty.Z drugiej strony, dla sznurka, w
cScTc
którymcSc
icTc
są górzyste, to albocSc
jest sznurkiem górzystym zgodnie z regułą 2, albo regułą 3. Jeśli jest sznurkiem górzystym zgodnie z regułą 2,S
musi być również sznurkiem górzystym. Jeśli jest to górzysty sznurek zgodnie z regułą 3,cSc
musi on mieć formęcUcVc
gdziecUc
icVc
są sznurkami górzystymi. Ponieważ dłuższycUc
icVc
musi być co najmniej o dwa znaki krótszy niż,cSc
a reguła 3 wymaga zastosowania co najmniej 5 znaków, to po skończonej liczbie zastosowań reguły 3 każdy ciąg znaków między literamic
wybranymi przez zastosowanie reguły 3 musi być górzysty strunowy. Można zastosować tę samą linię rozumowaniacTc
dlatego według mojej definicji sznurek jest górzysty.Ponieważ dowolny ciąg pasujący do mojej definicji jest górzysty, a moja definicja pasuje do wszystkich łańcuchów górskich, jest on równoważny z podanym w pytaniu.
Objaśnienie kodu
Ogólnie
a//0
reguła DCG, zdefiniowana w pierwszym wierszu, pasuje do każdego górzystego łańcucha.+//1
Reguła DCG (jak orzeczników, zasady DCG można nadać nazwy operatora ), określone na drugiej linii, pasuje dowolny ciąg znaków, który składa się z sekwencji zero lub więcej górskich ciągów z charakterem przekazywane jako argumentyX
dołączona na końcach nich . Lub pożyczyć notację regularną, której użyłem powyżej,a//0
dopasowuje,c(Mc)*
ale zleca zadanie dopasowania(Mc)*
do tego,+//1
co przyjmujec
za swój argumentX
.Kody po linii kody zachowują się w następujący sposób:
Ta linia określa regułę DCG
a
. Stwierdza[X]
, że pierwszy znak musi być równy aktualnie niezdefiniowanej zmiennejX
. Powoduje to,X
że jest ustawiony jako pierwszy znak.+X
Następnie stwierdza, że reszta łańcucha musi zgadzać się z reguły DCG+//1
ze znaku, któryX
jest ustawiony jako argument.Ta linia określa
+//1
regułę DCG.;
Oznacza grupę lub w Prologu co oznacza, że łańcuch może pasujących albo[]
alboa,[X],+X
.[]
Reprezentuje ciąg pusty, więc+//1
zawsze jest w stanie dopasowania pusty łańcuch. Jeśli struna nie jest pusta, początek musi się zgadzać,a//0
a więc musi być struną górską. Następnie musi następować dowolnaX
ustawiona postać . Wreszcie reszta ciągu musi się zgadzać+X
.źródło
Łuska , 15 bajtów
Wypróbuj online! Wnioskowanie typu zajmuje około 40 sekund, więc bądź cierpliwy.
Wyjaśnienie
Chodzi o to, aby wielokrotnie zastąpić podciąg formularza
aba
zea
dopóki nie jest to już możliwe. Dane wejściowe są górzyste wtedy i tylko wtedy, gdy skutkuje to ciągiem jednego znaku (coε
testuje). Jedyną niebezpieczną sytuacją jest sytuacja, gdy mamy taki ciąg znaków,aba
który nie wydaje się szczytem:Na szczęście zawsze możemy go przekształcić w jedno:
źródło
true
przypadku i nie w innym przypadku byłoby „spójne”.Retina 0.8.2 , 15 bajtów
Wypróbuj online! Trywialny port odpowiedzi JET @ETHproductions.
źródło
JavaScript (Node.js) , 53 bajty
Przypuszczam, że jest to prawie najprostsza metoda, aby to zrobić?
Wypróbuj online!
JavaScript (Node.js) , 72 bajty
Mniej banalny, ale o wiele dłuższy.
Wypróbuj online!
źródło