สามเหลี่ยมปาสคาล (Sort of)


24

ทุกคนที่นี่ส่วนใหญ่คุ้นเคยกับสามเหลี่ยมปาสคาล มันเกิดขึ้นจากแถวที่ต่อเนื่องกันซึ่งองค์ประกอบแต่ละอย่างนั้นคือผลรวมของเพื่อนบ้านทั้งสองด้านบนซ้ายและขวาบน นี่คือ5แถวแรก(ยืมมาจากสร้างของสามเหลี่ยมปาสคาล ):

    1
   1 1
  1 2 1
 1 3 3 1
1 4 6 4 1
  . . .

ยุบแถวเหล่านี้ไปทางซ้าย

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .

จัดเรียงตามลำดับจากน้อยไปหามาก

1
1 1
1 1 2
1 1 3 3
1 1 4 4 6
. . .

อ่านสามเหลี่ยมนี้เป็นแถว

[1, 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 4, 6 ...]

รับอินพุตnส่งออกnหมายเลข th ในชุดนี้ นี่คือOEIS 107430107430

กฎระเบียบ

  • คุณสามารถเลือกการจัดทำดัชนีแบบ 0- หรือ 1 ก็ได้ กรุณาระบุว่าในการส่งของคุณ
  • อินพุตและเอาต์พุตสามารถสันนิษฐานว่าเหมาะสมกับชนิดจำนวนเต็มดั้งเดิมของภาษาของคุณ
  • อินพุตและเอาต์พุตสามารถกำหนดได้ด้วยวิธีการที่สะดวกวิธีการที่สะดวกใด
  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการตีกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

6
ชื่อดีมาก!
Luis Mendo

1
ตามลิงค์ OEIS การเปลี่ยนแปลงเพียงอย่างเดียวที่จำเป็นในการสร้างลำดับนี้แทนค่าสัมประสิทธิ์ทวินามคือการหารจำนวนเต็ม แน่นอนว่าตกอยู่ภายใต้ "เรื่องไม่สำคัญ"
Peter Taylor

5
@PeterTaylor ดูเหมือนจะไม่ได้เป็นคนล่อให้ฉัน มีวิธีที่เป็นไปได้อื่น ๆ อีกมากมายที่สามารถนำไปสู่โอกาสในการเล่นกอล์ฟที่น่าสนใจโดยเฉพาะอย่างยิ่งสำหรับภาษาที่ไม่มีแบบทวินามในตัว
Arnauld

4
@PeterTaylor ฉันไม่เชื่อว่านี่เป็นของซ้ำ จนถึงตอนนี้คำตอบ MATL, JavaScript และ Pascal ค่อนข้างแตกต่างระหว่างความท้าทายทั้งสอง อย่างไรก็ตามเนื่องจากการโหวตของฉันเป็นแบบเปิดฉันจึงยังไม่ลงคะแนน
AdmBorkBork

4
เห็นด้วยอย่างสมบูรณ์กับ @AdmBorkBork ดังนั้นนับฉันเป็นคะแนนเปิดใหม่ นั่นทำให้ 3 ตอนนี้ ต้องมีการโหวตกี่ครั้ง?
Luis Mendo

คำตอบ:


9

JavaScript (ES6), 79 ไบต์

0 การจัดทำดัชนี

f=(n,a=[L=1])=>a[n]||f(n-L,[...a.map((v,i)=>k=(x=v)+~~a[i-1-i%2]),L++&1?k:2*x])

การสาธิต

อย่างไร?

f = (                       // f = recursive function taking:
  n,                        //   n = target index
  a = [L = 1]               //   a[] = current row, L = length of current row
) =>                        //
  a[n] ||                   // if a[n] exists, stop recursion and return it
  f(                        // otherwise, do a recursive call to f() with:
    n - L,                  //   n minus the length of the current row
    [                       //   an array consisting of:
      ...a.map((v, i) =>    //     replace each entry v at position i in a[] with:
        k =                 //       a new entry k defined as:
        (x = v) +           //       v +
        ~~a[i - 1 - i % 2]  //       either the last or penultimate entry
      ),                    //     end of map()
      L++ & 1 ?             //     increment L; if L was odd:
        k                   //       append the last updated entry
      :                     //     else:
        2 * x               //       append twice the last original entry
    ]                       //   end of array update
  )                         // end of recursive call

อัลกอริทึมนี้สร้างแถวเรียงลำดับของสามเหลี่ยมปาสคาลโดยตรง มันอัพเดตnตามความยาวของแถวก่อนหน้าจนกว่าจะมี [n]อยู่ ตัวอย่างเช่นจำเป็นต้องมีการทำซ้ำ 6 ครั้งสำหรับn = 19 :

 L | n  | a[]
---+----+------------------------
 1 | 19 | [ 1 ]
 2 | 18 | [ 1, 1 ]
 3 | 16 | [ 1, 1, 2 ]
 4 | 13 | [ 1, 1, 3, 3 ]
 5 |  9 | [ 1, 1, 4, 4, 6 ]
 6 |  4 | [ 1, 1, 5, 5, 10, 10 ]
                        ^^

ทำได้ดีมาก ฉันไม่แน่ใจว่าฉันเข้าใจอย่างแน่นอนว่ามันทำงานอย่างไร ความพยายามของฉันกลายเป็นนานกว่าของคุณมาก
kamoroso94

@ kamoroso94 ฉันได้เพิ่มคำอธิบายแล้ว
Arnauld

ฉันรักสิ่งนี้! สนุกกับการหาสิ่งที่มันทำ
Shaggy

6

อ็อกเทฟ 46 ไบต์

@(n)(M=sort(spdiags(flip(pascal(n)))))(~~M)(n)

1-based

ลองออนไลน์!

คำอธิบาย

พิจารณาn=4เป็นตัวอย่าง

pascal(n) ให้ Pascal matrix:

 1     1     1     1
 1     2     3     4
 1     3     6    10
 1     4    10    20

แถวของสามเหลี่ยมปาสคาลเป็นตัวต้านของเมทริกซ์นี้ ดังนั้นจึงพลิกในแนวตั้งโดยใช้flip(···)

 1     4    10    20
 1     3     6    10
 1     2     3     4
 1     1     1     1

ซึ่งเปลี่ยน antidiagonals เป็น diagonals

spdiags(···) แยก diagonals (ไม่ใช่ศูนย์) เริ่มต้นจากซ้ายล่างและจัดเรียงเป็นคอลัมน์ศูนย์

 1     1     1     1     0     0     0
 0     1     2     3     4     0     0
 0     0     1     3     6    10     0
 0     0     0     1     4    10    20

M=sort(···)เรียงลำดับแต่ละคอลัมน์ของเมทริกซ์นี้และกำหนดผลลัพธ์ให้กับตัวแปรM:

 0     0     0     1     0     0     0
 0     0     1     1     4     0     0
 0     1     1     3     4    10     0
 1     1     2     3     6    10    20

(···)(~~M)ขณะนี้การทำดัชนีแบบลอจิคัลถูกใช้เพื่อแยกค่าที่ไม่ใช่ศูนย์ของเมทริกซ์นี้ตามลำดับส่วนใหญ่ (ลงมาจากนั้นข้าม) ผลลัพธ์ที่ได้คือเวกเตอร์คอลัมน์:

 1
 1
 1
 1
···
10
10
20

ในที่สุดnรายการ -th ของเวกเตอร์นี้ถูกสกัดโดยใช้ซึ่งในกรณีนี้จะช่วยให้(···)(n)1


5

Python 2 , 86 78 72 ไบต์

-8 ไบต์ขอบคุณRod

g=lambda n,r=[1]:r[n:]and r[n/2]or g(n-len(r),map(sum,zip([0]+r,r+[0])))

ลองออนไลน์!

Ungolfed

def g(n, row=[1]):
  if n < len(row):
    return row[n/2]
  else:
    next_row = map(sum, zip([0] + row, row + [0]))
    return g(n - len(row), next_row)

ลองออนไลน์!

ฟังก์ชันคำนวณแถวของสามเหลี่ยมปาสคาลแบบวนซ้ำ ระบุแถวปัจจุบันเป็นrow, map(sum, zip([0] + row, row + [0])).
ที่การโทรแต่ละครั้งnจะลดลงตามความยาวของแถวปัจจุบัน ถ้าฟังก์ชั่นมาถึงที่แถวขวาnthจำนวนต่ำสุดของแถวควรถูกส่งคืน
เนื่องจากครึ่งแรกของแถวอยู่ในลำดับจากน้อยไปหามากและแต่ละแถวมีความสมมาตรจำนวนจึงอยู่ที่ดัชนีn/2(การจัดทำดัชนีแบบแบ่งส่วน 0 จำนวนเต็ม)


4

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

การจัดทำดัชนีเป็นแบบ 1

(##&@@@Sort/@Table[n~Binomial~k,{n,0,#},{k,0,n}])[[#]]&

ลองออนไลน์!

คำอธิบาย

น่าจะเป็นสนามกอล์ฟฉันไม่ใช่ผู้ใช้ Mathematica ที่มีประสบการณ์มาก

Table[n~Binomial~k,{n,0,#},{k,0,n}]

สำหรับแต่ละn ∈ [0, อินพุต] ∩ℤสร้างตารางของ binomials กับแต่ละk ∈ [0] n ∩ℤ

Sort/@

จัดเรียงแต่ละรายการ ใช้จดชวเลขให้-Map[function,object]function/@object

(##&@@@...)[[#]]

แผ่รายการผลลัพธ์และดึงองค์ประกอบที่ดัชนีในรายการคืออินพุต



3

R , 58 ไบต์

function(n)(m=apply(outer(0:n,0:n,choose),1,sort))[m>0][n]

ลองออนไลน์!

คำนวณn choose kหาเมทริกซ์แต่ละตัวn,kใน[0,1,...,n]เรียงลำดับแถวจากน้อยไปหามาก (*) และลบศูนย์แล้วเลือกnองค์ประกอบที่

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


3

Haskell , 143 132 125 123 ไบต์

((p>>=s.h)!!)
p=[1]:map(\r->zipWith(+)(0:r)(r++[0]))p
h r=splitAt(div(length r)2)r
s(a,b)=reverse b!a
(h:t)!b=h:(b!t)
x!_=x

บรรทัดแรกคือฟังก์ชั่นแบบไร้จุดที่รับดัชนี (อิงเป็น 0) และส่งกลับตัวเลขที่เหมาะสมตามลำดับ ลองออนไลน์!

นี่เป็นโปรแกรม Haskell ครั้งแรกของฉัน! ฉันแน่ใจว่ามันจะสั้นกว่านี้มาก เคล็ดลับการชื่นชม

บันทึก 2 ไบต์ขอบคุณnimi

Ungolfed

pascalRows = [1] : map (\row -> zipWith (+) (0:row) (row++[0])) pascalRows
halves row = splitAt (div (length row) 2) row
joinSorted (first, second) = interleave (reverse second) first
interleave [] _ = []
interleave longer shorter = (head longer) : (interleave shorter (tail longer))
f n = (concatMap (joinSorted.halves) pascalRows) !! n

คุณยังคงมีiฟังก์ชั่นsซึ่งถูกเปลี่ยนชื่อเป็น!ฉันเดา ถ้าคุณใช้ฟังก์ชั่นมัดคุณสามารถวาง()รอบ:reverse b s(a,b)=reverse b!a
nimi

@nimi Ah ขอบคุณ - ฉันเปลี่ยน TIO แต่พลาดจุดในรหัสที่นี่ และขอขอบคุณสำหรับคำแนะนำในวงเล็บ
DLosc

3

JavaScript, 57 ไบต์

f=(i,r=1)=>i<r?i>1?f(i-2,--r)+f(i<r?i:r-1,r):1:f(i-r,r+1)

0 การจัดทำดัชนี

สิ่งนี้เกิดขึ้นได้อย่างไร:

ขั้นตอนที่ 0:

c=(i,r)=>i?r&&c(i-1,r-1)+c(i,r-1):1
f=(i,r=1)=>i<r?c(i>>1,r-1):f(i-r,r+1)

รหัสนี้เข้าใจง่าย:

  • ฟังก์ชัน cคำนวณสูตรการใช้รวมกัน: C (n, k) = C (n-1, k) + C (n-1, k-1); หรือ 1 ถ้า k == 0 หรือ k == n
  • ฟังก์ชันfพยายามค้นหาหมายเลขแถวและดัชนีในแถวจากนั้นเรียกใช้ฟังก์ชัน c เพื่อรับผลลัพธ์

ขั้นตอนที่ 1:

c=(i,r)=>i>1?--r&&c(i-2,r)+c(i,r):1
f=(i,r=1)=>i<r?c(i,r):f(i-r,r+1)

ในขั้นตอนนี้เราพยายามแก้ไขการเรียกใช้ฟังก์ชัน cที่จะทำให้มันเป็นเช่นเดียวกับพารามิเตอร์ของc(i,r)f

ขั้นตอนที่ 2:

c=(i,r)=>i>1?--r&&c(i-2,r)+c(i<r?i:r-1,r):1
f=(i,r=1)=>i<r?c(i,r):f(i-r,r+1)

เราทดสอบi<rว่าใช้ฟังก์ชั่นfหรือฟังก์ชั่นcหรือฟังก์ชั่นนั่นเป็นเหตุผลที่เราให้ชะมดถือในระหว่างการเรียกซ้ำของฟังก์ชั่นi<rc

ขั้นตอนที่ 3:

f=(i,r=1)=>i<r?i>1?--r&&f(i-2,r)+f(i<r?i:r-1,r):1:f(i-r,r+1)

ในขั้นตอนนี้เรารวมสองฟังก์ชันนี้เข้าด้วยกัน

หลังจากเล่นกอล์ฟเพิ่มอีกเราก็ได้คำตอบที่อธิบายไว้ข้างต้น


2

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

0rcþ`ZṢ€Ẏḟ0⁸ị

ลองออนไลน์!

ใช้อัลกอริทึม Dyalog ของ Uriel

1 การจัดทำดัชนี

คำอธิบาย:

0rcþ`ZṢ€Ẏḟ0⁸ị
0r            Return inclusive range from 0 to n
    `         Call this dyad with this argument on both sides
   þ           Outer product with this dyad
  c             Binomial coefficient
     Z        Zip
       €      Call this link on each element
      Ṣ        Sort
        Ẏ     Concatenate elements
         ḟ0   Remove 0s
           ⁸ị Take the nth element

คุณสามารถเพิ่มคำอธิบายได้ไหม? ฉันคิดไม่ออกว่าþทำอะไรที่นี่
Shaggy

1
@Shaggy มันคือผลิตภัณฑ์ชั้นนอกฉันจะเพิ่มคำอธิบาย
Erik the Outgolfer

2

JavaScript (Node.js) , 65 ไบต์

ไม่ใช้แม้แต่อาเรย์ 0 การจัดทำดัชนี

f=(n,i=0,g=x=>x?x*g(x-1):1)=>n>i?f(n-++i,i):g(i)/g(c=n>>1)/g(i-c)

ลองออนไลน์!

คำอธิบาย:

f=(n,i=0,                 )=>                                     // Main Function
         g=x=>x?x*g(x-1):1                                        // Helper (Factorial)
                             n>i?                                 // Is n > i?
                                 f(n-++i,i):                      // If so, call function
                                                                  // f(n-i-1, i+1) to skip
                                                                  // . i+1 terms
                                            g(i)/g(c=n>>1)/g(i-c) // If not, since sorting 
                                                                  // . the binomial coeffs
                                                                  // . equals to writing
                                                                  // . the first floor(i/2)
                                                                  // . coefficients twice
                                                                  // . each, so a shortcut

1

Pascal , 373 ไบต์

function t(n,k,r:integer):integer;begin if(n<k)then t:=r-1 else t:=t(n,k+r,r+1)end;
function s(n,k:integer):integer;begin if(k=0)then s:=n else s:=s(n+k,k-1)end;
function f(n,k:integer):integer;begin if((k<1)or(k>n))then f:=0 else if n=1 then f:=1 else f:=f(n-1,k-1)+f(n-1,k)end;
function g(n:integer):integer;var k:integer;begin k:=t(n,0,1);g:=f(k,(n-s(0,k-1)+2)div 2)end;

g เป็นฟังก์ชั่น

ลองออนไลน์!


n=1 thenn=1thenสามารถ
Jonathan Frech

ดูเหมือนว่าif(k=0)thenจะเป็นif k=0thenไปได้
ปุย

ถ้าจำนวนบางเสมอมากกว่า 0 คุณควรใช้แทนword integer
tsh

1

Java 8, 187 ไบต์

n->{int r=~-(int)Math.sqrt(8*n+1)/2+1,a[]=new int[r],k=r,x=0;for(;k-->0;a[k]=p(r,k))x+=k;java.util.Arrays.sort(a);return a[n-x];}int p(int r,int k){return--r<1|k<2|k>r?1:p(r,k-1)+p(r,k);}

คำอธิบาย:

ลองออนไลน์

n->{                   // Method with integer as both parameter and return-type
  int r=~-(int)Math.sqrt(8*n+1)/2+1,
                       //  Calculate the 1-indexed row based on the input
      a[]=new int[r],  //  Create an array with items equal to the current row
      k=r,             //  Index integer
      x=0;             //  Correction integer
  for(;k-->0;          //  Loop down to 0
    a[k]=p(r,k))       //   Fill the array with the Pascal's Triangle numbers of the row
    x+=k;              //   Create the correction integer
  java.util.Arrays.sort(a);
                       //  Sort the array
  return a[n-x];}      //  Return the `n-x`'th (0-indexed) item in this sorted array

// Separated recursive method to get the k'th value of the r'th row in the Pascal Triangle
int p(int r,int k){return--r<1|k<2|k>r?1:p(r,k-1)+p(r,k);}

1

MATL 11 ไบต์

:qt!XnSXzG)

1-based

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย

พิจารณาการป้อนข้อมูล4เป็นตัวอย่าง ;เป็นตัวคั่นแถวสำหรับเมทริกซ์หรือเวกเตอร์คอลัมน์

:     % Implicit input: n. Push the row vector [1 2 ... n]          
      S STACK: [1 2 3 4]
q     % Subtract 1, emlement-wise: gives [0 1 ... n-1]
      % STACK: [0 1 2 3]
t!    % Duplicate and transpose into a column vector
      % STACK: [0 1 2 3], [0; 1; 2; 3]
Xn    % Binomial coefficient, element-wise with broadcast. Gives an
      % n×n matrix where entry (i,j) is binomial(i,j), or 0 for i<j
      % STACK: [1 1 1 1;
                0 1 2 3;
                0 0 1 3;
                0 0 0 1]
S     % Sort each column
      % STACK: [0 0 0 1;
      %         0 0 1 1;
      %         0 1 1 3;
      %         1 1 2 3]
Xz    % Keep only nonzeros. Gives a column vector
      % STACK: [1; 1; 1; 1; 1; 2; 1; 1; 3; 3]
G)    % Get the n-th element. Implicitly display
      % STACK: 1

1

แบตช์ 128 ไบต์

@set/as=2,t=r=m=i=1
:l
@if %1 geq %t% set/as+=r,t+=r+=1&goto l
@for /l %%i in (%s%,2,%1)do @set/ar-=1,m=m*r/i,i+=1
@echo %m%

0 การจัดทำดัชนี


คุณสามารถเพิ่มคำอธิบายได้ไหม ฉันทำตามตรรกะไม่ได้ที่นี่
AdmBorkBork

@AdmBorkBork สามบรรทัดแรกคำนวณแถวrและคอลัมน์%1-(s-2)ของ%1ชุดที่ บรรทัดที่สี่แล้วใช้ที่ในการคำนวณค่าสัมประสิทธิ์ทวินาม(n k) = n!/(n-k)!k!= =n(n-1)...(n+1-k)/(1)(2)...k (n/1)((n-1)/2)...((n+1-k)/k)MathJax อยู่ที่ไหนเมื่อฉันต้องการ
Neil

1

APL (Dyalog Classic)ขนาด 17 ไบต์

⎕⊃∊i!⍨,\⌊.5×i←⍳99

ลองออนไลน์!

การทำดัชนีแบบ 0

โปรดทราบว่านั่น(49!98) > 2*53คือสัมประสิทธิ์ทวินาม 98 มากกว่า 49 มากกว่า 2 53ดังนั้น ณ จุดนี้ไดไดโลจีได้เริ่มสูญเสียความแม่นยำเนื่องจาก IEEE floating point




1

เยลลี่ 11 ไบต์

Ḷc€`Ṣ€Fḟ0ị@

ลองออนไลน์!

ลิงก์ monadic ที่รับดัชนีและส่งคืนจำนวนเต็มใช้การทำดัชนีแบบที่ 1

อย่างไร?

ดำเนินการกับความท้าทายได้อย่างดีเยี่ยมตามที่เขียนไว้โดยมีด้านขวาของสามเหลี่ยมปาสคาล (ศูนย์) มากกว่าซึ่งถูกโยนทิ้งไป ...

Ḷc€`Ṣ€Fḟ0ị@ - Link: integer, i    e.g. 1   or    9
Ḷ           - lowered range            [0]       [0,1,2,3,4,5,6,7,8]
   `        - repeat left as right arg [0]       [0,1,2,3,4,5,6,7,8]
 c€         - binomial choice for €ach [[1]]     [[1,0,0,0,0,0,0,0,0],[1,1,0,0,0,0,0,0,0],[1,2,1,0,0,0,0,0,0],[1,3,3,1,0,0,0,0,0],[1,4,6,4,1,0,0,0,0],[1,5,10,10,5,1,0,0,0],[1,6,15,20,15,6,1,0,0],[1,7,21,35,35,21,7,1,0],[1,8,28,56,70,56,28,8,1]]
    Ṣ€      - sort €ach                [[1]]     [[0,0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,1,1],[0,0,0,0,0,0,1,1,2],[0,0,0,0,0,1,1,3,3],[0,0,0,0,1,1,4,4,6],[0,0,0,1,1,5,5,10,10],[0,0,1,1,6,6,15,15,20],[0,1,1,7,7,21,21,35,35],[1,1,8,8,28,28,56,56,70]]
      F     - flatten                  [1]       [0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,2,0,0,0,0,0,1,1,3,3,0,0,0,0,1,1,4,4,6,0,0,0,1,1,5,5,10,10,0,0,1,1,6,6,15,15,20,0,1,1,7,7,21,21,35,35,1,1,8,8,28,28,56,56,70]
       ḟ0   - filter discard zeros     [1]       [1,1,1,1,1,2,1,1,3,3,1,1,4,4,6,1,1,5,5,111,1,6,6,15,15,21,1,7,7,21,21,35,35,1,1,8,8,28,28,56,56,70]
         ị@ - index into (sw@p args)    1         3 --------------^

1

สีแดง 206 ไบต์

f: func[n][t: copy[[1]]l: 0
while[l < n][a: copy last t insert append a 0 0 b: copy[]repeat i k:(length? a)- 1[append b a/(i) + a/(i + 1)]append t reduce[b]l: l + k]foreach p t[sort p]pick split form t{ }n]

1-based

ลองออนไลน์!

คำอธิบาย:

f: func [n] [
    t: copy [[1]]                       ; start with a list with one sublist [1]
    l: 0                                ; there are 1 items overall
    while [l < n] [                     ; while the number of items is less than the argument
        a: copy last t                  ; take the last sublist 
        insert append a 0 0             ; prepend and append 0 to it  
        b: copy []                      ; prepare a list for the sums  
        repeat i k: (length? a) - 1 [   ; loop throught the elements of the list
            append b a/(i) + a/(i + 1)] ; and find the sum of the adjacent items
        append t reduce [b]             ; append the resulting list to the total list
        l: l + k                        ; update the number of the items
    ]
    foreach p t [sort p]                ; sort each sublist
    v: pick split form t { } n          ; flatten the list and take the n-th element
]


1

J, 46 41 ไบต์

f=:](([-2!]){/:~@(i.!<:)@])[:<.2&!@,:^:_1

0 การจัดทำดัชนี

ลองออนไลน์!

หมายเหตุ:

  • <.2&!@,:^:_1y choose 2จะช่วยให้จำนวนแถวที่เกี่ยวข้องของสามเหลี่ยมปาสคาลโดยปัดเศษลงผกผันของ
  • /:~@(i.!<:)@] คำนวณแถวและเรียงลำดับ
  • [-2!] ให้ดัชนีลงในแถว

สวัสดี. ยินดีต้อนรับสู่เว็บไซต์! นี่เป็นคำตอบแรกที่ดี :)
DJMcMayhem

1

จูเลีย 70 ไบต์

f(x)=map(n->binomial(n-1,ceil(Int,x/2-(n^2-n)/4-1)),round(Int,√(x*2)))

1-based

คำอธิบาย:

หาหมายเลขแถวก่อนแล้วตามด้วยหมายเลขคอลัมน์จากนั้นคำนวณทวินาม


ยินดีต้อนรับสู่ PPCG!
Martin Ender

ใช่ใบหน้ามีความสุข
จิมมี่เฉิน


0

Pyth, 15 ไบต์

@u+GSm.cHdhHhQY

0 การจัดทำดัชนี

ลองมัน

คำอธิบาย

@u+GSm.cHdhHhQY
 u          hQY   Reduce on [0, ..., input], starting with the empty list...
  +G              ... append to the accumulator...
    Sm.cHdhH      ... the sorted binomial coefficients.
@              Q  Take the 0-indexed element.


0

Ruby , 56 ไบต์

->n{a=0;n-=a until n<a+=1;[*2..a].combination(n/2).size}

0-based

อันดับแรกให้รับแถวและคอลัมน์ในรูปสามเหลี่ยมจากนั้นคำนวณค่าสัมประสิทธิ์ทวินามที่สอดคล้องกับตำแหน่งนั้น

ลองออนไลน์!


0

ที่จริงแล้ว 8 ไบต์

ส่วนมากมาจากโจนาธานอัลลันคำตอบของวุ้น ใช้การจัดทำดัชนี 0

;r♂╣♂SΣE

ลองออนไลน์!

Ungolfing

          Implicit input n.
;         Duplicate n.
 r        Lowered range. [0..n-1].
  ♂╣      Pascal's triangle row of every number.
    ♂S    Sort every row.
      Σ   Sum each row into one array.
       E  Get the n-th element of the array (0-indexed).
          Implicit return.

มันควรจะสร้างตัวเลขเดียว nTH ในซีรีส์ สิ่งนี้สร้างอาร์เรย์
เรียกซ้ำ

อ๊ะ คงที่ ขอบคุณ @recursive
Sherlock9



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