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. :)
źródło
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][
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.
Odpowiedzi:
Galareta ,
33 32 37 3534 bajtówznaleziono błąd, straszna poprawka +5 bajtów, lepsza poprawka - 2 bajty, używając sztuczki Adnana, którą widziałem tutaj za -1 więcej.
Zwracane wartości:
(Niepoprawne dane wejściowe zwracają fałszywe wyniki, chociaż zwraca poprawność Brain Flack
[]
.)Wypróbuj online! - zestaw testowy (kopie mushed reprezentacje, więc
20
dla[2,0]
i ignoruje linii zawierających każdy-
).źródło
Retina ,
414041 bajtów1 bajt zapisany dzięki @MartinEnder
Wypróbuj online!
1
0
10
01
Edycje
źródło
[]})>]
zapisuje bajt.(][)
. Myślę, że można to naprawić kosztem jednego bajtu, zmieniając101
na...+
.Both
, jak również10
jest to jedyna poprawna kombinacja dlaBoth
.Partia, 337 bajtów
Wyjścia
]
dla prepend,[
dla append,][
dla obu,[]
dla żadnego.źródło
Haskell ,
115108 bajtówEDYTOWAĆ:
Wypróbuj online!
Użyj jak
(""#) "))"
. Wyniki podano jako:Jak to działa
s#d
analizuje pozostały ciągd
, biorąc pod uwagę ciąg / stoss
oczekiwanych nawiasów zamykających.s#""
kontrole liniowe, jeśli wszystkie klamry zamykające zostały znalezione pod koniec łańcucha, inaczej dołączanie jest potrzebne.s#(c:d)
sprawdza, czy następny znakc
jest nawias otwierający, a jeśli tak, pozostawia odpowiedni stos zamykający na stosie do rekurencji.źródło
Japt , 44 bajty
Wyjścia
1
dla prependable,3
dla appendable,13
dla obu, i31
na nie.Przetestuj online! lub Zweryfikuj wszystkie przypadki testowe jednocześnie.
Jak to działa
źródło
PHP, 137 bajtów
1 => dołączane,
2 => jednorazowe,
12 => oba,
0 => ani
Przypadki testowe
źródło