La banque a été cambriolée et tous les voyous de la mafia locaux ont un alibi inhabituel: ils étaient chez eux en train de jouer à Connect 4! Afin de faciliter l’enquête, il vous est demandé de rédiger un programme validant toutes les cartes Connect 4 saisies afin de vérifier que les positions sont bien des positions d’un jeu Connect 4 valide et qu’elles n’ont pas été assemblées à la hâte. dès que la police a frappé à la porte.
Les règles pour connecter 4: les joueurs R
et les joueurs Y
déposent à tour de rôle les carreaux de leur couleur dans les colonnes d’une grille 7x6. Lorsqu'un joueur lâche une tuile dans la colonne, il tombe pour occuper la position non remplie la plus basse de cette colonne. Si un joueur réussit à obtenir une série horizontale, verticale ou diagonale de quatre tuiles de sa couleur sur le tableau, il gagne et la partie se termine immédiatement.
Par exemple (avec R
démarrage), voici une position impossible pour Connect 4.
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | |
| | |Y| | | | |
|R| |Y| | | | |
Votre programme ou fonction doit intégrer une carte Connect 4 et renvoyer soit
- Une valeur de fausseté, indiquant que la position est impossible ou
- Une chaîne de nombres de 1 à 7, ce qui indique une séquence de coups menant à cette position (les colonnes sont numérotées
1
à7
partir de gauche à droite, et ainsi de la séquence112
, par exemple, indique un mouvement rouge dans la colonne1
, suivi d'un mouvement jaune dans la colonne1
, suivi d'un mouvement rouge dans la colonne2
). Vous pouvez choisir une numérotation de colonne autre que 1234567 si vous le souhaitez, dans la mesure où vous le spécifiez dans votre solution. Si vous souhaitez renvoyer la liste dans un autre format; Par exemple, en tant que tableau,[2, 4, 3, 1, 1, 3]
c'est très bien aussi, tant qu'il est facile de voir quels sont les déplacements.
Vous pouvez choisir de lire la carte dans dans tout format raisonnable , y compris en utilisant des lettres autres que R
et Y
pour les joueurs, mais vous devez spécifier quel joueur commence. Vous pouvez supposer que le plateau sera toujours 6x7, avec deux joueurs.
Vous pouvez supposer que les postes que vous recevez sont au moins physiquement possibles à créer sur une carte Connect 4 standard; c'est-à-dire qu'il n'y aura pas de pièces "flottantes". Vous pouvez supposer que le tableau sera non vide.
C'est le code de golf, donc la réponse la plus courte gagne. Les failles standard s'appliquent.
Exemples
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 1234567 (one possible answer)
| | | | | | | |
|R|Y|R|Y|R|Y|R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | | --> false
| | |Y| | | | |
|R| |Y| | | | |
| | | | | | | |
| | |Y| | | | |
| | |R| | | | |
| | |Y| | | | | --> 323333 (only possible answer)
| | |R| | | | |
| |Y|R| | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> false (this is the position arising after
| |Y|Y|Y|Y| | | the moves 11223344, but using those moves
| |R|R|R|R| | | the game would have ended once R made a 4)
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> 2134231211 (among other possibilities)
|R|R|Y| | | | |
|Y|R|R|Y| | | |
| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | | --> false (for example, 21342312117 does not
|R|R|Y| | | | | work, because Y has already made a diagonal 4)
|Y|R|R|Y| | |R|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 112244553 or similar
|Y|Y| |Y|Y| | |
|R|R|R|R|R| | |
la source
Réponses:
Gelée , 57 octets
Prend une matrice où
0
est non rempli,1
joué en premier et2
joué en second. Donne une liste de colonnes indexées 1, vides si un faux est identifié.Essayez-le en ligne! (trop inefficace pour plus de 7 pièces à exécuter en moins d'une minute)
Remarque:
ZṠṢ€Ƒȧ
des préfixes pour +6 octets)la source
JavaScript (ES6),
202 194 187183 octetsPrend les entrées sous forme de matrice avec pour le rouge, pour le jaune et pour le vide. Retourne une chaîne de mouvements indexés 0 (ou une chaîne vide s'il n'y a pas de solution). Les rouges commencent la partie.2 4 0
Essayez-le en ligne!
Comment?
La fonction récursive tente de remplacer tous les et de la matrice d’entrée par et respectivement.g 2 4 1 3
Ce faisant, nous nous assurons que nous n’avons aucune séquence de quatre valeurs impaires consécutives tant que toutes les valeurs paires n’auront pas disparu (c’est-à-dire que si un camp gagne, ce doit être le dernier coup).
La ligne du prochain emplacement disponible pour chaque colonne est stockée dans .y x p[x]
Commenté
la source
f([ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,2,0,2,0,0], [0,2,2,0,2,2,0], [1,1,1,1,1,1,1] ])
termine par0
etf([ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,2,0,2,0,0], [2,2,2,0,2,2,1], [1,1,1,1,1,1,1] ])
devrait être vraiPython 2 ,
295285 octetsEssayez-le en ligne!
-10 thx à Jo King .
L'entrée est une liste de chaînes représentant les colonnes; avec '1' pour le rouge et '0' pour le jaune. Les cordes ne sont pas capitonnées. Donc, le cas (falsey):
est entré comme:
La sortie est une liste d'index de colonnes, indexés sur 0, qui pourraient faire le tableau; ou
None
si ce n'est pas valide.Accepte le tableau vide comme valide (renvoie la liste vide à la
[]
place deNone
).Cette approche est récursive du dernier mouvement au premier mouvement: sur la base de la parité du nombre total de mouvements effectués, nous supprimons le dernier mouvement rouge ou le dernier mouvement jaune (ou échouons si cela n’est pas possible); vérifier le tableau résultant pour voir si l'adversaire a 4 rangées de suite (auquel cas échouer, car le jeu aurait déjà dû s'arrêter); sinon, recurse jusqu'à ce que le tableau soit vide (ce qui est valide).
Le code 4-in-a-row est la partie la plus floue. Toutes les chaînes diagonales de la matrice
b
sont générées par:qui énumère d’abord les diagonales «en pente descendante», puis les diagonales «en pente descendante».
la source