ฟีโบนัชชีเกลียว


37

เป้าหมายของคุณคือสร้างเกลียว Fibonacciด้วยตัวเลข

ตัวอย่าง

ตัวอย่างอินพุต / เอาท์พุต

1 -> 1

2 -> 1 1

3 -> 1 1
     2 2
     2 2

6 -> 8 8 8 8 8 8 8 8 5 5 5 5 5
     8 8 8 8 8 8 8 8 5 5 5 5 5
     8 8 8 8 8 8 8 8 5 5 5 5 5
     8 8 8 8 8 8 8 8 5 5 5 5 5
     8 8 8 8 8 8 8 8 5 5 5 5 5
     8 8 8 8 8 8 8 8 1 1 3 3 3
     8 8 8 8 8 8 8 8 2 2 3 3 3
     8 8 8 8 8 8 8 8 2 2 3 3 3

อินพุต 9

อินพุต อินพุตสามารถดำเนินการผ่าน STDIN หรืออาร์กิวเมนต์ของฟังก์ชัน มันจะเป็นตัวเลขเดียว

เอาท์พุท เอาต์พุตอาจมาจาก STDOUT หรือค่าส่งคืนของฟังก์ชัน ควรเป็นสตริงเดี่ยว

ไม่อนุญาตให้ใช้ช่องว่างพิเศษที่ส่วนท้ายสุดของบรรทัด เอาต์พุตสามารถมีตัวเลข, linefeeds (ขึ้นบรรทัดใหม่) และช่องว่าง

การวางแนวไม่สำคัญหมายความว่าการหมุนและการสะท้อนกลับ ตราบใดที่มันเป็นไปตามรูปแบบเกลียว Fibonacci ที่ถูกต้อง

ตัวเลขที่มีตัวเลขแตกต่างกัน (เช่น 1 และ 13) ควรจัดตำแหน่งชิดกัน อาจต้องเพิ่มช่องว่างในจุดเริ่มต้นของบรรทัดเพื่อให้ทุกอย่างเข้ากันได้

1   1                          1   1
100 100  should actually be  100 100

คุณสามารถดูตัวอย่างได้ที่นี่


นี่คือสั้นที่สุดในหน่วยไบต์!


4
ความท้าทายที่เกี่ยวข้อง (และนาฬิกาที่ยอดเยี่ยม)
Sp3000

Numbers with different amounts of digits (e.g. 1 and 13) should be aligned to the left side of the digit a space may need to be added to the very beginning of a line so everything can line up.ดูเหมือนว่ามันจะชัดเจนกว่าสำหรับสองประโยค
trichoplax

ดูเหมือนว่าจากตัวอย่างที่คุณต้องการให้จัดตำแหน่งตัวเลขขวาสุดของแต่ละหมายเลข แต่ฟังก์ชั่น "จัดตำแหน่งชิดซ้ายของตัวเลข" นั้นตรงกันข้าม
trichoplax

คุณสามารถอธิบายว่า "ไม่อนุญาตให้มีช่องว่างโดยรอบ" ได้หรือไม่? โดยเฉพาะ - เป็นช่องว่างนำหน้าหรือต่อท้ายบนบรรทัดที่ยอมรับได้หรือไม่
MtnViewMark

Matlab พิมพ์เอาต์พุตไปที่ stdout โดยค่าเริ่มต้น เป็นที่ยอมรับหรือไม่ที่จะมีเอาต์พุตเป็นตัวเลข (เมื่อเทียบกับเอาต์พุตชนิดสตริง) ที่พิมพ์โดยอัตโนมัติไปยัง stdout?
Luis Mendo

คำตอบ:


15

APL, 23

{a,⍴⍨2⍴⊃⍴a←⌽⍉⍵}⍣(⎕-1)⍪1

คำอธิบาย:

⍪1               this creates a 1x1 matrix containing just 1
{..}⍣(⎕-1)     the power operator (⍣) repeats the function {} user input - 1 times
a,⍴⍨2⍴⊃⍴a←⌽⍉⍵   the function being iterated rotates the matrix and appends the next matrix to it.

ลองใช้กับtryapl.org


1
หากคุณค้นหาที่นี่หลายคนเคยสงสัยมาก่อน นี่คือตัวอย่างคำตอบของ @Tobia: * Dyalog APL รองรับชุดอักขระดั้งเดิมที่มีสัญลักษณ์ APL ที่แมปกับค่า 128 ไบต์บน ดังนั้นโปรแกรม APL ที่ใช้เฉพาะอักขระ ASCII และสัญลักษณ์ APL จึงถือเป็นไบต์ == ตัวอักษร
Moris Zucca

ตกลงฉันจะถอนความคิดเห็นของฉัน
gar

1
@MorisZucca โปรดสังเกตว่าอักขระบางตัว (เช่นหรือ) หายไปจากชุดอักขระนั้นและไม่สามารถใช้งานได้เมื่อคุณต้องการทำให้กฎนั้นปรากฏขึ้น
FUZxxl

1
จริง "สำคัญ" และ "อันดับ" เป็นการใช้งานที่ใหม่กว่าและมีอยู่จริงในรุ่น Unicode ของตัวแปล Dyalog ที่ฉันใช้ รุ่นคลาสสิคต้องใช้คำสั่ง equivalent เทียบเท่า เช่นเดียวกันกับ⍠ (⎕OPT) เช่นกัน ดังนั้นฉันมักจะคิดว่าถ้าฉันสามารถเขียนในรุ่น Dyalog Classic มันปลอดภัยที่จะพูดว่า 1 ไบต์ต่ออักขระ ช่วยแก้ให้ด้วยนะถ้าฉันผิด. และขอขอบคุณสำหรับความคิดเห็น
Moris Zucca

8

Matlab, 84 ไบต์

มีการใช้ฟังก์ชั่น เอาต์พุตอยู่ใน stdout

function f(N)
s=0;t=1;y=1;for n=2:N
u=s+t;s=t;t=u;y=[rot90(y) t*ones(t)];end;disp(y)

ตัวอย่าง:

>> f(1)
     1
>> f(2)
     1     1
>> f(3)
     1     2     2
     1     2     2
>> f(6)
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     3     3     3     1     1     8     8     8     8     8     8     8     8
     3     3     3     2     2     8     8     8     8     8     8     8     8
     3     3     3     2     2     8     8     8     8     8     8     8     8
>> f(7)
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     5     5     5     5     5     1     2     2    13    13    13    13    13    13    13    13    13    13    13    13    13
     5     5     5     5     5     1     2     2    13    13    13    13    13    13    13    13    13    13    13    13    13
     5     5     5     5     5     3     3     3    13    13    13    13    13    13    13    13    13    13    13    13    13
     5     5     5     5     5     3     3     3    13    13    13    13    13    13    13    13    13    13    13    13    13
     5     5     5     5     5     3     3     3    13    13    13    13    13    13    13    13    13    13    13    13    13

Matlab, 78 ไบต์

function y=f(N)
s=0;t=1;y=1;for n=2:N
u=s+t;s=t;t=u;y=[rot90(y) t*ones(t)];end

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

f(6)
ans =
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     3     3     3     1     1     8     8     8     8     8     8     8     8
     3     3     3     2     2     8     8     8     8     8     8     8     8
     3     3     3     2     2     8     8     8     8     8     8     8     8

ดีใจที่ได้เห็นโซลูชัน Matlab :-)
Hoki

@Hoki ขอบคุณ! :-)
Luis Mendo

7

Python 2, 121 ไบต์

a,b=0,1;L=[]
exec"a,b=b,a+b;L=zip(*L[::-1])+[[a]*a]*a;"*input()
for r in L:print" ".join("%*d"%(len(str(a)),x)for x in r)

กฎที่ผ่อนคลายในการหมุนทำให้สิ่งนี้ง่ายขึ้นมาก

ฉันไม่ได้ใช้ backticks แทนที่str(a)นี่เพราะฉันไม่แน่ใจว่าเราอนุญาตให้มีการเว้นวรรคนำหน้ามากกว่าที่จำเป็นหรือไม่หากเราเข้าถึงยาว ถึงแม้ว่าเราจะใช้aตัวมันเองจะสั้นลงก็ตาม


7

Ruby, 243 242 236 233 222 170 130 ไบต์

s,l,r=0,1,[]
gets.to_i.times{s+=l
l=s-l
s.times{r<<[s]*s}
r=r.transpose.reverse}
r.map{|w|puts w.map{|c|"%#{s.to_s.size}s"%c}*" "}

1
เล่นกอล์ฟได้ดี! คุณสามารถบันทึกตัวอักษรบางอย่างในบรรทัดที่ 4 โดยการแปลงสภาพไปt==value t>valueตัวอย่างเช่น(t=x%4)>2?s.times{r<<[s]*s}:t>1?s.times{r.map!{|w|w.unshift s}}:t>0?s.times{r.unshift [s]*s}:r.map!{|w|w+=[s]*s}}
Cristian Lupascu

6

Python - 189 179 174

n=int(input())
f=[1,1]
while len(f)<n:f+=[f[-1]+f[-2]]
o=[[]]
for i in f:o=(list(zip(*o)))[::-1]+[[i]*i]*i
for x in o:print(' '.join(str(y).rjust(len(str(f[-1])))for y in x))

6

J, 36 ไบต์

1&(($~,~)@(1{$@]),.|:@|.@])&(,.1)@<:

การใช้งาน:

   (1&(($~,~)@(1{$@]),.|:@|.@])&(,.1)@<:) 6
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 1 1 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3

วิธี:

ฟังก์ชั่นหมุนสแควร์ปัจจุบันและเพิ่มสแควร์ใหม่ไปยังปัจจุบันหนึ่งinput-1ครั้ง ขนาดสี่เหลี่ยมจัตุรัสและค่าองค์ประกอบถูกรวบรวมจากขนาดของสี่เหลี่ยมมุมฉากก่อนหน้า

คำอธิบายรหัส:

1&(           loop
    ($~,~)      new square with size and elements
    @(1{$@])    with the size of the second dimension of the current rectangle
    ,.          attached to
    |:@|.@]     rotated current rectangle
)&(,.1)       starting the loop with matrix 1
@<:           looping input-1 times

ลองออนไลน์ได้ที่นี่


6

Haskell, 183 176 171 163 ไบต์

import Data.List
s t=map((t>>[l t])++)t
e 1=[[1]];e n=s.reverse.transpose$e$n-1
f=g.e
g m=unlines$map(>>=((show$l m)#).show)m
a#b|l a<l b=b;a#b=a#(' ':b)
l=length

ฟังก์ชั่นคือfซึ่งใช้ตัวเลขและส่งกลับสตริงเดียว:

λ: putStr $ f 8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  5  5  5  5  5  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  5  5  5  5  5  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  5  5  5  5  5  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  5  5  5  5  5  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  5  5  5  5  5  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  3  3  3  1  1  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  3  3  3  2  2  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  3  3  3  2  2  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13

5

Pyth, 34 ไบต์

jbmsm.[hl`lhZ`k\ d=Zu+_CGmmlGGGQ]]

น่าแปลกที่รหัสมากกว่าครึ่งหนึ่งเป็นการพิมพ์ / การขยายตัวแทนที่จะสร้างเมทริกซ์

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

ตัวอย่างผลลัพธ์สำหรับ 7:

  5  5  5  5  5  8  8  8  8  8  8  8  8
  5  5  5  5  5  8  8  8  8  8  8  8  8
  5  5  5  5  5  8  8  8  8  8  8  8  8
  5  5  5  5  5  8  8  8  8  8  8  8  8
  5  5  5  5  5  8  8  8  8  8  8  8  8
  3  3  3  1  1  8  8  8  8  8  8  8  8
  3  3  3  2  2  8  8  8  8  8  8  8  8
  3  3  3  2  2  8  8  8  8  8  8  8  8
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13

4

Perl, 289 277 257 ไบต์

@f=(0,1);push@f,$f[-1]+$f[-2]while(@f<=$ARGV[0]);$d=1+length$f[-1];shift@f;map{$v=$f[$_];$t=sprintf("%${d}d",$v)x$v;$_%4||map{unshift@s,$t}1..$v;$_%4==3&&map{$_.=$t}@s;$_%4==2&&map{push@s,$t}1..$v;$_%4==1&&map{$_=$t.$_}@s;}0..$#f;$\=$/;for(@s){s/^ //;print}

4

K, 48 ไบต์

{{`0:1_',/'(1+#$|//x)$x}(x-1){+|x,\:t#t:#x}/,,1}

และในการดำเนินการ:

  {{`0:1_',/'(1+#$|//x)$x}(x-1){+|x,\:t#t:#x}/,,1}7
 8  8  8  8  8  8  8  8  5  5  5  5  5
 8  8  8  8  8  8  8  8  5  5  5  5  5
 8  8  8  8  8  8  8  8  5  5  5  5  5
 8  8  8  8  8  8  8  8  5  5  5  5  5
 8  8  8  8  8  8  8  8  5  5  5  5  5
 8  8  8  8  8  8  8  8  1  1  3  3  3
 8  8  8  8  8  8  8  8  2  2  3  3  3
 8  8  8  8  8  8  8  8  2  2  3  3  3
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13

อาจเป็นโอกาสที่ดีสำหรับการเล่นกอล์ฟ

โปรแกรมโดยทั่วไปประกอบด้วยสองส่วน - สร้างเมทริกซ์ที่ต่อกันแล้วจัดรูปแบบสำหรับเอาต์พุต อดีตค่อนข้างง่าย:

  {(x-1){+|x,\:t#t:#x}/,,1}5
(3 3 3 2 2
 3 3 3 2 2
 3 3 3 1 1
 5 5 5 5 5
 5 5 5 5 5
 5 5 5 5 5
 5 5 5 5 5
 5 5 5 5 5)

เริ่มต้นด้วยเมทริกซ์ 1x1 ที่มี 1 ให้สร้างเวกเตอร์ความยาว T ของ T โดยที่ T คือความยาวของเมทริกซ์เริ่มต้นในมิติแรก ( t#t:#x) และแนบกับแต่ละแถวของเมทริกซ์ดั้งเดิม ( x,\:) การย้อนกลับและการเปลี่ยนผลลัพธ์ ( +|) หมุน 90 องศา เราทำเช่นนี้ N-1 ครั้ง

การจัดรูปแบบค่อนข้างน่าสนใจเพราะ K เป็นวิธีธรรมชาติในการพิมพ์เมทริกซ์จะไม่จัดแนวคอลัมน์จำนวนตามที่เราต้องการ:

{`0:1_',/'(1+#$|//x)$x}

แนวคิดพื้นฐานคือการใช้องค์ประกอบสูงสุดของเมทริกซ์ ( |//x) แปลงเป็นสตริง (unary $) ใช้ความยาวบวกหนึ่ง ( 1+#) จากนั้นจัดรูปแบบองค์ประกอบของเมทริกซ์เป็นสตริงที่จัดชิดขวาของขนาดนั้น จากนั้นเพื่อจัดระเบียบเข้าร่วมสตริงเหล่านั้น ( ,/') และวางพื้นที่นำหน้าผลลัพธ์ ( 1_')


4

CJam, 48 ไบต์

1saali({z{W%}%_0=,__sa*a*+}*_W=W=,):U;{USe[}f%N*

ลองออนไลน์

ส่วนหลักของการสร้างลวดลายนั้นดูเหมือนจะตรงไปตรงมาพอสมควร หมุนสี่เหลี่ยมที่สร้างขึ้นและเพิ่มค่าสี่เหลี่ยมที่ด้านล่าง

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

1s    First value. Using string for values so that we can pad them in the end.
aa    Wrap it twice. Data on stack will be a list of lists (list of lines).
li    Get input.
(     Decrement, since we seeded the list at n=1.
{     Loop over n.
  z     Transpose...
  {W%}% ... and reverse all lines, resulting in a 90 degree rotation.
  _0=,  Get length of line, which is the size of square we need to add.
  __    Create two copies of size.
  sa    Convert one size to string, and wrap it in array.
  *     Replicate it size times. This is one line.
  a     Wrap the line...
  *     ... and replicate it size times. The square of new values is done.
  +     Add the list of lines to the previous list of lines.
}*    End of loop over n.
_W=W= Get last value produced.
,)    Take its length, and increment it. This is the output field width.
:U;   Store the field width in variable, and pop it. This is ugly.
{     Start of block applied to all values.
  U     Field width stored in variable.
  S     Space.
  e[    Pad left.
}f%   End of block applied to all values.
N*    Join lines with newline.

Wf%ย้อนกลับทุกสายสามารถทำได้ด้วย นอกจากนี้คุณจะสามารถทำสิ่งที่ชอบ{Se[}ff%มากกว่า:U;{USe[}f%การขยายได้หรือไม่? (นั่นอาจไม่ทำงานเหมือนที่เป็นอยู่ฉันไม่สามารถคิดได้ในตอนนี้)
ผลไม้ที่ละลายใน

2

Pyth, 29 ไบต์

Vu+C_GmmlGGGQ\]Yjdm.\[l`lN`d\ N

สาธิต.

หากการเติมเต็มอิสระ / โดยนัยเช่นเดียวกับ APL หรือเอาต์พุตเมทริกซ์ที่ได้รับอนุญาตนี่จะเป็น 14 ไบต์:

u+C_GmmlGGGQ]Y

2

ทับทิมขนาด 129 ไบต์

ฉันแก้ไข ruby ​​อื่น ๆ ตอบพวง แต่การเปลี่ยนแปลงล่าสุดของฉันไม่ได้รับการยอมรับหรือบางสิ่งบางอย่างดังนั้นนี่คือ:

s,r=0,[[1]]
gets.to_i.times{s+=r[0][0]
r=(r+[[s]*s]*s).transpose.reverse}
r.map{|w|puts w.map{|c|"%#{r[0][s].to_s.size}s"%c}*' '}

1
ยินดีต้อนรับสู่ PPCG! การปรับปรุงการเล่นกอล์ฟมักจะถูกปฏิเสธรอบ ๆ ที่นี่ (หากข้อเสนอแนะอื่น ๆ ของคุณได้รับการยอมรับว่าจะต้องมีการกำกับดูแล) เพราะพวกเขาควรจะโพสต์ในความคิดเห็นเพื่อให้ผู้เขียนตรวจสอบ ดูโพสต์เมตานี้สำหรับเหตุผลที่อยู่เบื้องหลังนโยบายนี้
Martin Ender

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

1

ES6, 248 ไบต์

n=>(f=(n,o=n)=>Array(n).fill(o),g=n=>n<3?[f(n,1)]:(a=g(n-2)).reverse().concat(f(l=a[0].length,f(l))).map((e,i,a)=>f(a.length).concat(e.reverse())),a=g(n),s=' '.repeat(l=` ${a[0][0]}`.length),a.map(a=>a.map((e,i)=>(s+e).slice(!i-1)).join``).join`\n`)

ซึ่ง\nหมายถึงอักขระขึ้นบรรทัดใหม่ตามตัวอักษร

การจัดรูปแบบที่น่ารำคาญใช้โค้ดจำนวนมาก

fเป็นฟังก์ชั่นตัวช่วยที่ทำให้อาร์เรย์เต็ม ส่วนใหญ่จะใช้ในการสร้างสี่เหลี่ยมที่เติมเต็ม แต่ก็เพิ่มขึ้นเป็นสองเท่าอย่างคล่องแคล่วเพื่อสร้างเคสพื้นฐานสำหรับการเรียกซ้ำ

gเป็นงานหลักที่ต้องทำ มันสร้างโซลูชันสุดท้าย แต่โซลูชันเดียวหมุน 180 องศาจากนั้นผนวกสองสแควร์ถัดไป

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