Niektóre dwuwymiarowe esolangi, takie jak Forked , i niektóre inne niż esolangi, takie jak Python , mogą czasem wymagać spacji przed wierszami kodu. To nie jest bardzo golfowe. Poza tym jestem leniwy i piszę język 2d, który wymaga dużo spacji przed kodem. Twoim zadaniem jest napisanie narzędzia, które uczyni te języki golfistami.
Oczywiście nie będzie to idealne; nie można go użyć na przykład, gdy liczba jest pierwszym znakiem w linii źródła. Jednak na ogół przyda się.
Wyzwanie
Napisz program lub funkcję, która albo ...
- ... pobiera jeden argument, nazwę pliku lub ciąg znaków, lub ...
- ... odczytuje ze standardowego wejścia.
Twój program będzie działał tak cat
, z wyjątkiem:
- Jeśli pierwszym znakiem w dowolnym wierszu jest liczba, kod wypisze x spacji, gdzie x to ta liczba.
- W przeciwnym razie zostanie po prostu wydrukowany.
- Podobnie jak każdy inny znak na wejściu.
Przypadki testowe
Wejście:
foo bar foo bar
1foo bar foo bar foo bar
2foo bar foo bar foo bar foo bar
Wynik:
foo bar foo bar
foo bar foo bar foo bar
foo bar foo bar foo bar foo bar
Wejście:
--------v
8|
8|
80
8,
7&
Wynik:
--------v
|
|
0
,
&
Wejście:
foo bar
bar foo
foo bar
Wynik:
foo bar
bar foo
foo bar
Wejście:
0123456789
1234567890
2345678901
3456789012
4567890123
Wynik:
123456789
234567890
345678901
456789012
567890123
Zasady
- Dane wyjściowe muszą być dokładnie takie same jak dane wejściowe, z wyjątkiem wierszy, w których pierwszy znak jest liczbą.
- Twój program nie może dodawać / dodawać niczego do pliku, z wyjątkiem jednej nowej linii, jeśli chcesz.
- Twój program może nie przyjmować żadnych założeń dotyczących danych wejściowych. Może zawierać puste linie, bez cyfr, znaków Unicode, cokolwiek.
- Jeśli liczba składająca się z więcej niż jednej cyfry rozpoczyna wiersz (np.
523abcdefg
), Tylko pierwsza cyfra (w przykładzie 5) powinna zamienić się w spacje.
Zwycięzca
Wygrywa najkrótszy kod w każdym języku. Baw się dobrze i powodzenia!
code-golf
number
whitespace
MD XF
źródło
źródło
Of course, this will not be perfect; it cannot be used, for instance, when a number is the first character on a line of source.
Nieprawda, po prostuOdpowiedzi:
Siatkówka , 9 bajtów
Wypróbuj online! Uwaga: końcowe miejsce w ostatniej linii.
źródło
Sześciennie , 69 bajtów
Wypróbuj online!
Wyjaśnienie:
Najpierw wykonujemy tę inicjalizację:
Aby skonfigurować tę kostkę:
Najważniejszą rzeczą w tym sześcianie jest to, że
5
sumy twarzy wynoszą 32, czyli wartość wymagana do drukowania spacji. Przypadkowo okazuje się, że jest dość krótki dla wszystkich innych obliczeń. Po zakończeniu:źródło
Łuska ,
1513 bajtów-2 bajty dzięki @Zgarb
Wypróbuj online!
Używa tej samej techniki, co @Jathanathan Allan
Wyjaśnienie
źródło
Γ
.JavaScript (ES8),
3837 bajtówNie sądzę, że można to znacznie poprawić.Oszczędność 1 bajtu dzięki Shaggy - użyj funkcji ES8.
źródło
padEnd
taki sposób:s=>s.replace(/^\d/gm,m=>"".padEnd(m))
Python 2 ,
98746765 bajtów-24 bajty dzięki Jonathanowi Allanowi. -7 bajtów dzięki Mr. Xcoder.
Wypróbuj online!
Pobiera dane wejściowe do pliku o nazwie
f
.źródło
open
; kod oczekuje pliku o nazwie „f”. Myślę, że jest ok?' '*0
falsey. Używanie[:1]
wciąż jest jednak możliwe. Nie potrzebaread
mi wierzyć (i byłobyreadlines
) ponieważ domyślnym zachowaniemopen
jest iterację wierszami. Nie ma też potrzeby korzystania z tego trybu, ponieważ'r'
jest on domyślny. Jeśli mam rację, to 73 !Rubinowy ,
2421 + 1 =2522 bajtówUżywa
-p
flagi. -3 bajty z GB.Wypróbuj online!
źródło
%p
na końcu zamiast%""
. Dzięki za pomoc!05AB1E , 10 bajtów
Wypróbuj online!
źródło
|vy¬dićú},
działa dla 10 bajtów.|
działania. Powinno tak byćpush the rest of input as an array with strings
, ale zatrzymuje się na pustych liniach ( TIO ). Przyniosłem to się w czacie 05AB1E jeśli chcesz wiedzieć więcej.Python 3 , 95 bajtów
Wypróbuj online!
-4 bajty poprzez kradzież wyrażenia regularnego z ThePirateBay
źródło
Galaretka , 19 bajtów
Monadyczny link pobierający i zwracający listy znaków lub pełny program drukujący wynik.
Wypróbuj online!
W jaki sposób?
źródło
beheaded line
Czy to jest prawdziwy termin? xDPerl 5 , 13 + 1 (-p) = 14 bajtów
Wypróbuj online!
źródło
Haskell , 63 bajty
Wypróbuj online! Pierwszy wiersz jest anonimową funkcją, która dzieli dany ciąg na linie, stosuje funkcję
g
do każdej linii i łączy wynikowe linie z nowymi liniami. Wg
nim sprawdzane jest, czy pierwszym znakiemx
linii jest cyfra. W takim przypadku['1'..x]
zwraca ciąg o długości równej wartości cyfryx
i' '<$
konwertuje ciąg na tyle spacji. W końcur
dołączana jest reszta wiersza . Jeślix
nie jest cyfrą, jesteśmy w drugim równaniug s=s
i zwracamy linię niezmodyfikowaną.źródło
Python 2 ,
76 7268 bajtów-4 bajty dzięki @ovs !
@DeadPossum zasugerował przejście na Python 2, który również oszczędził 4 bajty.
Pomyślałem, że miło jest mieć pełny program konkurencyjny w Pythonie 2, który nie sprawdza wprost, czy pierwszy znak jest cyfrą. Odczytuje dane wejściowe z pliku
f
.Wypróbuj online! (dzięki uprzejmości @ovs )
źródło
print
da ci 68 bajtówJava 8 ,
105999793 bajtówZaoszczędził jeszcze kilka bajtów dzięki sugestii Nevaya,
źródło
s->{int i=s.charAt(0);if(i>47&i<58)for(s=s.substring(1);i-->48;s=" "+s);System.out.print(s);}
(93 bajtów).R ,
138128 bajtów-9 bajtów dzięki CriminallyVulgar
Jest to dość złe, ale teraz jest trochę lepiej ... R jest znowu okropny dla strun.
Wypróbuj online!
źródło
Japt (v2.0a0),
1110 bajtówJapt pokonujesz Jelly i 05AB1E? To nie wydaje się właściwe!
Sprawdź to
Wyjaśnienie
Niejawne wprowadzanie ciągu
U
Użyj Regex replace (
r
) wszystkich wystąpień cyfry na początku linii (m
jest to flaga wielowierszowa -g
flaga jest domyślnie włączona w Japt).Przekaż każde dopasowanie przez funkcję, gdzie
Z
jest bieżący element.Operator przyrostka Postfiksa (
++
). KonwertujeZ
to na liczbę całkowitą bez zwiększania jej dla następnej operacji.Powtórz znak spacji
Z
times.Niejawnie wyprowadza wynikowy ciąg.
źródło
m@
skrócić?m
here is the multi-line flag for the regex, not the map method.r/^\d/m_î
(orr/^\d/m_ç
) would be 2 bytes shorter butZ
is a string so, unfortunately, it wouldn't work.r/^\d/m_°ç
, for a 1 byte saving, does work, though :)°ç
to niesamowita sztuczka :-) Zasugerowałbym tylko\d
dla wyrażenia regularnego, ale to pomija flagę ... być może powinienem dodać obsługę flag dla wyrażeń regularnych jednej klasy, na przykład\dm
(o tak, i to^
też pomija ...)/
opcjonalnym w RegExes?Galaretka , 19 bajtów
Wypróbuj online!
-5 bajtów ogółem dzięki komentarzom Jonathan Allan i patrząc na jego post
Wyjaśnienie
źródło
Ḣ⁶ẋ;
;0Ḣ
działałby na jeden bajt, może jest jeden atom, też próbowałem¹
, nie ma radościḣ1ẇØD
działa dla tego samego bajtu \ o /ṚṪ
zadziała :)Pyth ,
1615 bajtówWypróbuj online!
Wyjaśnienie
Weźmy przykład, który powinien być łatwiejszy do przetworzenia. Powiedz, że nasz wkład to:
Powyższy program wykona następujące czynności:
.z
- Czyta wszystko i dzieli je według nowych linii, więc otrzymujemy['foo bar foo bar', '1foo bar foo bar foo bar', '2foo bar foo bar foo bar foo bar']
.Otrzymujemy pierwszy znak każda: a
['f', '1', '2']
.If it is convertible to an integer, we repeat a space that integer times and add the rest of the String. Else, we just place the whole String. Hence, we have
['foo bar foo bar', ' foo bar foo bar foo bar', ' foo bar foo bar foo bar foo bar']
.Finally, we join by newlines, so our result is:
źródło
Sześciennie , 82 bajty
Uwaga: To nie zadziała w TIO . Aby to przetestować, użyj interpretera Lua z flagą eksperymentalną ustawioną na true (aby włączyć warunki warunkowe). Obecnie występuje błąd dotyczący bloków warunkowych w interpretatorze TIO. Podczas korzystania z tłumacza tio należy wymienić
?6!
z!6
i&6
z?6&
, który zlicza bajt samo.To nie jest tak krótkie jak druga odpowiedź Cubically, ale pomyślałem, że i tak spróbuję: D
źródło
)
jumps to the most recent(
rather than the matching one I believe. EDIT: I'm in the chat.><>, 60 bytes
Try it online!
How It Works:
źródło
V, 9 bytes
Try it online!
Explanation
źródło
Gema, 21 characters
Sample run:
źródło
PHP, 83 chars
źródło
$s
arg or populate it with the input. And it doesn't print anythingargv
acceptable?argv
is the command line args, then yes.