Biorąc pod uwagę następujące dane wejściowe do programu:
- Lista znaków początku bloku
- Lista znaków końca bloku
- Ciąg do sformatowania
sformatuj ciąg z blokami ograniczonymi dwoma wciętymi zestawami znaków.
Formatowanie odbywa się za pomocą dwóch spacji na poziom, a nawiasy są umieszczane, jak pokazano w poniższym przykładzie. Możesz założyć, że zestawy znaków otwierających i zamykających są rozłączne.
Np. Dla {[(<
i }])>
jako otwierające i zamykające zestawy znaków i następujący ciąg:
abc{xyz{text[note{comment(t{ex}t)abc}]}}
oczekiwane są następujące wyniki:
abc
{
xyz
{
text
[
note
{
comment
(
t
{
ex
}
t
)
abc
}
]
}
}
Nie można zakodować na stałe listy znaków „w nawiasach”. Sposób podawania danych wejściowych nie jest jednak określony; mogą to być argumenty wiersza poleceń lub standardowe wejście, jak chcesz.
code-golf
string
whitespace
balanced-string
Prashant Bhate
źródło
źródło
./program 'p' 'q' <<< '1p23p45q67q8'
Czy potrzebuje tylko wsparcia{[(<
i}])>
?Odpowiedzi:
Ruby,
1061019695Dane wejściowe są dostarczane z wiersza poleceń.
źródło
~-j+=1
zamiast(j+=1;j-1)
. Dodatkowo użycie$.
wszędzie zamiastj
pozwala na usunięciej=0
, co oszczędza inną postać.Perl -
1319694 znakówWydaje się, że przynajmniej powinno być miejsce na wyeliminowanie typowych wyrażeń, ale jest to szybkie ujęcie, które obsługuje ten przykład, a także hipotezę Joeya Adamsa dotyczącą arbitralnych nawiasów.
Rzeczywiście było wiele do zrobienia:
... i jeszcze trochę więcej:
źródło
Matematyka (golf bez kodu)
Test
Jako bonus można użyć następującej funkcji do sformatowania wyrażenia matematycznego
EDYCJA (bez kodu golfowego) Zaktualizowano z dokładną szczegółową kontrolą nad sposobem renderowania znaków nowej linii
Wynik
źródło
indent
. Czy Twoim celem jest maksymalnie zwięzły kod lub czytelność? Istnieje wiele sposobów skrócenia tego kodu, jeśli to rzeczywiście jest twój cel. Ponadto: „Nie można zakodować na stałe listy znaków„ w nawiasach ”.” ale czy nie jest to dokładnie to, co tutaj zrobiłeś? W każdym razie przepraszam, że brzmi tak negatywnie; wydaje mi się to dziwną odpowiedzią na twoje własne wyzwanie.JavaScript,
255227205 znakówHej, jego długość idealnie pasuje do bajtu! :REJest to funkcja, podaj znaki początkowe, końcowe, a następnie tekst.
źródło
Python - 162 znaki
źródło
Python 2.7.X - 136 znaków
Stosowanie : $ ./foo.py '(' ')' '(ab (cd (ef) gh) ij)' '
Wynikowy wynik:
źródło
print
instrukcjach?C -
213209Nienawidzę głupich błędów ...>. <
Czyta lewy parens z pierwszego argumentu wiersza poleceń, prawy parens z drugiego argumentu i wprowadza wcięcie na standardowe wejście.
Dość wydrukowane i skomentowane:
źródło
C (
159225 znaków)Kosztowało mnie 66 dodatkowych znaków, aby naprawić błąd z pustymi liniami :( Szczerze mówiąc, potrzebuję nowego podejścia, ale na razie na to dzień.
Raczej szybkie i brudne podejście. Ma błąd polegający na wytwarzaniu pustych linii między kolejnymi nawiasami zamykającymi, ale w przeciwnym razie działa (tak mi się wydaje). Wrócę do niego, aby znaleźć lepsze i czystsze rozwiązanie, w tym tygodniu.
char * b to nawias otwierający, char * e to zamykający zestaw nawiasów, a char * s to ciąg wejściowy.
źródło
Perl - 69 bajtów
TMTOWTDI upraszcza kod
źródło
Scala (2.9), 211 znaków
źródło
Perl -
8985 bajtówWersja odpowiedzi Hojunga Youna, która akceptuje znaki blokowe za pomocą dwóch argumentów.
Nazywany jak:
źródło
Python3,
184182 znakówPrzykład:
źródło
_,p,q,t=sys.argv
Groovy, 125
Możesz zapisać skrypt w pliku indent.groovy i wypróbować go z:
groovy indent.groovy "abc {xyz {text [note {comment (t {ex} t) abc}]}}" "{[(" ") ]} ”
źródło
Python - 407
Nie golfowa wersja programu:
Argumentami programu są (w kolejności): nawiasy otwierające, nawiasy zamykające i tekst do wcięcia.
Przykład ($ jest wierszem poleceń):
źródło
D (300)
wymaga łańcucha zakończonego znakiem null do sprawdzenia granic (w przeciwnym razie
if(*s)
należy zmienić naif(s.length)
)źródło
Jawa
Non
codegolf version
! Zakładając, że mamy tę wersję split (), która zawiera ograniczenia,źródło
StringUtils
nie jest częścią Standardowego JDK.C 284 Postacie inne niż spacja
Nie jestem fanem zaciemniania, ale cóż ...
Zastosowanie: ./program start_brackets end_brackets string_to_parse
źródło
php
(187)(153)Funkcja przyjmuje ciąg znaków, otwierając ograniczniki, kończąc ograniczniki jako argumenty.
źródło
C, 256
Parametry:
Zerwałem kod, aby uniknąć poziomego paska przewijania.
Cały program ma 363 znaki.
źródło
VB.net (? C)
Język nie jest odpowiedni do gry w golfa, więc zastosowałem nietypowe podejście. Używanie nasłuchiwania śledzenia do wysyłania danych do konsoli.
Używa argumentów wiersza polecenia jako danych wejściowych
źródło
PowerShell, 146 bajtów
Niegolfowane wyjaśnienie
źródło
C, 181 znaków
Prawie najprostsze podejście, jakie można sobie wyobrazić. Iteruj przez ciąg (v [3]), jeśli jest to lewy nawias klamrowy (zgodnie z definicją w v [1]), zwiększ poziom wcięcia, jeśli jest to prawy nawias klamrowy (zgodnie z definicją w v [2]), zmniejsz poziom wcięcia .
źródło
C,
114121Niezbyt fajne, ale rozwiązanie ... pusta linia może pojawić się przed / po w zależności od tego, czy dane wejściowe zaczynają się / kończą nawiasami.
Dzięki nowym ograniczeniom takie podejście jest prawie bezużyteczne do gry w golfa.
źródło