Irish Snap: правила вариантов

13

Вступление

Недавно я и пара моих друзей решили сыграть в несколько карт, и одна из них предложила игру «Irish Snap», которая послужила вдохновением для этого испытания. Однако позже я узнал, что в игре есть множество различных правил, с которыми вы можете играть, некоторые из которых перечислены здесь . Правила этой задачи в настоящее время не перечислены на этой странице, отсюда и название «Правила варианта».

Соревнование

Учитывая массив из 3 карт, выведите истинное или ложное значение в зависимости от того, сделали ли они правильную комбинацию в игре с ирландской картой.

вход

Входными данными будет массив из 3 чисел в диапазоне от 1 до 13 включительно, где 1 обозначает туз, 11 обозначает домкрат, 12 обозначает ферзь и 13 обозначает король. Ввод может быть в любом порядке сверху, снизу и сверху.

правила

4 различных критерия для ирландской карты:

  • Верхняя и средняя карты одинаковы
  • Верхняя и средняя карты имеют разницу в один
  • Верхняя и нижняя карты одинаковы
  • Верхняя и нижняя карты имеют разницу в один

Если какой-либо из этих критериев удовлетворяется, вы должны вывести истинное значение. Кроме того, для двух критериев, которые требуют, чтобы карты имели разность в один, он «оборачивается», то есть считается, что туз и король имеют разницу в один, и наоборот.

Тестовые случаи

Input (Bottom, Middle, Top) -> Output
1 13 7 -> False
1 4 13 -> True
9 3 6 -> False
8 9 7 -> True
2 6 5 -> True
12 5 11 -> True
10 4 8 -> False
12 13 7 -> False
9 7 10 -> True
7 3 1 -> False
4 2 3 -> True
EdgyNerd
источник
2
Можем ли мы взять карты отдельно? Или принять вход как top, [middle, bottom]?
Джо Кинг
конечно, вы можете сделать оба. изменил вопрос, чтобы отразить это
EdgyNerd
Можем ли мы инвертировать вывод, т. Е. Вернуть False для правильных снимков и наоборот? Как насчет теста, в котором допустимы среднее и нижнее значения?
Джо Кинг
Да, вы можете инвертировать вывод. Также добавлен этот тестовый пример
EdgyNerd
Должны ли выходные значения быть согласованными, или мы можем, например, вывести 0для falseи любое другое целое число для trueили, даже, любое отрицательное целое число для falseили любое положительное целое число для true?
Лохматый

Ответы:

4

Python 3 , 38 байт

lambda x,y,z:{x-y,x-z}&{0,1,12,-1,-12}

Попробуйте онлайн!

Возвращает непустое множество (truey), если оно допустимо, пустое множество (falsey), если нет. Вводит данные по порядку сверху-снизу-внизу, но может быть переставлен для того же размера кода.

Arfie
источник
4

Perl 6 , 16 байт

3>(*-(*|*)+1)%13

Попробуйте онлайн!

Анонимный лямбда, который принимает входные данные как top, middle, bottomи возвращает Junction, который оценивается как True или False

Джо Кинг
источник
Слишком плохие пробелы требовались раньше <, это был идеальный шанс получить сердечный смайлик.
Гримми
3

05AB1E , 7 6 байтов

α12%ß!

Попробуйте онлайн!

Принимает входные данные как [middle, bottom], top.

α        # absolute difference
 12%     # mod 12
    ß    # minimum
     !   # factorial

Только 1 правдив в 05AB1E. 0! и 1! оба равны 1, в то время как никакое другое число не имеет факториал 1.

Grimmy
источник
2

J , 12 байт

1 e.2>12||@-

Попробуйте онлайн!

Принимая нижнюю середину как левый арг, верх как правый арг.

исходный ответ с учетом одного списка

J , 24 байта

1 e.2>#:@3 5(12||@-/)@#]

Попробуйте онлайн!

  • #:@3 5Числа 3 и 5 в двоичном виде 0 1 1и 1 0 1являются масками для средней / верхней и нижней / верхней карт соответственно
  • (12||@-/)@# Мы отфильтровываем входные данные с помощью этих масок, принимаем значение abs получаемых разностей, а затем остаток при делении на 12 (для случая туза)
  • 1 e.2> любое из полученных чисел меньше 2, т. е. 0 или 1?
Ион
источник
2

JavaScript (ES6), 29 байт

Принимает вход как ([bottom, middle])(top).

Выход инвертирован.

a=>c=>a.every(n=>(n-c)/2%6|0)

Попробуйте онлайн!


JavaScript (ES6),  37  30 байт

Сохранено 1 байт благодаря @Grimy

Принимает вход как ([bottom, middle])(top).

a=>c=>a.some(n=>(n-=c)*n%72<2)

Попробуйте онлайн!

Arnauld
источник
%144может быть%72
Grimmy
@ Грими Спасибо! FWIW, %13также будет работать.
Арно
2

Древесный уголь , 12 байт

›²⌊﹪↔⁻E²NN¹²

Попробуйте онлайн! Порт ответа @ Grimy. Принимает входные данные как три отдельных значения: нижнее, среднее, верхнее и выходные, используя логический формат Charcoal по умолчанию -для true, ничего для false. Объяснение:

 ²              Literal 2
›               Is greater than
  ⌊             Minimum of
    ↔            Absolute value of (vectorised)
      E²N       First two numeric inputs as a list ([bottom, middle])
     ⁻          Minus (vectorised)
         N      Third input (top)
   ﹪            Modulo (vectorised)
          ¹²    Literal 12
Нил
источник
1

Perl 5 -ap , 31 байт

$t=<>}{$\|=abs($t-$_)%12<2for@F

Попробуйте онлайн!

Входные данные:

bottom middle
top

На самом деле порядок середины и дна не имеет значения.

Выход:

0за ложь; 1для истинного

Xcali
источник
1

Пиф , 12 11 байтов

Принимает ввод как [bottom, top, middle]или [middle, top, bottom](оба работают). Выходы [](Falsy в Pyth) , если нет в силе оснастки, непустой массив иначе.

f>2%.aT12.+

Попробуйте онлайн!

Если требуется согласованное значение «истина / ложь», добавьте .Aвперед +2 байта. Тогда вывод будет Trueили False.

объяснение

  f             # Filter on lambda T:
   >2           # 2 > 
      .aT       #     abs(T)
     %   12     #            % 12
           .+   # the list of deltas (difference between consecutive elements)

.A (if required)# Any truthy values in the above list?

Изменить: -1 с другим подходом

ar4093
источник
1

Желе , 6 байт

I%12ỊẸ

Попробуйте онлайн!

Монадическая ссылка, принимающая список в [middle, top, bottom]качестве аргумента и возвращающая 1для привязки и 0без привязки.

Ник Кеннеди
источник
0

[R], 23 байта

принимает входные данные как a = c (низ, верх, середина):

any(abs(diff(a))%%12<2)

Захиро Мор
источник