(Hinweis: Dies ist meine allererste Code-Golf-Frage, aber soweit ich das beurteilen kann, hat niemand anderes genau das getan, also sollte ich gut sein.)
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die eine Zeichenfolge s
und eine Ganzzahl enthältn
und den in mehrere Zeilen eingeschlossenen Text zurückgibt oder ausgibt. Jedes Wort muss vollständig in einer Zeile stehen. dh keine Wörter in der Mitte geteilt. Jede Zeile darf nicht länger als n
Zeichen sein, und Sie müssen so viele Wörter wie möglich in jede Zeile einfügen.
Beispiel:
s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget erat lectus. Morbi mi mi, fringilla sed suscipit ullamcorper, tristique at mauris. Morbi non commodo nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at iaculis mauris. Praesent a sem augue. Nulla lectus sapien, auctor nec pharetra eu, tincidunt ac diam. Sed ligula arcu, aliquam quis velit aliquam, dictum varius erat."
n = 50
output:
Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Sed eget erat lectus. Morbi mi mi, fringilla
sed suscipit ullamcorper, tristique at mauris.
Morbi non commodo nibh. Pellentesque habitant
morbi tristique senectus et netus et malesuada
fames ac turpis egestas. Sed at iaculis mauris.
Praesent a sem augue. Nulla lectus sapien, auctor
nec pharetra eu, tincidunt ac diam. Sed ligula
arcu, aliquam quis velit aliquam, dictum varius
erat.
Ihre Ausgabe kann ein Array von Zeichenfolgen oder eine einzelne Zeichenfolge mit Zeilenumbrüchen sein. Sie können auch davon ausgehen, dass keine Wörter länger sind alsn
, machen Sie sich also keine Sorgen um seltsame Fälle.
Es gelten Standard-E / A-Regeln, und Standard-Regelungslücken sind nicht zulässig. Nachgestellte Leerzeichen sind erlaubt.
Da dies Code-Golf ist , gewinnt die Shortes-Lösung in Bytes.
Hier ist ein Beispielprogramm in Python, das funktionieren würde.
quelle
n
ist die maximale Zeilenlänge, sorry dass das nicht klar war. Ich werde klären. Außerdem wurden die Regeln jetzt aktualisiert, sodass eine einfache Aufteilung nicht funktioniert.Antworten:
Python 2 , 26 Bytes
Probieren Sie es online!
Meh ... Built-Ins sind langweilig ... stattdessen haben Sie eine schöne 87-Byte-Lösung hier:
Probieren Sie es online!
Gibt nachfolgende Leerzeichen aus.
quelle
PHP , 8 Bytes
Zugegeben, nicht die originellste Lösung, aber PHP hat eine native Funktion, die perfekt zu Ihren Anforderungen passt!
wordwrap
:Verwenden Sie wie folgt:
Oder versuchen Sie es online!
quelle
JavaScript (ES6),
75 7372 ByteÜbernimmt die Eingabe als
(string)(n)
.Probieren Sie es online!
Variablen
Die formatierte Ausgabe wird inO (unten in grün) gespeichert .
Die aktualisierte Zeileu ist definiert als die Verkettung von:
Wir müssen einen Zeilenumbruch einfügen, wenn dasn te Zeichen von u gesetzt ist (0-indiziert, unten rot).
Beispiel
Hinzufügen von "LOREM":00L01O02R03E04M050607080910111213141516
Hinzufügen von "IPSUM":00L01O02R03E04M05∙06ich07P08S09U10M111213141516
Hinzufügen von "DOLOR":00L01O02R03E04M05∙06ich07P08S09U10M11∙12D13O14L15O16R
quelle
r+w+' '
?Perl 6 ,
4629 BytesProbieren Sie es online!
Regex-basierte Lösung, die Input wie Curry nimmt
f(n)(s)
und eine Liste von Zeilen zurückgibt. Jede Zeile mit Ausnahme der letzten hat ein Leerzeichen am EndeErläuterung:
quelle
Vim, 15 Bytes / Tastenanschläge
Eine Frage zur Textformatierung? Ich kenne nur das Werkzeug für den Job! Und es hat sogar meinen Namen in den ersten beiden Tastenanschlägen: D
<C-r>
meint ctrl-r .Dies könnte jemals so etwas kürzer in V , aber ich ziehe in Vanille vim für Antworten zu beantworten , die wirklich zeigen , wie präzise vim für die richtige Herausforderung sein kann. Und der Unterschied ist sowieso so gering.
Dies kann auch für 15 Bytes der Fall sein:
Probieren Sie es online!
quelle
DJ:
Dieses Programm wurde von DJ gemacht, unserer Lieblingskatze mit einem Diamanten um den Hals. [...]R ,
3627 BytesR hat dies als eingebaute (
strwrap
), wir geben einen Vektor von Trennlinien zurück.Probieren Sie es online!
quelle
Haskell , 70 Bytes
quelle
Python 2 , 74 Bytes
Probieren Sie es online!
quelle
Java (JDK) ,
4644 BytesGrundsätzlich eine reine Regex-Lösung in Java, mit ziemlicher Sicherheit die kürzeste, die ich geschrieben habe.
Ein Hoch auf Kevin, der geholfen hat, die Bytes im Regex noch weiter zu reduzieren!
Probieren Sie es online!
Mit einem Curry-Lamdba wird ein regulärer Ausdruck erstellt, der gierig mit
n
Zeichen übereinstimmt, gefolgt von einem Leerzeichen oder einem Ende der Zeichenfolge. Diese Zeichen werden dann durch sich selbst ersetzt, gefolgt von einer neuen Zeile.quelle
[ $]
eigentlich nur ein Leerzeichen oder$
wenn ich mich richtig erinnere, eher als das Ende der Zeichenfolge. Es scheint jedoch zu funktionieren, so dass es so aussieht, als ob es für noch weniger Bytes auf einen einzigen Platz reduziert werden kann.$0
anstelle von verwenden$1
.replaceAll
die so wortreich ist!Mathematica, 16 Bytes
Eingebaute Funktion. Nimmt eine Zeichenfolge und eine Ganzzahl als Eingabe und gibt eine Zeichenfolge als Ausgabe zurück.
quelle
Power Shell,
4083 BytesTestfall mit
n=80
hinzugefügt.Testskript:
Ausgabe:
quelle
if
/else
mit dem gefälschten ternärenreturn
imelse
Teil und eine Anweisung imthen
Teil.C (gcc) , 68 Bytes
Probieren Sie es online!
Sparen Sie dank ceilingcat 2 Byte, indem Sie global
char*l
auf parameter verschieben.quelle
Japt , 20 Bytes
Probieren Sie es online!
Vielen Dank an Bubbler und Shaggy für ihre Hilfe
Erläuterung:
quelle
[X,Y].join(...)
.Retina 0.8.2 , 37 Bytes
Probieren Sie es online! Nimmt
s
undn
in separaten Zeilen. Erläuterung:In Unary konvertieren
n
.Passen Sie Nicht-Leerzeichen an, schauen Sie dann nach vorne
n
und zählen Sie es als$#1
. Gehen Sie dann zurück und verwenden Sie eine Bilanzgruppe, umn
Zeichen gefolgt von Leerzeichen zuzuordnen.Die Übereinstimmungen als Liste von Zeilen ausgeben.
quelle
.{1,50}
und$0¶
, aber wo50
wird stattdessen als Eingabe empfangen?Holzkohle , 19 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Übernimmt die Eingabe von
n
unds
in separaten Zeilen. Erläuterung:Eingabe
n
.Bewegen Sie den Cursor ein Feld nach links, um die Bewegung nach rechts ab der ersten Iteration der Schleife auszugleichen.
Teilen Sie die Zeichenfolge auf Leerzeichen und ziehen Sie eine Schleife über die Wörter.
Berechnen Sie, ob das nächste Wort die rechte Kante erreicht.
Wenn dies nicht der Fall ist, bewegen Sie sich ein Feld nach rechts.
Wenn dies der Fall ist, wird eine neue Zeile gestartet.
Gib das Wort aus.
quelle
Rot ,
125, 117, 114,112 BytesProbieren Sie es online!
quelle
05AB1E , 18 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
Java 8, 135 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
JavaScript, 40 Bytes
Probieren Sie es online!
quelle
APL (Dyalog Unicode) , 14 Byte SBCS
Infix-Funktion; linkes Argument ist
n
, rechtes Argument istn
.Probieren Sie es online!
⎕CY
c op y in der dfns-bibliothek⋄
dannwrap
[c] benutze die wrap [n] Funktion[c] Code dieser Funktion
[n] Notizen für diese Funktion
Golf-Version von
wrap
59 Bytes SBCSProbieren Sie es online!
{
…}
Dfn;⍺
ist linkes Argument (Breite),⍵
ist rechtes Argument (Zeichenkette)≢⍵
Tally (Anzahl der Zeichen) der Zeichenfolge⍺≥
…:
Wenn die Breite größer oder gleich ist, dann:⍵
Gib den String zurück⋄
Andernfalls:' '=⍵
Boolesche Maske, bei der Leerzeichen der Zeichenfolge entsprechenb←
Speichern inb
(für B Lanks)(
…)↑
Entnehmen Sie daraus folgende Anzahl von Elementen:⍺+1
einer mehr als die Breite⍸
Ich erkenne, wo wahrg←
store ing
(für g aps)⍺≥
Boolesche Maske, bei der die Breite größer oder gleich dieser istg/⍨
filtern Sie die Lückenindizes danach⍺,
Hänge das an die Breite an⊃⌽
wähle das letzte Element davon (wähle das erste der umgekehrten)t←
Speichern int
(für t ake)b⊃⍨
Verwenden Sie dies, um ein Element aus der Maske von b Lanks auszuwählent+
füge das hinzut
⍵↓⍨
lösche so viele Zeichen aus der Zeichenkette⍺∇
Verwenden Sie dazu dasselbe Argument für left left⎕TC,
append , daß zu der Liste der T erminal c ontrol Zeichen (8: HT, 10: NL, 13: CR)2↓
Löschen Sie die ersten beiden Zeichen (lassen Sie nur eine führende 13: CR übrig)(
…),
Hängen Sie das an:t↑⍵
die erstent
Zeichen der Zeichenfolgequelle
Dank @Erik the Outgolfer, einer Golfversion:
Python 3 , 94 Bytes
Probieren Sie es online!
# Python 3 , 130 BytesProbieren Sie es online!
Nicht so Golf Version ...quelle
JavaScript + HTML + CSS,
11764 Byte-53 Bytes mit freundlicher Genehmigung von @Neil
quelle
(n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>`
74 Bytes reduzieren . Wenn Sie alte Versionen von Firefox ausgraben möchten, können Sie weitere 8 Bytes mit speichern(n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>`
.ch
Einheiten. Firefox 65 berechnet50ch
als500px
; Chromium 70 berechnet50ch
als400px
elit. Sed eget erat lectus. Morbi mi mi, fringilla sed
(2. Zeile) besteht aus mehr als 50 Zeichen. Ich verwende das neueste Chrome.<p>
die<tt>
.Gelee , 12 Bytes
Probieren Sie es online!
Leider ist dies zu langsam, um für den bereitgestellten Testfall in weniger als einer Minute über TIO zu funktionieren.
quelle
C # (.NET Core) , 162 Byte
Diese Funktion verwendet einen regulären Ausdruck, der mit dem nächstgelegenen Leerzeichen in der Nähe des n-ten oder vielfachen des n-ten Zeichens übereinstimmt und die darauf basierende Zeichenfolge aufteilt.
Probieren Sie es online!
Die TIO-Verknüpfung ist ein vollständiges Programm, und die Funktion verfügt über ein statisches Schlüsselwort, sodass die Funktion von main aus aufgerufen werden kann.
Testen Sie Regex
quelle
C # (Visual C # Interactive Compiler) , 78 Byte
Probieren Sie es online!
Dank geht an @LukeStevens für die Entwicklung der Java-Version ... Anscheinend lässt .NET Sie die importieren
RegularExpressions
Namespace , um ein Ersetzen durchzuführen :(Hier ist meine ursprüngliche Version, die das Leerzeichen aufteilt und mithilfe von LINQ wieder zusammenfügt:
C # (Visual C # Interactive Compiler) , 91 Byte
Probieren Sie es online!
quelle
Dart , 112 Bytes
Probieren Sie es online!
quelle
APL (NARS), 48 Zeichen, 96 Byte
Prüfung:
quelle
C 63 Bytes
Die Funktion dieser Übung b (a, n) würde, wie gesagt, die Zeile "a" unterbrechen, indem sie ihre Länge nicht ändert (wenn wir das Ergebnis als eine Zeichenkette sehen), da einige Leerzeichen in \ n oder eine neue Zeile in geändert werden Ort. Die Eingabezeichenfolge "a" sollte kein \ n Zeichen für die Funktion b () enthalten (sie könnte \ n in der Eingabezeichenfolge für bs () enthalten).
Die Funktion b (a, n) wäre nur deshalb in Ordnung, weil die Einschränkung dieser Übung, die jedes Wort einer "a" - Zeichenkette auferlegt, eine Länge <n hat. Wenn dies nicht zutrifft, kann diese Funktion
zu einer Endlosschleife gehen ... (sehr) falsch in meiner Sichtweise, so kopiere ich auch die Funktion besser, weil in diesem Fall -1 zurückkehren würde und nicht zu einer Endlosschleife gehen würde; es ist bs (a, n) unten) Ich schließe nicht aus, dass beide Funktionen fehlerhaft sind. .
Ergebnis von b (), das an eine Funktion übergeben wurde, die die Zeilenlänge jeder Zeile hinzufügt
quelle