In dieser Herausforderung müssen Sie mehrzeilige ASCII-Grafiken als Eingabe verwenden, z.
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OO OOOOOOO
OO OO OO OO OO OO OO OO OO OO OO
OO OO OO OO OO OOOOO OO OOO OO OO OO OOOOO
OO OO OO OO OO OO OO OO OO OO OO OO
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OOOOOOO OO
Und Sie werden auch eine ganze Zahl als Eingabe nehmen. Sie müssen die ASCII-Grafik um den mit der Ganzzahl angegebenen Betrag vergrößert ausgeben. Wenn Sie beispielsweise ein zweites Argument von verwenden 3
, lautet die Ausgabe
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
Insbesondere muss sich jedes Zeichen in ein n
By- n
Feld dieses Zeichens verwandeln , wobei n
es sich um das ganzzahlige Argument handelt. Zum Beispiel eine Eingabe von
ab
cd
und 3 ergeben
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Antworten:
APL, 7 Zeichen / Byte *
Funktion, die die Zahl und die Eingabezeichenfolge als Parameter verwendet und das Ergebnis zurückgibt:
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ *: APL kann in einem eigenen (Legacy-) Einzelbyte -Zeichensatz geschrieben werden, der APL-Symbole den oberen 128-Byte-Werten zuordnet
. Aus diesem Grund kann ein Programm mit N Zeichen , das nur ASCII-Zeichen und APL-Symbole verwendet, als N Byte lang betrachtet werden.
quelle
/
Funktion (nicht zu verwechseln mit dem/
Operator ... ja, dasselbe Symbol ) dupliziert und / oder entfernt Spalten aus einer Matrix gemäß dem Argument auf der linken Seite. Wenn dies ein Skalar (einfache Zahl) ist, wird er für alle Eingabespalten repliziert. Daher2/m
ist eine Matrix mit allen Spalten verdoppelt. Die⌿
Variante macht das gleiche, aber für Zeilen (oder Ebenen der ersten Achse im allgemeinen Fall.)GolfScript, 20 Zeichen
Nimmt alle Eingaben von STDIN, die erste Zeile ist der Skalierungsfaktor, der Rest die Mehrzeileneingabe. Sie können das Beispiel online ausprobieren .
Eingang
Ausgabe
Code
quelle
1/
. Ich muss auchvalue function +
mehr verwenden.golfscript.rb
dass die erste Zeile nicht als ausführbar markiert ist oder dass der Pfad zum Ruby-Interpreter falsch ist für Ihr System. Oh, und dasecho
sollte vermutlich seincat
. Probieren Sie es auscat inputFile | ruby golfscript.rb scriptFile
(oder versuchen Sie es einfachruby golfscript.rb scriptFile < inputFile
) und sehen Sie, ob das funktioniert.J,
20 bis17 ZeichenDefiniert ein Verb
f
, das das tut, was erforderlich ist. Verwendungszweck:wo
a
ist die Eingabezeichenfolge.Unter Windows ist ein zusätzliches Zeichen erforderlich, um Folgendes zu entfernen
\r
:Erklärung :
];._2
Zerlegt die Eingabezeichenfolge basierend auf dem letzten Zeichen der Zeichenfolge in Blöcke. In diesem Fall ist dies a\n
. Windows hat\r\n
so müssen wir verwenden}:
ein zusätzliches Zeichen zu hacken:}:;._2
. Verbdokumentation ausschneidenDer Rest des Codes (mit Ausnahme der Zuweisung
f=.
) ist ein Fork .Es bricht so zusammen:
[ #&.|: #
Wenn dies
a
unsere Eingabezeichenfolge ist, lautet die Berechnung3 # a
(wir nennen dieses Ergebnisx
), dann3 [ a
(wir nennen dieses Ergebnisy
)y #&.|: x
.3 # a
macht nur drei Kopien von jedem Mitglied vona
. Verbdokumentation kopierenDies dreht sich
in
3 [ a
Gibt gerade 3 zurück. Dokumentation des linken VerbsEndlich
y #&.|: x
wirdy
kopiert und transponiertx
. Das#
funktioniert wie zuvor, aber das&.|:
weist J an, den Eingang zuerst zu transponieren und ihn dann wieder zurück zu transponieren, wenn er fertig ist. Unter Verbindung Dokumentation , Verb Dokumentation transponieren .Die Transponierung dreht sich
in
dann ändert sich die Kopie in
und es zurück zu transponieren gibt Ihnen
quelle
[##"1
Ich bin mir auch nicht sicher über die ungeschriebenen Regeln des Golfspiels in J, aber ich würde sagen, dass die Aufteilung der Saiten und die Zuweisung weggelassen werden könnten, angesichts der losen Anforderungen der Frage. Das habe ich in meiner APL-Antwort auf jeden Fall getan. Beispiel:2 ([##"1) 'abcde',:'fghij'
Haskell, 49 Bytes
Die Vergrößerungsfunktion verwendet
e
eine Zählung und eine Zeichenfolge und gibt eine Zeichenfolge zurück:quelle
APL, 11 Zeichen
@Gareth hat im Wesentlichen dasselbe zuerst in J getan, daher ist dieser APL-Eintrag nur für Ausstellungen gedacht, nicht für Wettbewerbe - er ist der Gewinner.
Verwendung: Vergrößerung in linkem Argument (⍺), Grafik in Form einer 2D-Zeichenmatrix in rechtem Argument (⍵).
⍺ / ⍵ repliziert Elemente in jeder Zeile eines Vektors oder einer Matrix (2 / 'OO' wird zu 'OO OO').
⍉⍺ / ⍉ transponiert das, repliziert die Elemente, transponiert das.
(Wenn wir Klarheit statt Programmlänge wünschen, könnte der Code E ← {⍺ / [1] ⍺ / ⍵} lauten.)
quelle
Bash / Sed-Schrift, 48 Zeichen
Als Skript speichern
chmod +x
und ausführen:Wie funktioniert es?
Das Fleisch davon ist im
sed
Befehl. Wenn beispielsweise n = 3 ist, wird der sed-Befehl folgendermaßen erweitert:Dieser zusammengesetzte
sed
Befehl kann unterteilt werden in:s/./&&&/g
- Dieser Ersatzbefehl entspricht jedem Zeichen und ersetzt es durch das dreimal wiederholte Zeichenp
Befehle - Hiermit wird nur dreimal der gesamte Musterbereich (dh die aktuelle Zeile) gedrucktWir übergeben
-n
sed die Anweisung, nichts zu drucken, es sei denn, es wird ausdrücklich dazu aufgefordert, sodass wir die volle Kontrolle darüber haben, was und wie oft gedruckt wird.Ich konnte keinen schnellen Weg finden, um sich wiederholende Strings in beliebiger Länge direkt zu generieren. Deshalb
sed
habe ichbash
stattdessen einige Tricks angewendet :Dies druckt einen String (nicht spezifiziert, dh leer) mit 3 führenden Leerzeichen und weist das Ergebnis der
bash
Variablen zur
.Wir verwenden dann die
bash
Parametererweiterung, um diese Zeichenfolge in das zu transformieren, was wir in densed
Ausdruck einsetzen müssen:Es gelang mir, Anführungszeichen um den
printf
Formatbezeichner und densed
Ausdruck zu entfernen , da keines der enthaltenen Zeichen in derbash
Shell maskiert werden musste.Zeichenanzahl:
quelle
$1
und entfernenn=3;
Sie einfach , Sie werden sogar 4 Zeichen und möglicherweise auch das{}
im printf speichern .printf
das Argument sind nicht notwendig, es zu 52 Zeichen reduziert:r=`printf %$1s`;sed -n "s/./${r// /&}/g${r// /;//p}"
.PERL,
41 39 2522 ZeichenPERL, einfach und effektiv - passend zur Aufgabe. Wenn mit aufgerufen
-pi3
, wo3
ist der Parametern
:Klassische Lösung (39 Zeichen):
Klassische Lösungsbedürfnisse die
n
in der ersten Eingabezeile angegeben sind, zDanke @manatwork für den
$&
Trick.quelle
s/./$&x$n/ge
.Ruby:
6449 ZeichenAlle auf STDIN empfangenen Daten: Zuerst den Skalierungsfaktor, dann die ASCII-Grafik.
Probelauf:
Rubin:
4441 ZeichenAngenommen, jede Eingabezeile wird mit einem Zeilentrennzeichen abgeschlossen. Vielen Dank an @Ventero.
Probelauf:
quelle
n
:$.<2?n=$_.to_i: $><<$_.gsub(/./){$&*n}*n
(Leider ist der Abstand nach dem Doppelpunkt notwendig, sonst wird der Parser verwirrt). Laufen Sie mitruby -n
.Python 3 - 84
Nicht die kürzeste, aber dennoch eine andere Antwort. Ein interessanter Einzeiler.
Geben Sie zuerst eine Zahl ein, dann die ASCII-Grafik als Python-Liste, zB:
quelle
GolfScript, 29 Zeichen
Dies definiert einen Block
f
, der beim Aufruf die gewünschte Ausgabe erzeugt. Es wird davon ausgegangen, dass sich Argumente auf dem Stapel befinden (da die Argumente im Grunde genommen in GolfScript so übergeben werden).Ungolfed (macht das überhaupt Sinn?: P):
quelle
Golfscript, 23 Zeichen
Ich habe beschlossen, ein gesamtes Programm zu schreiben, da es weniger Overhead hat als eine anonyme Funktion:
~(:i;
- die Eingabe auswerten, dann den Multiplikator dekrementieren, als speicherni
und verwerfen.n/{...}%n*
- durch Zeilenumbrüche teilen, jede Zeile zuordnen, durch Zeilenumbrüche verbinden{...}:c%c
, - nimm einen Block, wende ihn auf jedes Map-Element an und wende ihn dann auf die gesamte Zeile an.{.}i*
- dupliziere dieses Elementi
malLive-Demo: http://golfscript.apphb.com/?c=OyciYWJjCmRlZiIzJwp%2BKDppO24ve3t7Ln1pKn06YyVjfSVuKg%3D%3D
Anwendungsbeispiel:
quelle
Python 3 -
10910793Geben Sie zuerst die Nummer und dann die Zeichenfolge ein. Sollte selbsterklärend sein ...
Vielen Dank an Waleed Khan für den Vorschlag, das zu entfernen[]
Vielen Dank an Volatility für den Vorschlag,
a
eine Liste zu erstellen.quelle
a
eine Liste, machen Siea+=[''.join(c*n for c in s)]*n
, dann machen Sieprint('\n'.join(a))
am Ende. Das sollte funktionieren.Java - 217
Versuchen Sie zuerst, Golf zu spielen. Scheint so, als ob Java nicht die Sprache ist, in der das gemacht wird.
Unter Windows müssen Sie "\ n" durch "\ r \ n" ersetzen.
quelle
aaabbb
und 3 Zeilen mit vorhanden seincccddd
).for
; 8 Zeichen mit a anstelle von x (a=a[1].split("\n")
und ändern Sie alle x mit a).main
mehr Bytes als ganze Programme in anderen Sprachen benötigt, werden die Teilnehmer Bogeys bekommen.enum M{;public static void main(String[]a){int f=Integer.valueOf(a[0]),i=-1,j,k;a=a[1].split("\n");for(;++i<a.length*f;System.out.println())for(j=0;j<a[i/f].length();j++)for(k=0;k++<f;)System.out.print(a[i/f].charAt(j));}}
Integer.valueOf(a[0])
->new Integer(a[0])
(Bearbeiten: Diese Lösung ist jetzt ungültig, da sich die Semantik der
銻
Anweisung geändert hat. Ich habe nicht bemerkt, dass ich die Anweisung bereits verwendet habe, als ich sie geändert habe. Sie können dieses Programm jedoch korrigieren, indem Sie es einfach in ändern die neuere Anweisung壹
.)Sclipting , 19 ZeichenErwartet, dass die Eingabe durch
\n
(Nein\r
) getrennt wird und die erste Zeile den Multiplikationsfaktor enthält.Erläuterung
Am Ende sieht der Stack so aus:
Alles über der Marke wird automatisch verkettet und ausgegeben, der Rest wird verworfen.quelle
i
wird ausgesprochen [iː], nicht [ɑi]; Wie würden Sie es jetzt auf Chinesisch schreiben?J, 7 Zeichen
Genau das gleiche wie in der APL-Antwort von @ Tobia, aber in ASCII-Zeichen.
quelle
Powershell (96)
Ich dachte, ich würde das in PS ausprobieren. Verwenden Sie Piping in foreachs (%), um es hier kurz zu halten, aber die
function
undToCharArray
sorgen dafür, dass es einen Treffer gibt.Um es zu benutzen, rufen Sie es von der Kommandozeile wie folgt auf:
Hier ist die nicht minimierte Version:
quelle
function m($n,$s){-split$s|%{,(-join($_-split''|%{$_*$n}))*$n}}
für 63 Bytes vorJulia, 74 Zeichen / Byte
7 weniger, wenn ich nur die Zeichenfolge zurückgeben.
julia>
ist die interaktive Eingabeaufforderung.quelle
Canvas , 2 Bytes
Probieren Sie es hier aus!
quelle
Powershell, 54 Bytes
Testskript:
Erläuterung:
$s-replace'.',('$0'*$n)
wiederholt jedes Symbol mit Ausnahme einer neuen Zeile.-split'``n'
Teilt die breite Zeichenfolge durch eine neue Zeile|%{,$_*$n}
Wiederholt jede Zeile als Array-Element und gibt das Array zurückDas Ergebnis ist eine Reihe breiter und wiederholter Zeichenfolgen.
quelle
R 83/72 Bytes
Alt Ansatz mit regulären Ausdrücken
Wenn wir eine abschließende Zeile mit 72 Bytes zulassen:
Probieren Sie es online!
Ansonsten 83 Bytes:
Probieren Sie es online!
quelle
K, 20
.....
quelle
Extended BrainFuck : 158
Es verwandelt sich in:
Gehirnfick: 185
Es wird ein Interpreter benötigt, der entweder 0 oder keine Änderung als EOF-Marker hat.
beef
, erhältlich bei Ubuntu Repos, funktioniert wie folgt:Ungolfed EBF-Code:
quelle
Rebol -
8779Schön formatierte Version:
Anwendungsbeispiel:
NB. Dieser Code funktioniert derzeit nur in Rebol 2 (Die verwendete INPUT- Funktion ist in Rebol 3 noch nicht vollständig implementiert).
quelle
R , 125 Bytes
Probieren Sie es online!
Konvertiert die Zeichenfolge in UTF8, fügt sie in eine Matrix ein, deren Spalten Textzeilen sind (Entfernen von Zeilenumbrüchen), und wiederholt dann jedes Zeichen und die generierten Zeilen, bevor sie durch Zeilenumbrüche getrennt gedruckt werden.
quelle
R - 89
quelle
cat
zum Drucken als Standardausgabe? Zusätzlich sollte jedes Element der Zeichenkette nicht nur n-mal in der Länge wiederholt werden, sondern auch in der Breite.<-
kann sein=
,paste0
kann hier durch ersetzt werden,paste
da Sie ohnehin das Collapse-Argument verwenden und das Argumenteach
auf kürzen könnene
. Sehen Sie hier einige grundlegende Ideen auf Golf spiel mit R.stringr
MATLAB: 20 Zeichen
Diese Lösung setzt voraus, dass das Bild in einer aufgerufenen Datei gespeichert ist
startup.m
und dass matlab beim Aufrufen die Anzahl der Replikationen mitteilen darf. Dies kann folgendermaßen erfolgen:!matlab -r "n=3"&
MATLAB, Aufruf ohne Argument: 23 Zeichen
Im Gegensatz zur ersten Lösung gehen die beiden letzteren davon aus, dass die Anzahl der Replikationen im Anruf möglicherweise nicht erwartet wird. Für diese Lösungen werden die ursprüngliche Zeichenfolge und Nummer in einer Datei mit dem Namen erwartet
matlab.mat
in Ihrem aktuellen Verzeichnis .MATLAB, mathematische Alternative: 27 Zeichen
quelle
C # (177)
Erwartet die Eingabezeichenfolge "i" mit den neuen Zeilen "\ n" als Begrenzer.
Formatiert
quelle
CJam, 14 Bytes
CJam ist neuer als diese Herausforderung (und das Hauptfeature, das ich verwende, ist tatsächlich sehr neu), sodass diese Antwort nicht akzeptiert werden kann - aber es schlägt APL trotzdem nicht, also ...
Teste es hier.
Erläuterung
Mit dem neuen
e*
Befehl, der jedes Zeichen in einer Zeichenfolge wiederholt, ist dies wirklich einfach:quelle
{N/1$fe*e*N*}
RProgN 100 Bytes (Windows) Nicht konkurrierend
RProgN verfügt nicht über Zeichen, die beim Schreiben verloren gehen, sodass für die Bearbeitung neuer Zeilen eine physische neue Zeile erforderlich ist. Als solche muss diese Antwort (und jede Eingabe) CRLFs anstelle von nur LFs verwenden. :(
Außerdem wurde die 'rep'-Funktion erst hinzugefügt, nachdem diese Herausforderung ausgegeben wurde, da dies nicht konkurrierend ist.
quelle
Vim, 39 Tastenanschläge (ohne Eingabe, nicht im Wettbewerb)
Das GOTCHA und der Grund dafür, dass dies nicht konkurriert, ist, dass die Eingabe zweimal eingegeben werden muss. Ersetzen Sie beide
2
durch Ihre eigenen Eingaben.Erläuterung
qayl2phxl@aquu
Zeichnet ein Makro auf, das einen Charakter reißt, ihn einfügt, zum nächsten übergeht und sich dann selbst wiederholt. Dann macht es die Änderungen rückgängig. Da wir möchten, dass die Schleife nicht unendlich ist, löschen wir das Zeichen nicht. Dies bedeutet, dass wir das überflüssige Zeichen löschen müssen, aber trotzdem mit einer Bewegung enden müssen, die beim letzten Zeichen fehlschlägt.:%norm @a<cr>
Führt das Makro in jeder Zeile ausgg0
kehrt zum Anfang zurückqbyy2P2jkddj@bq@b
Verwendet die gleiche Technik,@a
um jede Zeile zu kopieren, jedoch mit einem rekursiven Makro.Ich weiß, dass man mehr Golf spielen kann, z. B. indem man zur Zeilenverdoppelung rückwärts fährt, aber wegen der Mehrfacheingabe werde ich anhalten und diese Antwort als nicht konkurrierend markieren.
Vorherige Antwort (32 Tastenanschläge, nur Doppelanschläge)
Erläuterung
qaylpl@aqu
Zeichnet ein Makro auf, das einen Charakter reißt, ihn einfügt, zum nächsten übergeht und sich dann selbst wiederholt. Machen Sie die Änderung rückgängig.:%norm @a<cr>
Führt das Makro in jeder Zeile aus:%s/.*/&\r&<cr>
verdoppelt jede ZeileIch wollte ein verschachteltes Makro erstellen, aber das innere (Zeichen) stoppt das äußere (Zeilen) ... Daher muss ich zwei Befehle ausführen und einer ansonsten einfachen Lösung einige Tastenanschläge hinzufügen.
quelle