Einige zweidimensionale Esolangs wie Forked und einige Nicht-Esolangs wie Python können manchmal Leerzeichen vor Codezeilen erfordern. Das ist nicht sehr golfen. Außerdem bin ich faul und schreibe eine 2D-Sprache, die vor dem Code viele Leerzeichen benötigt. Ihre Aufgabe ist es, ein Tool zu schreiben, mit dem Sie diese Sprachen Golf spielen können.
Natürlich wird dies nicht perfekt sein; Sie kann beispielsweise nicht verwendet werden, wenn eine Zahl das erste Zeichen in einer Quellzeile ist. Es wird jedoch im Allgemeinen nützlich sein.
Herausforderung
Sie werden ein Programm oder eine Funktion schreiben, die entweder ...
- ... nimmt ein Argument, einen Dateinamen oder eine Zeichenfolge, oder ...
- ... liest aus der Standardeingabe.
Ihr Programm verhält sich wie folgt cat
:
- Wenn das erste Zeichen in einer Zeile eine Zahl ist, gibt Ihr Code x Leerzeichen aus, wobei x diese Zahl ist.
- Andernfalls wird es einfach gedruckt.
- Wie jedes andere Zeichen in der Eingabe.
Testfälle
Eingang:
foo bar foo bar
1foo bar foo bar foo bar
2foo bar foo bar foo bar foo bar
Ausgabe:
foo bar foo bar
foo bar foo bar foo bar
foo bar foo bar foo bar foo bar
Eingang:
--------v
8|
8|
80
8,
7&
Ausgabe:
--------v
|
|
0
,
&
Eingang:
foo bar
bar foo
foo bar
Ausgabe:
foo bar
bar foo
foo bar
Eingang:
0123456789
1234567890
2345678901
3456789012
4567890123
Ausgabe:
123456789
234567890
345678901
456789012
567890123
Regeln
- Die Ausgabe muss genau wie die Eingabe erfolgen, außer in Zeilen, in denen das erste Zeichen eine Zahl ist.
- Ihr Programm kann nichts an die Datei anhängen / voranstellen, außer eine abschließende Newline, wenn Sie dies wünschen.
- Ihr Programm kann keine Annahmen über die Eingabe treffen. Es kann leere Zeilen, keine Zahlen oder Unicode-Zeichen enthalten.
- Beginnt eine Zahl mit mehr als einer Ziffer eine Zeile (z. B.
523abcdefg
), sollte nur die erste Ziffer (im Beispiel 5) in Leerzeichen umgewandelt werden.
Gewinner
Der kürzeste Code in jeder Sprache gewinnt. Viel Spaß und viel Glück!
quelle
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.
Nicht wahr, machen Sie einfach das erste Zeichen zu einer 0 (ähm, Ihr letzter Testfall)Antworten:
Netzhaut , 9 Bytes
Probieren Sie es online! Hinweis: Leerzeichen in der letzten Zeile.
quelle
Kubisch 69 Bytes
Probieren Sie es online!
Erläuterung:
Zuerst führen wir diese Initialisierung durch:
So richten Sie diesen Cube ein:
Das Wichtigste an diesem Würfel ist, dass
5
die Summe der Flächen 32 ist. Dies ist der Wert, der zum Drucken von Leerzeichen erforderlich ist. Zufälligerweise ist es auch für alle anderen Berechnungen ziemlich kurz. Nachdem das erledigt ist:quelle
Schale ,
15 bis13 Bytes-2 Bytes dank @Zgarb
Probieren Sie es online!
Verwendet die gleiche Technik wie @Jonathan Allan
Erläuterung
quelle
Γ
.JavaScript (ES8),
3837 BytesIch denke nicht, dass es noch viel besser werden kann.Dank Shaggy 1 Byte gespart - Verwenden Sie ES8-Funktionen.
quelle
padEnd
wie folgt verwenden :s=>s.replace(/^\d/gm,m=>"".padEnd(m))
Python 2 ,
98746765 Bytes-24 Bytes dank Jonathan Allan. -7 Bytes dank Mr. Xcoder.
Probieren Sie es online!
Übernimmt die Eingabe in der genannten Datei
f
.quelle
open
. Code erwartet eine Datei mit dem Namen 'f'. Ich glaube, es ist okay?' '*0
ist falsch. Die Verwendung[:1]
ist jedoch immer noch eine Ersparnis.read
Ich glaube, das ist nicht nötig (und das wäre es auchreadlines
), da das Standardverhalten von darinopen
besteht, durch die Zeilen zu iterieren. Außerdem ist der Modus nicht erforderlich, da dies'r'
die Standardeinstellung ist. Wenn ich recht habe, ist das 73 !Ruby ,
2421 + 1 =2522 BytesVerwendet die
-p
Flagge. -3 Bytes von GB.Probieren Sie es online!
quelle
%p
am Ende statt%""
. Danke für Ihre Hilfe!05AB1E , 10 Bytes
Probieren Sie es online!
quelle
|vy¬dićú},
funktioniert für 10 Bytes.|
. Es sollpush the rest of input as an array with strings
, aber es stoppt bei Leerzeilen ( TIO ). Ich habe dies im 05AB1E-Chatroom angesprochen, wenn Sie mehr wissen möchten.Python 3 , 95 Bytes
Probieren Sie es online!
-4 Bytes durch Diebstahl der Regex-Idee von ThePirateBay
quelle
Jelly , 19 Bytes
Eine monadische Verknüpfung, die eine Liste von Zeichen aufnimmt und zurückgibt, oder ein vollständiges Programm, das das Ergebnis druckt.
Probieren Sie es online!
Wie?
quelle
beheaded line
Ist das der eigentliche Begriff? xDPerl 5 , 13 + 1 (-p) = 14 Bytes
Probieren Sie es online!
quelle
Haskell , 63 Bytes
Probieren Sie es online! Die erste Zeile ist eine anonyme Funktion, die einen bestimmten String in Zeilen
g
aufteilt , die Funktion auf jede Zeile anwendet und die resultierenden Zeilen mit neuen Zeilen verbindet. Daring
wird geprüft, ob das erste Zeichenx
einer Zeile eine Ziffer ist. Wenn dies der Fall ist, wird['1'..x]
eine Zeichenfolge mit der gleichen Länge wie der Wert der Ziffer ausgegebenx
und' '<$
die Zeichenfolge in so viele Leerzeichen konvertiert. Schließlich wird der Rest der Zeiler
angehängt. Wennx
es sich nicht um eine Ziffer handelt, befinden wir uns in der zweiten Gleichungg s=s
und geben die Zeile unverändert zurück.quelle
Python 2 ,
76 7268 Bytes-4 Bytes dank @ovs !
@DeadPossum schlug vor, auf Python 2 zu wechseln, wodurch ebenfalls 4 Byte eingespart wurden.
Ich dachte nur, es ist schön, in Python 2 ein konkurrenzfähiges Vollprogramm zu haben, das nicht explizit prüft, ob das erste Zeichen eine Ziffer ist. Hiermit wird die Eingabe aus einer Datei gelesen
f
.Probieren Sie es online! (mit freundlicher Genehmigung von @ovs )
quelle
print
gibt Ihnen 68 BytesJava 8 ,
105999793 BytesDank des Vorschlags von Nevay konnten noch einige Bytes eingespart werden.
quelle
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 Bytes) einige Bytes einsparen .R ,
138128 Bytes-9 Bytes dank CriminallyVulgar
Das ist ziemlich schlimm, aber jetzt ist es ein bisschen besser ... R ist wieder schrecklich in Streichern.
Probieren Sie es online!
quelle
Japt (v2.0a0),
1110 BytesJapt schlägt Jelly und 05AB1E? Das scheint nicht richtig zu sein!
Probier es aus
Erläuterung
Implizite Eingabe eines Strings
U
Verwenden Sie Regex replace (
r
), um alle Vorkommen einer Ziffer am Anfang einer Zeile zu ersetzen (m
ist das mehrzeilige Flag - dasg
Flag ist in Japt standardmäßig aktiviert).Führen Sie jedes Match durch eine Funktion, in der
Z
sich das aktuelle Element befindet.Der Postfix-Inkrement-Operator (
++
). Dies wirdZ
in eine Ganzzahl konvertiert , ohne sie für die folgende Operation zu erhöhen.Wiederholen Sie ein Leerzeichen
Z
.Die resultierende Zeichenfolge implizit ausgeben.
quelle
m@
gekürzt werden?m
hier ist das mehrzeilige Flag für den regulären Ausdruck, nicht die Kartenmethode.r/^\d/m_î
(oderr/^\d/m_ç
) wäre 2 Bytes kürzer,Z
ist aber eine Zeichenkette, daher würde es leider nicht funktionieren.r/^\d/m_°ç
, für eine 1-Byte-Speicherung, funktioniert jedoch :)°ç
ist ein erstaunlicher Trick :-) Ich habe gerade vorgeschlagen habe , würde\d
für den regulären Ausdruck, aber das Blatt aus der Flagge ... vielleicht soll ich Unterstützung für Flaggen auf Einheits-Regexes, wie hinzufügen\dm
(oh ja, und dass Blätter aus dem^
zu ...)/
in RegExes optional zu machen?Jelly , 19 Bytes
Probieren Sie es online!
Insgesamt -5 Bytes dank Jonathan Allans Kommentaren und dem Blick auf seinen Beitrag
Erläuterung
quelle
Ḣ⁶ẋ;
;0Ḣ
würde für ein Byte funktionieren, vielleicht gibt es ein einzelnes Atom, das ich auch ausprobiert habe¹
, keine Freudeḣ1ẇØD
funktioniert für das gleiche bytecount \ o /ṚṪ
wird funktionieren :)Pyth ,
1615 BytesProbieren Sie es online!
Erläuterung
Nehmen wir ein Beispiel, das einfacher zu verarbeiten sein sollte. Sagen wir, unser Input ist:
Das obige Programm führt Folgendes aus:
.z
- Liest alles und teilt es in Zeilenumbrüche auf, damit wir bekommen['foo bar foo bar', '1foo bar foo bar foo bar', '2foo bar foo bar foo bar foo bar']
.Wir bekommen das erste Zeichen des einzelnen:
['f', '1', '2']
.Wenn es in eine Ganzzahl konvertierbar ist, wiederholen wir ein Leerzeichen, das ganzzahlig ist, und fügen den Rest der Zeichenfolge hinzu. Ansonsten platzieren wir einfach den ganzen String. Daher haben wir
['foo bar foo bar', ' foo bar foo bar foo bar', ' foo bar foo bar foo bar foo bar']
.Schließlich schließen wir uns durch Zeilenumbrüche an, sodass unser Ergebnis lautet:
quelle
Kubisch 82 Bytes
Hinweis: Dies funktioniert nicht mit TIO . Um dies zu testen, verwenden Sie den Lua-Interpreter, wobei das experimentelle Flag auf true gesetzt ist (um Bedingungen zu aktivieren). Es gibt derzeit einen Fehler mit bedingten Blöcken im TIO-Interpreter. Wenn Sie den TIO-Interpreter verwenden, sollten Sie
?6!
mit!6
und&6
mit ersetzen?6&
, damit die Byteanzahl gleich bleibt.Dies ist nicht so kurz wie die andere kubische Antwort, aber ich dachte, ich würde es trotzdem versuchen: D
quelle
)
springt(
eher zum neuesten als zum passenden, glaube ich. EDIT: Ich bin im Chat.> <> 60 Bytes
Probieren Sie es online!
Wie es funktioniert:
quelle
V , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Gema, 21 Zeichen
Probelauf:
quelle
PHP, 83 Zeichen
quelle
$s
Argument einschließen oder mit der Eingabe füllen. Und es druckt nichtsargv
akzeptabel verwendet?argv
es sich um die Befehlszeilenargumente handelt, dann ja.