Irish Snap: กฎตัวแปร


14

บทนำ

เมื่อเร็ว ๆ นี้ฉันและเพื่อนของฉันสองคนตัดสินใจที่จะเล่นไพ่บางใบและหนึ่งในนั้นแนะนำเกม '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

2
เราสามารถแยกไพ่ได้ไหม? หรือใส่เป็นtop, [middle, bottom]?
Jo King

แน่นอนคุณสามารถทำทั้งสองอย่าง เปลี่ยนคำถามเพื่อสะท้อนให้เห็นว่า
EdgyNerd

เราสามารถกลับด้านเอาท์พุทเช่นกลับเท็จสำหรับ snaps ที่ถูกต้องและในทางกลับกัน? วิธีการเกี่ยวกับกรณีทดสอบที่ทั้งกลางและด้านล่างถูกต้อง?
Jo King

ใช่คุณสามารถคว่ำเอาท์พุท นอกจากนี้ยังเพิ่มกรณีทดสอบ
EdgyNerd

ค่าการส่งออกจะต้องสอดคล้องหรือสามารถเราตัวอย่างเช่นการส่งออก0สำหรับfalseจำนวนเต็มอื่น ๆtrueหรือแม้กระทั่งจำนวนเต็มเชิงลบใด ๆfalseหรือจำนวนเต็มบวกใด ๆtrue?
Shaggy

คำตอบ:


4

Python 3 , 38 ไบต์

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

ลองออนไลน์!

ส่งคืนชุดที่ไม่ว่าง (ความจริง) หากถูกต้องชุดว่าง (เท็จ) หากไม่ได้รับ รับอินพุตตามลำดับด้านบนกลางล่าง แต่สามารถจัดเรียงใหม่สำหรับขนาดรหัสเดียวกัน


4

Perl 6 , 16 ไบต์

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

ลองออนไลน์!

ไม่ระบุชื่อแลมบ์ดาใดก็ตามที่รับอินพุตเป็นtop, middle, bottomและส่งคืน Junction ที่ประเมินเป็น True หรือ False


ต้องใช้ช่องว่างที่แย่มากก่อน<นี่เป็นโอกาสที่ดีที่จะมีรอยยิ้ม
Grimmy

3

05AB1E , 7 6 ไบต์

α12%ß!

ลองออนไลน์!

[middle, bottom], topนำปัจจัยการผลิตเป็น

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

มีเพียง 1 คนเท่านั้นที่เป็นความจริงใน 05AB1E 0! และ 1! เป็น 1 ทั้งคู่ในขณะที่ไม่มีตัวเลขอื่นใดมี factorial เท่ากับ 1


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 (สำหรับตัวพิมพ์แบบ ace-king)
  • 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)

ลองออนไลน์!


%144อาจเป็น%72
Grimmy

@Grimy ขอบคุณ! FWIW %13ก็ใช้ได้เช่นกัน
Arnauld

2

ถ่าน 12 ไบต์

›²⌊﹪↔⁻E²NN¹²

ลองออนไลน์! คำตอบของพอร์ต @ Grimy รับอินพุตเป็นค่าที่แยกจากกันสามค่าด้านล่างกลางด้านบนและเอาท์พุทโดยใช้รูปแบบบูลีนที่เป็นค่าเริ่มต้นของถ่าน-สำหรับค่าจริงไม่มีอะไรจะเป็นค่าเท็จ คำอธิบาย:

 ²              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สำหรับความจริง


1

Pyth , 12 11 ไบต์

ใช้อินพุตเป็น[bottom, top, middle]หรือ[middle, top, bottom](ทำงานทั้งคู่) เอาต์พุต[](Falsy in Pyth) หากไม่มี snap ที่ถูกต้องอาร์เรย์ที่ไม่ว่างเปล่าเป็นอย่างอื่น

f>2%.aT12.+

ลองออนไลน์!

หากต้องการค่าความจริง / เท็จที่สอดคล้องกันให้เพิ่ม.Aด้านหน้าสำหรับ +2 ไบต์ แล้วออกจะเป็นหรือTrueFalse

คำอธิบาย

  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 ด้วยแนวทางที่แตกต่าง







โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.