Часы (карточная игра)


14

Часы - интересная карточная игра, так как не требует навыков. Это игра для одного игрока, и одна и та же конфигурация карты всегда приводит к выигрышу или проигрышу. В этом задании вам необходимо выяснить, выигрывает или проигрывает данная конфигурация карты . Вы можете играть в игру здесь .

Игра ведется следующим образом:

  1. Тринадцать стопок карт раздаются лицом вниз. Каждая куча пронумерована от 0 до 12.
  2. Мы устанавливаем 0-ую кучу как текущую.
  3. Мы переворачиваем верхнюю карту текущей стопки лицом вверх.
  4. Мы перемещаем открытую карту внизу соответствующей колоды (карта 4 идет под 4-ю стопку) . Карта остается открытой. Эта куча становится текущей кучей.
  5. Если текущая стопка полностью закрыта, игра окончена. В противном случае вернитесь к шагу 3.

Совет: игра всегда заканчивается на 0-й стопке

Игра выигрывается, если все карты оказываются открытыми, и теряется, если остаются открытые карты.

Ввод, вывод

2D массив, содержащий каждую из свай. Карты представлены номерами от 0 до 12 (масть не имеет значения и не указана). Верхняя карта каждой колоды является первым элементом каждого массива.

Можно предположить, что вход будет правильно сформирован: он будет содержать 52 карты от 0 до 12 (включительно) и содержать каждое число ровно 4 раза.

Вы должны вернуть истинное значение, если игра может быть выиграна, и ложное, если это невозможно.

Контрольные примеры

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

Ответы:


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*!

Запустите все тестовые случаи.

Если назначение truey и false было противоположным, я мог бы сохранить 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

Haskell, 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

Полагается на доказательство @ Нейла. !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)
безумие

Исправлена ​​ссылка.
lirtosiast

1

Python, 55 байт

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

Если подсписок не пустой, продолжайте вставлять элементы. Когда он пуст, верните либо все списки пусты (сгруппировав их в один большой список), либо нет.


Я получаю False для первого настоящего теста с использованием Python 3.4.2.
lirtosiast

Я беру последний элемент каждого списка, поэтому вам нужно перевернуть списки: l = [i [:: - 1] для i in l]
Dantal

1
Вопрос явно говорит, что первый пункт каждого списка является верхним. Вам нужно будет включить код, чтобы перевернуть счетчик байтов.
lirtosiast

Исправлена. Теперь появляется первый элемент.
Дантал

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.