Jesteś kierownikiem projektu. Pewnego dnia jeden z twoich programistów oszalał ( nie twoja wina ) i wziął wszystkie wyrażenia z bazy kodu i dodał do nich losowe nawiasy, zanim odszedł na miejscu, narzekając na twoją niekompetencję ( również nie twoją winę ). Byłoby to łatwe rozwiązanie, jednak z jakiegoś powodu nie używasz kontroli wersji ( całkowicie nie twoja wina ). I z jakiegoś powodu żaden inny programista nie chce przejrzeć każdego wyrażenia, aby naprawić niedopasowane nawiasy ( nawiasem mówiąc, to nie twoja wina ). Programiści w dzisiejszych czasach, myślicie sobie. Musisz to zrobić sam. Horror! Takie zadania miały być pod tobą ...
Wejście będzie pojedynczym wierszem, który będzie zawierał lewy nawias kwadratowy ( ( [ {
) i prawy nawias kwadratowy ( ) ] }
). Może także, ale nie zawsze, zawierać komentarze ( /* */
) i literały łańcuchowe ( " "
lub ' '
) oraz różne liczby, litery lub symbole.
Będzie co najmniej jeden nawias (poza komentarzem lub dosłownym ciągiem znaków), który nie ma przeciwnej strony (poza komentarzem lub dosłownym ciągiem znaków). Na przykład błąd }
bez {
uprzedniego. Kolejny przykład: a, (
który nie ma )
później. Twój program zastąpi spacją minimalną liczbę nawiasów wymaganych do dopasowania nawiasów.
Przykłady:
(4 + (2 + 3))]
==> (4 + (2 + 3))
(nawias kwadratowy na końcu)
][][[]]
==> [][[]]
(nawias kwadratowy na początku)
("Hel(o!"))
==> ("Hel(o!")
(nawias na końcu)
( /* )]*/
==> /* )]*/
(nawias na początku)
{()]
==> ()
(nawias klamrowy i nawias kwadratowy)
- Dane wejściowe można pobierać z dowolnej dogodniejszej metody (STDIN, argument wiersza poleceń, odczyt z pliku itp.)
- Jeśli istnieje więcej niż jeden sposób rozwiązania problemu niedopasowania przy takiej samej liczbie usunięć, jest to dopuszczalne.
- Dopuszczalne będą jedynie niedopasowania w nawiasach. Literały ciągów i komentarze zawsze będą poprawnie tworzone.
- Tytuł pochodzi z tego wątku SO
- Nigdy nie będzie żadnych cytatów w komentarzach, cytatów w cytatach, komentarzy w komentarzach ani komentarzy w cytatach.
To jest kod golfowy, więc minimalna liczba bajtów wygrywa. Zadawaj pytania w komentarzach, jeśli specyfikacja nie jest jasna.
("foo (\") bar")
)?
{{(})
powinno być { }
równoważne, ponieważ scenariusz otwierający sugeruje, że kod działał od samego początku i {(})
liczy się jako niedopasowane nawiasy w każdym języku programowania, który znam (tj. „Powoduje zastój” ??). Ale już napisałem odpowiedź, więc jestem stronniczy.