„Trójkątny wspornik” (który przygotowałem na to wyzwanie) to jedno z poniższych:
(...+...)
[...:...]
{...|...}
<...-...>
Zrównoważony ciąg nawiasów tripletowych (w skrócie BTBS) jest albo pustym ciągiem, połączonymi dwoma BTBS, albo jednym z powyższych nawiasów tripletowych, z których każdy jest ...
zastąpiony BTBS.
Twoim zadaniem jest napisanie programu lub funkcji, która sprawdza, czy ciąg składający się tylko z (+)[:]{|}<->
jest zrównoważony. Najkrótszy kod wygrywa.
Przykłady
Twój program powinien zwracać wartość true dla następujących ciągów:
(+)(+)(+)
[[[:]:]:(+(+))]{<->|<(+)->[:]}(+)
<<<<<<<<<<<<->->->->->->->->->->->->
{|(+[:<-{|(+[:<->])}>])}
[[[:]:[:]]:[[:]:[:]]]
{[:](+)|<->{|}}[(+)<->:{|}(+)]
Twój program powinien zwrócić fałsz dla następujących ciągów:
:[
<|>
(+(+)
[:][:](+[[:]):]
{|{|{|(+{|{|{|}}}}}+)}[:]{|}
{{||}}
<<->-<->-<->>
[(+):((+)+)+(+(+))]
<<<<<->->->->->->
code-golf
string
balanced-string
jimmy23013
źródło
źródło
(|)
ważny Nie sądzę, ale nie jestem pewien<|>
w przykładach fałszerstwa.Odpowiedzi:
Japt, 25 bajtów
Przetestuj online!
e
na ciągach jest funkcją zastępowania rekurencyjnego. Drugi parametr domyślnie przyjmuje pusty ciąg, co oznacza, że rekurencyjnie usuwa dopasowania wyrażenia"%(%+%)|%[:]|\{%|}|<->"
regularnego Japt (w normalnych warunkach/\(\+\)|\[:]|{\|}|<->/
). Zwraca pusty ciąg dla zrównoważonych ciągów tripletowych i niepusty ciąg dla niezrównoważonych, więc poprawna wartość zwracana jest logicznym NIE tego.źródło
JavaScript (ES6),
77585756 bajtówPrzypadki testowe
Pokaż fragment kodu
źródło
perl -lpe 's/<->|\(\+\)|{\|}|\[:]//&&redo;$_=!$_'
.0
BTBS. Zamiast tego użyj 38:perl -pe 's/<->|\(\+\)|{\|}|\[:]//&&redo;$_=/^$/'
f=s=>s==(s=s.replace(...))?!s:f(s)
?sed,
2827 bajtówsed nie ma pojęcia „prawda / fałsz”, więc rozważam pusty ciąg znaków „prawda” i niepusty ciąg znaków „fałsz”. Sprawdza to, czy rozważamy warunki warunkowe
/^$/
.Dzięki @Neil za grę w golfa z 1 bajtu!
Wypróbuj online!
źródło
\]
lub]
wystarcza?Python, 77 bajtów
Wykorzystuje pomysł zastępowania Arnaulda . Generuje i ocenia długi ciąg znaków
aby przełączać się między wymianą wszystkich typów wsporników. Następnie sprawdza, czy wynikiem jest pusty ciąg.
źródło
Mathematica, 55 bajtów
Funkcja anonimowa. Bierze ciąg jako dane wejściowe i zwraca
True
lubFalse
dane wyjściowe. Używa do tego standardowej metody.źródło
Brud , 39 bajtów
Wypróbuj online! Niestety w większości przypadków testowych w wersji TIO zabrakło pamięci.
Wyjaśnienie
Nie ma tu nic nadzwyczajnego.
_
jest skrótem dla całego wzoru iv*
jest taki sam jak*
, ale z niższym priorytetem.źródło
J, 48 bajtów
Podobnie jak inne, jest to również oparte na metodzie Arnaulda .
Stosowanie
Wyjaśnienie
źródło
Scala, 96 bajtów
Jest to zasadniczo ten sam pomysł, co inne odpowiedzi, ale z pewną płytą kotłową Scala.
bez kradzieży pomysłów od innych (188 bajtów):
źródło
Pip , 26 bajtów
Wypróbuj online!
Pętle len (a) razy, zastępując wszystkie wystąpienia pustych nawiasów trypletowych (
"(+)[:]{|}<->"<>3
gdzie<>
operator „grupy”, =>["(+)"; "[:]"; "{|}"; "<->"]
) pustym łańcuchem (x
). Tak wiele iteracji to przesada, ale zawsze wystarczy, aby całkowicie zredukować wszystkie poprawnie utworzone nawiasy trójkątowe do zera. Po zakończeniu pętli wyprowadza!a
:0
ifa
jest prawdą (nadal ma kilka znaków),1
jeślia
jest falsey (pusty).źródło