Einführung
So sieht ein Schachbrett aus.
Sie können sehen, dass dies a1
ein dunkles Quadrat ist. Ist b1
jedoch ein helles Quadrat .
Die Aufgabe
Die Herausforderung ist, gegeben dark
, light
oder der both
Ausgang all dunkel , Licht oder alle Quadrate mit einem Separator (wie ein Leerzeichen oder einer neuen Zeile). Die Reihenfolge aller Quadrate spielt keine Rolle .
Testfälle
Input: dark
Output: a1 a3 a5 a7 b2 b4 b6 b8
c1 c3 c5 c7 d2 d4 d6 d8
e1 e3 e5 e7 f2 f4 f6 f8
g1 g3 g5 g7 h2 h4 h6 h8
Input: light
Output: a2 a4 a6 a8 b1 b3 b5 b7
c2 c4 c6 c8 d1 d3 d5 d7
e2 e4 e6 e8 f1 f3 f5 f7
g2 g4 g6 g8 h1 h3 h5 h7
Input: both
Output: a1 a2 a3 a4 a5 a6 a7 a8
b1 b2 b3 b4 b5 b6 b7 b8
c1 c2 c3 c4 c5 c6 c7 c8
d1 d2 d3 d4 d5 d6 d7 d8
e1 e2 e3 e4 e5 e6 e7 e8
f1 f2 f3 f4 f5 f6 f7 f8
g1 g2 g3 g4 g5 g6 g7 g8
h1 h2 h3 h4 h5 h6 h7 h8
Hinweis: Ich habe die Ausgabe hübsch gemacht, dies ist jedoch nicht erforderlich .
Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
a2a4a6...
wäre so etwas in Ordnung?[[a2,a4,a6,a8],[...]...]
light
,dark
undboth
Eingabe in Bezug auf seinString
s oder sie können über einen beliebigen Datentyp dargestellt werden?Antworten:
Pyth,
2221 Bytes-1 Byte von @ Sp3000
Unter der Funktion
%Chz3
,dark
Hashes bis 1,light
0 undboth
bis 2. Wenn wir die Parität der Summe der ords eines Schach Platz nehmen (das heißt,a1
->[97, 33]
->(97 + 33)%2
=0
, dunkle Felder gehen auf 0 und Licht auf 1 Dies ermöglicht es uns, nach Ungleichungen zu filtern.Probieren Sie es hier aus .
quelle
fn%Chz3%sCMT2sM*<G8S8
Bash + GNU Utilities, 74
{a..h}{1..9}
ist eine Bash-Klammer-Erweiterung, die alle Koordinaten für ein 8x8-Board sowie eine zusätzliche Spalte erzeugt9
. Dies ist wichtig, da dadurch die Zeilenlänge ungerade wird, was den Schachbretteffekt ermöglicht.Das
printf
formatiert einfach jede Koordinate, eine pro Zeile.Der erstellte sed-Ausdruck löscht dann alle
x9
Koordinaten und druckt je nach Skripteingabe entweder gerade oder ungerade oder beide Eingabezeilen.quelle
JavaScript (SpiderMonkey 30+),
90858382 BytesGibt eine durch Kommas getrennte Zeichenfolge von Quadraten zurück. Kompatible Version für 99 Bytes:
Zählen Sie alle 64 quadratischen Namen auf und analysieren Sie sie in Basis 19, um festzustellen, ob es sich um helle oder dunkle Modulo 2 handelt.
quelle
JavaScript (ES6), 82
87 98Anonyme Funktion, die eine durch Leerzeichen getrennte Zeichenfolge von Quadraten zurückgibt.
PRÜFUNG
quelle
Batch, 192 Bytes
quelle
Pyth,
4839 BytesProbieren Sie es hier aus!
Immer noch länger als die andere Pyth-Lösung, aber ich glaube nicht, dass ich das mit meinem Algorithmus übertreffen kann.
Erläuterung
Zuerst generieren wir eine Liste aller Felder auf der Tafel und weisen sie zu
Y
. Dann filtern wir diese Liste so, dass nur noch helle Quadrate übrig bleiben und weisen diese Liste zuJ
. Danach werten wir die Eingabe aus und drucken:Y
wenn Eingabe warboth
J
wenn Eingabe warlight
Y-J
wenn die Eingabe wardark
Das Bestimmen, ob ein Quadrat hell ist, funktioniert wie folgt:
18
füra8
usw.x%2 == y%2
)quelle
Python 2,
737170 BytesIch bin immer noch ein bisschen verwirrt, ob Funktionen für die Frage in Ordnung sind, da in der Challenge ein "Separator" erwähnt wird, aber da es viele andere Funktionsübermittlungen gibt, habe ich dasselbe getan.
Ähnlich wie Erwans Antwort, aber mit
vielmehr Python 2-ness.(-2 Bytes dank @xnor)
quelle
s=="dark"
unds[0]=="d"
aber zu meiner Verteidigung in meinem wirklich ersten Versuch habe ichs,*_=s
und 4cmp
ord(s[_])&_
oder gebenord(s[_])/_
.%
:) Danke!PHP,
132126120108106 BytesEs durchläuft die Spalten (0-7) und Zeilen (1-8) und prüft, ob die Summe von beiden gerade / ungerade ist.
Getestet mit PHP 5.6.4, führen Sie es aus:
php -d error_reporting=30709 -r '<CODE>' {dark|light|both}
quelle
$s==2
mit$s-1
. Wenn $ s = 2 und -1 ist, ist es 1, was wahr ist und fortgesetzt wird$c=0
kann sein$c
, es wird ein paar Hinweise geben, aber zumindest bei Dunkelheit funktioniert es gut$s-1
funktioniert nicht, aber es sollte. Danke für diese tolle Idee! Ich werde das später debuggen.$c
Variablen? Das klingt ein bisschen seltsam und ungültig. Oder nicht?Vitsy ,
9082 BytesErklärung der ersten Zeile:
Erklärung der zweiten Zeile:
Es wird Bonus-Zeilenumbrüche für 'dunkel' und 'beides' geben. Erfordert, dass nur "dunkel", "beide" oder "hell" eingegeben werden.
Probieren Sie es online!
quelle
PowerShell v3 +,
142129 BytesÜbernimmt die Eingabe
$a
und setzt zwei Variablen für die Ausgabe von Ark-$d
oder$l
Achtquadraten basierend auf dem ersten Buchstaben der Eingabe.Dann durchlaufen wir
a-h
und1-8
und verwenden denselben Trick wie bei. Bestimmen Sie die Farbe eines Schachfelds, um zu analysieren, ob es sich um ein helles oder dunkles Feld handelt (Hilfsvariable$q
im ersten Test festlegen), und fügen Sie dieses Feld gegebenenfalls zur Pipeline hinzu. Nach der Ausführung werden die Elemente in der Pipeline einzeln pro Zeile ausgegeben.Benötigt v3 oder neuer für den
-in
Betreiber.Bearbeiten - Speichert 13 Bytes, indem die
switch
und die Reihenfolge der Gleichheitsprüfungen geändert werdenquelle
Jolf, 48 Bytes
Für mich ist alles Griechisch ¯ \ _ (ツ) _ / ¯ Dies ist eine Übersetzung von edc65's exzellenter Antwort.
quelle
Perl, 69 + 3 = 72 Bytes
Zu laufen mit
perl -p
, für das ich 3 Bytes addiert habe.Weniger Golf-Version (etwas anders, da der Babycart-Betreiber das Formatieren schwierig macht):
Die Golfversion verwendet
"@{[]}"
; In der kommentierten Version wird verwendet@a=...; "@"
, dass der kommentierte Code weiterhin ausgeführt werden kann.quelle
map$l.$_,1..8
-1grep$i=!$i||$b,map
again -1C ++, 132 Bytes
Übernimmt die Eingabe über die Befehlszeile. Verwendet Pointer / Modulo Voodoo als Druckbedingung.
quelle
n
Schleife notwendig ist. Ich denke geschachtelt für Schleifeni
undj
würde ein paar Bytes abschneiden. Der(i+j)%2
Ansatz ist wirklich klug. Daran hatte ich nicht gedacht.(i//8+i%8)%2
dasselbe ist, so(i//8+i)%2
dass Sie einige Bytes gewinnen können, wenn Sie die Definition vonj=n%8
Java, 143
Hey, das ist nicht die längste Antwort :)
Die Eingabe wird als Befehlszeilenargument verwendet.
quelle
PHP,
998279767473 BytesVerwendet ISO 8859-1-Codierung.
Laufen Sie wie folgt (
-d
nur aus ästhetischen Gründen hinzugefügt):Das funktioniert so: Die Variable
$x
wird von 1 auf 71 erhöht, die Zahlen entsprechen den Zellen wie unten gezeigt.Daher
$x modulo 9
ergibt sich die Spaltennummer und$x / 9
liefert die Zeilennummer, die ich in einem Brief konvertieren Verwendungchr
. Der Code$z<c|$z>k^$x&1
ergibttrue
für inputboth
($z<c
) und beilight
oderdark
nur für die geraden bzw. ungeraden Zellen ($z>k ^ $x&1
). Das Ergebnis dieses Ausdrucks bestimmt, ob die Zellenkoordinaten dann gedruckt werden. Wenn sich schließlich$x modulo 9
ergibt0
, überspringe ich diese nicht vorhandene Zelle.18 bis17 Bytes (ein Fehler wurde behoben) eingespart, indem nur eine Schleife vorhanden war, wobei die Zahl in ein Zeichen umgewandelt wurde, anstatt umgekehrtxor
.125
der Ausdruck nicht mehr subtrahiert werden muss$x/9+69.9
, um die richtige Zeilennummer zu erhalten, bevor er in ein Zeichen konvertiert wird~ß
, um ein Leerzeichen zu ergebenquelle
JavaScript ES6,
187160159 BytesMir fehlt wahrscheinlich etwas schmerzlich Offensichtliches.Naja. Es hilft, wenn Sie das Array nicht reduzieren müssen.Gibt ein 2D-Array zurück.
Probieren Sie es hier aus:
Code-Snippet anzeigen
quelle
Rubin, 85
Ich denke, es gibt kürzere Wege, aber das ist eine nette Verwendung von
.upto
.quelle
R
12994 BytesIch wusste ich könnte das Board besser generieren :). Im Wesentlichen wird so eine invertierte Karte erstellt, bei der Gitterreferenzen herausgefiltert werden, bei denen der Schatten nicht mit der Eingabe übereinstimmt. Die Ausgabe ist durch Leerzeichen getrennt.
Ungolfed
Prüfung
quelle
Oracle SQL 11.2,
192180 BytesNicht golfen
Die v-Ansicht generiert die Koordinaten jedes Quadrats. Wenn die Summe der Koordinaten gerade ist, ist das Quadrat schwarz, sonst ist es weiß.
quelle
Rust,
263259244 BytesErweiterte Form:
quelle
MATL , 31 Bytes
Probieren Sie es online!
quelle
CJam, 29
Nur eine schnelle und schmutzige Lösung: p
Probieren Sie es online aus
Erläuterung:
quelle
Haskell,
1331161051009891 BytesDies ist mein erster Versuch, Haskell Golf zu spielen.
Mit etwas Hilfe von Michael Klein haben wir es geschafft, es unter 100 Zeichen zu bekommen!
quelle
c>0
fürc==1
undc<1
fürc==0
? Spart zwei Bytes.f r=[[[a,b]|a<-['a'..'h'],b<-['1'..'8']]!!i|i<-[0..63],even i||r<"l",odd i||r!!0/='d']
i
uns keine diagonalen Streifen geben. Einige lösen dies miti+i`div`8
(likex+y
). Andere beginnen mit['1'..'9']
und[0..71]
und behalten später nur diei`mod`9<8
Ergebnisse für 96 Byte bei. Dieser Hybrid unserer beiden Ansätze schlägt sich jedoch mit 91 Bytes gut:l=[0..7];f r=[["abcdefgh"!!x,"12345678"!!y]|x<-l,y<-l,odd(x+y)||r<"l",even(x+y)||r!!0/='d']
Mathematica 133 Bytes
Methode 1 : 108 Bytes. Dadurch wird die Karte als Tabelle mit Beschriftungen in jeder Zelle erstellt und je nach Bedarf werden helle oder dunkle Diagonalen oder Bänder zurückgegeben.
Methode 2 : 133 Bytes. Erstellt ein Array und wählt entsprechend der geraden und ungeraden Summe aus Zeilennummer und Spaltennummer jeder Zelle aus.
quelle
JS, 197 Bytes
quelle
Python (3.5),
1061009692 BytesVerwenden Sie den Trick von MegaTom
(i+j)%2
, um 6 Bytes zu gewinnenProbieren Sie es auf repl.it
Ergebnisse
Vorherige Version
quelle
C ++, 119 Bytes
Basierend auf MegaToms Trick.
quelle
C (gcc) , 112 Bytes
Probieren Sie es online!
Wenn a == 1 ist, ist ein Quadrat immer schwarz, wenn die "Ungerade" von Zeile und Spalte gleich ist, dh beide sind ungerade oder beide sind gerade. Das Gegenteil ist bei weißen Quadraten der Fall, bei denen sich Zeile und Spalte immer in ihrer Seltsamkeit unterscheiden.
Danach müssen nur noch Zeilen- und Spaltenschleifen kombiniert und eine Tabelle mit der Rangfolge der Operatoren herangezogen werden, bis ein ausreichendes Maß an Unverständlichkeit erreicht ist.
quelle