Otrzymasz (ewentualnie pusty) ciąg zawierający nawiasy kwadratowe ( [{()}]
) i wszelkie inne znaki ( A
- Z
, a
- z
, 0
- 9
, interpunkcja). Musisz sprawdzić, czy przestrzega następujących zasad:
- Znaki bez nawiasów są ignorowane.
- Każdy otwarty wspornik
[{(
ma zamykający wspornik)}]
. Więc[](
nie jest dozwolone. - Wsporniki są prawidłowo zagnieżdżone.
[(])
nie jest dozwolone. - Nawiasy klamrowe nie mogą zawierać nawiasów kwadratowych. Proste nawiasy kwadratowe nie mogą zawierać nawiasów klamrowych ani kwadratowych. Tak
[({})]
,[{[]}]
i({})
nie są dozwolone. Nawiasy można zagnieżdżać za pomocą podobnych nawiasów, więc[[{((()))}{{(())}}]()]{()}
jest to dozwolone.
Dane wyjściowe to jedna wartość true / falsey zgodnie z wyborem.
Najkrótszy kod wygrywa.
Przypadki testowe
b[[a{(/)}(())+={{}-}],]
-> Ważne
([h][e][l][l][o])
-> Niepoprawny
[///[{(\/(arg()))}1{{((-)-2)}}]()]{()}
-> Ważne
hi
-> Ważne
code-golf
string
decision-problem
balanced-string
ghosts_in_the_code
źródło
źródło
Odpowiedzi:
Siatkówka , 84 bajty
Wypróbuj online.
Jest to dość proste (ale grało w golfa) rozszerzenie podstawowego wyrażenia regularnego sprawdzania nawiasów .NET .
Chociaż jest to całkiem możliwe w przypadku grup równoważących, rekurencja Perla zdecydowanie ma tutaj przewagę . Jednak każde z tych podejść zostaje pokonane przez porzucenie elegancji pojedynczego dopasowania wyrażenia regularnego na rzecz stopniowego zmniejszania wkładu poprzez powtarzanie podstawień, jak robi sed odpowiedź Digital Trauma . Można to zaimplementować w 34 bajtach w Retinie, ale waham się, czy sam opublikować kod, ponieważ nie wpadłem na ten pomysł.
źródło
Retina, 34
Po pierwsze, kredyt wymagalny:
Niezależnie (później) wymyśliłem to samo podejście w sed , więc mam nadzieję, że nie stąpam po palcach ( dużych lub innych), publikując to:
Więc teraz z
sudo apt-get install mono-complete
agit clone https://github.com/mbuettner/retina.git
mam działającą siatkówkę na mojej maszynie Wirtualnej Ubuntu. Oto wynik testu:źródło
Sed, 53
Twierdzę tutaj, że skoro
sed
tak naprawdę nie ma pojęcia prawda / falsey, to definiuję pusty ciąg znaków jako prawdę, a wszystkie inne ciągi znaków oznacza falsey.Jeśli jest to nie do przyjęcia, możemy dodać kilka wierszy, a zatem:
Sed, 66
Daje to 0 dla false i 1 dla true.
źródło
0
lub1
). Nie mogę powiedzieć, kto powinien to opublikować, ale prawdopodobnie powinna to być jedna z was.CJam,
2726 bajtówDrukuje 1 (truthy) lub 0 (falsy). Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe.
Jak to działa
źródło
𝔼𝕊𝕄𝕚𝕟, 43 znaki / 62 bajty
Try it here (Firefox only).
Nie.
Jeśli jednak użyję nowo zaimplementowanych funkcji, mogę uzyskać do 28 znaków / 47 bajtów:
źródło
Japt ,
4237 bajtówZapisałem 5 bajtów z funkcją, o której nie wiedziałem, że mój własny język ... Dziękuję za dodanie go, @Downgoat!
Japt naprawdę potrzebuje lepszego wsparcia RegExp ...
Wypróbuj online!
Jak to działa
źródło
C99,
226208207 bajtówTo jest moja pierwsza gra w golfa
Czytelny:
Jest przepełnienie bufora, ale wydaje się, że nic to nie wpływa - uważam, że jest to spowodowane wyrównaniem.
źródło
char* s
Perl, 50 + 1 = 51 bajtów
Wymaga
-p
flagi i wydruków1
dla prawdziwości i nic dla wyników fałszywych. Liczę-p
jako jeden, ponieważ można go połączyć z-e
:Kod jest po prostu zwykłym dopasowaniem wyrażenia regularnego względem danych wejściowych, za pomocą fajnej rekurencyjnej funkcji wyrażenia regularnego Perla.
Podziękowania dla Dennisa za pomoc w przetestowaniu tego i zagranie w golfa na płycie Perla.
źródło
Python 3: 120 bajtów
Opierając się na odpowiedzi @ Adnana , okazało się, że jest on krótszy w użyciu:
źródło
Python 3,
196170160154 bajtówNiezwykle długi, dzięki Mego za zaoszczędzenie 6 bajtów:
źródło