Ihre Aufgabe ist es, Boxen mit einem beliebigen ASCII-Zeichen in Bezug auf die angegebenen Eingaben zu generieren.
Testfälle
1 1 --> =====
= =
=====
1 2 --> =========
= = =
=========
2 1 --> =====
= =
=====
= =
=====
2 2 --> =========
= = =
=========
= = =
=========
2 5 --> =====================
= = = = = =
=====================
= = = = = =
=====================
Eingang
Die Eingabe kann aus einer der folgenden Quellen erfolgen
stdin
- Kommandozeilenargumente
- Funktionsargumente (2 Argumente, eines für jede Zahl)
Eingaben, die aus
stdin
oder Befehlszeilenargumenten stammen, enthalten zwei positive Ganzzahlen, die durch ein Leerzeichen getrennt sind.- Die beiden Zahlen geben die Anzahl der Kästchen in jeder Spalte und Zeile an
Ausgabe
- Boxen müssen ausgegeben werden in
stdout
(oder gleichwertig) - Jedes Kästchen sollte drei horizontale Felder enthalten
Regeln
- Beide Zahlen sind größer als 0, gehen jedoch nicht über 1000 hinaus
- Jedes sichtbare Zeichen kann zur Ausgabe der Kästchen verwendet werden. (Solange sie das Auge nicht zu hart treffen!)
- Sie dürfen ein vollständiges Programm oder eine Funktion schreiben.
- Es sollten keine unnötigen Zeichen außer einem optionalen nachgestellten Zeilenumbruchzeichen vorhanden sein.
Wertung
Dies ist Code-Golf , also gewinnt die kürzeste Übermittlung (in Bytes).
JavaScript ( ES6 ), 83
Eine Funktion mit Parameterzeilen und -spalten. Unter Verwendung von Vorlagenzeichenfolgen gibt es 2 eingebettete Zeilenumbrüche, die signifikant sind und gezählt werden.
Ausgabe über
alert
(Popup). Wenn Siealert
eine proportionale Schriftart verwenden, erzielen Sie ein besseres Ergebnis, wenn Sie einen Buchstaben mit einer ähnlichen Breite wie das Leerzeichen anstelle von verwenden=
.Testen Sie in Firefox mit der Konsole, um die tatsächliche
alert
Ausgabe zu erhalten, oder führen Sie das folgende Snippet aus.quelle
Test in Firefox
JavaScript (ES6),
7573Unter Verwendung zahlreicher
repeat
Aufrufe wiederholen wir diese Schritte|
, wiederholen sie dann|
mit nachgestellten Leerzeichen und wiederholen beide Wiederholungen, um Zeilen zu erstellen:(Zeilenumbrüche sind laut dem Vorschlag von edc65, Vorlagenzeichenfolgen zu verwenden, erheblich.)
Snippet:
Ohne Vorlagenzeichenfolgen, ohne Wiederverwendung von Methodennamen und mit zusätzlichen Leerzeichen:
(Verwenden Sie die Empfehlung von edc65 , um den
|
visuellen Abstand zu verbessern .)quelle
Pip,
2924 = 23 + 1 BytesBenötigt die
-n
Flagge. Nimmt die Höhe und Breite als Kommandozeilenargumente und baut Boxen mit1
s auf.Erläuterung:
Dieses Programm macht sich die Tatsache zunutze, dass Zeichenfolgen Zahlen und in Pip Zeichenfolgen sind. (Und die drei Felder in diesen Feldern waren genau richtig, um die eingebaute
m
Variable zu nutzen!)So wird die Liste mit der Eingabe erstellt
2 3
:Und die endgültige Ausgabe:
Mehr zu Pip
quelle
Perl,
72635250 BytesMeine bisher kürzeste Version verwendet
$/
, um ein Newline-Zeichen kompakter zu erhalten:Das vorherige Update fügt die meist leeren Zeilen in das Trennzeichen für Ausgabedatensätze ein
$,
und druckt eine Liste fortlaufender Zeilen.Die vorherige Version könnte für den Gelegenheitsleser etwas klarer sein:
Die erste Version verwendet
@ARGV
anstelle vonpop
:quelle
Python 2,
5857 BytesZiemlich unkomplizierte Implementierung.
Schau es dir hier an.
Vielen Dank an Sp3000 für das Speichern eines Bytes.
quelle
GNU sed -r, 160
Seufz, ich dachte das wäre kleiner, aber hier ist es trotzdem. Leider haben sed reguläre Ausdrücke keine Suchfunktion.
Eingaben von STDIN als unärgern:
quelle
CJam, 25 Bytes
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
Marbelous, 168 Bytes
Diese Antwort funktioniert aufgrund der Einschränkungen der Sprache Marbelous nur bis zu 255x255, nicht bis zu 1000x1000. Ich arbeite an einer 32-Bit-Bibliothek, aber sie wird in Kürze nicht fertig sein.
Die Eingabe erfolgt als zwei Befehlszeilenparameter oder Funktionsparameter für die Hauptplatine.
Pseudocode:
quelle
CJam
52514641 BytesDanke an Sp3000 für -5 Zeichen
Dank an Martin Büttner ♦ für weitere 5 Zeichen
Versuch es
quelle
c Funktion, 81
Testprogramm:
quelle
x;f(h,w){for(w=w*4+2;x<=w*h*2+w;x++)putchar(x%w?x/w%2?x%w%4!=1?32:61:61:10);}
- 78PHP4.1,
767169 BytesDas ist so gut wie ich nur kann.
Dies setzt voraus, dass der Schlüssel
H
die Anzahl der Zeilen undV
die Anzahl der Kästchen pro Zeile hat.Ich benutze
-
und|
nur damit die Kisten tatsächlich wie Kisten aussehen. Bei Bedarf kann ich es ändern=
. Es spielt keine Rolle, welches Zeichen verwendet wird.Verlassen
-
und|
hilft auch, das Chaos zu verstehen, das gerade passiert.Alte Methode, 76 Bytes:
Ausgabebeispiel:
quelle
Julia, 59 Bytes
Dadurch wird eine unbenannte Funktion erstellt, die zwei Ganzzahlen als Eingabe akzeptiert und das Ergebnis an STDOUT ausgibt. Um es zu nennen, geben Sie ihm einen Namen, z
f=(n,m)->...
.Ungolfed + Erklärung:
Beispiele:
Anregungen sind willkommen.
quelle
bash + coreutils, 57
Hiermit werden
dc
Binärzahlen gedruckt, die1
s für die Rahmenkanten und0
s für die Leerzeichen enthalten.2 ^ (width * 4 + 1) - 1
, dann gedrückt und gedruckt10001...0001
Zahl wird mit berechnet und dann gedrücktX
* 8 / 15 + 1
height
mal abgeladenDas
tr
konvertiert dann die0
s in Leerzeichen.Ausgabe
quelle
R
8381Als unbenannte Funktion mit h und w als Parametern. Bildet für jede Zeile die erste und die zweite Zeile zu einem Vektor und repliziert diesen
h
mal. Hängt einen Vektor an die unterste Zeile an und gibtcat
den Vektor mit ausfill
, um die Länge der Zeilen zu begrenzen . Nutzt nun die Regel für alle sichtbaren Zeichen.Testlauf
quelle
Python
32,160878579 BytesIch weiß, dass man viel mehr Golf spielen kann. Ich hätte gerne einige Vorschläge, da dies mein erster Versuch ist, Golf zu spielen.
Dank der Tipps von @Cool Guy und @ Sp3000 konnte ich die Größe auf knapp
über dieHälfte reduzieren .ZB: d (3,3)
Probieren Sie es hier aus .
Entschuldigen Sie die nachgestellten Leerzeichen.
quelle
'='*(4*y+1)
w=4*y+1
spart 3 Bytes.KDB (Q), 37 Bytes
Erläuterung
Prüfung
quelle
JavaScript,
9285 BytesIch hatte gehofft, dass dies kürzer sein würde als die andere Antwort von JS (gute Arbeit wie immer, edc65), aber na ja. Ich habe das Gefühl, dass die Mathematik hier weiter verbessert werden kann.
quelle
f=(r,c)=>(x=>{for(i=s='';(y=i++/x)<r-~r;)s+=i%x?' *'[-~y%2|!(-~i%4)]:'\n'})(4*c+2)||s
-> 852*r+1
=>r-~r
sind genau das, was ich mit Mathe gemeint habe, und genau das ist Genie. :)Oktave,
696564Vielen Dank an DLosc für den Hinweis auf Probleme, die zu -1 geführt haben
Nimmt Input als
[1 1]
und Outputs:Sie können auch einfach '1' eingeben und 1x1 erhalten. Wenn der Eingang wirklich sein muss
1 1
, steigt die Größe auf888584 :Hinweis: Matlab erlaubt keine Octave-Verkettung oder Eingabe (Integer), aber hier ist die Matlab-Version ( 67 ):
quelle
C 76 Bytes
Wird als Funktion mit der Anzahl der Zeilen und Spalten als Argumente aufgerufen. Beispielsweise:
quelle
CJam,
3029 BytesNeue Version mit redundanten
+
am Ende entfernt (danke, Dennis):Ich weiß, dass Dennis bereits eine CJam-Lösung gepostet hat, die diese um ein Vielfaches übertrifft. Aber dies ist mein allererster Versuch bei CJam, es ist also ein Wunder, dass es überhaupt funktioniert. :)
Ziemlich rohe Gewalt. Bildet die erste Zeile aus
4 * H + 1
=
Zeichen und die zweite Zeile aus=
wiederholten ZeichenH
, wobei eine weitere=
hinzugefügt wird. Verkettet dann die zwei Zeilen, wiederholt das GanzeV
mal und fügt dann eine weitere Kopie der ersten Zeile hinzu.Es fühlt sich so an, als hätte ich viel zu viele Stapelmanipulationen und habe sogar die erste Zeile in einer Variablen gespeichert, weil ich sonst noch mehr Zeug auf dem Stapel herum mischen musste.
Insgesamt nicht sehr elegant, aber man muss irgendwo anfangen ... und ich wollte zuerst ein einfaches Problem versuchen.
quelle
+
am Ende nicht. CJam druckt den gesamten Stapel.CJam, 23
Probieren Sie es online aus
Erläuterung:
quelle
Dart, 57
Versuchen Sie es unter: https://dartpad.dartlang.org/36ed632613395303ef51
quelle
Java, 181
Ich hoffe das laut
Es entspricht den Regeln, die Bytes der Funktion zu zählen , in diesem Fall also 181
quelle
for(r=R;r-->0;){x=y=e;for(c=C;c-->0;){x+=a;y+="= ";}s+=x+n+y+n;}
zufor(r=R;r-->0;s+=x+n+y+n){x=y=e;for(c=C;c-->0;y+="= "){x+=a;}}
C #
153151150Dies kann nicht wirklich konkurrieren, aber hier ist es nur zum Spaß:
Wie läuft man:
Offen für Verbesserungen.
quelle
int
s außerhalb der Schleife kann ein Byte speichern.Python 2.7, 66 Bytes.
Ich weiß, dass es in Python bereits bessere Lösungen gibt, aber das ist das Beste, was ich mir ausgedacht habe.
Beispiel:
quelle
Rubin,
574845Verwendung:
Dank an manatwork für die Einsparung von 3 Bytes.
quelle
'='
→?=
und"<LF>"
→$/
.?=*(w*4+1)
→?=+?=*w*4
Java,
123 bis119 BytesDer Missbrauch der Eingabeparameter als Zähler trug erheblich zur Verringerung der Codegröße bei.
Vielen Dank an Cool Guy für den Hinweis auf den Missbrauch der Syntax.
quelle
for
Schlaufe anstelle einerwhile
Schlaufe verwenden.while(w-->0){d+=" =";b+="====";}
->for(;w-->0;b+="====")d+=" =";
das spart drei BytesSAS,
117,119Beispiel:
Ergebnis:
quelle
DNS_PROBE_FINISHED_NXDOMAIN