ตรวจสอบสามเหลี่ยมการลงคะแนนเสียง


12

จำนวนการลงคะแนนเสียงซึ่งเราจะติดป้ายBคือจำนวนของวิธีการของการจัดหมายเลข 1 ผ่าน B (B + 1) / 2 ลงในรูปสามเหลี่ยมเช่นว่าแต่ละแถวและคอลัมน์ที่อยู่ในลำดับการเพิ่มใด ๆ หมายเลขบัตรสี่หมายเลขแรกคือ:

a(0) = 1
a(1) = 1
a(2) = 1
a(3) = 2

a(3)คือ 2 ซึ่งหมายความว่ามี 2 วิธีในการจัดเรียงตัวเลขจาก 1 ถึง3(3+1)/2 = 6ในรูปสามเหลี่ยมดังกล่าว:

1          1
2 3    or  2 4
4 5 6      3 5 6

ดูรายการลำดับ OEISสำหรับรายละเอียดเพิ่มเติม

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

ขึ้นบรรทัดใหม่ที่ได้รับอนุญาต

อินพุต

สามเหลี่ยมของตัวเลขซึ่งอาจเป็นหรือไม่มีรูปสามเหลี่ยมที่ถูกต้อง ตัวอย่างเช่น:

1
2 3
4 5 6

1
10 5 
9 8 2
7 6 4 3

1
3 2

9
2 11
14 3 5
12 8 1 7
15 13 10 4 6

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21

เอาท์พุต

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

1                     # the same as a(3)-1

<nothing>

<nothing>

<nothing>

33591                 # the same as a(6)-1

เกณฑ์การให้คะแนน

นี่คือ : ตามปกติการนับไบต์ต่ำสุดที่ชนะ Tiebreaker ติดประกาศเร็วที่สุด


1
คุณควรพูดถึงว่าคอลัมน์นั้นมีลำดับเพิ่มขึ้นเช่นกัน มันทำให้ฉันสับสนจนกระทั่งฉันค้นหาคำจำกัดความของ OEIS
ballesta25

ถ้าเช่นนั้นทำไมจึงไม่1/4 5/2 3 6ถูกต้อง
Leun Nun

ข้อมูลจำเพาะคงที่ - ฉันอ่านรายการ OEIS ไม่ถูกต้อง @ ballesta25
ArtOfCode

cc @LeakyNun ^
ArtOfCode

เราสามารถสมมติได้ว่าอินพุตจะมีตัวเลขที่ถูกต้องแม้ว่าจะไม่อยู่ในลำดับที่ถูกต้อง
เดนนิส

คำตอบ:


4

เยลลี่ , 20 ไบต์

;Zµ⁼Ṣ€
ẋÇFŒ!ṁ€⁸ÇÐfL’

สำหรับรูปสามเหลี่ยมการลงคะแนนที่ถูกต้องเวลาใช้งานและการใช้หน่วยความจำอย่างน้อยO (n!)โดยที่nคือจำนวนรายการของสามเหลี่ยม คนที่ไม่ถูกต้องได้รับการยอมรับโดย crashing ดังนั้นจึงไม่มีการพิมพ์อะไรเลย

ลองออนไลน์!

ทดสอบการทำงาน

ในพื้นที่ฉันสามารถตรวจสอบได้ว่า(4)คำนวณอย่างถูกต้อง

$ time jelly eun ';Zµ⁼Ṣ€¶ẋÇFŒ!ṁ€⁸ÇÐfL’' '[1],[2,3],[4,5,6],[7,8,9,10]'
11

real    6m9.829s
user    6m7.930s
sys     0m2.579s

มันทำงานอย่างไร

;Zµ⁼Ṣ€         Helper link. Argument: T (triangular array)

 Z             Zip/transpose T.
;              Concatenate the original and the transposed copy.
  µ            Begin a new monadic chain, with the previous result (R) as argument.
    Ṣ€         Sort each array in R.
   ⁼           Test for equality with R.
               This returns 1 if T is a ballot triangle, 0 if not.

ẋÇFŒ!ṁ€⁸ÇÐfL’  Main link. Argument: A (triangular array)

 Ç             Call the helper link with argument A.
ẋ              Repeat A that many times.
               This yields an empty array if A is not a ballot triangle.
  F            Flatten the result.
   Œ!          Generate all permutations of the digits of A.
     ṁ€⁸       Mold each permutation like A, i.e., give it triangular form.
               This crashes if permutation array is empty.
        ÇÐf    Filter; keep permutations for which the helper link returns 1.
           L’  Compute the length and decrement it.

3

Brachylogขนาด 44 ไบต์

{:{o?}a,?z:2a},?ly+yb:3flw
p~c.:laBtybB,.:1&

ลองออนไลน์!

วิ่งในเวลานี้สองครั้งชี้แจงดังนั้นสำหรับ testcases truthy 3คุณจะต้องเชื่อฉันว่ามันในทางทฤษฎีจะให้ผลลัพธ์ที่ถูกต้องสำหรับรูปสามเหลี่ยมที่มีความยาวมากกว่าหรือเท่ากับ

คุณยังสามารถทดสอบเพื่อทดสอบเท็จได้ซึ่งควรจะยุติได้อย่างรวดเร็ว


ฉันต้องอัปเดตข้อมูลจำเพาะ - ทั้งแถวและคอลัมน์ควรเพิ่มขึ้น ผลลัพธ์ของฉันอ่านรายการ OEIS ไม่ถูกต้อง ขออภัยหากคำตอบของคุณไม่ถูกต้อง!
ArtOfCode

@ArtOfCode นั่นคือสิ่งที่คำตอบของฉันทำมาตลอด
Leaky Nun

2

JavaScript (ES6), 143 ไบต์

a=>a.some((b,i)=>b.some((c,j)=>c<b[j-1]||i&&c<a[i-1][j]))?'':(f=n=>n<2||n*f(n-1),g=(n,m=f(n*n+n>>1))=>n<2?m:g(--n,m*f(n)/f(n+n+1)),g(a.length))

ค้นหารูปสามเหลี่ยมสำหรับรายการที่ไม่ถูกต้องจากนั้นใช้สูตรแบบเรียกซ้ำใน OEIS เพื่อคำนวณผลลัพธ์


ฉันต้องอัปเดตข้อมูลจำเพาะ - ทั้งแถวและคอลัมน์ควรเพิ่มขึ้น ผลลัพธ์ของฉันอ่านรายการ OEIS ไม่ถูกต้อง ขออภัยหากคำตอบของคุณไม่ถูกต้อง!
ArtOfCode

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