Mózg ma jutro roczek! Na cześć urodzin organizujemy przyjęcie urodzinowe w stylu PPCG, na którym kilku użytkowników zamieszcza pytania związane z atakiem mózgu! Pomóż nam świętować! :)
Brain-flak to ezoteryczny język, który napisałem, w którym wszystkie polecenia są nawiasami, a wszystkie nawiasy muszą być w pełni dopasowane. Aby pożyczyć własną definicję :
Dla celów niniejszego wyzwanie, „uchwyt” jest każdy z tych znaków:
()[]{}<>
.Para nawiasów jest uważana za „dopasowaną”, jeśli nawiasy otwierające i zamykające są w odpowiedniej kolejności i nie zawierają w sobie znaków, takich jak
() []{}
Lub jeśli każdy podelement w nim również jest dopasowany.
[()()()()] {<[]>} (()())
Elementy podrzędne mogą być również zagnieżdżone na kilku warstwach.
[(){<><>[()]}<>()] <[{((()))}]>
Ciąg jest uważany za „w pełni dopasowany”, tylko wtedy, gdy:
Każda postać to nawias,
Każda para wsporników ma prawidłowy wspornik otwierania i zamykania we właściwej kolejności
Aby uczcić pierwsze urodziny uderzenia mózgu, dzisiejsze wyzwanie polega na przyjęciu niezrównoważonego zestawu nawiasów i określeniu, jakie rodzaje operacji są potrzebne, aby było to prawidłowe.
Na przykład,
((
nie jest poprawnym kodem wyłamywania mózgu, ale jeśli))
do niego dołączymy , staje się(())
, który jest w pełni zbalansowany, a zatem prawidłowy wyładowaniem mózgu. To sprawia, że dane wejściowe są dołączalne .Podobnie
>}
nie jest poprawny, ale możemy{<
do tego przystąpić{<>}
, aby dokonać , co jest ważne. To sprawia, że dane wejściowe można uzupełnić .Niektóre dane wejściowe są nieco bardziej skomplikowane. Na przykład
)][({
nie można unieważnić wyłącznie poprzez dołączanie lub dodawanie. Ale można to zrobić, dodając[(
i dodając})]
. Dlatego też, to wejście jest zarówno prependable i appendable .Wreszcie, niektóre dane wejściowe nigdy nie mogą być poprawnymi kodami uderzeń mózgu za pomocą dowolnej kombinacji dołączania lub dodawania. Na przykład
(>
nigdy nie można unieważnić. (Wyprzedzanie<
tworzy<(>
, a dopisywanie)
tworzy(>)
, z których żadne nie jest poprawne) W związku z tym danych wejściowych nie można dodawać ani dodawać.
Na dzisiejsze wyzwanie musisz napisać program lub funkcję, która pobiera ciąg nawiasów i określa, czy jest to ciąg
appendable
prependable
both
neither
Możesz wybrać, jakie wartości reprezentujesz dla każdego przypadku. Na przykład generowanie 1, 2, 3, 4
, 'a', 'p', 'b', 'n'
lub 1, 'foo', 3.1415, -17
, lub cokolwiek innego jest w porządku. Dopóki każde wyjście jest odrębne i spójne , nie ma problemu. ty musi jednak jednoznacznie określić, który odpowiada wyjścia, do którego sprawa.
Możesz zwrócić tę wartość w dowolnym dogodnym formacie (na przykład powrót z funkcji, drukowanie do STDOUT, modyfikowanie argumentów, zapisywanie do pliku itp.).
Możesz założyć, że dane wejściowe nigdy nie będą poprawne lub nie będą puste.
Przykłady
Następujące dane wejściowe są uzupełnialne :
))
(((()()())))}
)>}]
()[]{}<>)
Wszystkie są dołączane :
(({}{})
((((
([]()())(
{<<{
Są to oba :
))((
>()[(()){
>{
I to nie wszystko :
)(}
{(((()()()))>
[}
((((((((((>
((((((((((<>()]
Jak zwykle jest to gra w golfa , więc obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach!
To wyzwanie jest szczególnie trudne w przypadku uderzenia mózgu, więc maksymalna ilość punktów wskazuje na każdą odpowiedź zapisaną w uderzeniu mózgu. :)
][
jest dołączany, ponieważ nic, co można dołączyć, nie może spowodować jego poprawności. Podobnie nie jest to możliwe do zniesienia. Jest ... „wkładany”! Możesz wstawić go do łańcucha, aby cały prawidłowy Brainflak.
You can assume that the input will never be valid brain-flak or empty.
maximum brownie points
Myślę, że oferowanie maksymalnej liczby ciastek i ciasteczek zachęciłoby Baking-Flaking do tego wyzwania bardziej niż tylko punkty ciasteczka, ponieważ nie uważam, że jest to trywialne w jakimkolwiek języku, nie mówiąc już o Brain-Flak. : P