คะแนนแบดมินตันที่ถูกต้อง?


27

บทนำ:

ผมเห็นมีเพียงหนึ่งที่เกี่ยวข้องกับแบดมินตันท้าทายอื่น ๆ ในขณะนี้ ตั้งแต่ฉันเล่นแบดมินตันด้วยตัวเอง (ในช่วง 13 ปีที่ผ่านมา) ฉันคิดว่าฉันจะเพิ่มความท้าทายเกี่ยวกับแบดมินตัน ที่นี่คนแรก:

ท้าทาย:

อินพุต:
เอาต์พุตจำนวนเต็มสองค่า:หนึ่งในสามของเอาต์พุตที่แตกต่างและไม่ซ้ำใครที่คุณเลือก หนึ่งระบุว่าการป้อนข้อมูลเป็นคะแนนแบดมินตันที่ถูกต้องและชุดได้สิ้นสุดลงด้วยผู้ชนะ; หนึ่งระบุว่าการป้อนข้อมูลเป็นคะแนนแบดมินตันที่ถูกต้องและชุดยังคงอยู่ในการเล่น; หนึ่งระบุว่าการป้อนข้อมูลไม่ได้เป็นคะแนนแบดมินตันที่ถูกต้อง

ด้วยแบดมินตันผู้เล่นทั้งคู่ (คู่) เริ่มต้นด้วย 0 คะแนนและคุณจะหยุดเมื่อผู้เล่นหนึ่งในสอง (คู่) มีคะแนนถึง 21 โดยมีความแตกต่างอย่างน้อย 2 คะแนนสูงสุด 30-29

ดังนั้นสิ่งเหล่านี้คืออินพุตคู่ที่เป็นไปได้ (ตามลำดับใด ๆ ) ซึ่งระบุว่าเป็นคะแนนแบดมินตันที่ถูกต้องและชุดได้สิ้นสุดลงแล้ว:

[[0,21],[1,21],[2,21],[3,21],[4,21],[5,21],[6,21],[7,21],[8,21],[9,21],[10,21],[11,21],[12,21],[13,21],[14,21],[15,21],[16,21],[17,21],[18,21],[19,21],[20,22],[21,23],[22,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,30]]

และนี่คือคู่อินพุตที่เป็นไปได้ทั้งหมด (ตามลำดับใด ๆ ) ซึ่งระบุว่าเป็นคะแนนแบดมินตันที่ถูกต้อง แต่ชุดยังคงเล่นอยู่:

[[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[0,10],[0,11],[0,12],[0,13],[0,14],[0,15],[0,16],[0,17],[0,18],[0,19],[0,20],[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[1,8],[1,9],[1,10],[1,11],[1,12],[1,13],[1,14],[1,15],[1,16],[1,17],[1,18],[1,19],[1,20],[2,2],[2,3],[2,4],[2,5],[2,6],[2,7],[2,8],[2,9],[2,10],[2,11],[2,12],[2,13],[2,14],[2,15],[2,16],[2,17],[2,18],[2,19],[2,20],[3,3],[3,4],[3,5],[3,6],[3,7],[3,8],[3,9],[3,10],[3,11],[3,12],[3,13],[3,14],[3,15],[3,16],[3,17],[3,18],[3,19],[3,20],[4,4],[4,5],[4,6],[4,7],[4,8],[4,9],[4,10],[4,11],[4,12],[4,13],[4,14],[4,15],[4,16],[4,17],[4,18],[4,19],[4,20],[5,5],[5,6],[5,7],[5,8],[5,9],[5,10],[5,11],[5,12],[5,13],[5,14],[5,15],[5,16],[5,17],[5,18],[5,19],[5,20],[6,6],[6,7],[6,8],[6,9],[6,10],[6,11],[6,12],[6,13],[6,14],[6,15],[6,16],[6,17],[6,18],[6,19],[6,20],[7,7],[7,8],[7,9],[7,10],[7,11],[7,12],[7,13],[7,14],[7,15],[7,16],[7,17],[7,18],[7,19],[7,20],[8,8],[8,9],[8,10],[8,11],[8,12],[8,13],[8,14],[8,15],[8,16],[8,17],[8,18],[8,19],[8,20],[9,9],[9,10],[9,11],[9,12],[9,13],[9,14],[9,15],[9,16],[9,17],[9,18],[9,19],[9,20],[10,10],[10,11],[10,12],[10,13],[10,14],[10,15],[10,16],[10,17],[10,18],[10,19],[10,20],[11,11],[11,12],[11,13],[11,14],[11,15],[11,16],[11,17],[11,18],[11,19],[11,20],[12,12],[12,13],[12,14],[12,15],[12,16],[12,17],[12,18],[12,19],[12,20],[13,13],[13,14],[13,15],[13,16],[13,17],[13,18],[13,19],[13,20],[14,14],[14,15],[14,16],[14,17],[14,18],[14,19],[14,20],[15,15],[15,16],[15,17],[15,18],[15,19],[15,20],[16,16],[16,17],[16,18],[16,19],[16,20],[17,17],[17,18],[17,19],[17,20],[18,18],[18,19],[18,20],[19,19],[19,20],[20,20],[20,21],[21,21],[21,22],[22,22],[22,23],[23,23],[23,24],[24,24],[24,25],[25,25],[25,26],[26,26],[26,27],[27,27],[27,28],[28,28],[28,29],[29,29]]

จำนวนเต็มคู่อื่น ๆ จะเป็นคะแนนแบดมินตันที่ไม่ถูกต้อง

กฏท้าทาย:

  • I / O ยืดหยุ่นดังนั้น:
    • คุณสามารถรับอินพุตเป็นรายการของตัวเลขสองตัว ตัวเลขสองตัวที่คั่นด้วย STDIN หรือพารามิเตอร์ฟังก์ชัน สองสาย; เป็นต้น
    • ผลลัพธ์จะเป็นค่าที่แตกต่างและไม่ซ้ำกันสามค่าตามที่คุณเลือก สามารถเป็นจำนวนเต็ม (เช่น[0,1,2], [1,2,3], [-1,0,1]ฯลฯ ); สามารถเป็น Booleans (เช่น[true,false,undefined/null/empty]); สามารถเป็นอักขระ / สตริง (เช่น["valid & ended","valid","invalid"]); เป็นต้น
    • โปรดระบุ I / O ที่คุณใช้ในคำตอบ!
  • คุณได้รับอนุญาตให้ป้อนข้อมูลจำนวนเต็มล่วงหน้าจากต่ำสุดไปสูงสุดหรือในทางกลับกัน
  • จำนวนเต็มอินพุทอาจเป็นค่าลบซึ่งในกรณีนี้แน่นอนว่าไม่ถูกต้อง

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
    อย่าปล่อยให้ภาษาโค้ดกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานใช้สำหรับคำตอบของคุณด้วยกฎ I / O เริ่มต้นดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและประเภทผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงก์พร้อมทดสอบรหัสของคุณ (เช่นTIO )
  • นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ

กรณีทดสอบ:

กรณีทดสอบเหล่านี้ใช้ได้และชุดสิ้นสุดแล้ว:

0 21
12 21
21 23
28 30
29 30

กรณีทดสอบเหล่านี้ใช้ได้ แต่ชุดยังอยู่ในระหว่างเล่น:

0 0
0 20
12 12
21 21
21 22

กรณีทดสอบเหล่านี้ไม่ถูกต้อง:

-21 19
-19 21
-1 1
12 22
29 31
30 30
42 43
1021 1021

คำตอบ:


1

Stax , 20 ไบต์

ÇåπßéD╩¬7▼ß▌ΣU¬í╡S┤╘

เรียกใช้และแก้ไขข้อบกพร่อง

ใช้อินพุตในรูปแบบเดียวกับตัวอย่าง 0หมายความว่ามีผู้ชนะที่ถูกต้อง 1หมายความว่าเกมกำลังดำเนินการอยู่ -1หมายถึงคะแนนที่ไม่ถูกต้อง

ในโค้ดหลอกที่มีอินพุตสั่งxและyอัลกอริทึมคือ

sign(clamp(x + 2, 21, 30) - y) | (x < 0 || x >= 30 ? 0 : -1)
  • signหมายถึงสัญญาณที่เป็นตัวเลข ( -1, 0หรือ1)
  • clamp บังคับให้อาร์กิวเมนต์แรกเป็นช่วงเวลาครึ่งเปิดที่ระบุ

6

Python 2 , 97 95 75 72 71 70 69 64 55 54 52 51 50 48 ไบต์

lambda a,b:(b-61<~a<a>b/22*b-3)*~(19<b-(b<30)>a)

ลองออนไลน์!

รับอินพุตตามสั่งa,bล่วงหน้า

ผลตอบแทน-2, -1, 0สำหรับended, ,in playinvalid

-1 ไบต์ขอบคุณ Kevin Cruijssen


ส่วนด้านซ้าย ( b-61<~a<a>b/22*b-3) คือการตรวจสอบความถูกต้องและส่วนทางด้านขวา ( 19<b-(b<30)>a) เป็นการตรวจสอบเกมที่สิ้นสุดแล้ว


6

Python 2 , 47 ไบต์

lambda a,b:[61>60-a>b<3+max(19,a)for b in-~b,b]

ลองออนไลน์!

ส่งออกรายการ Booleans สองรายการ ขอบคุณTFeldสำหรับการเขียนชุดทดสอบในคำตอบซึ่งทำให้ง่ายต่อการตรวจสอบโซลูชันของฉัน

ended: [False, True]
going: [True, True]
invalid: [False, False]

ความเข้าใจที่สำคัญคือคะแนนที่ถูกต้องจะจบเกมหากการเพิ่มมูลค่าที่สูงขึ้นbจะทำให้คะแนนไม่ถูกต้อง ดังนั้นเราเพียงแค่รหัสขึ้นสภาพความถูกต้องและตรวจสอบสำหรับ(a,b+1)นอกเหนือไป(a,b)เพื่อดูว่าเกมได้สิ้นสุดลง

ความถูกต้องจะตรวจสอบผ่านสามเงื่อนไขที่ถูกล่ามโซ่ไว้ด้วยกัน:

  • b<3+max(19,a): ตรวจสอบว่าคะแนนที่สูงกว่าbไม่ผ่านมาชนะอย่างใดอย่างหนึ่งb<=21หรือb<=a+2(ชนะสองครั้ง)
  • 60-a>b: เทียบเท่าเพื่อa+b<=59ให้มั่นใจว่าคะแนนไม่ได้อยู่เหนือ(29,30)
  • 61>60-a: เทียบเท่ากับa>=0ทำให้มั่นใจได้ว่าคะแนนที่ต่ำกว่านั้นไม่เป็นลบ

Python 2 , 44 ไบต์

lambda a,b:[b-61<~a<a>b/22*b-3for b in-~b,b]

ลองออนไลน์!

การตรวจสอบความถูกต้องที่ดีขึ้นของ TFeld ช่วยประหยัดได้ 3 ไบต์ แนวคิดหลักคือสาขาที่ "ค่าล่วงเวลา" b>21ด้วยb/22*bซึ่งมีประสิทธิภาพชุดต่ำกว่า 21 คะแนนให้เป็นศูนย์ในขณะที่ผมแยกบนมีอีกต่อไปa>19max(19,a)


Python 2 , 43 ไบต์

lambda a,b:a>>99|cmp(2+max(19,a)%30-a/29,b)

ลองออนไลน์!

ขาออก:

ended: 0
going: -1
invalid: 1

สันนิษฐานว่าปัจจัยการผลิตที่มีไม่ต่ำกว่า{99}299


1
ใช้การตรวจสอบความถูกต้องล่าสุดของฉัน ( b-61<~a<a>b/22*b-3) คุณสามารถบันทึกได้ 3 ไบต์
TFeld

1
+1 byte เพื่อทำให้โซลูชันที่สองของคุณใช้งานได้กับอินพุตทั้งหมด:lambda a,b:-(a<0)|cmp(2+max(19,a)%30-a/29,b)
TFeld

4

JavaScript (ES6),  55 53  48 ไบต์

ขอบคุณ @KevinCruijssen สำหรับการสังเกตว่าฉันไม่ได้คาดเดาอย่างสมบูรณ์ (บันทึก 5 ไบต์)ab

จะเข้าเป็น(a)(b)กับข ส่งคืน (ถูกต้อง), (สิ้นสุด) หรือ (ไม่ถูกต้อง)ab012

a=>b=>a<0|a>29|b>30|b>21&b-a>2?2:b>20&b-a>1|b>29

ลองออนไลน์!


4

C # (Visual C # Interactive Compiler) , 53 52 ไบต์

a=>b=>b<0|a-b>2&a>21|b>29|a>30?3:a>20&a-b>1|a>29?1:2

f(max)(min)เรียกว่าเป็น ส่งคืน 3 สำหรับโมฆะ 1 สำหรับเสร็จแล้ว 2 ต่อเนื่อง

บันทึกแล้ว 1 ไบต์ขอบคุณ Kevin Cruijjsen

ลองออนไลน์!


4

เยลลี่ 25 ไบต์

»19«28‘<‘×+2>ɗʋ⁹×,%Ƒ“œþ‘ɗ

ลองออนไลน์!

อาร์กิวเมนต์ซ้าย: ขั้นต่ำ อาร์กิวเมนต์ที่ถูกต้อง: สูงสุด ไม่ถูกต้อง:
0อย่างต่อเนื่อง: 1. สิ้นสุดแล้ว: 2.

ในทางคณิตศาสตร์การทำงานดังต่อไปนี้ (อาร์กิวเมนต์ด้านซ้ายคือ , ด้านขวาคือ ):xy

[a]={a:1¬a:0(a,b)=(amod30,bmod31)x,yZX:=min(max(x+1,20),29)p:=(x,y)([X<y]+1)[X+2>y][p=p]

คำอธิบาย:

»19«28‘<‘×+2>ɗʋ⁹×,%Ƒ“œþ‘ɗ Left argument: x, Right argument: y
»19«28‘                   X := Bound x + 1 in [20, 29]:
»19                         X := max(x, 19).
   «28                      X := min(X, 28).
      ‘                     X := X + 1.
       <‘×+2>ɗʋ⁹          X := If X + 2 <= y, then 0, else if X < y, then 2, else 1:
       <                    t := If X < y, then 1, else 0.
        ‘                   t := t + 1.
          +2>ɗ              u := Check if X + 2 > y:
          +2                  u := X + 2.
            >                 u := If u > y, then 1, else 0.
         ×                  X := t * u.
                 ,%Ƒ“œþ‘ɗ z := If x mod 30 = x and y mod 31 = y, then 1, else 0:
                 ,          z := (x, y).
                  % “œþ‘    m := z mod (30, 31) = (x mod 30, y mod 31).
                   Ƒ        z := If z = m, then 1, else 0.
                ×         X * z.

3

VDM-SL , 80 ไบต์

f(i,j)==if(j-i>2and j>21)or(i<0or i=30or j>30)then{}else{(j>20and j-i>1or j=30)} 

ฟังก์ชันนี้ใช้คะแนนที่เรียงตามลำดับจากน้อยไปหามากและส่งคืนชุดว่างหากคะแนนไม่ถูกต้องหรือชุดที่มีว่าชุดนั้นสมบูรณ์หรือไม่ (ดังนั้น {จริง} ถ้าชุดนั้นสมบูรณ์และถูกต้องและ {false} ถ้าชุดนั้นไม่สมบูรณ์และ ถูกต้อง)

โปรแกรมเต็มรูปแบบที่จะทำงานอาจมีลักษณะเช่นนี้:

functions
f:int*int+>set of bool
f(i,j)==if(j-i>2and j>21)or(i<0or i=30or j>30)then{}else{(j>20and j-i>1or j=30)}

คำอธิบาย:

if(j-i>2 and j>21)             /*if scores are too far apart*/
or(i<0 or i=30 or j>30)        /*or scores not in a valid range*/
then {}                        /*return the empty set*/
else{                       }  /*else return the set containing...*/
     (j>20 and j-i>1 or j=30)  /*if the set is complete*/

3

Java (JDK) , 59 48 ไบต์

a->b->b<0|b>29|a>b+2&a>21|a>30?0:a<21|a<30&a<b+2

ลองออนไลน์!

ส่งคืนObjectซึ่งเป็นInteger 0เกมที่ไม่ถูกต้องและBooleans trueและfalseสำหรับเกมต่อเนื่องที่ถูกต้องและสำหรับเกมที่เสร็จแล้วที่ถูกต้องตามลำดับ ใช้คะแนนที่ได้รับคำสั่ง (และ curried) โดยมีคะแนนสูงกว่าก่อน

-2 bytesโดยการย้อนกลับการตรวจสอบเมื่อสิ้นสุดการแข่งขัน
-11 bytesโดยการแกงการใช้ตัวดำเนินการระดับบิตและกลอุบายการกลับคืนอัตโนมัติบางประเภท - ขอบคุณ @KevinCruijssen

Ungolfed

a->                      // Curried: Target type IntFunction<IntFunction<Object>>
    b->                  // Target type IntFunction<Object>
                         // Invalid if:
            b<0          //    Any score is negative
          | b > 29       //    Both scores above 29
          |   a > b + 2  //    Lead too big
            & a > 21     //        and leader has at least 21 points
          | a > 30       //    Anyone has 31 points
        ? 0              // If invalid, return 0 (autoboxed to Integer)
                         // If valid, return whether the game is ongoing (autoboxed to Boolean)
                         // Ongoing if:
        :   a < 21       //    Nobody has 21 points
          |   a < 30     //    Leader has fewer than 30 points
            & a < b + 2  //        and lead is small

3

APL (Dyalog Unicode) , 35 ไบต์SBCS

ฟังก์ชั่นมัดเงียบเมื่อสิ้นสุดคือ 2 ต่อเนื่องคือ 1 ไม่ถูกต้องคือ 0 เหลือขนาดเล็กและใหญ่กว่าคะแนน

(,≡30 31|,)×(⊢<2+X1+⊢>X29201+⊣

ลองออนไลน์!

ใช้สูตรทางคณิตศาสตร์ของ Erik the Outgolfer ที่รวมกันเป็น

X:=min(max(x+1,20),29) ([X<y]+1)[X+2>y][(x,y)=(xmod30,ymod31)]
จัดเรียงใหม่ (ราวกับว่าสัญลักษณ์ทางคณิตศาสตร์แบบดั้งเดิมมี vectorisation และการกำหนดแบบอินไลน์) ถึง

[(x,y)=(x,y)mod(30,31)]×[y<2+X]×(1+[y<(X:=min(29,max(20,1+x)))])

และแปลโดยตรงไปยัง APL (ซึ่งมีความสัมพันธ์ที่ถูกต้องอย่างเคร่งครัดดังนั้นเราจึงหลีกเลี่ยงวงเล็บบางส่วน):

((x,y)30 31|x,y)×(y<2+X)×1+y>X29201+x

สิ่งนี้สามารถแปลงเป็นฟังก์ชั่นโดยปริยายง่ายๆโดยการแทนที่สำหรับและสำหรับ , เป็นสัญลักษณ์ของการขัดแย้งด้านซ้ายและขวามากกว่าสองตัวแปร:xy

((,)30 31|,)×(<2+X)×1+>X29201+

ตอนนี้เทียบเท่ากับสำหรับฟังก์ชั่นมัดใด ๆเพื่อให้เราสามารถลดความซับซ้อนของการ

(,30 31|,)×(<2+X)×1+>X29201+

ซึ่งเป็นทางออกของเรา; (,≡30 31|,)×(⊢<2+X)×1+⊢>X←29⌊20⌈1+⊣:

 อาร์กิวเมนต์ซ้าย  หนึ่งบวกนั่น;  สูงสุด 20 และนั่น  อย่างน้อย 29 และ;  กำหนดให้กับ;  อาร์กิวเมนต์ที่ถูกต้องมากขึ้น (0/1) หรือไม่  เพิ่มหนึ่งรายการ; ...  คูณต่อไปนี้โดยที่มิ  สองบวก;  เป็นอาร์กิวเมนต์ที่ถูกต้องน้อยกว่า (0/1) …  คูณสิ่งต่อไปนี้ด้วย;  เชื่อมอาร์กิวเมนต์เข้าด้วยกัน;  เศษเหลือเมื่อหารด้วยตัวเลขเหล่านี้ x1 + x สูงสุด( 20 , ... ) นาที( 29 , ... ) X : = ... [ Y > ... ] 1 + ... ( ... ) × ... 2 + X [ Y < ... ] ( ... ) × ... ( x , y ที่) ...
1+1+x
20⌈max(20,)
29⌊min(29,)
X←XX:=
⊢>[y>]
1+1+
(()×
2+XX2+X
⊢<[y<]
(()×
,(x,y)
30 31|mod(30,31)[ ( x , y ) = ]
,≡ อาร์กิวเมนต์การตัดแบ่งมีความเหมือนกันกับที่ (0/1) หรือไม่? [(x,y)=]


3

x86 ชุดประชุม, 42 ไบต์

รับอินพุตECXและEDXรีจิสเตอร์ โปรดทราบว่าต้องมากกว่าECX เอาท์พุตลงซึ่งหมายถึงเกมยังคงดำเนินต่อไปซึ่งเป็นตัวแทนของเกมที่กำลังสิ้นสุดและ(aka ) แสดงถึงคะแนนที่ไม่ถูกต้องEDX
EAX01-1FFFFFFFF

31 C0 83 F9 1E 77 1F 83 FA 1D 77 1A 83 F9 15 7C 
18 83 F9 1E 74 12 89 CB 29 D3 83 FB 02 74 09 7C 
08 83 F9 15 74 02 48 C3 40 C3

หรืออ่านเพิ่มเติมได้ใน Intel Syntax:

check:
    XOR EAX, EAX
    CMP ECX, 30     ; check i_1 against 30
    JA .invalid     ; if >, invalid.
    CMP EDX, 29     ; check i_2 against 29
    JA .invalid     ; if >, invalid.
    CMP ECX, 21     ; check i_1 against 21
    JL .runi        ; if <, running.
    CMP ECX, 30     ; check i_1 against 30
    JE .over        ; if ==, over.
    MOV EBX, ECX
    SUB EBX, EDX    ; EBX = i_1 - i_2
    CMP EBX, 2      ; check EBX against 2
    JE .over        ; if ==, over.
    JL .runi        ; if <, running.
                    ; if >, keep executing!
    CMP ECX, 21     ; check i_1 against 21
    JE .over        ; if ==, over.
                    ; otherwise, it's invalid.
    ; fallthrough!
    .invalid:
        DEC EAX     ; EAX = -1
        RETN
    .over:
        INC EAX     ; EAX = 1
    ; fallthrough!
    .runi:
        RETN        ; EAX = 0 or 1

สนุกจริง ๆ : ฟังก์ชั่นนี้เกือบจะเป็นไปตามกฎของ C Calling Convention ที่ลงทะเบียนเพื่อรักษายกเว้นฉันต้องปิดบังEBXเพื่อบันทึกไบต์ในการใช้สแต็ก


ไม่บังคับ (ไม่รวมอยู่ในจำนวนไบต์)

โดยการเพิ่ม 6 ไบต์ต่อไปนี้โดยตรงก่อนเริ่มรหัสด้านบนคุณสามารถผ่านECXและEDXไม่เรียงลำดับได้:

39 D1 7D 02 87 CA

ข้อใดต่อไปนี้ในไวยากรณ์ Intel ที่สามารถอ่านได้:

CMP ECX, EDX
JGE check
XCHG ECX, EDX

2

เรติน่า 0.8.2 , 92 ไบต์

\d+
$*
^(1{0,19},1{21}|(1{20,28}),11\2|1{29},1{30})$|^(1*,1{0,20}|(1{0,28}),1?\4)$|.+
$#1$#3

ลองออนไลน์! ลิงค์มีกรณีทดสอบ ใช้อินพุตตามลำดับจากน้อยไปหามาก คำอธิบาย: ขั้นตอนแรกเพียงแปลงจากทศนิยมเป็น unary เพื่อให้สามารถเปรียบเทียบคะแนนได้อย่างถูกต้อง ขั้นตอนที่สองมีรูปแบบทางเลือกหกรูปแบบแบ่งออกเป็นสามกลุ่มเพื่อให้สามารถส่งออกค่าที่แตกต่างกันสามแบบซึ่งจะ10ชนะ01สำหรับต่อเนื่องและ00ผิดกฎหมาย รูปแบบคือ:

  • กับ 0-19 คะแนน 21 คือชนะ
  • เมื่อเทียบกับ 20-28 คะแนนจาก +2 เป็นผู้ชนะ
  • เทียบกับ 29 คะแนน 30 คือชนะ
  • เทียบกับคะแนน (ต่ำกว่า) ใด ๆ คะแนน 0-20 ดำเนินต่อไป
  • เมื่อเทียบกับคะแนนสูงสุดที่ 28 คะแนนของ +1 ยังคงดำเนินต่อไป
  • สิ่งอื่นใด (รวมถึงคะแนนลบ) เป็นสิ่งผิดกฎหมาย


1

Bash 4+, 97 89 91 88 ไบต์

สมมติว่าสัญญาณเข้าน้อยไปหามาก แนวคิดที่ใช้จากคำตอบVDM-SL ลองออนไลน์
z==0 - เกมที่ดำเนินการ
z==1- เกมเสร็จสมบูรณ์
z==2- ไม่ถูกต้อง

-8โดยการล้างข้อมูลบนวงเล็บจาก(( & | ))เงื่อนไข
+2แก้ไขข้อบกพร่องขอบคุณ Kevin Cruijssen
-3การปรับปรุงตรรกะโดย Kevin Cruijssen

i=$1 j=$2 z=0
((j-i>2&j>21|i<0|i>29|j>30?z=2:0))
((z<1&(j>20&j-i>1|j>29)?z=1:0))
echo $z

1
รุ่น 89 ไบต์ของคุณดูเหมือนว่าจะส่งออก1แทนสำหรับ2 0 30รุ่น 97 ไบต์ของคุณทำงานอย่างถูกต้องดังนั้นหากคุณไม่สามารถแก้ไขได้คุณสามารถย้อนกลับได้ตลอดเวลา โหวตขึ้นสำหรับรุ่น 97 นั้น :)
Kevin Cruijssen


1
ฉันแก้ไขแล้ว แต่คุณดีกว่า! ยากต่อการติดตาม: P
roblogic

ข้อผิดพลาดที่29 30:( ควรเป็น "เสร็จสมบูรณ์"
roblogic

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