การผสมผสานที่เป็นไปได้


9

ปัญหา

กำหนดค่า n ให้นึกภาพทิวทัศน์ของภูเขาที่ถูกจารึกไว้ในข้อมูลอ้างอิง (0, 0) ถึง (2n, 0) ไม่มีช่องว่างสีขาวระหว่างเนินเขาและภูเขาจะไม่ลงมาใต้แกน x ปัญหาที่ต้องแก้ไขคือ: ให้ n (ซึ่งกำหนดขนาดของภูมิประเทศ) และจำนวน k ของยอดเขา (k เสมอน้อยกว่าหรือเท่ากับ n), สามารถผสมกันได้กี่ภูเขากับ k peaks?

อินพุต

n ผู้แทนความกว้างของภูมิประเทศและ k ซึ่งเป็นจำนวนยอดเขา

เอาท์พุต

เพียงแค่จำนวนชุดค่าผสมที่เป็นไปได้

ตัวอย่าง

รับ n = 3 และ k = 2 คำตอบคือ 3 ชุดค่าผสม

เพียงเพื่อให้เป็นตัวอย่างภาพพวกเขามีดังต่อไปนี้:

   /\     /\      /\/\
/\/  \   /  \/\  /    \

เป็นชุดค่าผสม 3 ชุดที่เป็นไปได้โดยใช้ตำแหน่ง 6 (3 * 2) และ 2 จุดสูงสุด

แก้ไข: - ตัวอย่างเพิ่มเติม -

n  k  result
2  1  1
4  1  1
4  3  6
5  2  10

สภาพการชนะ

มาตรฐาน ใช้กฎ การส่งที่สั้นที่สุดในหน่วยไบต์ชนะ


4
นี่เป็นเช่นเดียวกันหรือไม่ "ค้นหาจำนวนนิพจน์ของnวงเล็บที่จับคู่ซึ่งมีkตัวอย่างของ()"
xnor


@xnor ใช่มันเป็น
Jonathan Allan

4
คุณอาจต้องการอัปเดตความท้าทายด้วยชื่อที่ชัดเจนยิ่งขึ้นเช่นคำนวณตัวเลขนารายานา
Arnauld

คุณสามารถยืนยันได้ว่าจะจัดการอินพุตที่มีkค่าศูนย์หรือไม่? ถ้าเป็นเช่นนั้นจะต้องจัดการอินพุตที่มีnค่าเท่ากับศูนย์ (ที่มีkค่าศูนย์โดยนิยามด้วย)
Jonathan Allan

คำตอบ:



6

เยลลี่ขนาด 7 ไบต์

cⱮṫ-P÷⁸

ลองออนไลน์!

จะเข้าเป็นแล้วn kใช้สูตร

ยังไม่มีข้อความ(n,k)=1n(nk)(nk-1)

ซึ่งผมพบในวิกิพีเดีย

cⱮṫ-P÷⁸
c        Binomial coefficient of n and...
 Ɱ       each of 1..k
  ṫ-     Keep the last two. ṫ is tail, - is -1.
    P    Product of the two numbers.
     ÷   Divide by
      ⁸  n.

7 ไบต์

แต่ละบรรทัดทำงานด้วยตัวของมันเอง

,’$c@P÷
c@€ṫ-P÷

จะเข้าเป็นแล้วkn

7 ไบต์

cⱮ×ƝṪ÷⁸
  • ขอบคุณ Jonathan Allan สำหรับอันนี้

รอ ... ส่วนท้ายถูกกำหนดโดยอัตโนมัติเป็น 2 ตัวเลขหรือไม่ (ไม่รู้จัก Jelly เลยคำถามโง่ ๆ )
Quintec

@Quintec มีฟังก์ชันหางสองแบบ หนึ่ง ( ) ที่เพิ่งใช้องค์ประกอบสุดท้ายของการโต้แย้งเดียวและหนึ่งที่ฉันใช้ ( ) ซึ่งใช้เวลาสองข้อโต้แย้ง อาร์กิวเมนต์กำปั้นเป็นรายการและข้อที่สองคือตัวเลข (ในกรณีของฉัน-1แสดงด้วย-รหัสใน) ซึ่งจะบอกให้คุณทราบถึงองค์ประกอบที่จะบันทึก มี-1ให้สององค์ประกอบเป็นวิธี golfiest เพื่อกำหนด
dylnan

Gotcha ขอบคุณ! ฉันเห็นว่าเจลลี่ถูกสร้างขึ้นเพื่อเล่นกอล์ฟ ... ฮิ
Quintec

1
ตัวแปรอื่นสำหรับ 7 f (n, k):cⱮ×ƝṪ÷⁸
Jonathan Allan

4

JavaScript (ES6), 33 30 ไบต์

บันทึกแล้ว 3 ไบต์ขอบคุณ @Shaggy

(n)(k)จะเข้าเป็น

n=>g=k=>--k?n*--n/-~k/k*g(k):1

ลองออนไลน์!

การดำเนินการตามคำนิยาม recursive ใช้โดยAnders Kaseorg


JavaScript (ES7), 59 58 49 45 ไบต์

(n)(k)จะเข้าเป็น

n=>k=>k/n/(n-k+1)*(g=_=>k?n--/k--*g():1)()**2

ลองออนไลน์!

คำนวณ:

an,k=1k(n-1k-1)(nk-1)=1n(nk)(nk-1)=1n(nk)2×kn-k+1

มาจากA001263 (สูตรแรก)


-3 ไบต์พร้อมการแกง
Shaggy

@Shaggy Doh ... ขอบคุณ การแก้ไข # 7 ในที่สุดดูเหมือนว่าการแก้ไข # 1 ควรมี : p
Arnauld

3

ภาษา Wolfram (Mathematica) , 27 ไบต์

สามรุ่นความยาวเท่ากันทั้งหมด:

(b=Binomial)@##b[#,#2-1]/#&

Binomial@##^2#2/(#-#2+1)/#&

1/(Beta[#2,d=#-#2+1]^2d##)&

ลองออนไลน์! (เฉพาะรุ่นแรก แต่คุณสามารถคัดลอกและวางเพื่อลองรุ่นอื่น)

ทั้งหมดนี้เป็นตัวแปรบางอย่างของ

n!(n-1)!k!(k-1)!(n-k)!(n-k-1)!
ซึ่งเป็นสูตรที่เกิดขึ้น ฉันหวังว่าจะได้รับฟังก์ชั่นเบต้าซึ่งเป็นการเรียงลำดับทวินามแบบทวิภาค แต่ก็มีการแบ่งมากเกินไป


2

J , 17 11 ไบต์

]%~!*<:@[!]

ลองออนไลน์!

ใช้nเป็นอาร์กิวเมนต์ที่ถูกต้องkเช่นเดียวกับด้านซ้าย ใช้สูตรเดียวกันกับคำตอบ Jelly ของ dylnan และโซลูชัน APL ของ Quintec

คำอธิบาย:

            ] - n  
           !  - choose
       <:@[   - k-1
      *       - multiplied by
     !        - n choose k
   %~         - divided by
  ]           - n   

2

APL (Dyalog), 19 18 16 12 ไบต์

⊢÷⍨!×⊢!⍨¯1+⊣

ขอบคุณ @Galen Ivanov เป็นเวลา 4 ไบต์

ใช้ข้อมูลเฉพาะตัวในลำดับ OEIS ใช้ k ทางซ้ายและ n ทางขวา

TIO


⊢÷⍨!×⊢!⍨¯1+⊣เป็นเวลา12 ไบต์อาร์กิวเมนต์กลับด้าน
Galen Ivanov

@ GalenIvanov ขอบคุณ AP ของฉันโดยปริยายนั้นอ่อนแอมาก
Quintec

APL ของฉันในฐานะไม่ดีผมก็เอาโอกาสที่จะให้มันลองหลังจากการแก้ปัญหาของฉัน :) J
เลน Ivanov


1

Lisp ทั่วไป , 76 ไบต์

(defun x(n k)(cond((= k 1)1)(t(*(/(* n(1- n))(* k(1- k)))(x(1- n)(1- k))))))

ลองออนไลน์!


คุณสามารถบันทึก 2 ไบต์โดยการลบช่องว่างหลังจาก \ และหลัง x
Galen Ivanov

1
เพิ่งได้รับการปรับปรุงขอบคุณ
JRowan

แนะนำ(*(1- x)x)แทน(* x(1- x))
ceilingcat

1

Perl 6 , 33 ไบต์

{[*] ($^n-$^k X/(2..$k X-^2))X+1}

ลองออนไลน์!

ใช้สูตร

an,k=(n-1k-1)×1k(nk-1)=Πผม=1k-1(n-kผม+1)×Πผม=2k(n-kผม+1)

คำอธิบาย

{[*]                            }  # Product of
     ($^n-$^k X/                   # n-k divided by
                (2..$k X-^2))      # numbers in ranges [1,k-1], [2,k]
                             X+1   # plus one.

รุ่นทางเลือก 39 ไบต์

{combinations(|@_)²/(1+[-] @_)/[/] @_}

ลองออนไลน์!

ใช้สูตรจากคำตอบของ Arnauld:

an,k=1n(nk)2×kn-k+1



0

Stax , 9 ไบต์

ÇäO╪∙╜5‼O

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

ฉันใช้สูตรของดีแลนในสแตกซ์

แกะคลายและแสดงความคิดเห็นว่าโปรแกรมมีลักษณะเช่นนี้

        program begins with `n` and `k` on input stack
{       begin block for mapping
  [     duplicate 2nd element from top of stack (duplicates n)
  |C    combinatorial choose operation
m       map block over array, input k is implicitly converted to [1..k]
O       push integer one *underneath* mapped array
E       explode array onto stack
*       multiply top two elements - if array had only element, then the pushed one is used
,/      pop `n` from input stack and divide

เรียกใช้อันนี้


0

APL (NARS), 17 ตัวอักษร, 34 ไบต์

{⍺÷⍨(⍵!⍺)×⍺!⍨⍵-1}

ทดสอบ:

  f←{⍺÷⍨(⍵!⍺)×⍺!⍨⍵-1}
  (2 f 1)(4 f 1)(4 f 3)(5 f 2)    
1 1 6 10 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.