สร้างเปียของปาสคาล


32

นี่คือการถักเปียของปาสกาล:

 1 4  15  56   209   780    2911    10864     40545      151316      564719
1 3 11  41  153   571   2131    7953     29681     110771      413403      1542841
 1 4  15  56   209   780    2911    10864     40545      151316      564719

ฉันทำมันทั้งหมด Blaise Pascal ไม่ได้ถักเปียเท่าที่ฉันสามารถบอกได้และถ้าเขาทำมันอาจจะทำจากผมแทนที่จะเป็นตัวเลข

มันกำหนดไว้ดังนี้:

  1. คอลัมน์แรกมีคอลัมน์เดียวที่1อยู่ตรงกลาง
  2. คอลัมน์ที่สองมี1ด้านบนและด้านล่าง
  3. ตอนนี้เราสลับกันระหว่างการใส่ตัวเลขที่อยู่ตรงกลางหรือสองสำเนาของตัวเลขที่ด้านบนและล่าง
  4. หากตัวเลขไปที่ด้านบนหรือด้านล่างมันจะเป็นผลรวมของตัวเลขสองตัวที่อยู่ติดกัน (เช่น56 = 15 + 41) หากคุณเอียงศีรษะเล็กน้อยนี่เป็นขั้นตอนหนึ่งในสามเหลี่ยมปาสคาล
  5. หากตัวเลขอยู่ตรงกลางมันจะเป็นผลรวมของตัวเลขทั้งสามที่อยู่ติดกัน (เช่น41 = 15 + 11 + 15)

งานของคุณคือการพิมพ์ (บางส่วน) ถักเปียนี้

อินพุต

คุณควรเขียนโปรแกรมหรือฟังก์ชั่นที่ได้รับจำนวนเต็มเดียวnให้ดัชนีของคอลัมน์สุดท้ายที่จะออก

คุณอาจเลือกไม่ว่าจะเป็นคอลัมน์แรก (พิมพ์เพียงคนเดียว1บนเส้นกลาง) สอดคล้องกับหรือn = 0 n = 1สิ่งนี้จะต้องเป็นตัวเลือกที่สอดคล้องกันในทุกอินพุตที่เป็นไปได้

เอาท์พุต

ถักเปียปาสกาลเอาท์พุทถึงnคอลัมน์ที่ ช่องว่างต้องจับคู่กับรูปแบบตัวอย่างด้านบนทั้งหมดยกเว้นว่าคุณสามารถวางบรรทัดที่สั้นกว่ากับความยาวของบรรทัดที่ยาวกว่าด้วยช่องว่างและคุณอาจเลือกป้อนบรรทัดเดียว

กล่าวอีกนัยหนึ่งทุกคอลัมน์ควรมีความกว้างเท่ากับจำนวน (หรือคู่ของตัวเลขเท่ากัน) ในคอลัมน์นั้นตัวเลขในคอลัมน์ที่ต่อเนื่องกันไม่ควรทับซ้อนกันและไม่ควรเว้นวรรคระหว่างคอลัมน์

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

รายละเอียดเพิ่มเติม

คุณอาจคิดว่าnจะไม่น้อยกว่าดัชนีของคอลัมน์แรก (ดังนั้นไม่น้อยกว่า0หรือ1ขึ้นอยู่กับการจัดทำดัชนีของคุณ) นอกจากนี้คุณยังอาจคิดว่าตัวเลขสุดท้ายในถักเปียน้อยกว่า 256 หรือแทนได้จำนวนมากที่สุดโดยแบ่งตามชนิดจำนวนเต็มพื้นเมืองภาษาของคุณแล้วแต่จำนวนใดจะมากขึ้น ดังนั้นถ้าชนิดจำนวนเต็มพื้นเมืองของคุณสามารถเก็บไบต์คุณสามารถสรุปได้ว่าที่ใหญ่ที่สุดnเป็น9หรือ10(ขึ้นอยู่กับว่าคุณจะใช้ 0- หรือ 1-based n) และถ้ามันสามารถจัดเก็บลงนามจำนวนเต็ม 32 บิตnจะเป็นที่ส่วนใหญ่หรือ3334

ใช้กฎมาตรฐานของรหัสที่สั้นที่สุดชนะ

OEIS

นี่คือลิงค์ OEIS ที่เกี่ยวข้องบางส่วน แน่นอนว่าสิ่งเหล่านี้มีสปอยเลอร์สำหรับวิธีต่าง ๆ ในการสร้างตัวเลขในการถักเปีย:

กรณีทดสอบ

กรณีทดสอบเหล่านี้ใช้การจัดทำดัชนีแบบ 1 ฐาน แต่ละกรณีทดสอบคือสี่บรรทัดโดยที่อันแรกเป็นอินพุตและอีกสามส่วนที่เหลือเป็นเอาต์พุต

1

1

---
2
 1
1
 1
---
3
 1
1 3
 1
---
5
 1 4
1 3 11
 1 4
---
10
 1 4  15  56   209
1 3 11  41  153
 1 4  15  56   209
---
15
 1 4  15  56   209   780    2911
1 3 11  41  153   571   2131    7953
 1 4  15  56   209   780    2911
---
24
 1 4  15  56   209   780    2911    10864     40545      151316      564719       2107560
1 3 11  41  153   571   2131    7953     29681     110771      413403      1542841
 1 4  15  56   209   780    2911    10864     40545      151316      564719       2107560

รูปแบบดูเหมือนกิ้งก่าเล็กน้อยสำหรับฉัน
Leun Nun

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

4
@LeakyNun ฉันหวังว่าทั้งการสร้างฉากต่อเนื่องและศิลปะ ASCII นั้นเป็นองค์ประกอบที่สำคัญของความท้าทายเพราะภาษาส่วนใหญ่น่าจะดีกว่าในหนึ่งในสองข้อนี้ดังนั้นฉันจึงคิดว่ามันน่าสนใจที่จะผสมผสานมันเข้าด้วยกัน และแนะนำส่วนประกอบเพิ่มเติมที่ไม่ชัดเจนว่าจะสร้างด้านบน / ล่างและกลางแยกกันได้ดีกว่าหรือสร้างทั้งส่วนแล้วแยกส่วนที่แยกออก
Martin Ender


ยังไม่มีใครเขียนวิธีแก้ปัญหาใน Pascal เลย มันทำให้ฉันเศร้า
dynamitereed

คำตอบ:


5

เยลลี่ , 31 30 29 ไบต์

Q;S⁹o_
3ḶḂç@⁸СIµa"Ṿ€o⁶z⁶Zµ€Z

นี่คือลิงค์ monadic; มันยอมรับดัชนีคอลัมน์ตาม 0 เป็นอาร์กิวเมนต์และส่งกลับรายการของสตริง

ลองออนไลน์!

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

Q;S⁹o_                  Helper link.
                        Arguments: [k, 0, k] and [0, m, 0] (any order)

Q                       Unique; deduplicate the left argument.
 ;                      Concatenate the result with the right argument.
  S                     Take the sum of the resulting array.
   ⁹o                   Logical OR with the right argument; replaces zeroes in the
                        right argument with the sum.
     _                  Subtract; take the difference with the right argument to
                        remove its values.
                        This maps [k, 0, k], [0, m, 0] to [0, k + m, 0] and
                        [0, m, 0], [k, 0, k] to [m + 2k, 0, m + 2k].


3ḶḂç@⁸СIµa"Ṿ€o⁶z⁶Zµ€Z  Monadic link. Argument: A (array of column indices)

3Ḷ                      Yield [0, 1, 2].
  Ḃ                     Bit; yield [0, 1, 0].
        I               Increments of n; yield [].
      С                Apply...
   ç@                       the helper link with swapped arguments...
     ⁸                      n times, updating the left argument with the return
                            value, and the right argument with the previous value
                            of the left one. Collect all intermediate values of
                            the left argument in an array.
         µ         µ€   Map the chain in between over the intermediate values.
            Ṿ€          Uneval each; turn all integers into strings.
          a"            Vectorized logical AND; replace non-zero integers with
                        their string representation.
              o⁶        Logical OR with space; replace zeroes with spaces.
                z⁶      Zip with fill value space; transpose the resulting 2D
                        array after inserting spaces to make it rectangular.
                  Z     Zip; transpose the result to restore the original shape.
                     Z  Zip; transpose the resulting 3D array.

12

Pyth , 44 ไบต์

การสร้างตัวเลขใช้เวลา 20 ไบต์และการจัดรูปแบบใช้เวลา 24 ไบต์

jsMC+Led.e.<bkC,J<s.u+B+hNyeNeNQ,1 1Qm*;l`dJ

ลองออนไลน์!

jsMC+Led.e.<bkC,J<s.u+B+hNyeNeNQ,1 1Qm*;l`dJ   input as Q
                   .u          Q,1 1           repeat Q times, starting with [1,1],
                                               collecting all intermediate results,
                                               current value as N:
                                               (this will generate
                                                more than enough terms)
                       +hNyeN                  temp <- N[0] + 2*N[-1]
                     +B      eN                temp <- [temp+N[-1], temp]

now, we would have generated [[1, 1], [3, 4], [11, 15], [41, 56], ...]

jsMC+Led.e.<bkC,J<s                 Qm*;l`dJ
                  s                            flatten
                 <                  Q          first Q items
                J                              store in J
                                     m    dJ   for each item in J:
                                         `     convert to string
                                        l      length
                                      *;       repeat " " that many times

jsMC+Led.e.<bkC,
              C,     transpose, yielding:
[[1, ' '], [1, ' '], [3, ' '], [4, ' '], [11, '  '], ...]
(each element with as many spaces as its length.)
        .e            for each sub-array (index as k, sub-array as b):
          .<bk            rotate b as many times as k

[[1, ' '], [' ', 1], [3, ' '], [' ', 4], [11, '  '], ...]

jsMC+Led
    +Led              add to each sub-array on the left, the end of each sub-array
   C                  transpose
 sM                   sum of each sub-array (reduced concatenation)
j                     join by new-lines

7
นั่นคือโปรแกรม Pyth ที่ใหญ่ที่สุดที่ฉันเคยเห็น
imallett


7

MATL , 38 ไบต์

1ti:"yy@oQ*+]vG:)!"@Vt~oX@o?w]&v]&hZ}y

ลองออนไลน์!

การคำนวณอาร์เรย์ด้วยตัวเลข (ไม่ซ้ำกัน) ใช้เวลา 17 ไบต์แรก การจัดรูปแบบจะใช้เวลาที่เหลืออีก 21 ไบต์

คำอธิบาย

ส่วนที่ 1: สร้างตัวเลข

[1; 1; 3; 4; 11; 15; ...]นี้จะสร้างอาร์เรย์ที่มีตัวเลขจากแถวแรกและครั้งที่สองในการสั่งซื้อที่เพิ่มขึ้นนี้: มันเริ่มต้นด้วย1, 1. แต่ละหมายเลขใหม่จะได้รับซ้ำแล้วซ้ำอีกจากสองก่อนหน้า ในจำนวนนั้นตัวที่สองจะถูกคูณด้วย1หรือ2ขึ้นอยู่กับดัชนีการวนซ้ำจากนั้นจะรวมจำนวนที่หนึ่งเพื่อสร้างหมายเลขใหม่

nจำนวนซ้ำเท่ากับการป้อนข้อมูล ซึ่งหมายความว่าn+2มีการสร้างตัวเลข เมื่อสร้างแล้วอาร์เรย์จะต้องถูกตัดออกเพื่อให้มีการnบันทึกเฉพาะรายการแรกเท่านั้น

1t      % Push 1 twice
i:      % Take input n. Generage array [1 2 ... n]
"       % For each
  yy    %   Duplicate the two most recent numbers
  @o    %   Parity of the iteration index (0 or 1)
  Q     %   Add 1: gives 1 for even iteration index, 2 for odd
  *+    %   Multiply this 1 or 2 by the most recent number in the sequence, and add
       %    to the second most recent. This produces a new number in the sequence
]       % End for each
v       % Concatenate all numbers in a vertical array
G:)     % Keep only the first n entries

ส่วนที่ 2: จัดรูปแบบผลลัพธ์

สำหรับแต่ละหมายเลขในอาเรย์ที่ได้รับสิ่งนี้จะสร้างสองสตริง: การแทนสตริงของจำนวนและสตริงที่มีความยาวเท่ากันประกอบด้วยอักขระ 0 ซ้ำ (อักขระ 0 จะแสดงเป็นช่องว่างใน MATL) สำหรับการวนซ้ำสตริงทั้งสองนี้จะถูกสลับ

สตริงทั้งสองจะถูกต่อกันในแนวตั้ง ดังนั้นnอาร์เรย์ char 2D จึงถูกสร้างขึ้นดังนี้ (ใช้·เพื่อแสดงถึงอักขระ 0):

·
1

1
·

· 
3

4
·

·· 
11

15
··

อาร์เรย์เหล่านี้จะถูกต่อกันในแนวนอนเพื่อสร้าง

·1·4··15
1·3·11··

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

!       % Transpose into a horizontal array [1 1 3 4 11 15 ...]
"       % For each
  @V    %   Push current number and convert to string
  t~o   %   Duplicate, negate, convert to double: string of the same length consisting 
        %   of character 0 repeated
  X@o   %   Parity of the iteration index (1 or 0)
  ?     %   If index is odd
    w   %     Swap
  ]     %   End if
  &v    %   Concatenate the two strings vertically. Gives a 2D char array representing
        %   a "numeric column" of the output (actually several columns of characters)
]       % End for
&h      % Concatenate all 2D char arrays horizontally. Gives a 2D char array with the
        % top two rows of the output
Z}      % Split this array into its two rows
y       % Push a copy of the first row. Implicitly display

6

Haskell, 101 ไบต์

a=1:1:t
t=3:4:zipWith((-).(4*))t a
g(i,x)=min(cycle" 9"!!i)<$>show x
f n=[zip[y..y+n]a>>=g|y<-[0..2]]

f :: Int → [String]กำหนดฟังก์ชั่น

  • Michael Klein เตือนฉันว่าฉันไม่จำเป็นต้องโทรหาunlinesผลลัพธ์ช่วยประหยัด 7 ไบต์ ขอบคุณ!

  • ฉันบันทึกไบต์โดยการแทนที่ด้วย" 9"!!mod i 2cycle" 9"!!i

  • สามไบต์มากขึ้นโดยการเขียนสองรายการ corecursive dropแทนการใช้

  • แฟนของฉันชี้ให้เห็นฉันสามารถบันทึกไบต์ที่สองมากขึ้นโดยเริ่มต้นที่คำตอบของฉันแทน01


3

C, 183 177 176 ไบต์

#define F for(i=0;i<c;i++)
int i,c,a[35],t[9];p(r){F printf("%*s",sprintf(t,"%d",a[i]),r-i&1?t:" ");putchar(10);}b(n){c=n;F a[i]=i<2?1:a[i-2]+a[i-1]*(i&1?1:2);p(0);p(1);p(0);}

คำอธิบาย

C จะไม่มีวันชนะรางวัลใด ๆ เนื่องจากความกระชับกับภาษาระดับสูงกว่า แต่การฝึกนั้นน่าสนใจและฝึกฝนดี

มาโคร F ตัดออกหกไบต์ที่ค่าใช้จ่ายในการอ่าน ตัวแปรถูกประกาศไปทั่วโลกเพื่อหลีกเลี่ยงการประกาศหลายอย่าง ฉันต้องการบัฟเฟอร์อักขระสำหรับ sprintf แต่เนื่องจาก K&R หลวมกับการตรวจสอบประเภท sprintf และ printf จึงสามารถตีความ t [9] เป็นตัวชี้ไปยังบัฟเฟอร์ขนาด 36 ไบต์ สิ่งนี้บันทึกการประกาศแยกต่างหาก

#define F for(i=0;i<c;i++)
int i,c,a[35],t[9];

ฟังก์ชั่นการพิมพ์ที่สวยโดยที่ r คือหมายเลขแถว Sprintf จัดรูปแบบตัวเลขและคำนวณความกว้างของคอลัมน์ เพื่อประหยัดพื้นที่เราเรียกสิ่งนี้ว่าสามครั้งหนึ่งครั้งสำหรับแต่ละแถวของเอาต์พุต นิพจน์ ri & 1 กรองสิ่งที่ได้รับการพิมพ์

p(r) {
    F
        printf("%*s", sprintf(t, "%d", a[i]), r-i&1 ? t
                                                    : " ");
    putchar(10);
}

ฟังก์ชัน entry point, อาร์กิวเมนต์คือจำนวนคอลัมน์ คำนวณอาร์เรย์ a ของค่าคอลัมน์ a [] จากนั้นเรียกใช้ฟังก์ชันการพิมพ์ p หนึ่งครั้งสำหรับเอาต์พุตแต่ละแถว

b(n) {
    c=n;
    F
        a[i] = i<2 ? 1
                   : a[i-2] + a[i-1]*(i&1 ? 1
                                          : 2);
    p(0);
    p(1);
    p(0);
}

ตัวอย่างการร้องขอ (ไม่รวมอยู่ในคำตอบและจำนวนไบต์):

main(c,v) char**v;
{
    b(atoi(v[1]));
}

Updated

รวมข้อเสนอแนะแบบอินไลน์ sprintf จากการ tomsmeding ที่ลดจำนวนจาก 183 เป็น 177 ตัวอักษร สิ่งนี้ยังช่วยให้ลบวงเล็บปีกการอบบล็อก printf (sprintf ()) เนื่องจากมันเป็นเพียงหนึ่งคำสั่งในขณะนี้ แต่ที่บันทึกเพียงหนึ่งตัวอักษรเพราะมันยังต้องการพื้นที่เป็นตัวคั่น ลงไปที่ 176


คุณไม่สามารถนิยามคำจำกัดความของwตำแหน่งที่ใช้หรือไม่ คุณดูเหมือนจะใช้เพียงครั้งเดียว
tomsmeding

คุณใช้itoaแทน sprintf ไม่ได้ใช่ไหม
Giacomo Garabello

ฉันพิจารณา itoa แต่ไม่มีอยู่ในระบบของฉันและฉันใช้ค่าส่งคืนของ sprintf เพื่อกำหนดความกว้างของฟิลด์
maharvey67

2

PowerShell v2 +, 133 ไบต์

param($n)$a=1,1;1..$n|%{$a+=$a[$_-1]+$a[$_]*($_%2+1)};$a[0..$n]|%{$z=" "*$l+$_;if($i++%2){$x+=$z}else{$y+=$z}$l="$_".Length};$x;$y;$x

44 ไบต์เพื่อคำนวณค่า 70 ไบต์เพื่อกำหนด ASCII

รับอินพุต$nเป็นคอลัมน์ zero-indexed $a=1,1การตั้งค่าเริ่มต้นของอาร์เรย์ลำดับของเรา จากนั้นเราจะวนขึ้น$nด้วย1..$n|%{...}เพื่อสร้างอาร์เรย์ การวนซ้ำแต่ละครั้งเราเชื่อมโยงกับผลรวมของ (สององค์ประกอบที่ผ่านมา) + (องค์ประกอบก่อนหน้า) * (ไม่ว่าเราจะเป็นดัชนีคี่หรือคู่) นี้จะสร้างขึ้นเพื่อ$a=1,1,3,4,11...$n+2

ดังนั้นเราจำเป็นต้องชิ้น$aที่จะใช้เพียงครั้งแรกองค์ประกอบและท่อเหล่านั้นผ่านห่วงอีก0..$n |%{...}การวนซ้ำแต่ละครั้งเรากำหนดผู้ช่วย$zเท่ากับจำนวนช่องว่างบวกองค์ประกอบปัจจุบันเป็นสตริง จากนั้นเราแยกกำลังออกไม่ว่าจะเป็นที่ได้รับการตัดแบ่งบน$x(ด้านบนและด้านล่างแถว) หรือ$y(แถวกลาง) โดยง่ายแปลกแม้/if elseจากนั้นเราจะคำนวณจำนวนของช่องว่างสำหรับการ$lโดยการใช้จำนวนในปัจจุบัน stringifying .Lengthมันและการของตน

สุดท้ายเราใส่$x, $yและ$xอีกครั้งในท่อและเอาท์พุทเป็นนัย เนื่องจาก.ToString()ตัวคั่นเริ่มต้นสำหรับอาร์เรย์เมื่อพิมพ์ไปยัง STDOUT เป็นบรรทัดใหม่เราจะได้รับสิ่งนั้นฟรี

ตัวอย่าง

PS C:\Tools\Scripts\golfing> .\pascal-braid.ps1 27
 1 4  15  56   209   780    2911    10864     40545      151316      564719       2107560       7865521        29354524
1 3 11  41  153   571   2131    7953     29681     110771      413403      1542841       5757961       21489003
 1 4  15  56   209   780    2911    10864     40545      151316      564719       2107560       7865521        29354524

0

PHP 265 ไบต์

<?php $i=$argv[1];$i=$i?$i:1;$a=[[],[]];$s=['',''];$p='';for($j=0;$j<$i;$j++){$y=($j+1)%2;$x=floor($j/2);$v=$x?$y?2*$a[0][$x-1]+$a[1][$x-1]:$a[0][$x-1]+$a[1][$x]:1;$s[$y].=$p.$v;$a[$y][$x]=$v;$p=str_pad('',strlen($v),' ');}printf("%s\n%s\n%s\n",$s[0],$s[1],$s[0]);

ยกเลิกแข็งแรงเล่นกอล์ฟ:

$a = [[],[]];
$s = ['',''];

$p = '';

$i=$argv[1];
$i=$i?$i:1;
for($j=0; $j<$i; $j++) {
    $y = ($j+1) % 2;
    $x = floor($j/2);

    if( $x == 0 ) {
        $v = 1;
    } else {
        if( $y ) {
            $v = 2 * $a[0][$x-1] + $a[1][$x-1];
        } else {
            $v = $a[0][$x-1] + $a[1][$x];
        }
    }
    $s[$y] .= $p . $v;
    $a[$y][$x] = $v;
    $p = str_pad('', strlen($v), ' ');
}

printf("%s\n%s\n%s\n", $s[0], $s[1], $s[0]);

Python 278 ไบต์

import sys,math;a=[[],[]];s=['',''];p='';i=int(sys.argv[1]);i=1 if i<1 else i;j=0
while j<i:y=(j+1)%2;x=int(math.floor(j/2));v=(2*a[0][x-1]+a[1][x-1] if y else a[0][x-1]+a[1][x]) if x else 1;s[y]+=p+str(v);a[y].append(v);p=' '*len(str(v));j+=1
print ("%s\n"*3)%(s[0],s[1],s[0])


0

Matlab, 223 ตัวอักษร, 226 ไบต์

function[]=p(n)
r=[1;1];e={(' 1 ')',('1 1')'}
for i=3:n;r(i)=sum((mod(i,2)+1)*r(i-1)+r(i-2));s=num2str(r(i));b=blanks(floor(log10(r(i)))+1);if mod(i,2);e{i}=[b;s;b];else e{i}=[s;b;s];end;end
reshape(sprintf('%s',e{:}),3,[])

Ungolfed และแสดงความคิดเห็น:

function[]=p(n) 
r=[1;1];                                    % start with first two 
e={(' 1 ')',('1 1')'}                       % initialize string output as columns of blank, 1, blank and 1, blank, 1.
for i=3:n;                                  % for n=3 and up! 
    r(i)=sum((mod(i,2)+1)*r(i-1)+r(i-2));   % get the next number by 1 if even, 2 if odd times previous plus two steps back
    s=num2str(r(i));                        % define that number as a string
    b=blanks(floor(log10(r(i)))+1);         % get a number of space characters for that number of digits
    if mod(i,2);                            % for odds
        e{i}=[b;s;b];                       % spaces, number, spaces
    else                                    % for evens
        e{i}=[s;b;s];                       % number, spaces, number
    end;
end
reshape(sprintf('%s',e{:}),3,[])            % print the cell array of strings and reshape it so it's 3 lines high

0

PHP, 135 124 123 120 ไบต์

<?while($i<$argv[1]){${s.$x=!$x}.=${v.$x}=$a=$i++<2?:$v1+$v+$x*$v;${s.!$x}.=str_repeat(' ',strlen($a));}echo"$s
$s1
$s";

การใช้ประโยชน์จาก typecasts โดยปริยายและตัวแปรตัวแปร
หนึ่งในสามของโค้ด (37 bytes) จะเข้าสู่ช่องว่างโดย 64 bytes ใช้กับเอาต์พุตทั้งหมด

ทำให้พังถล่ม

$i=0; $x=false; $v=$v1=1; $s=$s1='';    // unnecessary variable initializations
for($i=0;$i<$argv[1];$i++)  // $i is column number -1
{
    $x=!$x; // $x = current row: true (1) for inner, false (empty string or 0) for outer
    // calculate value
    $a=
        $i<2?               // first or second column: value 1
        :$v1+(1+$x)*$v      // inner-val + (inner row: 1+1=2, outer row: 1+0=1)*outer-val
    ;
    ${s.$x}.=${v.$x}=$a;    // replace target value, append to current row
    ${s.!$x}.=str_repeat(' ',strlen($a));    // append spaces to other row
}
// output
echo "$s\n$s1\n$s";

0

แบตช์ 250 ไบต์

@echo off
set s=
set d=
set/ai=n=0,j=m=1
:l
set/ai+=1,j^^=3,l=m+n*j,m=n,n=l
set t=%s%%l%
for /l %%j in (0,1,9)do call set l=%%l:%%j= %%
set s=%d%%l%
set d=%t%
if not %i%==%1 goto l
if %j%==1 echo %d%
echo %s%
echo %d%
if %j%==2 echo %s%

เนื่องจากบรรทัดแรกและบรรทัดที่สามเหมือนกันเราแค่ต้องสร้างสองสาย นี่คือdสตริงที่ลงท้ายด้วยรายการสุดท้ายและsแทนสตริงที่ลงท้ายด้วยช่องว่าง สี่บรรทัดสุดท้ายให้แน่ใจว่าพวกเขาจะพิมพ์ตามลำดับที่เหมาะสม iเป็นเพียงตัวนับลูป (ราคาถูกกว่าการนับถอยหลังเล็กน้อย%1) jคือการสลับระหว่างการเพิ่มหมายเลขก่อนหน้าเป็นสองเท่าก่อนเพิ่มลงในหมายเลขปัจจุบันเพื่อรับหมายเลขถัดไป mและnมีตัวเลขเหล่านั้น lเช่นเดียวกับการใช้เป็นชั่วคราวเพื่อคำนวณหมายเลขถัดไปก็จะได้รับตัวเลขของมันแทนที่ด้วยช่องว่างที่จะโผล่ออกมาs; sและมีการแลกเปลี่ยนในแต่ละครั้งที่ผ่านตัวแปรกลางdt

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