시계 (카드 게임)


14

시계 는 기술이 필요하지 않으므로 재미있는 카드 게임입니다. 단일 플레이어 게임이며 동일한 카드 구성으로 항상 승리 또는 패배가 발생합니다. 이 도전에서, 당신은 주어진 카드 구성이이기거나 지는지 알아 내야합니다 . 여기서 게임을 할 수 있습니다 .

게임은 다음과 같이 진행됩니다.

  1. 13 장의 카드 더미가 뒤집 힙니다. 각 파일의 번호는 0에서 12까지입니다.
  2. 우리는 0 번째 파일을 현재 파일로 설정했습니다
  3. 현재 더미의 상단 카드를 뒤집습니다.
  4. 페이스 업 카드를 해당 파일의 맨 아래로 이동합니다 (4 카드가 4 번째 파일 아래에 있음) . 카드가 위를 향하게합니다. 이 파일은 현재 파일이됩니다.
  5. 현재 더미가 완전히 위로 향하게되면 게임은 끝난 것입니다. 그렇지 않으면 3 단계로 돌아가십시오.

팁 : 게임은 항상 0 번째 더미에서 끝납니다

게임은 모든 카드가 위로 향하게되면 이기고, 카드가 남아 있으면 잃게됩니다.

입출력

각 파일을 포함하는 2D 배열입니다. 카드는 0에서 12까지의 숫자로 표시됩니다 (수트는 관련이 없으며 제공되지 않음). 각 파일의 맨 위 카드는 각 배열의 첫 번째 요소입니다.

입력이 제대로 구성되었다고 가정 할 수 있습니다. 0에서 12까지 52 개의 카드를 포함하고 각 숫자는 정확히 4 번 포함됩니다.

게임에서 이길 수 있으면 진실한 가치를 반환해야하며, 그렇지 않으면 거짓입니다.

테스트 사례

진실한 :

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

거짓 :

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

답변:


9

ES6, 57 바이트

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

이것은 더미 1-12의 맨 아래에있는 카드 만 관련이 있고 더미 0으로 다시 향하는 그래프를 형성해야하기 때문에 작동합니다. 따라서 맨 아래 카드가 0 인 더미의 수를 계산 한 다음 더미의 수를 계산합니다 하단 카드는 내가 이전에 세었던 더미 중 하나였습니다. 12 더미에 도달하면 구성이 승리합니다.

개요 증명 :

더미는 효과적으로 다른 카드보다 적은 수의 카드를 가지고 있기 때문에 게임은 항상 마지막 0을 뒤집을 때 끝납니다.

말뚝 1-12의 맨 아래 카드가 말뚝 0에 대한 방향 그래프를 형성하는 경우 말뚝 0을 지우려면 마지막 항목이 0 인 모든 말뚝을 지우고 모든 말뚝에 재귀 적으로 정리해야합니다. 마지막 항목이 0 인 파일을 지울 수 있습니다. 따라서 구성이 승리합니다.

말뚝 1-12의 하단에있는 카드가 말뚝 0에 대해 유 방향 그래프를 형성하지 않으면, 적어도 하나의 사이클이 존재해야합니다. 이 사이클의 파일은 사이클의 이전 파일에 의존하기 때문에 지울 수 없습니다. (길이가 2 인 사이클의 경우 이는 닭과 계란 상황입니다.) 따라서 구성이 손실됩니다.


7

CJam, 23 21 바이트

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

모든 테스트 사례를 실행하십시오.

진실과 거짓의 할당이 반대라면 3 바이트를 절약 할 수 있습니다.

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

설명

카드를 다른 더미 아래로 향하게하는 것은 붉은 청어입니다. 우리는 게임에서 그것들을 제거하고 현재 파일이 비어있을 때까지 계속 연주 할 수 있습니다. 그래서 그것은 내가하고있는 일입니다 : 코드는 단순히 현재 더미가 비어있을 때까지 게임을 한 다음 카드가 남아 있는지 확인합니다.

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

하스켈, 85 바이트

(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 바이트

!su@LGGXeMQZZ

@Neil의 증명에 의존합니다. !su&VG@LGGeMQ작동합니다.

                 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

여기서 사용해보십시오 .


요청 라인이 너무 큼 (7173> 4094)
Insane

링크를 수정했습니다.
lirtosiast

1

파이썬, 55 바이트

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

하위 목록이 비어 있지 않으면 항목을 계속 팝업하십시오. 비어 있으면 모든 목록이 비어 있거나 (하나의 큰 목록으로 그룹화하여) 비어 있지 않습니다.


Python 3.4.2를 사용하여 첫 번째 실제 테스트 사례에 대해 False를 얻습니다.
lirtosiast

각 목록의 마지막 항목을 사용하므로 목록을 뒤집어 야합니다. l = [i [::-1] in i in l]
Dantal

1
질문은 모든 목록의 첫 번째 항목이 최상위 항목이라고 명시 적으로 말합니다. 바이트 수를 뒤집으려면 코드를 포함해야합니다.
lirtosiast

결정된. 이제 첫 번째 항목이 나타납니다.
Dantal

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.