Irish Snap: Aturan Varian

13

pengantar

Baru-baru ini, saya dan beberapa teman saya memutuskan untuk memainkan beberapa kartu, dan salah satunya menyarankan permainan 'Irish Snap', yang merupakan inspirasi untuk tantangan ini. Namun, saya kemudian mengetahui bahwa gim ini memiliki banyak aturan berbeda yang dapat Anda mainkan, beberapa di antaranya tercantum di sini . Aturan yang ada dalam tantangan ini saat ini tidak tercantum di halaman itu, maka namanya, 'Aturan Varian'

Tantangan

Diberikan array 3 kartu, menghasilkan nilai kebenaran atau falsey tergantung pada apakah mereka membuat snap yang valid dalam permainan snap Irlandia.

Memasukkan

Input akan terdiri dari 3 angka, mulai dari 1-13 inklusif, dengan 1 mewakili ace, 11 mewakili jack, 12 mewakili seorang ratu dan 13 mewakili seorang raja. Input dapat dalam urutan atas, tengah, bawah.

Aturan

4 kriteria berbeda untuk jika kartu membuat jepret Irlandia adalah:

  • Kartu atas dan tengah adalah sama
  • Kartu atas dan tengah memiliki perbedaan satu
  • Kartu atas dan bawah adalah sama
  • Kartu atas dan bawah memiliki perbedaan satu

Jika salah satu dari kriteria ini dipenuhi, Anda harus menampilkan nilai yang benar. Selain itu, untuk dua kriteria yang mengharuskan kartu memiliki perbedaan satu, itu 'membungkus', yang berarti bahwa kartu as dan raja dianggap memiliki perbedaan satu, dan sebaliknya.

Uji Kasus

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
sumber
2
Bisakah kita mengambil kartunya secara terpisah? Atau masukan sebagai top, [middle, bottom]?
Jo King
tentu, Anda bisa melakukan keduanya. mengubah pertanyaan untuk mencerminkan hal itu
EdgyNerd
Bisakah kita membalikkan output, yaitu mengembalikan False untuk buncis yang valid dan sebaliknya? Bagaimana dengan test case di mana menengah dan bawah valid?
Jo King
Ya, Anda dapat membalikkan output. Juga, tambahkan test case
EdgyNerd
Haruskah nilai output konsisten atau dapatkah kita, misalnya, output 0untuk falsedan bilangan bulat lainnya untuk trueatau, bahkan, bilangan bulat negatif untuk falseatau bilangan bulat positif apa pun untuk true?
Shaggy

Jawaban:

4

Python 3 , 38 byte

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

Cobalah online!

Mengembalikan set non-kosong (benar) jika valid, set kosong (falsey) jika tidak. Mengambil input dalam urutan teratas-menengah-bawah, tetapi dapat disusun ulang untuk ukuran kode yang sama.

Arfie
sumber
4

Perl 6 , 16 byte

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

Cobalah online!

Anonim, lambda apa pun yang menerima input top, middle, bottomdan mengembalikan Junction yang mengevaluasi True atau False

Jo King
sumber
Ruang putih terlalu buruk diperlukan sebelumnya <, ini adalah kesempatan yang sempurna untuk memiliki hati yang tersenyum.
Grimmy
3

05AB1E , 7 6 byte

α12%ß!

Cobalah online!

Mengambil input sebagai [middle, bottom], top.

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

Hanya 1 yang benar di 05AB1E. 0! dan 1! keduanya 1, sementara tidak ada nomor lain yang memiliki faktorial 1.

Grimmy
sumber
2

J , 12 byte

1 e.2>12||@-

Cobalah online!

Mengambil bawah tengah sebagai arg kiri, atas sebagai arg kanan.

jawaban asli mengambil input sebagai satu daftar

J , 24 byte

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

Cobalah online!

  • #:@3 5Angka 3 dan 5 dalam biner adalah 0 1 1dan 1 0 1yang merupakan topeng untuk kartu tengah / atas dan bawah / atas
  • (12||@-/)@# Kami menyaring input dengan topeng-topeng itu, mengambil nilai abs dari perbedaan yang dihasilkan, kemudian sisanya ketika dibagi dengan 12 (untuk kasus ace-king)
  • 1 e.2> Apakah salah satu dari angka yang dihasilkan kurang dari 2, yaitu 0 atau 1?
Jonah
sumber
2

JavaScript (ES6), 29 byte

Mengambil input sebagai ([bottom, middle])(top).

Outputnya terbalik.

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

Cobalah online!


JavaScript (ES6),  37  30 byte

Disimpan 1 byte berkat @Grimy

Mengambil input sebagai ([bottom, middle])(top).

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

Cobalah online!

Arnauld
sumber
%144bisa jadi%72
Grimmy
@ Terima kasih kotor! FWIW, %13juga akan berhasil.
Arnauld
2

Arang , 12 byte

›²⌊﹪↔⁻E²NN¹²

Cobalah online! Jawaban Port of @ Grimy. Mengambil input sebagai tiga nilai terpisah, bawah, tengah, atas, dan keluaran menggunakan format Boolean default -untuk true, tidak untuk false. Penjelasan:

 ²              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
sumber
1

Perl 5 -ap , 31 byte

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

Cobalah online!

Memasukkan:

bottom middle
top

Sebenarnya, urutan tengah dan bawah tidak masalah.

Keluaran:

0untuk false; 1itu benar

Xcali
sumber
1

Pyth , 12 11 byte

Mengambil input sebagai [bottom, top, middle]atau [middle, top, bottom](keduanya berfungsi). Keluaran [](Falsy dalam Pyth) jika tidak ada snap yang valid, array non-kosong sebaliknya.

f>2%.aT12.+

Cobalah online!

Jika diperlukan nilai kebenaran / kesalahan yang konsisten, tambahkan .Adi depan untuk +2 byte. Maka output akan menjadiTrue atauFalse .

Penjelasan

  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?

Sunting: -1 dengan pendekatan yang berbeda

ar4093
sumber
1

C (gcc) , 47 43 byte

f(b,m,t){return(1<<t-m|1<<t-b)&0x80101003;}

Cobalah online!

G. Sliepen
sumber
1

Jelly , 6 byte

I%12ỊẸ

Cobalah online!

Tautan monadik mengambil daftar [middle, top, bottom]sebagai argumennya dan kembali 1untuk snap dan 0tanpa snap.

Nick Kennedy
sumber
0

[R], 23 byte

mengambil input sebagai a = c (bawah, atas, tengah):

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

Zahiro Mor
sumber