당신의 목표는 숫자 로 피보나치 나선 을 생성하는 것입니다 .
입력 / 출력 예
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
입력
입력은 STDIN 또는 함수 인수를 통해 가져올 수 있습니다. 단일 숫자입니다
출력
출력은 STDOUT 또는 함수의 리턴 값에서 나올 수 있습니다. 단일 문자열이어야합니다.
줄 맨 끝에 추가 공백이 허용되지 않습니다. 출력에는 숫자, 줄 바꿈 (줄 바꾸기) 및 공백이 포함될 수 있습니다.
방향은 중요하지 않습니다. 이것은 회전과 반사를 의미합니다. 유효한 피보나치 나선 패턴을 따르는 한.
다른 자릿수를 가진 숫자 (예 : 1과 13)는 서로 오른쪽 정렬되어야합니다. 줄의 시작 부분에 공백을 추가해야 모든 것이 정렬 될 수 있습니다.
1 1 1 1
100 100 should actually be 100 100
여기서 예를 볼 수 있습니다
이것은 코드 골프 이므로 바이트 단위의 가장 짧은 코드가 승리합니다!
답변
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에서 사용해보십시오
답변
Matlab, 84 바이트
기능이 사용됩니다. 출력이 표준 출력입니다.
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
답변
파이썬 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)
회전 규칙이 완화되어 훨씬 간단 해집니다.
str(a)
우리가 오랫동안 도달하면 필요한 것보다 더 많은 선행 공간이 허용되는지 확실하지 않기 때문에 여기 대신 백틱을 사용 하지 않았습니다. 비록 우리가 사용하더라도 a
어쨌든 자체 사용 은 더 짧을 것입니다.
답변
루비 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}*" "}
답변
파이썬 – 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))
답변
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
답변
하스켈 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