브레이드 설명
이 브레이드에서, 스트랜드가 다른 스트랜드의 상단을 가로 지르면 다른 스트랜드의 값을 자체에 추가하고 다른 모든 스트랜드 값이 통과합니다. 브레이드에는 3 개의 스트랜드가 있으며 각 스트랜드는 1에서 시작합니다. 첫 번째 크로스 오버는 중간 스트랜드를 가로 지르는 가장 왼쪽 스트랜드입니다. 다음 교차는 새로운 중간 가닥 (이전에는 가장 왼쪽 가닥)을 가로 지르는 가장 오른쪽 가닥입니다. 이 두 단계의 크로스 오버가 반복됩니다. 즉, 첫 번째 크로스 오버는 [a, b, c] -> [b, a+b, c]
두 번째가 [a, b, c] -> [a, b+c, b]
입니다. 이 규칙을 사용하면 브레이드의 처음 6 단계가 있습니다.
1,1,1
1,2,1
1,3,2
3,4,2
3,6,4
6,9,4
당신의 작업
정수를 브레이드 레벨로 받아들이고 브레이드 레벨에 대한 3 개의 값을 출력하는 골프 프로그램 또는 함수를 작성하십시오. 레벨이 0인지 1인지를 표시해야합니다. 입력 및 출력은 적절한 형식으로 올 수 있으며 후행 공백이 허용됩니다.
테스트 사례 (1 기반)
1 -> 1,1,1
2 -> 1,2,1
5 -> 3,6,4
10 -> 28,41,19
답변
MATL , 18 17 16 바이트
7Bi:"2:4PB@EX!Y*
입력은 0을 기준으로합니다.
온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .
설명
행 벡터가 주어지면 [a b c]
다음 벡터에 행렬을 곱한 후
[1 0 0;
0 1 1;
0 1 0]
또는
[0 1 0;
1 1 0;
0 0 1]
반복 인덱스가 홀수인지 짝수인지에 따라 예를 들어, 행렬 곱은을 [1 3 2]*[0 1 0; 1 1 0; 0 0 1]
제공합니다 [3 4 2]
. 그런 다음을 [3,4,2]*[1 0 0; 0 1 1; 0 1 0]
제공합니다 [3 6 4]
.
두 번째 행렬은 첫 번째 회전 된 180 도와 같으며 몇 바이트를 절약하기 위해 이용할 수 있습니다.
7 % Push 7
B % Convert to binary. Gives [1 1 1]. This is the initial level
i % Take input n
: % Push range [1 2 ... n]
" % For each
5 % Push 5
I: % Push range [1 2 3]
- % Subtract, element-wise: gives [4 3 2]
B % Convert to binary. This gives the matrix [1 0 0; 0 1 1; 0 1 0]
@ % Push current iteration index
E % Multiply by 2. Gives 2 in the firt iteration, 4 in the second etc
X! % Rotate matrix 90 degrees either 2 or 0 times
Y* % Matrix multiply
% End. Implicitly display
답변
하스켈, 51 바이트
f p@(a,b,c)=p:(b,a+b,c):f(b,a+b+c,a+b)
(f(1,1,1)!!)
0 기반 인덱싱을 사용합니다. 사용 예 : (f(1,1,1)!!) 10
-> (28,60,41)
.
f
브레이드 트리플의 무한 목록을 생성하고 (f(1,1,1)!!)
n 번째를 선택합니다. f
그 자체는 간단한 재귀로, 인수의 목록을 만들고 왼쪽 크로스 오버와 왼쪽 및 오른쪽 크로스 오버를 사용한 재귀 호출이 뒤 따릅니다.
답변
루비, 60 57 바이트
->n{f=->x{x<2?1:f[x-1]+f[x-3]};[f[n-2|1],f[n],f[n-1&-2]]}
레벨은 1을 기준으로합니다.
다음 공식을 기반으로합니다.
f(-1) = 1
f(0) = 1
f(1) = 1
f(x) = f(x-1) + f(x-3)
braid(x) = {
[f(x-1), f(x), f(x-2)] if x is even,
[f(x-2), f(x), f(x-1)] if x is odd
}
비트 단위의 멋진 shenanigans를 사용하여 3 바이트 떨어져 Neil 에게 감사드립니다 .
답변
답변
젤리 , 14 바이트
Ḋ+\;Ḣ
6BÇ⁸¡Ṛ⁸¡
작동 원리
6BÇ⁸¡Ṛ⁸¡ Main link. Argument: n (integer)
6B Convert 6 to binary, yielding [1, 1, 0], which is the braid at index 0.
Ç⁸¡ Call the helper link n times.
Ṛ⁸¡ Reverse the resulting array n times.
Ḋ+\;Ḣ Helper link. Argument: [a, b, c] (integer array)
Ḋ Dequeue, yielding [b, c].
+\ Cumulative sum, yielding [b, b+c].
;Ḣ Concatenate with the head of [a, b, c], yielding [b, b+c, a].
답변
TI 기본, 58 바이트
하나의 기반.
Prompt N
{1,1,1
For(I,1,Ans
If fPart(I/2
Then
{Ans(2),Ans(1)+Ans(2),Ans(3
Else
{Ans(1),Ans(2)+Ans(3),Ans(2
End
End
답변
PowerShell 2 이상, 75 바이트
1 기반 인덱스
$a=1,1,0;1..$args[0]|%{$d=(0,2)[$_%2];$a[1],$a[$d]=($a[1]+$a[$d]),$a[1]};$a
온라인으로 사용해보십시오! 또는 모든 테스트 사례를 시도하십시오!
루프는 항상 한 번 실행되므로 브레이드 레벨의 경우에는 1
단순히 배열로 시작 1,1,0
하므로 알고리즘의 결과는 그것을 1,1,1
만듭니다.
$a[1]
중간은 항상 다음 그냥 다른 요소 인덱스는 (여부를 결정 $d
) 될 것입니다 0
또는 2
현재 수준은 짝수 또는 홀수인지에 따라. PowerShell은 한 번에 여러 대의 할당을 지원하므로 $x,$y=$y,$x
기본적으로 배열 요소로 수행하는 작업과 마찬가지로 쉽게 대입을 포함시킬 수 있습니다.