İrlanda Snap: Varyant Kuralları


14

Giriş

Son zamanlarda, ben ve birkaç arkadaşım bazı kartlar oynamaya karar verdik ve bunlardan biri bu meydan okuma için ilham kaynağı olan 'Irish Snap' oyununu önerdi. Ancak, daha sonra oyunun oynayabileceğiniz, bazıları burada listelenen birçok farklı kuralı olduğunu öğrendim . Bu zorluktaki kurallar şu anda o sayfada listelenmemiştir, bu nedenle 'Varyant Kuralları' adı

Meydan okuma

3 kartlık bir dizi verildiğinde, bir İrlanda çırpıda oyunda geçerli bir çırpıda olup olmadıklarına bağlı olarak doğruluk veya falsey değeri verin.

Giriş

Giriş, 1-13 dahil olmak üzere 3 sayıdan oluşan bir dizi olacak, 1'i bir ası, 11'i bir krikoyu, 12'si bir kraliçeyi ve 13'ü bir kralı temsil edecek. Giriş üst, orta, alttan herhangi bir sırada olabilir.

kurallar

Kartların bir İrlanda çırpıda yapması durumunda 4 farklı kriter şunlardır:

  • Üst ve orta kartlar aynı
  • Üst ve orta kartların bir farkı var
  • Üst ve alt kartlar aynı
  • Üst ve alt kartların bir farkı var

Bu kriterlerden herhangi biri karşılanırsa, doğru bir değer vermelisiniz. Bunun yanı sıra, kartların bir farkına sahip olmasını gerektiren iki kriter için, 'etrafı sarar', yani bir as ve bir kralın bir farkının olduğu kabul edilir ve bunun tersi de geçerlidir.

Test Durumları

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
Kartları ayrı ayrı alabilir miyiz? Veya girdiyi şu şekilde al top, [middle, bottom]?
Jo King

emin, ikisini de yapabilirsiniz. soruyu bunu yansıtacak şekilde değiştirdi
EdgyNerd

Çıktıyı tersine çevirebilir miyiz, yani geçerli snaps için False döndürebilir miyiz? Hem orta hem de alt kısmın geçerli olduğu bir test senaryosuna ne dersiniz?
Jo King

Evet, çıktıyı tersine çevirebilirsiniz. Ayrıca, bu test
senaryosunu

Çıktı değerleri tutarlı olmalı mı, örneğin çıktı 0için falseve başka herhangi bir tamsayı için trueya da hatta herhangi bir negatif tamsayı falseya da için herhangi bir pozitif tamsayı olabilir truemi?
Shaggy

Yanıtlar:


4

Python 3 , 38 bayt

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

Çevrimiçi deneyin!

Geçerli değilse boş olmayan bir set (doğruluk), değilse boş bir set (falsey) döndürür. Girişi üst-orta-alt sırada alır, ancak aynı kod boyutu için yeniden düzenlenebilir.


4

Perl 6 , 16 bayt

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

Çevrimiçi deneyin!

Girdi olarak alan top, middle, bottomve Doğru veya Yanlış olarak değerlendirilen bir Kavşak döndüren lambda ne olursa olsun anonim


Daha önce çok kötü boşluk gerekli <, bu kalp gülen yüz için mükemmel bir şanstı.
Grimmy

3

05AB1E , 7 6 bayt

α12%ß!

Çevrimiçi deneyin!

Girdileri olarak alır [middle, bottom], top.

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

05AB1E'de sadece 1 doğrudur. 0! ve 1! başka bir sayının 1 faktöriyeli olamaz.


2

J , 12 bayt

1 e.2>12||@-

Çevrimiçi deneyin!

Alt orta sol arg olarak, üst sağ sağ arg olarak alınır.

orijinal cevap girişi tek liste olarak almak

J , 24 bayt

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

Çevrimiçi deneyin!

  • #:@3 5Sayılar 3 ve ikili 5. olan 0 1 1ve 1 0 1orta / üst ve alt için maskeler / üst kartları sırasıyla hangi
  • (12||@-/)@# Girişi bu maskelerle filtreleriz, ortaya çıkan farklılıkların abs değerini alırız, daha sonra geri kalanı 12'ye bölündüğünde (ace-king davası için)
  • 1 e.2> elde edilen sayılardan herhangi biri 2'den küçük, yani 0 veya 1?

2

JavaScript (ES6), 29 bayt

Girişi alır ([bottom, middle])(top).

Çıkış ters çevrilir.

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

Çevrimiçi deneyin!


JavaScript (ES6),  37  30 bayt

@Grimy sayesinde 1 bayt kaydedildi

Girişi alır ([bottom, middle])(top).

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

Çevrimiçi deneyin!


%144olabilir%72
Grimmy

@Grimy Teşekkürler! FWIW %13da işe yarayacaktı.
Arnauld

2

Kömür , 12 bayt

›²⌊﹪↔⁻E²NN¹²

Çevrimiçi deneyin! Port @ Grimy'nin cevabı. Charcoal'ın varsayılan Boolean formatı -için true, false için hiçbir şey kullanarak girişi alt, orta, üst ve çıkış olarak üç ayrı değer olarak alır . Açıklama:

 ²              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 bayt

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

Çevrimiçi deneyin!

Giriş:

bottom middle
top

Aslında, orta ve diplerin sırası önemli değil.

Çıktı:

0yanlış için; 1doğru için


1

Pyth , 12 11 bayt

Girdiyi [bottom, top, middle]veya olarak alır [middle, top, bottom](her ikisi de çalışır). []Geçerli bir ek yoksa boş olmayan bir dizi varsa çıktılar (Pyth'te Falsy).

f>2%.aT12.+

Çevrimiçi deneyin!

Tutarlı bir doğruluk / falsy değeri gerekiyorsa, .A+2 bayt için önüne ekleyin . Sonra çıktı Trueya olacak False.

açıklama

  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?

Düzenleme: -1 farklı bir yaklaşımla







0

[R], 23 bayt

girişi a = c (alt, üst, orta) olarak alır:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.