Horloge (jeu de cartes)

14

L'horloge est un jeu de cartes intéressant, car elle ne nécessite aucune compétence. Il s'agit d'un jeu à joueur unique, et la même configuration de carte entraîne toujours une victoire ou une perte. Dans ce défi, vous devez déterminer si une configuration de carte donnée gagne ou perd . Vous pouvez jouer au jeu ici .

Le jeu se joue comme suit:

  1. Treize piles de cartes sont distribuées face cachée. Chaque pile est numérotée de 0 à 12.
  2. Nous définissons la 0ème pile comme étant la pile actuelle
  3. Nous retournons la carte du dessus de la pile actuelle face visible.
  4. Nous déplaçons la carte face visible au bas de sa pile respective (une carte 4 passe sous la 4ème pile) . La carte reste face visible. Cette pile devient la pile actuelle.
  5. Si la pile actuelle est complètement face visible, la partie est terminée. Sinon, revenez à l'étape 3.

Astuce: le jeu se terminera toujours sur la 0ème pile

La partie est gagnée si toutes les cartes se trouvent face visible, et est perdue s'il reste des cartes face cachée.

Entrée sortie

Un tableau 2D contenant chacune des piles. Les cartes sont représentées par des nombres de 0 à 12 (la couleur n'est pas pertinente et n'est pas donnée). La carte du haut de chaque pile est le premier élément de chaque tableau.

Vous pouvez supposer que l'entrée sera bien formée: elle contiendra 52 cartes de 0 à 12 (inclus) et contiendra chaque nombre exactement 4 fois.

Vous devez renvoyer une valeur véridique si le jeu peut être gagné, et une fausse si ce n'est pas le cas.

Cas de test

Vérité:

[[11, 11, 7, 7], [8, 6, 5, 0], [2, 10, 9, 1], [12, 3, 0, 6], [8, 7, 4, 8], [3, 10, 5, 12], [11, 7, 1, 10], [3, 1, 6, 0], [2, 3, 0, 6], [5, 10, 5, 4], [12, 9, 11, 2], [9, 4, 12, 4], [1, 9, 8, 2]]
[[0, 9, 4, 8], [1, 4, 11, 3], [10, 12, 4, 0], [5, 9, 11, 5], [7, 0, 11, 2], [6, 5, 6, 0], [5, 7, 6, 7], [1, 10, 3, 4], [10, 11, 12, 3], [9, 9, 3, 6], [12, 12, 2, 1], [1, 8, 8, 2], [7, 2, 10, 8]]
[[11, 11, 9, 5], [3, 0, 1, 7], [6, 2, 9, 4], [6, 9, 11, 2], [10, 9, 6, 1], [12, 8, 10, 0], [2, 3, 12, 3], [3, 12, 5, 11], [4, 1, 8, 12], [7, 0, 2, 5], [4, 1, 10, 4], [7, 10, 6, 5], [8, 8, 0, 7]]
[[2, 3, 4, 11], [6, 12, 5, 9], [11, 0, 5, 9], [1, 8, 0, 12], [11, 9, 5, 8], [12, 7, 1, 0], [10, 3, 1, 11], [3, 12, 7, 2], [2, 7, 1, 5], [6, 3, 4, 10], [10, 10, 9, 8], [6, 2, 4, 4], [6, 8, 0, 7]]
[[1, 2, 12, 9], [5, 6, 4, 11], [0, 0, 7, 10], [9, 7, 12, 0], [12, 1, 8, 6], [10, 1, 4, 8], [9, 2, 6, 11], [10, 12, 1, 8], [6, 7, 0, 3], [2, 2, 5, 5], [8, 11, 9, 3], [4, 7, 3, 10], [5, 11, 4, 3]]
[[8, 12, 5, 3], [3, 10, 0, 6], [4, 11, 2, 12], [6, 1, 1, 12], [7, 6, 5, 0], [0, 8, 8, 7], [4, 8, 1, 2], [2, 3, 11, 6], [11, 10, 5, 2], [10, 1, 9, 4], [12, 5, 9, 7], [7, 3, 10, 9], [9, 0, 11, 4]]
[[3, 4, 8, 7], [2, 2, 8, 9], [12, 7, 0, 4], [4, 7, 10, 11], [5, 10, 3, 11], [10, 9, 8, 7], [5, 2, 11, 8], [6, 0, 3, 10], [9, 1, 4, 12], [12, 3, 12, 6], [2, 5, 1, 1], [6, 11, 5, 1], [6, 9, 0, 0]]
[[11, 9, 11, 1], [1, 3, 2, 8], [3, 3, 6, 5], [8, 11, 7, 4], [9, 4, 5, 1], [6, 4, 12, 6], [12, 10, 8, 7], [3, 9, 10, 0], [2, 8, 11, 9], [2, 4, 1, 0], [12, 5, 6, 0], [10, 7, 10, 2], [5, 0, 12, 7]]
[[9, 9, 6, 5], [7, 5, 11, 9], [8, 12, 3, 7], [1, 2, 4, 10], [11, 3, 3, 10], [2, 0, 12, 11], [4, 7, 12, 9], [3, 6, 11, 1], [1, 10, 12, 0], [5, 6, 8, 0], [4, 10, 2, 5], [8, 8, 1, 6], [0, 7, 2, 4]]
[[4, 0, 7, 11], [1, 5, 2, 10], [2, 9, 10, 0], [4, 12, 1, 9], [10, 12, 7, 0], [9, 4, 1, 8], [6, 6, 9, 12], [5, 3, 6, 2], [11, 3, 6, 4], [7, 3, 5, 5], [11, 8, 1, 11], [10, 7, 2, 8], [8, 12, 0, 3]]

Falsy:

[[8, 1, 6, 1], [7, 9, 0, 12], [11, 12, 12, 12], [11, 5, 9, 3], [2, 10, 9, 7], [11, 2, 0, 8], [0, 10, 4, 6], [8, 0, 4, 2], [6, 5, 3, 8], [4, 10, 3, 1], [5, 11, 9, 6], [7, 5, 1, 4], [2, 7, 3, 10]]
[[1, 4, 4, 6], [3, 11, 1, 2], [8, 5, 10, 12], [7, 10, 7, 5], [12, 8, 3, 7], [4, 0, 12, 12], [1, 1, 9, 6], [8, 7, 5, 10], [11, 0, 11, 0], [5, 10, 3, 11], [3, 2, 9, 8], [9, 6, 0, 2], [2, 6, 9, 4]]
[[10, 1, 10, 7], [12, 3, 11, 4], [0, 5, 10, 7], [5, 11, 1, 3], [6, 6, 9, 4], [9, 0, 8, 6], [9, 12, 7, 10], [1, 6, 3, 9], [0, 5, 0, 2], [4, 8, 1, 11], [7, 12, 11, 3], [8, 2, 2, 2], [8, 4, 12, 5]]
[[3, 8, 0, 6], [11, 5, 3, 9], [11, 6, 1, 0], [3, 7, 3, 10], [6, 10, 1, 8], [11, 12, 1, 12], [8, 11, 7, 7], [1, 8, 2, 0], [9, 4, 0, 10], [10, 2, 12, 12], [7, 4, 4, 2], [9, 4, 5, 5], [6, 2, 9, 5]]
[[0, 1, 9, 5], [0, 1, 11, 9], [12, 12, 7, 6], [3, 12, 9, 4], [2, 10, 3, 1], [6, 2, 3, 2], [8, 11, 8, 0], [7, 4, 8, 11], [11, 8, 10, 6], [7, 5, 3, 6], [0, 10, 9, 10], [1, 4, 7, 12], [5, 5, 2, 4]]
[[9, 8, 0, 6], [1, 1, 7, 8], [3, 2, 3, 7], [9, 10, 12, 6], [6, 12, 12, 10], [11, 4, 0, 5], [10, 11, 10, 7], [5, 3, 8, 8], [1, 2, 11, 4], [0, 5, 6, 0], [5, 9, 2, 4], [4, 2, 3, 11], [9, 1, 12, 7]]
[[4, 3, 5, 7], [1, 9, 1, 3], [7, 9, 12, 5], [9, 0, 5, 2], [7, 2, 11, 9], [1, 6, 6, 4], [11, 0, 6, 4], [3, 0, 8, 10], [2, 10, 5, 3], [10, 11, 8, 12], [8, 1, 12, 0], [7, 12, 11, 2], [10, 6, 8, 4]]
[[9, 5, 11, 11], [7, 7, 8, 5], [1, 2, 1, 4], [11, 11, 12, 9], [0, 12, 0, 3], [10, 6, 5, 4], [4, 5, 6, 8], [10, 9, 7, 3], [12, 6, 1, 3], [0, 4, 10, 8], [2, 0, 1, 12], [3, 9, 2, 6], [2, 7, 8, 10]]
[[4, 1, 5, 7], [7, 12, 6, 2], [0, 11, 10, 5], [10, 0, 0, 6], [10, 1, 6, 8], [12, 7, 2, 5], [3, 3, 8, 12], [3, 6, 9, 1], [10, 9, 8, 4], [3, 9, 2, 4], [11, 1, 4, 7], [11, 5, 2, 12], [0, 8, 11, 9]]
[[3, 11, 0, 1], [6, 1, 7, 12], [9, 8, 0, 2], [9, 6, 11, 8], [10, 5, 2, 5], [12, 10, 9, 5], [4, 9, 3, 6], [7, 2, 10, 7], [12, 6, 2, 8], [10, 8, 4, 7], [11, 3, 4, 5], [12, 11, 1, 0], [1, 3, 0, 4]]
Nathan Merrill
la source

Réponses:

9

ES6, 57 octets

a=>(g=n=>a.map((x,i)=>i&&x[3]==n&&++c&&g(i)),g(c=0),c>11)

Cela fonctionne parce que seules les cartes au bas des piles 1-12 sont pertinentes, et elles doivent former un graphique dirigé vers la pile 0. Donc, je compte le nombre de piles dont la carte du bas est 0, puis le nombre de piles dont la carte du bas était l'une des piles que j'ai comptées plus tôt, etc. Si j'atteins 12 piles, la configuration est gagnante.

Preuve de contour:

Le jeu se termine toujours lorsque vous retournez le dernier 0, car cette pile a effectivement une carte de moins que les autres.

Si les cartes du bas des piles 1-12 forment un graphique dirigé vers la pile 0, alors pour effacer la pile 0, nous devons effacer toutes les piles dont la dernière entrée est 0, et ainsi de suite récursivement à toutes les piles que nous devons effacer afin que nous puissions effacer les piles dont la dernière entrée est 0, etc. La configuration est donc gagnante.

Si les cartes au bas des piles 1-12 ne forment pas un graphique dirigé vers la pile 0, il doit exister au moins un cycle. Aucune pile de ce cycle ne peut être effacée, car elle dépend de la pile précédente du cycle. (Dans le cas d'un cycle de longueur 2, il s'agit d'une situation poulet et œuf.) La configuration est donc perdante.

Neil
la source
7

CJam, 23 21 octets

q~({(\a@+1$ff-m<(}h*!

Exécutez tous les cas de test.

Si l'affectation de la vérité et de la fausse était l'inverse, je pourrais économiser 3 octets:

q~{((\a@+1$ff-m<}h

Explication

Mettre les cartes face visible sous une autre pile est un hareng rouge. Nous pourrions aussi bien les retirer du jeu et continuer à jouer jusqu'à ce que la pile actuelle soit vide. C'est ce que je fais: le code joue simplement le jeu jusqu'à ce que la pile actuelle soit vide et vérifie ensuite s'il reste des cartes.

q~    e# Read and evaluate input.
(     e# Pull off the first (current) pile.
{     e# While the current pile is non-empty...
  (\  e#   Pull off the top card and swap with the remaining pile.
  a   e#   Wrap the pile in an array.
  @+  e#   Prepend it to the list of piles
  1$  e#   Copy the drawn card.
  ff- e#   Subtract it from all all remaining cards.
  m<  e#   Rotate the stack to the left by the drawn card
  (   e#   Pull off the top pile as the new current pile.
}h
*     e# The top pile is empty. Joining the other piles with it, flattens them.
!     e# Logical not, turns an empty array into 1 and a non-empty array into 0.
Martin Ender
la source
4

Haskell, 85 octets

(a:b)?n|n<1=tail a:b|1>0=a:b?(n-1)
l%i|null(l!!i)=all null l|1>0=l?i%(l!!i!!0)
f=(%0)
Damien
la source
4

Pyth, 13 octets

!su@LGGXeMQZZ

S'appuie sur la preuve de @ Neil. !su&VG@LGGeMQfonctionne également.

                 implicit: Q=input
! s u            Sum of (apply lambda G,H on ... until fixed point) equals 0
      @L         Index G into itself.
         G       
         G       
                  Apply that to:
      X                                            set to
        eM Q      Last elts of input, with the 
        Z                                      0th
        Z                                                 0

Essayez-le ici .

lirtosiast
la source
La ligne de demande est trop grande (7173> 4094)
Insane
Correction du lien.
lirtosiast
1

Python, 55 octets

x=lambda l,i=0:x(l,l[i].pop(0))if l[i]else[]==sum(l,[])

Si la sous-liste n'est pas vide, continuez à afficher des éléments. Lorsqu'il est vide, Retournez soit toutes les listes sont vides (en les regroupant dans une grande liste) ou non.

Dantal
la source
J'obtiens False pour le premier vrai cas de test en utilisant Python 3.4.2.
lirtosiast
Je prends le dernier élément de chaque liste, vous devez donc retourner les listes: l = [i [:: - 1] pour i dans l]
Dantal
1
La question dit explicitement que le premier élément de chaque liste est le haut. Vous devrez inclure le code à retourner dans votre nombre d'octets.
lirtosiast
Fixé. Maintenant, le premier élément apparaît.
Dantal
0

Gelée, 11 octets

‘ịa
Ṫ€ÇL¡S¬

Essayez-le ici .

lirtosiast
la source