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

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.


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


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.


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?

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!


%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

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


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







0

[R], 23 byte

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.