Siehe auch: Mach einen Zug auf einem Go-Brett .
Aufgabe
Go ist ein Brettspiel, bei dem zwei Spieler (Schwarz und Weiß) Steine auf die Schnittpunkte der Gitterlinien auf einem 19 × 19-Brett legen. Schwarz zieht zuerst - zum Beispiel auf D4:
In dieser Herausforderung müssen Sie eine Go-Brett-Koordinate wie D4
als Eingabe nehmen und eine ASCII-Darstellung eines Brettes mit dem ersten Zug ausgeben, der an dem angegebenen Punkt gespielt wird.
Es ist zu beachten, dass es keine Spalte I gibt. Dies dient historisch gesehen dazu, die Verwechslung mit J und L zu verringern.
Diese Ausgabe besteht aus 19 Zeilen mit jeweils 19 Zeichen. Der Punkt mit dem Stein ist markiert O
. Leere Punkte auf dem Brett sind , wie gezeigt .
, mit Ausnahme der neun Sternpunkte (auf D4
, D10
, D16
, K4
, K10
, K16
, Q4
, Q10
, und Q16
), die gekennzeichnet sind *
.
Beispiel: F5
Als Eingabe muss die Ausgabe Ihrer Antwort lauten:
...................
...................
...................
...*.....*.....*...
...................
...................
...................
...................
...................
...*.....*.....*...
...................
...................
...................
...................
.....O.............
...*.....*.....*...
...................
...................
...................
Und Q16
als Eingabe angegeben, muss Ihre Ausgabe sein:
...................
...................
...................
...*.....*.....O...
...................
...................
...................
...................
...................
...*.....*.....*...
...................
...................
...................
...................
...................
...*.....*.....*...
...................
...................
...................
Regeln
Sie können eine Funktion schreiben, die die Koordinate als Argument verwendet, oder ein Programm, das die Koordinate von der Befehlszeile oder von liest
STDIN
.Sie können wählen, ob Sie Eingaben in Klein- oder Großbuchstaben akzeptieren möchten, Ihre Antwort muss jedoch nicht beide behandeln.
Die Eingabe ist immer eine einzelne Zeichenfolge wie
a1
oderT19
, niemals eine Zeichenfolge + Zahl oder zwei Zeichenfolgen.Wenn Sie ein vollständiges Programm schreiben, muss Ihre Antwort
STDOUT
als Zeichenfolge gedruckt werden , optional gefolgt von einer abschließenden Newline. Wenn Ihre Antwort ist eine Funktion, können Sie druckenSTDOUT
, oder einen String zurückgeben, oder einen Array / Liste von Strings (Zeilen), oder geben eine zweidimensionale Anordnung oder verschachtelte Liste von Zeichen.Das ist Code-Golf . Die kürzeste Antwort in Bytes gewinnt.
f("G", 14)
, richtig?Antworten:
MATL , 33 Bytes
Probieren Sie es online!
Erläuterung
quelle
C
21219519318117113210398 Bytes1 Byte dank @FryAmTheEggman gespeichert, 5 Byte dank @orlp
Rufen Sie
f()
mit der Position zum Spielen an (muss in Großbuchstaben geschrieben werden), und es wird die resultierende Tafel ausgedruckt.Probiere es auf ideone aus .
quelle
putchar(i%20?i^20*atoi(p+1)+64-*p+(*p>72)?i%6^4|i/20%6^3?46:42:79:10)
C (gcc),
132128109Ideone
Eine Funktion, die die Karte nach STDOUT druckt. Erfordert die Buchstabenkoordinate als Großbuchstaben. Das Drucken in einer Schleife scheint etwas kürzer zu sein als beim vorherigen Ansatz mit verschachtelten Schleifen.
quelle
MATLAB, 135 Bytes
Ein erster Versuch, nichts Schlaues, nur um zu sehen, wie viel besser andere können:
Verwendung:
quelle
a=input('');
); Zeilenumbrüche entfernen; wechseln'*'
zu42
und'0'
zu48
; ersetzenend
durch19
; subtrahieren Sie den logischen Wert direkt anstelle derif
Verzweigung. In der Tat können Sie die letzten fünf Zeilen durchb(20-a(2),a(1)-64-(a(1)>8))=48
Ruby,
9391 BytesÜbernimmt Eingaben in der Kommandozeile, z
$ ruby script.rb Q16
.Testen Sie es auf repl.it (dort in ein Lambda eingeschlossen, da repl.it keine Befehlszeilenargumente akzeptiert: https://repl.it/CkvT/1
Ungolfed
quelle
$><<
anstattputs
. Bin mir aber nicht sicher.Gehen,
319286 BytesWahrscheinlich golfen ein bisschen aufhören, ich bin ein Anfänger
quelle
part
in speichernp
?Ruby,
130128121 + 3 (-n
Flag) = 124 BytesUmgestellt
-p
auf,-n
weilputs b
ein Byte kürzer ist als$_=b*$/
quelle
Python,
148145136130121119116 Bytes-3 Bytes dank @RootTwo
anonyme Lambda-Funktion, übernimmt die Eingabe der Form "A1" (Großbuchstaben) und gibt eine Liste mit Zeichenlisten aus (len == 1 Strings in Python)
quelle
".*oo"[2*(j==ord(x[0])-(x[0]>"I")-65and int(x[1:])==i+1)+(i%6==j%6==3)]
anstelle von"o"if...else"*"if...else"."
(x>'I')
anstatt(x[0]>'I')
zu 3 weitere Bytes zu speichern.> <> ,
9896 BytesBeachten Sie, dass sich
0x14
in der ersten Zeile nach der ersten'
und0x19
zwischen9
der ersten^
und der letzten Zeile eine befindet. Probieren Sie es online!Die Eingabe wird so zugeordnet, dass
A-T
sie1-19
(wobei 0 eine imaginäre "Newline" -Spalte bedeutet) wird und die ganzzahlige Zeilennummer um 1 dekrementiert wird. Das Programm führt eine Schleife von 379 bis 0 durch und wählt dabei ein Zeichen aus der untersten Zeile aus ( um 15 versetzt, um die Tatsache zu berücksichtigen, dass Sie in der Codebox keinen wörtlichen Zeilenumbruch eingeben können). Zeilenumbrüche werdeni % 20 == 0
mit und Sternchen mit geprüft((i%20-1)%6)*((i/20)%6) == 9
.quelle
F #,
241 237 225 216 214211 BytesTricky one this one ... Ich frage mich, ob es kürzer gemacht werden kann.
Bearbeiten: Fehler behoben, Nummern hinzugefügt, an einigen Stellen Nummern entfernt, irgendwie mit der gleichen Anzahl beendet.
Vielleicht versuchen Sie es später noch einmal.Fertig.Edit2: mehr Bytes gespart, indem eine der Bedingungen formuliert wurde, was sich intuitiv widerspiegelt.
Edit3: Ein weiterer Fehler wurde behoben: Sollte jetzt für Teile mit dem letzten Rang funktionieren und es gelang mir irgendwie, zwei Bytes zu sparen, während ich dabei bin.
Probieren Sie es online aus
quelle
Retina ,
134129122 Bytes11 Bytes danke an Martin Ender und für die Inspiration von 1 weiteren.
Probieren Sie es online!
quelle
Perl, 132 Bytes
-3 Bytes dank @Dom Hastings
Übernimmt die Eingabe über die Befehlszeile. Muss
-M5.010
laufen. Zum Beispiel :Ich denke, das könnte kürzer sein, aber ich konnte nicht herausfinden, wie ... lass es mich wissen, wenn du es tust!
quelle
@v=([(".")x18])x18;
, um die Liste zu initialisieren ... Es könnte sogar einen besseren Weg geben, aber ich bin gerade nicht an einem Terminal! Ich denke, Sie können die@{...}
Erweiterung auch durch Dereferenzierungspfeile ersetzen :$v[$_]->[@t]
Wieder ungetestet! Ich hoffe, es macht Ihnen nichts aus, wenn ich Ihnen Codeänderungen vorschlage ...@v=([(".")x19])x19
funktioniert nicht (ich habe es vor Übrigens versucht), weil es nur ein Arrayref erstellt und das 19-fache der Referenz kopiert, nicht das Array. Ersetzen,@{..}
wie Sie vorgeschlagen haben, scheint auch nicht zu funktionieren. Ich schätze, das liegt daran, dass ich an einem Slice arbeite und nicht nur an einem Element. Wenn Sie einen anderen Vorschlag haben, können Sie ihn gerne vorschlagen! :)eval
für -3 aber:@v=eval"[('*')x19],"x19;
. Und Sie sind zu 100% korrekt mit der Array-Referenz. Ist es vielleicht möglich, ein 1D-Array zu verwenden und den Index darin zu berechnen? Könnte später mehr damit spielen!Batch,
322310308 BytesErläuterung: Beginnt mit der Aufforderung, den Stein auf stdin einzugeben. Setzt dann Variablen für jede mögliche Spalte, so dass das erste Zeichen des Steins als Variable ausgewertet werden kann, um die
y
Koordinate zu erhalten. Subtrahiert 1 von derx
Koordinate, weil sie 1-indiziert ist und 0-indiziert sein soll, und berechnet auch,z=y+1
wie es später benötigt wird. Anschließend werdenr
für jede Zeile Schleifen von 18 bis 0 ausgeführt. Nimmt die Zeichenfolge...*.....*.....*...
und extrahiert das Zeichen an derr
dritten Position für später. In derx
dritten Zeile wird dasy
dritte Zeichen durch ein ersetzto
. Schließlich wird das.*
s durch ein.
Pluszeichen des zuvor extrahierten Zeichens ersetzt. Dies ist ein No-Op für die Zeilen 4, 10 und 16, aber dies ist der kürzeste Weg, um dies zu erreichen. (Ich muss benutzen.*
weil das Ersetzen*
in Batch anscheinend illegal ist.)quelle
PowerShell v2 +,
157152 Bytes(Ich glaube, ich bin mit dem Komma-Operator auf eine seltsame Panne gestoßen, daher ist die Array-Konstruktion etwas länger als sie sein sollte.)
Nimmt die Eingabe als Zeichenfolge in Großbuchstaben über
$args[0]
, wandelt sie in ein Zeichen-Array um, speichert den ersten Buchstaben$x
und die verbleibenden Buchstaben in$y
. Dies teilt die Eingabe effektiv in Buchstaben / Zahlen auf.Wir konstruieren dann unser mehrdimensionales Array
$a
. Wir füllen ein Array von Größen19
mit0
s vor, indem wir den Komma-Operator verwenden. Wir schleifen dann0..18
, um jedes Element$a[$_]
gleich zu machen, stattdessen ein Array von Punkten, wieder unter Verwendung des Komma-Operators. (NB - Theoretisch sollte dies in der Lage sein, komprimiert zu werden$a=,(,'.'*19)*19
, aber das scheint bei der Indizierungszuweisung nicht richtig zu funktionieren ... Ich habe es geschafft, ganze Spalten auf zu setzen.*
)Als nächstes durchlaufen wir die Schleife zweimal
3,9,15
, um die entsprechenden Elemente auf zu setzen*
. Wir indizieren es dann an der richtigen Stelle, um den Stein zu setzenO
. Dazu subtrahieren wir65
von$x
(dh ASCII "A" ist 65, und wir sind null-indiziert) und subtrahieren eine zusätzliche Eins unter Verwendung einer Umwandlung von Boolesch nach Int, wenn$x
größer ist als73
(dh ASCII "I"). ).Jetzt ist unsere Ausgabe umgekehrt (dh oben links wäre
A1
), also müssen wir das Array mit umkehren$a[18..0]
. Schließlich geben wir jede Zeile-join
zusammen als String aus.quelle
> <> 124 Bytes
Verwendet genau den gleichen Ansatz wie meine C-Antwort. Die Eingabe muss aus einem Großbuchstaben gefolgt von einer Dezimalzahl bestehen.
Probieren Sie es online!
Erläuterung:
quelle
JavaScript, 138 Bytes
Gibt ein Array von Zeichenfolgen zurück. Erläuterung:
quelle
join
. Außerdem setzt es das o in die falsche Zeile und die falsche Spalte für D5 (erster Testfall).R
169161 BytesMit Einrückungen und Zeilenumbrüchen:
Verwendung:
quelle
Lua, 187 Bytes
Ich fühle mich nicht schlecht wegen 187 für dieses spezielle Projekt. Lua kommt immer noch als sehr klobig zum Golfen heraus, aber ich bin ziemlich stolz darauf, wie weit ich damit kommen kann.
quelle
PHP,
280 268 263 261 255 218216 BytesMein erster Golf.
Verwendung:
Speichern Sie als PHP-Datei und rufen Sie sie
php filename.php coordinate
zB aufphp go.php k13
quelle