Zusammenfassung
Inspiriert von der jüngsten Beliebtheit von ASCII-Kunstherausforderungen, besteht der Zweck dieser Herausforderung darin, ein ASCII-Schachbrett zu zeichnen, wie eines, auf dem Schach gespielt werden kann.
Schreiben Sie ein Programm, das eine positive Ganzzahl n
als Argument in stdin
oder als Benutzereingabe verwendet, und geben Sie ein Schachbrett mit n
x ausn
Quadraten und einem Rand mit einer Dicke von 1 Zeichen aus.
Jedes Quadrat sollte 2x2 Zeichen haben. Die Quadrate sollten dem normalen abwechselnden Weiß-Schwarz-Muster (Weiß zuerst, wie in der linken oberen Ecke) eines Schachbretts folgen. Weiße Quadrate sollten aus Leerzeichen ( ) und schwarze Quadrate aus Pfund bestehen (
#
) bestehen.
Der Rand sollte aus Bindestrichen ( -
) mit einem Pluszeichen () bestehen.+
) am Rand oder am senkrechten Punkt eines Quadrats bestehen.
Eingang
Positive Ganzzahl für die Anzahl der Quadrate (Abmessungen in Quadraten), die in das Schachbrett gezeichnet werden sollen, wobei jedes Quadrat 2x2 Zeichen enthält.
Beispiel Ergebnisse
n=2
+--+--+
| |##|
| |##|
+--+--+
|##| |
|##| |
+--+--+
n=3
+--+--+--+
| |##| |
| |##| |
+--+--+--+
|##| |##|
|##| |##|
+--+--+--+
| |##| |
| |##| |
+--+--+--+
n=4
+--+--+--+--+
| |##| |##|
| |##| |##|
+--+--+--+--+
|##| |##| |
|##| |##| |
+--+--+--+--+
| |##| |##|
| |##| |##|
+--+--+--+--+
|##| |##| |
|##| |##| |
+--+--+--+--+
... und so weiter.
Anmerkungen
- Leerzeichen und neue Zeilen sind zulässig.
- Sie können entweder ein gesamtes Programm oder eine Funktion schreiben.
- Keine führenden Leerzeichen.
- Ihr Programm sollte korrekte Ergebnisse für n = 15 anzeigen.
- Stellen Sie für weniger bekannte esoterische und ähnliche Sprachen einen Link zur Sprache bereit.
n=0
sollte produzieren+
. (Optional, aber sehr zu empfehlen und zu empfehlen.)- Der kürzeste Code in Bytes gewinnt, da dies Codegolf ist.
+
für sie produziert wurdenn=0
.Antworten:
J, 24 Bytes
Eine anonyme Funktion:
Verwendung:
quelle
&.>
ist eine kürzer alseach
. Es ist zu beachten, dass es nur funktioniert, wenn auf eingestelltBoxForm
istASCII
.Python 2, 79
Wählt für jede Zeile eines der Muster aus
und druckt
3*n+1
Zeichen daraus. Das Muster wird ausgewählt, indem die ersten 6 Zeichen wiederholt werden, die mit dem String-Interleaving-Trick ausgewählt wurden. Dadurch wird auch ein Ausschnitt mit der richtigen Länge extrahiert.Das richtige Muster wird basierend auf dem Wert des Zeilenindex
i
modulo 6 durch einen arithmetischen Ausdruck ausgewählt3**i%7/2%3
, der das sich wiederholende Muster [0,1,1,0,2,2] ergibt. Ich fand es unter Verwendung der Tatsache, dassx**i%7
Punkt6
, dann verschiedene Wertex
und unterschiedliche Nachbearbeitung versucht hat , um das richtige Muster zu erhalten.quelle
Pyth, 37
Eher zusammen gehackt, aber kurz.
Demonstration.
quelle
CJam,
4342 BytesProbieren Sie es online aus .
Jede Koordinate wird einem Zeichen zugeordnet, z. B. die linke obere Ecke
(0, 0) -> "+"
. Insbesondere berechnen wirund indexiere den String
"#|-+ "
entsprechend.quelle
Netzhaut , 106 Bytes
Nimmt Eingaben als unärgernd an (basierend auf dieser Metadiskussion ).
Jede Zeile sollte in eine eigene Datei gehen und
n
in den Dateien in eine neue Zeile geändert werden. Dies ist unpraktisch, aber Sie können den Code so wie er ist als eine Datei mit dem-s
Flag ausführen , wobei dien
Markierungen erhalten bleiben. Sie können dien
Zeilenumbrüche in der Ausgabe zur besseren Lesbarkeit ändern . Z.B:Weiteres Golfen und Erklärungen folgen später.
quelle
JavaScript (ES6), 117
Snippet:
Anonyme Funktion. Beginnt mit einem vollständigen Array von
+--+--+--...
Zeilen und ersetzt in den entsprechenden Zeilen das+
für|
und-
füroder
#
nach Bedarf.Der Ausdruck, der das Ersetzungszeichen bestimmt
"| |##| "[x%6+(i%6>2)*3]
, könnte wahrscheinlich weiter verwendet werden, aber ich habe festgestellt, dass die Verwendung einer längeren, redundanten Zeichenfolge mehr Zeichen als eine komplexe Berechnung spart.quelle
CJam, 59 Bytes
Dies ist zu lang ..
Probieren Sie es hier online aus
quelle
CoffeeScript mit ES6, 106 Bytes
JavaScript (ES6), 111 Byte
Zeilenumbrüche sind signifikant und werden jeweils als 1 Byte gezählt.
Die explizite Rückgabe hat es etwas länger gemacht:
Demo
Zur Zeit ist Firefox der einzige große Browser, der mit ES6 kompatibel ist.
quelle
Python 3,
114 108100Bisherige Lösungen
108
114
118 (nicht übermittelt)
quelle
CJam, 46 Bytes
Probieren Sie es online aus
Nun, ich hatte gehofft, dass ich wenigstens eine originelle Lösung haben würde (normalerweise schaue ich mir keine anderen Antworten an, bevor ich alleine arbeite). Stellt sich heraus, dass @ Sp3000 schon etwas sehr ähnliches gemacht hatte, nur besser. Aber da ich die Arbeit bereits gemacht habe, dachte ich, ich würde sie trotzdem posten.
Erläuterung:
quelle
HackVM , 158 Bytes
Auf jeden Fall kein Gewinner, aber dies schien eine schöne Herausforderung in HVM zu sein.
Platzieren Sie die Größe in der ersten Speicherzelle und verwenden Sie den folgenden Code:
Hinweis: Der Code muss genau in einer Zeile stehen, damit er funktioniert.
Erläuterung:
Der Code ruft 2 Funktionen auf
PLUSHDASHLINE
undNORMALLINE
behält einen globalen Status für Paritäten bei (dh ob ein' '
oder ein'#'
in eine Zelle gesetzt werden soll).Erklärung für
PLUSDASHLINE
:Erklärung für
NORMALLINE
:Würde mich freuen, wenn jemand Tipps zur weiteren Verbesserung gibt :)
quelle
Python 2, 98
Nicht der kürzeste Weg, aber eine amüsante Methode. Die Funktion
f
nimmt zwei Zeichenfolgena,b
und ein Trennzeichen aufs
und verschachtelt ihre Argumente wiesaasbbsaasbbsaas
. Die Zeilen der Tafel werden in dieser Form mit ihren jeweiligen Zeichen erstellt und dann auf diese Weise verschachtelt, um das Ergebnis zu erhalten.quelle
n=0
. Die Mehrheit der Lösungen (die akzeptiert werden) ergibt "+". Diese Lösung erzeugt "++ (newline) ++" mit Ausnahme der normalen zwei nachgestellten Zeilen (was erlaubt ist).Ruby: 83 Zeichen
Probelauf:
quelle
Rubin, 87
Dies ist eine anonyme Funktion. Nenne es so (alle Möglichkeiten von 0 bis 5)
Die
ljust
Methode wird für eine leere Zeichenfolge verwendet. Ruby ermöglicht die Angabe einer Auffüllzeichenfolge zur Rechtfertigung. Daher verwenden wirljust
eine der drei möglichen Auffüllzeichenfolgenb,c,d
pro Arraya
, sortiert nachbccbdd
.quelle
Julia, 124 Bytes
Dadurch wird eine unbenannte Funktion erstellt, die eine Ganzzahl akzeptiert und nach stdout druckt.
Ungolfed + Erklärung:
quelle
Javascript, ES6 149
Ziemlich lustig zu schreiben, obwohl es ein bisschen lang ist
Funktioniert mit Firefox
1 - Konsole öffnen
2 - Geben Sie Folgendes ein
Ausgabe (n = 15):
quelle
join('\n')
mitjoin` `
, wo der Raum , den ich schrieb bezeichnet eine tatsächliche Zeilenendmarke.Haskell, 99
Dies ist teilweise inspiriert von der vorherigen Haskell-Antwort von catgocat ; Ich habe meine eigene Version geschrieben, sie dann angeschaut und eine andere geschrieben. Ich spiele nach den gleichen Regeln - die Eingabe ist ein Argument, aber die Ausgabe ist stdout. (Wenn es sich um eine reine Funktion handeln könnte, subtrahieren Sie 7 Zeichen
putStr$
.)Wir verwenden
t
, um einen Bereich von 3 n + 1 Zeichen von einem unendlichen Schachbrett zu nehmen, das mit gebaut wurdecycle
, und das war's. Die Hauptidee, die ich aus der anderen Antwort gezogen habe, besteht darin, die Muster sowohl der Rand- als auch der Kontrollzelle zusammenzufügen in Strings.Meine erste Version (140 Zeichen) verwendete die Strategie, das Zeichen an jedem Punkt zu berechnen, was für ein komplexeres Problem möglicherweise besser ist als dieses.
quelle
cat <<EOF > sol1.hs
und mit zähledu -b sol1.hs
.wc
stimmt zu, und ich habe nach nicht druckbaren Zeichen gesucht. Enthält diese 84-Bit - Version laufen ? Wenn ja, nehme ich es :)Haskell, 118
Dies ist meine erste Antwort auf einen Haskell-Code und hier ist sie:
Mehr lesbare Version:
Ausgabe
quelle
f 1
Sollte 1 leeres Kästchen erscheinen, erscheintf 0
nur das Pluszeichen.C -
119101Verwendet nun die Berechnung ähnlich wie bei @ Sp3000 Antwort. Auch Paaroptimierungen.
ich denke, dass
?:
ist eine GCC-Erweiterung ...Alte Antwort:
Es behält 2 Koordinaten bei und berechnet ehrlich, welches Zeichen für jedes Paar gedruckt werden soll. Die Liste der zu druckenden Zeichen wird in einem Array gespeichert, und dies allein druckt ein "ungefärbtes" Gitter. Das erste Element des Arrays wird geändert, um schwarze Quadrate zu zeichnen.
Ich könnte dies so ändern, dass anstelle von zwei unabhängigen Koordinaten ein Wert hoch- oder (vielleicht sogar besser) runtergezählt wird, aber ich kann mich jetzt nicht darum kümmern.
Bonus - Ersetzen Sie 3 durch eine andere Zahl, erhalten Sie ein Programm, das ein gültiges Schachbrett mit einer anderen Zellengröße zeichnet.
quelle
awk - 91
Es war ein ziemlicher Kampf, es unter 100 zu bringen. Rückwärts zu zählen und den Match-Operator zu verwenden, waren die Durchbrüche;) Der Rest ist eine ziemlich einfache Logik.
quelle
Pyke, 47 Bytes, nicht konkurrierend
Probieren Sie es hier aus!
quelle