Orologio (gioco di carte)


14

L'orologio è un gioco di carte interessante, in quanto non richiede abilità. È una partita a giocatore singolo e la stessa configurazione delle carte porta sempre a una vittoria o una perdita. In questa sfida, devi capire se una determinata configurazione di carta vince o perde . Puoi giocare qui .

Il gioco si gioca come segue:

  1. Tredici pile di carte vengono distribuite coperte. Ogni pila è numerata da 0 a 12.
  2. Impostiamo la pila 0 come pila corrente
  3. Giriamo a faccia in su la prima carta del mazzo attuale.
  4. Spostiamo la carta scoperta nella parte inferiore del rispettivo mazzo (una carta 4 va sotto il 4 ° mazzo) . La carta rimane scoperta. Questa pila diventa la pila corrente.
  5. Se la pila attuale è completamente scoperta, allora il gioco è finito. Altrimenti, tornare al passaggio 3.

Suggerimento: il gioco finirà sempre sulla 0a pila

Il gioco si vince se tutte le carte vengono scoperte e si perde se rimangono carte coperte.

Input Output

Un array 2D contenente ciascuna delle pile. Le carte sono rappresentate con numeri da 0 a 12 (il seme è irrilevante e non dato). La prima carta di ogni pila è il primo elemento di ogni matrice.

Puoi presumere che l'input sarà ben formato: conterrà 52 carte da 0 a 12 (incluso) e conterrà ogni numero esattamente 4 volte.

Devi restituire un valore veritiero se il gioco può essere vinto e falsare se non lo è.

Casi test

Truthy:

[[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]]

Risposte:


9

ES6, 57 byte

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

Questo funziona perché solo le carte in fondo alle pile 1-12 sono rilevanti e devono formare un grafico diretto per accumulare 0. Quindi, conto il numero di pile la cui carta in fondo è 0, quindi il numero di pile il cui la carta in fondo era una delle pile che ho contato prima, ecc. Se raggiungo 12 pile, la configurazione è vincente.

Prova di contorno:

Il gioco termina sempre quando giri gli ultimi 0, dal momento che quel mazzo ha effettivamente una carta in meno rispetto alle altre.

Se le carte in basso sulle pile 1-12 formano un grafico diretto per accumulare 0, quindi per cancellare la pila 0, dobbiamo cancellare tutte le pile la cui ultima voce è 0, e così via ricorsivamente a tutte le pile che dobbiamo cancellare in modo che possiamo cancellare le pile la cui ultima voce è 0 e così via. La configurazione è quindi vincente.

Se le carte sul fondo delle pile 1-12 non formano un grafico diretto per accumulare 0, deve esistere almeno un ciclo. Nessuna pila in questo ciclo può essere eliminata, poiché dipende dalla pila precedente nel ciclo. (Nel caso di un ciclo di lunghezza 2, questa è una situazione a base di gallina e uovo.) La configurazione è quindi perdente.


7

CJam, 23 21 byte

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

Esegui tutti i casi di test.

Se l'assegnazione di verità e falsità fosse l'opposto, potrei salvare 3 byte:

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

Spiegazione

Mettere le carte scoperte sotto un'altra pila è un'aringa rossa. Potremmo anche rimuoverli dal gioco e continuare a giocare fino a quando la pila corrente è vuota. Quindi è quello che sto facendo: il codice semplicemente gioca fino a quando il mazzo attuale è vuoto e quindi controlla se ci sono carte rimaste.

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.

4

Haskell, 85 byte

(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)

4

Pyth, 13 byte

!su@LGGXeMQZZ

Si affida alla prova di @ Neil. !su&VG@LGGeMQfunziona anche.

                 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

Provalo qui .


La riga della richiesta è troppo grande (7173> 4094)
Insane il

Risolto il collegamento.
lirtosiast,

1

Python, 55 byte

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

Se l'elenco secondario non è vuoto, continuare a visualizzare gli elementi. Quando è vuoto, Restituisci o tutte le liste sono vuote (raggruppandole in una grande lista) oppure no.


Ottengo False per il primo vero test case usando Python 3.4.2.
lirtosiast

Sto prendendo l'ultimo elemento di ogni elenco, quindi è necessario capovolgere gli elenchi: l = [i [:: - 1] per i in l]
Dantal

1
La domanda dice esplicitamente che il primo elemento di ogni elenco è il primo. Dovrai includere il codice da capovolgere nel conteggio dei byte.
lirtosiast

Fisso. Ora sta aprendo il primo oggetto.
Dantal,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.