Nawiasy na klawiaturze są zużyte i chcę unikać ich używania w jak największym stopniu. Twoim zadaniem jest zrównoważyć linię zawierającą nawiasy, dodając je przed i po każdej linii.
Jest to podobne do automatycznego nawiasu i zamykania łańcucha TI-Basic (tj Output(1, 1, "Hello, World!
.). Oszczędza również cenne bajty z programu!
Przykładowe dane wejściowe:
This line has no parentheses
alert(Math.max(1, 2
1+1)*2).toString()
function() { alert('Hello, World!'); })(
Przykład (możliwy) wynik:
This line has no parentheses
alert(Math.max(1, 2))
((1+1)*2).toString()
(function() { alert('Hello, World!'); })()
Specyfikacja:
Dla każdego wiersza danych wejściowych
Dodaj tyle otwartych nawiasów na początku i zamknij nawiasy na końcu linii, ile potrzeba, aby zrównoważyć nawiasy w linii
Definicja „równowagi” jest następująca:
Ta sama ilość
(
i)
na liniiDla każdego podłańcucha rozpoczynającego się od początku łańcucha podłańcuch ten nie może zawierać więcej nawiasów zamykających niż nawiasów otwierających
- Na przykład
(foo))(bar
nie jest zrównoważony, ponieważ(foo))
ma więcej nawiasów zamykających niż nawiasów otwierających
- Na przykład
Jeśli chcesz, możesz dodać dodatkowe niepotrzebne nawiasy, jeśli spowoduje to skrócenie kodu
Nie musisz się martwić literałami łańcuchowymi ani nic podobnego, zakładając, że wszystkie nawiasy wymagają równoważenia
Wypisz każdą linię ze zrównoważonymi nawiasami
To jest code-golf , więc wygra najkrótszy kod w bajtach!
źródło
()
parens, czy inne wsporniki{}
,[]
,<>
itp trzeba uznać za dobrze?(
i)
.Odpowiedzi:
GolfScript, 23 bajty
Wykorzystuję lukę, że:
Zasadniczo dla każdego wiersza ten kod liczy liczbę znaków w wierszu, które nie otwierają nawiasów, i przygotowuje tyle dodatkowych nawiasów otwierających do linii, a następnie robi to samo dla zamykania nawiasów. Jest to niezwykle nieefektywne, ale zapewnia zrównoważenie wszystkich nawiasów w linii wyjściowej.
Na przykład, biorąc pod uwagę dane wejściowe:
ten program wyświetli:
Ps. Możesz również przetestować ten kod online .
źródło
Perl, 32 = 31 + 1 lub 73 = 72 + 1 (zminimalizowane nawiasy)
32 = 31 + 1: z dodatkowymi niepotrzebnymi nawiasami
Edycje:
y///
.$a
Usunięto niepotrzebną zmienną .Jest używany z przełącznikiem czasu działania
-p
(+1 bajt).Plik testowy
input.txt
:Wiersz poleceń:
lub
Wynik:
Nie golfowany:
Algorytm jest prosty, wystarczy dodać odpowiednik dla każdego znalezionego nawiasu.
73 = 72 + 1: dodanie minimalnej liczby nawiasów
Ten skrypt dodaje tylko minimalną liczbę nawiasów, aby uzyskać zrównoważone wyjście.
Jest używany z przełącznikiem czasu pracy
-p
(+1 bajt).Wynik:
Nie golfowany:
81 = 80 + 1: dodanie minimalnej liczby nawiasów
Jest to starsza metoda dodawania minimalnej liczby nawiasów dla zrównoważonego wyjścia.
Używa Perla 5.14 (z powodu nieniszczącego modyfikatora podstawienia) i przełącznika czasu działania
-p
(+1 bajt).Wynik:
Nie golfowany:
źródło
'('x/\)/g
zawsze równe ”(„ ...y///
zamiastm//g
liczenia nawiasów.Python
2.73:626058 bajtówNie super golfa, ale wiesz. Może naprawdę będę w stanie wycisnąć więcej bajtów, jeśli naprawdę spróbuję.
Dla każdej linii wyprowadza
(
* liczbę)
w linii, następnie linię, a następnie)
* liczbę(
w linii. Jeśli poprawnie zrozumiem reguły, zawsze zapewni to prawidłowe wyniki.Wychodzi przez zgłoszenie wyjątku w wyniku sposobu, w jaki wprowadziłem dane. (Dane wejściowe są zawsze trudną częścią tych problemów.) Jeśli nie jest to akceptowalne, naprawienie go kosztuje kilka bajtów, choć nie jestem jeszcze pewien, ile.
Przykładowe dane wyjściowe:
źródło
python2 balanced_parenthesis.py < input.txt 2>/dev/null
pobiera dane wyjściowe, które napisałem, ale jeśli chcesz wejść wielowierszowych podczas wykonywania tego interaktywnie, będzie mnie to kosztować kilka bajtów. Daj mi chwilkę, coś wymyślę ...while 1:s=raw_input();c=s.count;print'('*c(')')+s+')'*c('(')
c=s.count
. Myślałem, że trzeba było zrobićc=s
,s.c()
. Dzięki!Pure Bash, 72 bajty
Używa tego samego algorytmu, co odpowiedź @ undergroundmonorail:
Wynik:
źródło