Niektóre osoby upierają się przy użyciu spacji do tabel i wcięć.
W przypadku tabeli jest to bezsprzecznie złe. Z definicji tabulatory muszą być używane do tworzenia tabel.
Nawet w przypadku wcięć tabulatory są obiektywnie lepsze:
Społeczność Stack Exchange ma wyraźny konsensus .
Używanie pojedynczej przestrzeni do wcięcia jest wizualnie nieprzyjemne; używanie więcej niż jednego jest marnotrawstwem.
Ponieważ wszystkie cod
e golfowychers wiedzieć, programy powinny być jak najkrótsze. Nie tylko oszczędza miejsce na dysku twardym, ale także skraca czas kompilacji, jeśli trzeba przetworzyć mniej bajtów.Dostosowując szerokość zakładki 1 , ten sam plik wygląda inaczej na każdym komputerze, dzięki czemu każdy może użyć swojej ulubionej szerokości wcięcia bez modyfikowania rzeczywistego pliku.
Wszystkie dobre edytory tekstu domyślnie używają tabulatorów (i definicji).
Mówię tak i zawsze mam rację!
Niestety nie wszyscy słuchają rozsądku. Ktoś wysłał ci plik, który robi to źle TM i musisz go naprawić. Możesz to zrobić ręcznie, ale będą też inne.
Na tyle źle, że spacery marnują Twój cenny czas, więc decydujesz się napisać możliwie najkrótszy program, aby zająć się problemem.
Zadanie
Napisz program lub funkcję, która wykonuje następujące czynności:
Odczytaj pojedynczy ciąg znaków ze STDIN lub jako argument wiersza polecenia lub funkcji.
Zidentyfikuj wszystkie lokalizacje, w których spacje zostały użyte do tworzenia tabel lub wcięć.
Ciąg spacji jest wcięciem, jeśli występuje na początku linii.
Ciąg dwóch lub więcej spacji jest tabelą, jeśli nie jest wcięciem.
Pojedynczy przestrzeń, która nie jest wcięcie może być lub nie zostały wykorzystane na zestawianiu. Zgodnie z oczekiwaniami, gdy używasz tej samej postaci do różnych celów, nie ma łatwego sposobu, aby powiedzieć. Dlatego powiemy, że przestrzeń została wykorzystana do zamieszania .
Określ najdłuższą możliwą szerokość tabulatora 1, dla której wszystkie spacje używane do tabulacji lub wcięcia można zastąpić tabulatorami, bez zmiany wyglądu pliku.
Jeśli dane wejściowe nie zawierają tabulacji ani wcięcia, nie można określić szerokości tabulacji. W takim przypadku pomiń następny krok.
Używając wcześniej określonej szerokości tabulacji, zamień wszystkie spacje używane do tabelowania lub wcięcia na tabulatory.
Ponadto, o ile to możliwe, bez zmiany wyglądu pliku, zamień wszystkie spacje używane do pomyłek na tabulatory. (W razie wątpliwości pozbądź się spacji).
Zwróć zmodyfikowany ciąg z funkcji lub wydrukuj go do STDOUT.
Przykłady
Wszystkie spacje z
a bc def ghij
są tabelaryczne.
Każdy ciąg spacji dopełnia poprzedzający ciąg znaków spacji do szerokości 5, więc poprawna szerokość tabulacji wynosi 5, a poprawne wyjście 2 to
a--->bc-->def->ghij
Pierwsze dwie spacje z
ab cde f ghi jk lm
to tabulacja, inne zamieszanie.
Prawidłowa szerokość zakładki wynosi 4, więc poprawna wartość wyjściowa 2 to
ab->cde>f ghi>jk lm
Ostatnia spacja pozostaje nietknięta, ponieważ byłaby renderowana jako dwie spacje, gdyby została zastąpiona tabulatorem:
ab->cde>f ghi>jk->lm
Wszystkie oprócz jednego miejsca
int main( ) { puts("TABS!"); }
są wcięcia, drugie to zamieszanie.
Poziomy wcięcia wynoszą 0, 4 i 8 spacji, więc poprawna szerokość tabulacji wynosi 4, a poprawna wartość wyjściowa 2 to
int --->main( ) --->{ --->--->puts("TABS!"); --->}
Spacja w
( )
byłaby renderowana jako trzy spacje, gdyby została zastąpiona tabulatorem, więc pozostaje nietknięta.Pierwsze dwie spacje z
x yz w
są wcięcia, inne zamieszanie.
Prawidłowa szerokość zakładki wynosi 2, a poprawna wartość wyjściowa 2 to
->x>yz w
Ostatnia spacja byłaby renderowana jako dwie spacje, gdyby została zastąpiona tabulatorem, więc pozostaje nietknięta.
Pierwsze dwie spacje z
xy zw
są wcięcia, pozostałe trzy to tabulacje.
Tylko szerokość tabulatora 1 pozwala wyeliminować wszystkie spacje, więc poprawne wyjście 2 to
>>xy>>>zw
Wszystkie spacje z
a b c d
są zamieszaniem.
Nie ma najdłuższej możliwej szerokości tabulacji, więc poprawne wyjście 2 to
a b c d
Dodatkowe zasady
Dane wejściowe będą składały się wyłącznie z drukowalnych znaków ASCII i linii.
Możesz założyć, że w wierszu jest maksymalnie 100 wierszy tekstu i maksymalnie 100 znaków.
Jeśli wybierzesz STDOUT jako wyjście, możesz wydrukować jedno końcowe podawanie linii.
Obowiązują standardowe zasady gry w golfa .
1 Szerokość tabulacji jest definiowana jako odległość w znakach między dwoma kolejnymi tabulatorami przy użyciu czcionki o stałej szerokości .
2 Strzałki graficzne ASCII przedstawiają tabulatory Stack Exchange odmawia poprawnego renderowania, dla którego przesłałem raport o błędzie. Rzeczywiste wyjście musi zawierać rzeczywiste tabulatory.
programs should be as short as possible
Wydaje mi się, że znalazłem dawno zaginionego brata Artura Whitneya !!