Twoim zadaniem jest pobrać ciąg znaków i liczbę i wyrównać ciąg po prawej stronie, dzięki czemu szerokość tekstu będzie liczbą. Gdy linia jest za długa, przełam ją i umieść resztę w następnej linii, powtarzając, aż nie będzie to konieczne. Jeśli linia jest krótsza niż szerokość, wypełnij ją spacjami. Może wystąpić wiele nowych linii i należy je traktować jak każdy inny pojedynczy znak.
Na przykład ciąg
Programming
Puzzles
&
Code
Golf
a liczba 5
wytworzyłaby:
Progr
ammin
g
Puzzl
es
&
Code
Golf
Podczas gdy ten sam ciąg i liczba 10
spowodowałyby:
Programmin
g
Puzzles
&
Code
Golf
Ciąg
a
b
a liczba 5 dałaby:
a
<-- note the 5 spaces
b
Najkrótszy kod wygrywa!
Programming Puzzles\n&\nCode Golf
?Odpowiedzi:
Pyth, 14 bajtów
Demonstracja
Używa operatora pada Pytha.
źródło
Python 2, 84
Pobiera na wejściu ciąg znaków z nowymi liniami i liczbą i wypisuje wynik. Dla każdej linii na wejściu pobiera i drukuje
n
znaki za jednym razem, korzystając z wbudowanej opcji,rjust
aby wypełnić lewą spacją przed drukowaniem.Naprawiłem pustą skrzynkę z linkiem przy użyciu hacka
w=w or' '
. Prawdopodobnie jest lepsza metoda, ale nie zamierzam o niej dużo myśleć.źródło
CJam, 21 bajtów
Dzięki @ Sp3000 za grę w golfa z 1 bajtem i torowanie drogi dla 3 kolejnych.
Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło
Pyth, 16 lat
Wypróbuj online tutaj
Wyjaśnienie
źródło
Perl, 39 bajtów
36 bajtów + 3 bajty dla
-ni
. Szerokość zawijania jest przekazywana jako argument do-i
.Prawidłowo obsługuje puste linie, wypełniając je spacjami:
Jak to działa
W tym rozwiązaniu operator zamiany używa pętli do wprowadzania danych, oszczędzając bajt w równoważnej
for
pętli. Prawdziwa sztuczka polega jednak na wyrażeniu regularnym LHS podstawienia:W przypadku globalnego modyfikatora dopasuje on
$^I
znaki jednocześnie; gdy$^I
w łańcuchu pozostanie mniej niż znaki, dopasuje wszystko do końca. Do^$
obsługi pustych wierszy wymagana jest zmiana z . Na przykład:RHS substytucji po prostu wykorzystuje
printf
lewy pad do dopasowanego fragmentu ze spacjami.źródło
$^I
!JavaScript (ES6), 107
Chciałbym, żeby JS miał wbudowaną funkcję pada. No cóż.
Wyjaśnienie:
źródło
Julia, 126 bajtów
Nie golfowany:
źródło
Bash,
62,61+ funkcja, 59Krótszy, jeśli
N
dzwoniący może go ustawić, zamiast czytać go jako pierwszy wiersz wprowadzania.To nie obsługuje pustych linii na wejściu. W przeciwnym razie nie spowoduje to podziału danych wejściowych na dzielenie słów, rozwijanie nazw ścieżek ani w żaden inny sposób nie potraktuje ich jako więcej niż surowych danych.
read -n$N
ratuje jedną postać, ale pozwalaread
munge\
.Jest
[[ $r ]]&&
to potrzebne, ponieważread -n4
nie mogę się doczekać, aby zobaczyć, że następny znak jest nową linią. Więc ustawiar
na 4-znakowy ciąg, a następny odczyt tworzy pusty ciąg o zerowym znaku. Filtrowanie tych fałszywych nowych linii bez filtrowania prawdziwych nowych linii wymagałoby stanu śledzenia: czy poprzednia linia miała maksymalną długość, czy nie. Potrzebny byłby więcej kodu lub zupełnie inne podejście.[[ $r ]]
jest krótszy niż[ -n "$r" ]
jest to konieczne, aby uniknąć błędów, jeśli linia zaczyna się od-z foo
, jest*
lub jest czymś, jeśli użyłeś[ $r ]
.Występuje uzasadnienie ze standardowym ciągiem formatu „% 4s” printf.
Przetestuj za pomocą
źródło
-r
w liczbie bajtów. 2.f()(while ... done)
jest nieco krótszy.[[ $r ]]&&
, jeśli N = 4, linia wejściowa o długości 4 wytworzy pustą linię wyjściową, w której wcześniej jej nie było. Ponieważread
zwraca ciąg 4 znaków, następnie widzi nową linię przy następnym wywołaniu i natychmiast wraca. Dziękuję również za()
wskazówkę. Nie wiedziałem, że możesz w ten sposób zdefiniować fns.while
jest już złożony, nie potrzebujesz nawet nawiasów:f()while ... done
Haskell, 108 bajtów
Przykład użycia:
Jak to działa
źródło
GNU awk + bash, 70
Używanie bash do umieszczania licznika w programie awk to prob. mniejszy niż czytanie za pomocą
NR==1{N=$0}
bloku.Czytaj linię na raz. Podziel na maksymalnie 4 części, używając FPAT. (dopasowuje pola, a nie separatory. Rozszerzenie GNU.) printf każde pole osobno. (Domyślne ORS = \ n).
/^$/
Reguła ma drukować pustych wierszy, które mają NF = 0, a zatem nie drukuje w ogóle w innym bloku. W przeciwieństwie do mojego rozwiązania typu pure-bash, tak naprawdę działa to w ogólnym przypadku.Częściowo niepowiązane, ale jak dotąd mój pomysł na perla to 112 znaków tylko dla kodu perla:
To zjada jedną z nowych linii i jest zdecydowanie za długie.
$/=\1
odczytuje bajt na raz. Dołączamy do $ l. Prawdopodobnie linia po linii z podziałem na ustaloną szerokość byłaby krótsza.źródło
Narzędzia Bash + GNU, 41
Łańcuch jest wprowadzany przez STDIN, szerokość jest wprowadzana przez arg wiersza poleceń:
źródło
Python 2, 151 bajtów
Jest to adaptacja powyższej odpowiedzi @ xnor, ponieważ jego nie obsługuje poprawnie nowych linii.
for
Pętla została zmieniona z:do:
Przykład
źródło
C #, 143 bajty
Linq pozwala tworzyć dość surowe wyrażenia.
GroupBy
przydaje się tutaj, ale szkoda, że nie mogli stworzyć przeciążenia funkcji biorąc indeks.Przypisz lambda do a,
Func<string, int, string>
aby go uruchomićMniej golfa:
źródło
Groovy, 63 bajty
Zwraca poprawnie wyrównany ciąg. Nie wiedziałem, że do tej pory była funkcja padLeft (i padRight, padCenter).
źródło
JavaScript
174136źródło
Ceylon, 107
źródło
Matlab, 99 bajtów
Dzięki @beaker za usunięcie 6 bajtów!
Korzystanie i anonimowa funkcja:
Zdefiniuj funkcję i użyj,
ans
aby ją wywołać:źródło
Burleska, 28 bajtów
Taka sama jak w poniższej wersji, ale traktuje linię 1 jako liczbę, a pozostałe linie jako ciąg.
Zastosowanie jak w:
Stara wersja (16 bajtów):
Przykład:
źródło