Ihre Aufgabe ist es, eine Zeichenfolge und eine Zahl einzugeben und die Zeichenfolge nach rechts auszurichten, sodass die Breite des Texts der Zahl entspricht. Wenn eine Zeile zu lang ist, brechen Sie sie und setzen Sie den Rest in die nächste Zeile. Wiederholen Sie dies, bis es nicht mehr erforderlich ist. Wenn eine Linie kürzer als die Breite ist, füllen Sie sie mit Leerzeichen auf. Mehrere Zeilenumbrüche können vorkommen und sollten wie jedes andere einzelne Zeichen behandelt werden.
Zum Beispiel die Zeichenfolge
Programming
Puzzles
&
Code
Golf
und die Zahl 5
würde ergeben:
Progr
ammin
g
Puzzl
es
&
Code
Golf
Während die gleiche Zeichenfolge und die Zahl 10
erzeugen würde:
Programmin
g
Puzzles
&
Code
Golf
Die Saite
a
b
und die Nummer 5 würde ergeben:
a
<-- note the 5 spaces
b
Kürzester Code gewinnt!
Programming Puzzles\n&\nCode Golf
.Antworten:
Pyth, 14 Bytes
Demonstration
Verwendet den Pad-Operator von Pyth.
quelle
Python 2, 84
Nimmt als Eingabe eine Zeichenfolge mit Zeilenumbrüchen und einer Zahl und druckt das Ergebnis.
n
Nimmt und druckt für jede Zeile in der Eingabe Zeichen auf einmal. Verwenden Sie dabei die integrierte Funktionrjust
, um die linke Seite vor dem Drucken mit Leerzeichen zu füllen.Ich habe die leere Zeile mit dem Hack behoben
w=w or' '
. Es gibt wahrscheinlich eine bessere Methode, aber ich werde nicht viel darüber nachdenken.quelle
CJam, 21 Bytes
Vielen Dank an @ Sp3000 für das Abschlagen von 1 Byte und den Weg für 3 weitere.
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
Pyth, 16
Probieren Sie es hier online aus
Erläuterung
quelle
Perl, 39 Bytes
36 Bytes + 3 Bytes für
-ni
. Die Umbruchbreite wird als Argument an übergeben-i
.Behandelt Leerzeilen ordnungsgemäß, indem Leerzeichen eingefügt werden:
Wie es funktioniert
Diese Lösung verwendet den Substitutionsoperator, um die Eingabe zu durchlaufen und ein Byte über der entsprechenden
for
Schleife zu speichern . Der eigentliche Trick liegt jedoch in der Regex auf der linken Seite der Substitution:Mit dem globalen Modifikator werden die
$^I
Zeichen gleichzeitig abgeglichen. Wenn weniger als$^I
Zeichen in der Zeichenfolge verbleiben, wird alles bis zum Ende übereinstimmen. Der Wechsel mit^$
ist erforderlich, um Leerzeilen zu verarbeiten. Beispielsweise:Die RHS der Ersetzung wird einfach verwendet,
printf
um den übereinstimmenden Block mit Leerzeichen zu füllen.quelle
$^I
!Javascript (ES6), 107
Ich wünschte, JS hätte eine eingebaute Pad-Funktion. Naja.
Erläuterung:
quelle
Julia, 126 Bytes
Ungolfed:
quelle
Bash,
62,61+ Feature, 59Kürzere, wenn
N
vom Anrufer festgelegt werden kann, anstatt es als erste Eingabezeile lesen zu müssen.Dies kann leere Zeilen in der Eingabe nicht verarbeiten. Andernfalls werden die Eingabedaten weder einer Wortteilung noch einer Pfadnamenerweiterung unterzogen, noch werden sie auf andere Weise als mehr als nur Rohdaten behandelt.
read -n$N
Speichert ein Zeichen, lässt aberread
munge\
.Das
[[ $r ]]&&
wird benötigt, weilread -n4
ich nicht voraussehen kann, ob das nächste Zeichen ein Zeilenumbruch ist. Es wird alsor
eine Zeichenfolge mit 4 Zeichen festgelegt, und beim nächsten Lesevorgang wird eine leere Zeichenfolge mit 0 Zeichen erstellt. Das Filtern dieser falschen Zeilenumbrüche ohne das Filtern von echten Zeilenumbrüchen würde den Verfolgungsstatus erfordern: ob die vorherige Zeile die maximale Länge hatte oder nicht. Es wäre entweder mehr Code oder ein völlig anderer Ansatz erforderlich.[[ $r ]]
ist kürzer als[ -n "$r" ]
erforderlich, um Fehler zu vermeiden, wenn die Zeile mit-z foo
oder*
oder etwas beginnt , wenn Sie verwendet haben[ $r ]
.Die Ausrichtung erfolgt mit der Standard-Formatzeichenfolge printf "% 4s".
Testen Sie mit
quelle
-r
in die Byteanzahl einbeziehen. 2.f()(while ... done)
ist etwas kürzer.[[ $r ]]&&
, wenn N = 4, erzeugt eine Eingabezeile der Länge 4 eine leere Ausgabezeile, wo vorher keine war. Daread
kehrt eine Kette von 4 Zeichen, dann sieht eine neue Zeile auf den nächsten Anruf und sofort kehrt zurück. Danke auch für den()
Tipp. Ich wusste nicht, dass Sie FNS so definieren können.while
es bereits zusammengesetzt ist, brauchen Sie nicht einmal die Klammern:f()while ... done
Haskell, 108 Bytes
Anwendungsbeispiel:
Wie es funktioniert
quelle
GNU awk + bash, 70
Die Verwendung von bash zum Einfügen der Zählung in das awk-Programm ist wahrscheinlich. kleiner als das Lesen mit einem
NR==1{N=$0}
Block.Lesen Sie jeweils eine Zeile. Mit FPAT in maximal 4 Zeichenblöcke aufteilen. (Entspricht den Feldern und nicht den Trennzeichen. GNU-Erweiterung.) printf jedes Feld separat. (Standard ORS = \ n).
Die
/^$/
Regel besteht darin, leere Zeilen zu drucken, die NF = 0 haben und daher im anderen Block überhaupt nicht gedruckt werden. Im Gegensatz zu meiner reinen Bash-Lösung funktioniert dies also im allgemeinen Fall.Semi-unabhängig, aber meine Idee für Perl ist 112 Zeichen für nur den Perl-Code:
Dies frisst eine der Zeilenumbrüche und ist viel zu lang.
$/=\1
Liest jeweils ein Byte. Wir hängen an $ l an. Wahrscheinlich wäre eine Zeile zu einer Zeit mit einem Split-Ansatz mit fester Breite kürzer.quelle
Bash + GNU-Utils, 41
String wird über STDIN eingegeben, width wird über das Kommandozeilenargument eingegeben:
quelle
Python 2, 151 Bytes
Dies ist eine Anpassung von @ xnors Antwort oben, da er mit Zeilenumbrüchen nicht richtig umgeht.
Die
for
Schleife wurde geändert von:zu:
Beispiel
quelle
C # 143 Bytes
Mit Linq können Sie ziemlich knorrige Ausdrücke machen.
GroupBy
ist hier nützlich, aber es ist eine Schande, dass sie keine Funktionsüberladungen erzeugen konnten, die den Index übernehmen.Weisen Sie das Lambda einem
Func<string, int, string>
zu, um es auszuführenWeniger golfen:
quelle
Groovy, 63 Bytes
Gibt die korrekt zugewiesene Zeichenfolge zurück. Wusste bis jetzt nicht, dass es eine Funktion padLeft (und padRight, padCenter) gibt.
quelle
JavaScript
174136quelle
Ceylon, 107
quelle
Matlab, 99 Bytes
Vielen Dank an @beaker für das Entfernen von 6 Bytes!
Verwendung und anonyme Funktion:
Definieren Sie die Funktion und verwenden Sie
ans
, um sie aufzurufen:quelle
Burlesque, 28 Bytes
Entspricht der folgenden Version, behandelt jedoch Zeile 1 als Zahl und die anderen Zeilen als Zeichenfolge.
Verwendung wie in:
Alte Version (16 Bytes):
Beispiel:
quelle