Aufgabe:
Es gibt viele Antworten auf dieser Website, die wie diese in ASCII-Kunst gegliedert sind . Normalerweise wird die Anordnung manuell vorgenommen, aber würde ein Programm dabei nicht helfen? :)
Ihr Programm wird 3 Eingaben annehmen:
- Der Code als eine einzelne Zeile
- Die Anzahl der Zeilen im Muster (kann weggelassen werden, wenn dies nicht erforderlich ist.)
- Das Muster selbst, als
*
s oder ein anderes Zeichen
Regeln:
- Sie müssen ein Programm schreiben (keine Funktion), das von stdin liest
- Der Text wird zeilenweise von links nach rechts platziert
- Wenn nicht genügend Text vorhanden ist, um das Muster auszufüllen, setzen Sie
.
s in die verbleibenden Leerzeichen - Wenn zu viel Text vorhanden ist, um das Muster auszufüllen, drucken Sie ihn nach der Ausgabe aus
- Code-Golf , also der kürzeste Code in Bytes gewinnt
Probeläufe:
Eingabe (Exakter Fit Test) :
qwertyuiopasdfghjklzxcvbnm
4
***** * ***
* * * *
* * * *
***** * ***
Ausgabe :
qwert y uio
p a s d
f g h j
klzxc v bnm
Eingabe (Sonderzeichentest) :
qwertyuiopasdfghjklzxcvbnm12345
4
***** * ***
* * * *
* * * *
***** * ***
Ausgabe :
qwert y uio
p a s d
f g h j
klzxc v bnm
12345
Eingabe (Test auf unzureichende Zeichen) :
qwertyuiopasdfg
4
***** * ***
* * * *
* * * *
***** * ***
Ausgabe :
qwert y uio
p a s d
f g . .
..... . ...
X
es" für unsere ersetzt werden sollen Programm zur Arbeit?Antworten:
GolfScript, 30 Zeichen
Online ausführen .
Beispiele:
quelle
Perl 6:
60 ZeichenBEARBEITEN : 38 Punkte (siehe unten)Wenn Sie meine schrecklichen Kunstfertigkeiten nicht schätzen, ist hier das Golf:
Dieser macht komische Sachen mit Auswertungszeiten.
Erstens muss das
BEGIN
Schlüsselwort[get.comb, "." xx *]
zuerst ausgewertet werden, wobei die Liste der Zeichen, aus denen "der Code" besteht, in ein Array eingefügt wird, gefolgt von einer unendlichen Menge von"."
s.Als nächstes wird das
get
Ende ausgewertet und die Anzahl der Zeilen der ASCII-Grafikvorlage ermittelt. Derxx
Bediener wiederholt den ersten Teil des Programms so oft. Dies ist sinnvoller, wenn Sie feststellen, dasscode() xx count()
Zucker im Grunde genommen für Folgendes giltcode() for 1..count()
:count()
sollte zuerst bewertet werden.Schließlich wird am
get
Anfang des Programms eine Zeile der ASCII-Grafikvorlage abgerufen und"*"
durch einen Wert ersetzt, der vom Anfang des Arrays abweicht, das wir vor allem anderen erstellt haben ({shift BEGIN …}
).BEARBEITEN:
Golfed bis zu 37 Zeichen, plus eine für die Befehlszeilenoption:
Dies ist das gleiche Konzept wie das Original, wobei der
-p
Schalter jede Zeile durchläuft (nachdemBEGIN
"der Code" eingelesen wurde) und alle*
s vor dem Drucken durch den nächsten Buchstaben aus "dem Code" ersetzt werden. Das Eingabeformat hierfür sollte nicht die Anzahl der Zeilen des Formats enthalten.quelle
Ruby 2.0,
5352 ZeichenVerwenden Sie gemäß Spezifikation nicht den Parameter 'Anzahl der Zeilen'.
Beispiellauf:
Ausgabe:
quelle
./ascii.rb: line 2: syntax error near unexpected token `(' ./ascii.rb: line 2: `puts gets($n).gsub(?*){c.slice!(0)||?.},c'
puts
mit$><<
und die sich wandelnde,
am Ende ein+
PowerShell ,
63868382 Byte+20 Bytes danke @Veskah
Probieren Sie es online!
Weniger golfen:
quelle
Japt , 18 Bytes
Versuch es
quelle
sVl)iVr-@t°J1 ª'.
arbeitet für 17T-SQL, 142 Bytes
Probieren Sie es online aus
quelle
Perl 5
-plF
, 51 BytesProbieren Sie es online!
quelle
JavaScript - 199
Gibt zusätzliche Zeichen in der Texteingabe aus, wenn sie nicht im Muster verwendet werden. Verwendet gepolstertes "." wenn es nicht genug gibt.
BEARBEITEN: geändert, um eine Funktion zu sein, die Text und Muster akzeptiert
quelle
function p(a,c){x=c.split(s='*').length-1;for(i=x-a.length;i--;)a+='.';for(;i++<x;)c=c.replace(s,a[i]);console.log(c+'\n'+a.substring(x))}
JavaScript (ES6) -
9687Hinweis: Wie vom OP vorgeschlagen , verwende ich eine Funktion. Wenn Sie jedoch ein Programm benötigen, finden Sie hier eine 93-Zeichen-Lösung .
EDIT1: Große Änderung, ich weiß nicht, warum ich das zum ersten Mal nicht realisiert habe: P 40 Zeichen gespart.
Verwendung :
Testeingang : (ohne nicht benötigte optionale Nummer gemäß Spezifikation)
Ausgabe :
Ungolfed Code :
Über Anregungen von Usern würde ich mich sehr freuen :)
quelle
Perl, 70 Zeichen
Oder ohne Begrenzungsprüfung 56 Zeichen
Beachten Sie, dass dieser Code keine zweite Zeile wie in der Spezifikation verwendet und um drei Zeichen gekürzt werden kann
<>;
quelle
Bash,
166 156 111106Liest von der Standardeingabe, nimmt keine Zeilenzählung an. Die erste Eingabezeile ist der Code, den Sie in ASCII-Kunst einfügen möchten, alle nachfolgenden Zeilen sind ASCII-Kunst, die aus dem
@
Zeichen besteht. Die Eingabe hat eine maximale Länge von 999 Zeichen und darf keine Schrägstriche enthalten . (Ich habe beschlossen, nicht zu verwenden*
oder#
weil sie in Bash eine besondere Bedeutung haben).WARNUNG: Dieses Programm verwendet eine Datei namens
p
. Löschenp
Sie nach dem Ausführen des Programms - es verwirrt das Programm, wenn Sie es das zweite Mal ausführen.Die meiste Arbeit wird hier von erledigt
Die erste Zeile ersetzt die erste
@
in der Technik durch das erste Zeichen des Codes. Die zweite Zeile entfernt das erste Zeichen des Codes.Wenn nicht genügend Code vorhanden ist, um die Form auszufüllen, wird eine neue Zeile nach der Hauptausgabe von gedruckt
echo $i
.quelle
C,
98, 91 ZeichenHier eine ziemlich einfache C-Lösung mit weniger als 100 Zeichen. Der Zeilenzähleingang wird nicht verwendet. (Andernfalls wird eine zweite nicht benötigte () benötigt).
ungolfed:
quelle
puts(s)
anstelle vonprintf("%s",s)
7 Bytes speichern.\n
ein Problem ist.Python 2.7,
165155150138119 ZeichenOkay, so ziemlich, aber ich denke, es ist der kleinste Weg, dies mit Python zu tun.
Edit: Neue funktionale Version 1.0.1 mit noch weniger verwendeten Bytes:
Edit2:
map(r,['']*input())
statt[r()for _ in[1]*input()]
und entfernt nicht verwendeten ImportEdit3:
'>'*input()
anstatt['']*input()
ein Zeichen zu speichern und ein Eingabeaufforderungszeichen für das Muster hinzuzufügen :)quelle
(['.']+l).pop(0)
anstelle von(len(l)and l.pop(0)or'.')
9 Bytes speichern. Undinput()
anstattint(r())
1 Byte zu speichern.input
! Ihr erster Ratschlag funktioniert leider nicht, da er Punkte ausgibt, solange die Länge der Zeichenfolge> 0 ist.(l+['.']).pop(0)
stattdessen, aber wenn dies auch nicht funktioniert, können Sie trotzdem 4 Bytes sparen, indem Siel and
anstelle von verwendenlen(l)and
.(l+['.']).pop(0)
l
l
C # (Visual C # Interactive Compiler) , 122 Byte
Probieren Sie es online!
quelle
"\n"+
die zusätzlichen Zeichen an dieselbe Zeile anhängen05AB1E ,
181715 BytesNimmt den Code als erste Eingabe, das Muster als zweites (mit
0
statt#
).Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
1815 Bytes Alternative, indem die Eingaben in umgekehrter Reihenfolge vorgenommen werden:Probieren Sie es online aus .
Erläuterung:
quelle