Il y a un jeu appelé Get Home qui se joue sur un échiquier. Dans ce jeu, il y a une seule pièce qui est déplacée par les deux joueurs à tour de rôle. Il existe certaines règles pour déplacer la pièce. Lors d'un tour, un joueur doit effectuer l'un des mouvements suivants pour n positif .
n s'espace
n espaces à gauche
n espaces vers le haut et vers la gauche (une diagonale)
Le joueur qui déplace la pièce dans le coin supérieur gauche du plateau remporte la partie.
Nous allons maintenant définir le concept d'un carré perdant. Dans cette vidéo (d'où j'ai eu l'idée), une case perdante est définie comme une case sur laquelle, tout joueur commençant son tour sera obligé de faire un mouvement permettant à son adversaire de forcer une victoire. L'exemple le plus simple d'un carré perdant serait le carré en (1,2). Une pièce en (1,2) peut se déplacer vers l'un des endroits suivants.
Tous ont un chemin direct vers la victoire pour le prochain joueur.
Il s'ensuit également que n'importe quelle case qui a un chemin d'un mouvement vers une case perdante permet au joueur commençant sur cette case de forcer une victoire. Cela signifie que tout carré qui n'est pas éloigné d'un carré perdu est également un carré perdant.
Cela nous amène à cette définition plutôt soignée d'un carré perdant:
Une case perdante est une case d'où aucun mouvement ne peut arriver sur une autre case perdante et (0,0) est une case perdante.
Tâche
Étant donné les coordonnées d'un carré sur un échiquier de taille arbitraire, déterminez s'il s'agit d'un carré perdant. Sortez deux valeurs, une pour les carrés perdus et une pour les autres.
Il s'agit de code-golf donc les réponses seront notées en octets avec moins d'octets étant meilleurs.
Cas de test
Voici tous les carrés perdants sur un échiquier régulier de 8 x 8 (marqué par 0).
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
Voici une image d'une carte de 100 par 100 avec des carrés perdus marqués en noir (chaque carré fait 2 pixels par 2 pixels).
la source
10, 7
un carré perdant? Est-ce10, 8
? Et alors15, 11
?Réponses:
Python 3 ,
112504642 octets-4 octets merci à Jonathan Allan !
-2 octets grâce à xnor !
Essayez-le en ligne!
Basé sur la formule des positions froides dans le jeu de Wythoff et en faisant quelques modifications afin de produire une formule explicite. Explication entrante une fois que j'ai effectivement terminé une méthodologie appropriée pour le calcul de la formule.
la source
0<=x
pourx>0
et enregistrer un octet ou deux?<=
ou>=
afin d'inclure la position0, 0
.lambda r,c:int(abs(r-c)*(5**.5+1)**2/4)==max(r,c)
/2//1
ressemble à//2
.Gelée , 8 octets
Essayez-le en ligne! ou voyez la partie supérieure gauche 60 par 60 sous forme de grille .
Comment?
Une position froide dans le jeu de Wythoff est une position perdante. Les coordonnées
[n,m]
donnent une position de froid lorsquen = floor(kφ) = floor(mφ) - m
oum = floor(kφφ) = ceil(nφ) = n + k
pendant un certain nombre naturel,k
et le nombre d' or,φ
. Le premier tient quandn
est inférieur àm
; ce dernier quandm
est inférieur àn
(les deux se tenant à0,0
).k
est donc la différence absolue entren
etm
et sifloor(abs(n-m)φ)=min(n,m)
la condition est remplie.la source
JavaScript (ES6), 64 octets
Je vois maintenant que ce n'est pas la meilleure technique, mais j'ai dû l'inventer moi-même car j'ai perdu Internet peu de temps après le chargement de cette page. (J'aurais posté il y a quelque temps sans ces problèmes Internet ...)
Dans un monde parfait, la précision du flotteur ne serait pas un problème et je pourrais économiser 9 octets:
6 octets supplémentaires pourraient être enregistrés si JS supportait le chaînage de comparaison de Python:
la source
Pyth, 39 octets
J'ai écrit ceci avec une fonction nommée (ew), et j'étais extrêmement paresseux avec le golf. Je prévois de jouer au golf un certain nombre d'octets plus tard ce soir
Essayez-le en ligne, avec mes propres tests générés, destinés à alterner Vrai / Faux
Explication:
Les diagonales de la matrice de solution ont un carré perdant selon la séquence de nombres répétés dans OEIS A005206 . De
L
travers;
est une notation polonaise assez simple à définiry(b)=b-y(y(b-1))
.Le reste de l'explication suit
la source
Lot, 204 octets
Renvoie via le code de sortie. Explication: Étant donné que Batch n'a qu'une arithmétique entière, j'ai dû concevoir une solution purement arithmétique. Hors le
0,0
entrée, les paires de coordonnées carrées perdantes suivent la règle suivante: si le prochain11
nombre binaire libre est pair, alors ajoutez3,2
sinon2,1
. Un test pour un11
nombre binaire libre est s'il n'y a pas de portage lorsqu'il est multiplié par trois, c'est-à-dire que(i*2)+i==(i*2)^i
. Voici les premiers11
nombres binaires libres et leurs coordonnées:etc. Mystérieusement, cette règle suffit à rendre les séquences complémentaires. Il reste alors à calculer la séquence jusqu'à ce qu'elle atteigne la coordonnée la plus grande, point auquel nous pouvons déterminer si le carré perd.
la source