Contexte
Passez à "Tâche" si vous connaissez Tic-Tac-Toe (je pense que la plupart le sont!)
Tic-Tac-Toe est un célèbre jeu à deux joueurs. Il se compose d'un plateau 3x3 qui est rempli progressivement par deux joueurs (précisions ci-dessous); Le premier joueur utilise le personnage X
et l'autre utilise O
. Le gagnant est le premier à obtenir 3 caractères consécutifs et identiques ( X
ou O
), horizontalement, verticalement ou en diagonale. Dans le cas où le plateau est rempli et qu'aucun des joueurs n'a réussi à obtenir trois personnages consécutifs comme décrit ci-dessus, le jeu se termine par une égalité. Notez qu'il peut y avoir des places vides à la fin de la partie, dans le cas où l'un des joueurs gagne en moins de 9 coups au total (cela ne peut pas se produire en cas d'égalité).
Tâche
Étant donné un tableau Tic-Tac-Toe à la fin d'une partie (sous la forme d'une chaîne, d'une matrice, d'une liste plate de 9 valeurs ordonnées, de tout autre format décent), déterminez qui gagne la partie.
L'entrée sera constituée de valeurs distinctes et cohérentes , une pour
X
, une pourO
et une autre qui représente un emplacement vide.Votre programme devrait être capable de produire 3 valeurs distinctes, cohérentes et non vides: une au cas où il
X
gagne, une autre au cas où ilO
gagne ou une autre si les joueurs sont à égalité.Veuillez spécifier ces valeurs dans votre réponse. Vous pouvez supposer que l'entrée sera une carte Tic-Tac-Toe valide.
Cas de test
X
, O
, _
Sont les valeurs d'entrée ici; X wins
, O wins
Et Tie
sont pour la sortie.
X O X
O X _
O _ X
Sortie: X wins
.
X _ O
X O _
X O X
Sortie: X wins
.
X O X
_ O X
_ O _
Sortie: O wins
.
X O X
O O X
X X O
Sortie: Tie
.
Comme d'habitude, toutes nos règles standard s'appliquent. C'est le code-golf , le code le plus court en octets dans toutes les langues gagne!
la source
Réponses:
Gelée ,
16 1514 octetsUn lien monadique acceptant une liste de listes (les lignes - ou colonnes) avec les valeurs:
Retour des résultats:
Remarque: en utilisant une valeur de zéro pour
_
, et des valeurs égales mais opposées pourX
etO
, cette valeur (ici0.155
) peut être dans la plage(1/6, 1/7)
(exclusive aux deux extrémités) - J'ai seulement choisi une valeur dans cette plage qui a donné un résultat en virgule flottante précisément représentable pour les cas de victoire.Essayez-le en ligne!
Comment?
la source
Javascript (ES6),
10387 octetsContribution
1
2
0
Production
"111"
"000"
"T"
Explication
Cas de test
la source
Gelée , 18 octets
Essayez-le en ligne!
X
=1
,O
=-1
,_
=0
X gagne =
[1, 1, 1]
, O gagne =[-1, -1, -1]
, Tie =0
Entrée sous forme de liste de 3 listes de 3 éléments dans
(1, -1, 0)
chacune.la source
X
=1
,O
=2
,_
=3
, renvoie1
(X gagne),2
(O gagne) ou3
(égalité).Python 3 , 73 octets
Essayez-le en ligne!
Python 2 ,
1009592878277 octetsEssayez-le en ligne!
Prend l'entrée comme une chaîne séparée par des sauts de ligne
XO_
Les sorties:
{'XXX'}
pourX
,{'OOO'}
pourO
{}
pour une cravateFonctionne en coupant la chaîne en colonnes, colonnes et diagonales:
alors
'XXX'
et'OOO'
sont comparés aux tranches.Prend l'entrée comme une chaîne séparée par des sauts de ligne
XO_
Les sorties:
{'XXX'}
pourX
,{'OOO'}
pourO
{}
pour une cravateFonctionne en coupant la chaîne en colonnes, colonnes et diagonales:
puis
'XXX'
et'OOO'
sont comparés aux tranches.la source
[2::2]
tranche3579
, tout en[2:8:2]
donnant357
R,
118116115 octetsMerci à @ user2390246 pour deux octets supplémentaires.
Légèrement non golfé:
Renvoie
X
si X gagne,O
si O gagne etT
en cas d'égalité.Essayez-le en ligne!
la source
M[c(3,5,7)]
est plus court pour la diagonale opposéePerl 5 , 58 octets
Code de 56 octets + 2 fpr
-p0
.Essayez-le en ligne!
Les sorties
X
etO
pour les victoires, ouT
pour une égalité. Comprend un tas de code d'en-tête / pied de page pour tester tout à la fois.Alternative, 58 octets
Essayez-le en ligne!
la source
Python 2 ,
124118117 117115 octets[j*3:j*3+3]
au à[j*3:][:3]
.Essayez-le en ligne!
Valeurs d'entrée / sortie
X
est représenté comme1
O
est représenté comme2
_
est représenté commeNone
la source
[8,0,3,6,1,4,7,2,5,8,0,4,8,2,4,6]
->map(int,'8036147258048246')
map(ord,"...")
, bien qu'unnul
octet au milieu d'une chaîne n'ait pas fonctionné ...[j*3:j*3+3]
est[j*3:][:3]
. En remarque,j*3+3
c'est la même chose-~j*3
, mais c'est aussi 118 octets.01234567
...Python 3 , 173 octets
Essayez-le en ligne!
Entrée comme matrice de
1 == X, 0 == O, -1 == _
Sortie en tant que valeur unique:
2 == X, 1 == O, 0 == TIE
-8 octets grâce à Erik l'Outgolfer
la source
lambda x:h(x,1)*2or+h(x,0)
-8 octets et0 == TIE
(ce qui est plus joli imo).PHP, 70 octets
Suppose
-n
(interprète par défaut). Nécessite en outre-R
(exécuter<code>
pour chaque ligne d'entrée), compté comme un.L'entrée est prise sur une seule ligne (exactement comme dans la description du problème, sauf avec tous les espaces supprimés).
La sortie est la suivante:
1
→ X Wins,-1
→ O Wins,0
→ Tie.Essayez-le en ligne!
la source
'X Wins'
peut être changé en'X'
(ou même un entier - disons1
). Il en va de même pour'O wins'
etTie
. Cela étant dit, 109 octets .Rétine , 49 octets
Essayez-le en ligne! Prend l'entrée sous la forme d'une chaîne de 11 caractères de 9
X
s,O
s ou-
s dans trois groupes de trois séparés par;
s, bien que le lien comprenne un en-tête qui traduit les cas de test donnés dans ce format. Fonctionne en faisant correspondre une ligne gagnante directement à l'aide d'un groupe d'équilibrage pour garantir que les trois caractères correspondants sont équidistants. (Les distances appropriées sont 0 (ligne horizontale), 4 (diagonale inversée), 5 (ligne verticale) ou 6 (diagonale); d'autres distances atteindraient;
ou s'étendraient en dehors de la chaîne.)la source
Java 8,
1121081061049010293 bytes+12 octets (90 → 102) en raison d'une correction de bogue consistant à ne vérifier qu'une seule diagonale au lieu des deux.
-9 octets (102 → 93) en utilisant
replaceAll
au lieu dematches
.Entrée dans le format
XOX OX_ O_X
, la sortieX
,O
ouT
.Explication:
Essayez-le ici.
Explication regex:
la source
Rétine , 127 octets
Essayez-le en ligne!
... Je suppose que vous pourriez appeler cette force brute ... Je pensais qu'il pourrait y avoir un certain mérite ...
la source
Rétine , 51 octets
Port de ma réponse Java 8 . Entrée au format
XOX OX_ O_X
, sortieX
,O
ouT
.Explication:
Essayez-le ici.
la source
J, 34 octets
Non golfé:
Explication
Codage:
Notre stratégie de haut niveau consiste d'abord à créer une matrice dont chacune des rangées est une victoire possible. La ligne 1 est diagonale /, la ligne 2 est diagonale \, les trois lignes suivantes sont les lignes et les trois dernières lignes sont les colonnes. Cette partie est accomplie par la phrase (en utilisant le point Modifier
}
):Enfin, nous prenons le GCD de chaque ligne:
Grâce à notre encodage, toute ligne avec un blanc aura un GCD de 1, de même que toute ligne contenant un mélange de X et d'O, car 2 et 3 sont coprimes. Donc, tout ce que nous devons faire ensuite est de trouver l'élément maximum:
>./
Si le jeu est une égalité, ce sera 1. Si un joueur gagne, ce sera le numéro de ce joueur.
Essayez-le en ligne!
la source
JavaScript, 66 octets
Garder les choses simples.
0
correspondant à un espace vide,1
un X et2
un O.0
pour une cravate,1
pour la victoire X,2
pour la victoire O.Développé, légèrement commenté:
la source