Irish Snap: Zasady wariantów

14

Wprowadzenie

Niedawno ja i kilku moich przyjaciół zdecydowaliśmy się zagrać w kilka kart, a jedna z nich zaproponowała grę „Irish Snap”, która była inspiracją do tego wyzwania. Jednak później dowiedziałem się, że gra ma wiele różnych zasad, z którymi możesz grać, z których niektóre są wymienione tutaj . Reguły, które są w tym wyzwaniu, nie są obecnie wymienione na tej stronie, stąd nazwa „Reguły wariantów”

Wyzwanie

Biorąc pod uwagę tablicę 3 kart, wypisz wartość prawdy lub falseya w zależności od tego, czy wykonają prawidłowy snap w grze irlandzkiego snap.

Wejście

Dane wejściowe to tablica 3 liczb, od 1 do 13 włącznie, przy czym 1 reprezentuje asa, 11 reprezentuje waleta, 12 reprezentuje królową, a 13 reprezentuje króla. Dane wejściowe mogą być w dowolnej kolejności: góra, środek, dół.

Zasady

4 różne kryteria, jeśli karty dokonują irlandzkiego przyciągania, to:

  • Górna i środkowa karta są takie same
  • Górne i środkowe karty różnią się jedną
  • Górne i dolne karty są takie same
  • Górne i dolne karty różnią się jedną

Jeśli którekolwiek z tych kryteriów są spełnione, musisz podać prawdziwą wartość. Oprócz tego, dla dwóch kryteriów, które wymagają, aby karty różniły się jednym, „owija się”, co oznacza, że ​​as i król mają różnicę jednego i odwrotnie.

Przypadki testowe

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
źródło
2
Czy możemy wziąć karty osobno? Lub wziąć wkład jako top, [middle, bottom]?
Jo King
jasne, możesz zrobić jedno i drugie. zmienił pytanie, aby to odzwierciedlić
EdgyNerd
Czy możemy odwrócić dane wyjściowe, tzn. Zwrócić False dla prawidłowych snapów i odwrotnie? Co powiesz na przypadek testowy, w którym ważne są zarówno środek, jak i dół?
Jo King
Tak, możesz odwrócić dane wyjściowe. Ponadto dodano ten przypadek testowy
EdgyNerd
Czy wartości wyjściowe muszą być spójne, czy możemy, na przykład, wyprowadzać 0dla falsei jakąkolwiek inną liczbę całkowitą dla true, a nawet jakąkolwiek ujemną liczbę całkowitą dla falselub jakąkolwiek liczbę całkowitą dodatnią dla true?
Shaggy

Odpowiedzi:

4

Python 3 , 38 bajtów

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

Wypróbuj online!

Zwraca niepusty zestaw (prawda), jeśli jest poprawny, pusty zestaw (falsey), jeśli nie. Pobiera dane wejściowe w kolejności góra-środek-dół, ale można zmienić kolejność dla tego samego rozmiaru kodu.

Arfie
źródło
4

Perl 6 , 16 bajtów

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

Wypróbuj online!

Anonimowa dowolna lambda, która pobiera dane wejściowe jako top, middle, bottomi zwraca Junction, które ma wartość Prawda lub Fałsz

Jo King
źródło
Wcześniej wymagana <była zła biała spacja , była to idealna okazja, aby mieć buźkę z sercem.
Grimmy,
3

05AB1E , 7 6 bajtów

α12%ß!

Wypróbuj online!

Przyjmuje dane wejściowe jako [middle, bottom], top.

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

Tylko 1 jest prawdą w 05AB1E. 0! i 1! są równe 1, podczas gdy żadna inna liczba nie ma silni 1.

Ponury
źródło
2

J , 12 bajtów

1 e.2>12||@-

Wypróbuj online!

Biorąc dolny środek jako lewy arg, górny jak prawy arg.

oryginalna odpowiedź przyjmująca dane wejściowe jako jedną listę

J , 24 bajty

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

Wypróbuj online!

  • #:@3 5Liczby binarne 3 i 5 to 0 1 1i 1 0 1które są maskami odpowiednio dla środkowej / górnej i dolnej / górnej karty
  • (12||@-/)@# Filtrujemy dane wejściowe za pomocą tych masek, bierzemy wartość abs wynikowych różnic, a następnie resztę dzielimy przez 12 (w przypadku asa-króla)
  • 1 e.2> czy jedna z uzyskanych liczb jest mniejsza niż 2, tj. 0 lub 1?
Jonasz
źródło
2

JavaScript (ES6), 29 bajtów

Pobiera dane wejściowe jako ([bottom, middle])(top).

Wyjście jest odwrócone.

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

Wypróbuj online!


JavaScript (ES6),  37  30 bajtów

Zapisano 1 bajt dzięki @Grimy

Pobiera dane wejściowe jako ([bottom, middle])(top).

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

Wypróbuj online!

Arnauld
źródło
%144może być%72
Grimmy
@Grimy Thanks! FWIW %13też by działało.
Arnauld,
2

Węgiel drzewny , 12 bajtów

›²⌊﹪↔⁻E²NN¹²

Wypróbuj online! Port odpowiedzi @ Grimy. Pobiera dane wejściowe jako trzy osobne wartości: dolną, środkową, górną i wyjściową przy użyciu domyślnego logicznego formatu Charcoal -dla true, nic dla false. Wyjaśnienie:

 ²              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
Neil
źródło
1

Perl 5 -ap , 31 bajtów

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

Wypróbuj online!

Wejście:

bottom middle
top

W rzeczywistości kolejność środka i dołu nie ma znaczenia.

Wynik:

0za fałsz; 1naprawdę

Xcali
źródło
1

Pyth , 12 11 bajtów

Pobiera dane wejściowe jako [bottom, top, middle]lub [middle, top, bottom](obie działają). Wyjścia [](Falsy w Pyth) jeśli nie ma ważny przystawki, niepusty tablica inaczej.

f>2%.aT12.+

Wypróbuj online!

Jeśli wymagana jest spójna wartość prawda / fałsz, dodaj .Az przodu dla +2 bajtów. Wtedy wyjście będzie Truelub False.

Wyjaśnienie

  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?

Edycja: -1 z innym podejściem

ar4093
źródło
1

Galaretka , 6 bajtów

I%12ỊẸ

Wypróbuj online!

Monadyczny link przyjmujący listę [middle, top, bottom]jako argument i zwracający się 1do przystawki i 0bez przystawki.

Nick Kennedy
źródło
0

[R], 23 bajty

przyjmuje dane wejściowe jako a = c (dół, góra, środek):

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

Zahiro Mor
źródło