Es gibt ein Spiel namens Get Home , das auf dem Schachbrett gespielt wird. In diesem Spiel gibt es eine einzelne Figur, die von beiden Spielern abwechselnd bewegt wird. Es gibt einige Regeln, wie das Teil bewegt werden kann. In einem Zug muss ein Spieler einen der folgenden Schritte ausführen, um ein positives n zu erhalten .
n Leerzeichen nach oben
n Leerzeichen nach links
n Felder nach oben und links (eine Diagonale)
Der Spieler, der die Figur in die obere linke Ecke des Bretts legt, gewinnt das Spiel.
Nun definieren wir das Konzept eines Verlustquadrats. In diesem Video (von dem ich die Idee hatte) wird ein Verlierquadrat als ein Quadrat definiert, auf dem jeder Spieler, der seinen Zug beginnt, einen Zug ausführen muss, damit sein Gegner einen Sieg erzwingen kann. Das einfachste Beispiel für ein Verlustquadrat wäre das Quadrat bei (1,2). Ein Teil von (1,2) kann an eine der folgenden Stellen verschoben werden.
Alle haben einen direkten Weg zum Sieg für den nächsten Spieler.
Daraus folgt auch, dass jeder Spieler, der einen Ein-Zug-Weg zu einem verlierenden Feld hat, dem Spieler, der auf diesem Feld beginnt, einen Gewinn erzwingen kann. Dies bedeutet, dass jedes Quadrat, das sich nicht von einem verlierenden Quadrat entfernt, auch ein verlierendes Quadrat ist.
Dies bringt uns zu dieser ziemlich ordentlichen Definition eines Verlustquadrats:
Ein Verlustquadrat ist ein Quadrat, von dem aus keine Bewegung auf ein anderes Verlustquadrat gelangen kann, und (0,0) ist ein Verlustquadrat.
Aufgabe
Anhand der Koordinaten eines Quadrats auf einem beliebig großen Schachbrett können Sie feststellen, ob es sich um ein verlorenes Quadrat handelt. Geben Sie zwei Werte ein, um Quadrate zu verlieren, und einen für andere.
Dies ist Codegolf, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Testfälle
Hier sind alle Verlustquadrate auf einem regulären 8 x 8-Schachbrett (mit 0 markiert).
0 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1
1 0 1 1 1 1 1 1
1 1 1 1 1 0 1 1
1 1 1 1 1 1 1 0
1 1 1 0 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1
Hier ist ein Bild von einem 100 x 100-Brett mit schwarzen Verlustquadraten (jedes Quadrat ist 2 x 2 Pixel groß).
quelle
10, 7
ein Platz zu verlieren? Ist10, 8
? Was ist15, 11
?Antworten:
Python 3 ,
112504642 Bytes-4 Bytes danke an Jonathan Allan !
-2 Bytes dank xnor !
Probieren Sie es online!
Basiert auf der Formel für kalte Positionen in Wythoffs Spiel und nimmt einige Änderungen vor, um eine explizite Formel zu erstellen. Erklärung eingehend, sobald ich eine korrekte Methode für die Ableitung der Formel tatsächlich beendet habe.
quelle
0<=x
zux>0
und speichern ein Byte oder zwei?<=
oder>=
um Position einzuschließen0, 0
.lambda r,c:int(abs(r-c)*(5**.5+1)**2/4)==max(r,c)
/2//1
sieht genauso aus wie//2
.Gelee , 8 Bytes
Probieren Sie es online! , oder sehen Sie links oben 60 mal 60 als Gitter .
Wie?
Eine kalte Position in Wythoffs Spiel ist eine verlorene Position. Die Koordinaten
[n,m]
geben eine kalte Stellung , wennn = floor(kφ) = floor(mφ) - m
oderm = floor(kφφ) = ceil(nφ) = n + k
für eine natürliche Zahl,k
und das goldene Verhältnisφ
. Ersteres gilt, wennn
kleiner ist alsm
; Letztererm
ist kleiner alsn
(beide halten an0,0
).k
ist also der absolute Unterschied zwischenn
undm
und wennfloor(abs(n-m)φ)=min(n,m)
die Bedingung erfüllt ist.quelle
JavaScript (ES6), 64 Byte
Ich sehe jetzt, dass dies nicht die beste Technik ist, aber ich musste es mir selbst einfallen lassen, weil ich kurz nach dem Laden dieser Seite das Internet verloren habe. (Hätte vor einiger Zeit gepostet, wenn nicht für diese Internetprobleme ...)
In einer perfekten Welt wäre Float-Präzision kein Problem und ich könnte 9 Bytes einsparen:
6 weitere Bytes könnten eingespart werden, wenn JS Pythons Vergleichsverkettung unterstützt:
quelle
Pyth, 39 Bytes
Ich schrieb dies mit einer benannten Funktion (ew) und war extrem faul beim Golfen. Wir planen, heute Abend einige Bytes später Golf zu spielen
Probieren Sie es online aus, mit meinen selbst erstellten Tests, die Richtig / Falsch abwechseln sollen
Erläuterung:
Diagonalen der Lösungsmatrix haben ein Verlustquadrat gemäß der Folge von Wiederholungszahlen in OEIS A005206 . Von
L
Anfang an;
ist die polnische Notation ziemlich einfach zu definiereny(b)=b-y(y(b-1))
.Der Rest der Erklärung folgt
quelle
Batch, 204 Bytes
Rückgabe über Exit-Code. Erklärung: Da Batch nur Ganzzahlarithmetik hat, musste ich eine rein arithmetische Lösung finden. Mit Ausnahme der
0,0
Eingabe folgen die Paare von verlierenden Quadratkoordinaten der folgenden Regel: Wenn die nächste11
freie Binärzahl gerade ist, addieren Sie3,2
ansonsten addieren2,1
. Ein Test für eine11
-freie Binärzahl ist, wenn es keine Überträge gibt, wenn es mit drei multipliziert wird, mit anderen Worten, dass(i*2)+i==(i*2)^i
. Hier sind die ersten paar11
-freien Binärzahlen und ihre Koordinaten:etc. Mysteriöserweise reicht diese Regel aus, um die Sequenzen komplementär zu machen. Es bleibt dann die Sequenz zu berechnen, bis es die größere Koordinate erreicht, an welchem Punkt wir bestimmen können, ob das Quadrat verliert.
quelle