이진시 에르 핀 스키 삼각형 시퀀스 계산


23

Binary Sierpinski Triangle 시퀀스는 이진 표현이 Binary Sierpinski Triangle의 행을 나타내는 숫자 시퀀스이며, 무한 행의 0에서 1로 시작한 다음 모든 비트 쌍을 반복하여 해당 비트의 xor로 대체합니다. , 이렇게 :

f(0)=      1                    =1
f(1)=     1 1                   =3
f(2)=    1 0 1                  =5
f(3)=   1 1 1 1                 =15
f(4)=  1 0 0 0 1                =17

OEIS에는 더 많은 숫자가 제공됩니다 : https://oeis.org/A001317

입력 : 원하는 형식의 음이 아닌 정수 n. (최대 n까지 모두 작동해야합니다.)

출력 : 시퀀스의 n 번째 항 (0 인덱스)을 10 진수로 나타냅니다.

이것은 이므로 언어가 가능한 바이트 단위로 가장 짧은 대답을 시도하십시오. 응답이 없습니다. 이 챌린지가 게시 된 후 생성 / 수정 된 언어를 사용할 있다는 점을 제외하고 표준 허점이 적용됩니다 (예 : 시퀀스 하드 코딩 없음) . 솔루션이 더 짧은 경우가 아니면 이미 사용 된 언어로 다른 솔루션을 게시하지 마십시오.

리더 보드

이 게시물의 맨 아래에있는 스택 스 니펫은 답변 a) 언어 당 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 카탈로그를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

## Ruby, <s>104</s> <s>101</s> 96 bytes

헤더에 여러 숫자를 포함하려는 경우 (예 : 점수가 두 파일의 합계이거나 인터프리터 플래그 페널티를 별도로 나열하려는 경우) 실제 점수가 헤더 의 마지막 숫자 인지 확인하십시오 .

## Perl, 43 + 2 (-p flag) = 45 bytes

언어 이름을 링크로 만들면 스 니펫에 표시됩니다.

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


8
나는 n에 대한 잘못된 답변을 출력해서는 안되는 큰 팬이 아닙니다 . 기본적으로 임의 정밀도 정수를 사용하지 않는 언어는 기본적으로 입력이 충분히 작은 지 확인합니다.
Dennis

규칙을 올바르게 이해했는지 ( 여기여기 주석 참조 ) 반올림 된 출력 (예 : 입력 33의 경우 1.288490189e10)이 잘못된 것으로 계산되는지 확인 하십시오 .
Dennis

"모든 n에 대해 최대 30까지 작동해야하며 n에 대해 잘못된 답변을 출력해서는 안됩니다." . 이것은 모순적입니다. "답을 잘못 출력하지 않아야합니다""작동해야합니다" 와 동일합니다 ???
Digital Trauma

5
입력 검증의 불합리하고 영혼을 무너 뜨리는 부담에 대한 압도적 인 대중적 반대 때문에이 요구 사항은 제거되었습니다. 큰 n에 대해 원하는 쓰레기를 출력 할 수 있습니다. 즐겨!
quintopia

2
출력이 잘못되어서는 안된다고 말하는 것보다는 제출물이 n넘치지 않는 가장 큰 입력을 지원해야한다고 말하는 것이 좋습니다 .
Alex A.

답변:


14

05AB1E , 5 4 바이트

나는 당신에게 05AB1E를 자랑스럽게 선물합니다. 비록 매우 짧지 만, 오랜 도전에 대해서는 아마도 매우 나쁠 것입니다.

1 바이트를 면도 해준 ETHproductions 덕분에 :)

$Fx^

설명:

$      # Pushes 1 and input
 F     # Pops x, creates a for-loop in range(0, x)
  x    # Pops x, pushes x and 2x
   ^   # Bitwise XOR on the last two elements
       # Implicit, ends the for-loop
       # Implicit, nothing has printed so the last element is printed automatically

사용자 정의 언어로 많은 프로그램에서 1 바이트를 골라내는 좋은 방법은 후행 }을 자동으로 삽입하는 것입니다. 그러면 4 바이트가됩니다. :)
ETHproductions

1
@ETHproductions 이미 구현 된 잠시 기다립니다 :). 1 바이트 haha를 제거해 주셔서 감사합니다.
Adnan

2
이 코드에는 버그가 있습니다. 내가 어떻게 알아? 데니스를 때리고있어
Arcturus

2
@Ampora Dennis를 때리는 것뿐만 아니라 Dennis의 맞춤형 골프 언어를 때리는 것 입니다. ;)
ETHproductions

@ 애난 와우. 당신은 뭔가에 있습니다.
RK.


6

젤리 , 6 바이트

1Ḥ^$³¡

온라인으로 사용해보십시오!

이 Jelly 인터프리터 버전 과 함께 작동하는 이진 버전 에는 xxd 덤프가 있습니다.

0000000: 31 a8 5e 24 8b 80  1.^$..

작동 원리

1Ḥ^$³¡    Input: n

1         Set the left argument to 1.
 Ḥ        Multiple the left argument by two.
  ^       Hook; XOR it with its initial value.
   $      Create a monadic chain from the last two insructions.
    ³¡    Call the chain n times, updating the left argument after each call.

5

하스켈, 44 바이트

import Data.Bits
f n=iterate((2*)>>=xor)1!!n

에서 ((->) r)모나드, (f >>= g) x같습니다 g (f x) x.


나는 당신이 마지막 줄을 익명으로 할 수 있다고 생각합니다(iterate((2*)>>=xor)1!!)
xnor

나는 그것을 시도했지만 끔찍한 독점 제한 이유로 인해 작동하지 않습니다 .
Lynn

그러나 단일 제한은 표현식이 아니라 선언에 적용되기 때문에 이는 유효한 표현으로 적용될 수 있습니다. 내가 실수하지 않으면 표현은 합법적 인 답변으로 간주됩니다.
자랑스런 Haskeller

4

Matlab, 45 바이트

해결책:

@(i)2.^[0:i]*diag(mod(fliplr(pascal(i+1)),2))

테스트:

ans(10)
ans =
1285

설명 : pascal파스칼 삼각형을 구성하지만 1부터 시작하므로 입력은이어야합니다 i+1. fliplr배열을 왼쪽에서 오른쪽으로 뒤집습니다. mod(_,2)(2)에 의해 분할 후 나머지를 취 diag사용하여 추출물의 주요 diagonal.Multiplication 2.^[0:i]변환 벡터에 진수

@flawr, 내가 Matlab 경쟁자를 찾았다는 것이 기쁘다. :)


옥타브에서도 작동하는 것 같습니다.
Dennis

4

자바 스크립트 (ES6), 23 바이트

f=x=>x?(y=f(x-1))^y*2:1

OEIS 페이지의 첫 번째 공식을 기반으로합니다. 30의 입력을 마치는 데 거의 영원히 걸리는 코드가 마음에 들지 않으면 바이트를 줄일 수 있습니다.

f=x=>x?f(--x)^f(x)*2:1

다음은 for루프를 사용하는 비 재귀 버전입니다 eval. (32 바이트)

x=>eval("for(a=1;x--;a^=a*2);a")

현재 작성된 규칙 f(35)은 returns 이후이 답변을 무효화 합니다 15. 또한 포크 폭탄 경고 : Chromium을 강제로 닫아야 f(30)(원래 개정판) 실행 을 중지해야했습니다 . : P
Dennis

1
@Dennis 잠깐만, 만약 잘못된 값을 출력 할 수 없다면, 30보다 큰 입력으로 무엇을해야합니까?
ETHproductions

잘 모르겠어요 (그리고 나는 규칙이 변경됩니다 희망 ),하지만 뭔가가 f=x=>x?(y=f(x-(x<31)))^y*2:1작동합니다.
Dennis

@Dennis Ah, 무한 재귀 = 출력 없음. 컴퓨터로 돌아 오면이 문제를 해결하겠습니다. 규칙도 바뀌기를 바랍니다.
ETHproductions

질문에서 규칙이 제거되었습니다.
Dennis

3

Matlab, 77 70 바이트

이 함수는 반복 컨볼 루션 [1,1](일명 이항 확장 또는 이항 반복 곱셈)을 통해 파스칼 삼각형의 n 번째 행을 계산하고 그로부터 숫자를 계산합니다.

function r=c(n);k=1;for i=1:n;k=conv(k,[1,1]);end;r=2.^(0:n)*mod(k,2)'

3

루비, 26 바이트

반복이있는 익명 함수.

->n{a=1;n.times{a^=a*2};a}

이 재귀 함수는 1 바이트 더 짧지 만 자체를 참조 할 수 있도록 이름을 지정해야하므로 1 바이트 더 길어집니다.

f=->n{n<1?1:(s=f[n-1])^s*2}

3

루비, 25 바이트

->n{eval"n^=2*"*n+?1*n=1}

지금까지 다른 답변보다 짧습니다. 이 문자열을 구성합니다.

n^=2*n^=2*n^=2*n^=2*1

그런 다음 n=1문자열을 만드는 동안 실제로 발생하며 위의 문자열을 평가하여 결과를 반환합니다.


*n=1실제로 그 이상을 저장 합니까m=1;"m^=2*"*n+?1
마틴 엔더

아니요, 그러나 단 하나의 변수로 처리하는 것은 매우 화려합니다. :)
Lynn

3

Samau , 4 바이트

이제 Samau는 XOR 곱셈 및 XOR 거듭 제곱을 위한 기능을 내장 하고 있습니다.

▌3$ⁿ

16 진 덤프 (Samau는 CP737 인코딩을 사용함) :

dd 33 24 fc

설명:

▌       read a number
 3      push 3
  $     swap
   ⁿ    take the XOR power

처음 두 명령을 바꾸고 교체를 제거하여 이것을 3 바이트로 줄일 수 있습니까?
quintopia

@quintopia No. Samau는 입력을 문자열로 자동으로 스택에 푸시하고 문자열에서 숫자를 읽습니다. 처음 두 명령을 바꾸면 3문자열이 아닌 에서 숫자를 읽으려고 시도 합니다.
alephalpha

왜 samau는 가능할 때 문자열을 평가하려고하지 않습니까?
quintopia


2

퓨어 배쉬 (외부 유틸리티 없음), 37

Bash 정수는 64 비트 부호가 있으므로 62까지의 입력에 적용됩니다.

for((x=1;i++<$1;x^=x*2)){
:
}
echo $x

2

파이썬 2.7.6, 38 33 바이트

몇 바이트를 줄여준 Dennis에게 감사합니다!

x=1
exec'x^=x*2;'*input()
print x

1
프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다! 접근 방식을 exec'x^=x*2;'*input()통해 몇 바이트를 절약합니다 for.
Dennis

이것은 내 파이썬 항목을 능가합니다. 이것은 후손을 위해 여기에 남겨 둘 것입니다.f=lambda n:f(n-1)^2*f(n-1)if n>0 else 1
Jack Brounstein

2

Pyth, 7 바이트

uxyGGQ1

온라인으로 사용해보십시오 : 데모

설명:

u    Q1   apply the following statement input-times to G=1:
 xyGG        update G with (2*G xor G)


2

MIPS, 28 바이트

입력 $a0, 출력 $v0.

0x00400004  0x24020001          li      $v0, 1
0x00400008  0x10800005  loop:   beqz    $a0, exit
0x0040000c  0x00024021          move    $t0, $v0
0x00400010  0x00021040          sll     $v0, $v0, 1
0x00400014  0x00481026          xor     $v0, $v0, $t0
0x00400018  0x2084ffff          addi    $a0, $a0, -1
0x0040001c  0x08100002          j       loop


1

k4, 26 바이트

{x{2/:~(=). 0b\:'1 2*x}/1}

0b\:부울 벡터로 변환되는 숫자 (즉, 비트 스트링), XOR은 "동일하지 않은"으로 구현되어, 2/:평가할 수있는 다항식으로 처리하여 다수 비트 열 위로 변환하고, x f/y가진 x정수 f인가 y에 먼저, 그 연속 출력 x시간.

샘플 실행 :

  {x{2/:~(=). 0b\:'1 2*x}/1}'!5                                                                                                                                                                                    
1 3 5 15 17

1

루비, 31 26 바이트

편집 : 완전히 다른 언어로 변경되었습니다! 모든 골프 제안을 환영합니다!

이 프로그램은 시퀀스의 이전 요소를 2 배로 비트 단위로 XOR합니다 f(n) = f(n-1) ^ 2*f(n-1).

->n{v=1;n.times{v^=2*v};v}

1

MATL , 15 바이트

@flawr의 답변 과 유사합니다 .

i:1w"TToX+]2\XB

편집 (2016 년 5 월 20 일) 온라인으로 사용해보십시오! X+대체 Y+언어 버전 18.0.0에 부합 할 수 있습니다.

>> matl i:1w"TToX+]2\XB
> 5
51

설명

i              % input                                                     
:              % vector of values 1, 2, ... to previous input                           
1              % number literal                                            
w              % swap elements in stack                                    
"              % for                                                       
    TTo        % vector [1 1]
    X+         % convolution                                               
]              % end                                                       
2\             % modulo 2
XB             % convert from binary to decimal              

1

brainfuck , 87 바이트

,[>>[>]++<[[->+>+<<]>-->[-<<+>>]<[>+<-[>-<-]]>+<<<]>>>[[-<+>]>]<<[<]<-]>>[<[->++<]>>]<+

온라인으로 사용해보십시오!

무한한 크기의 셀을 가정합니다 (그렇지 않으면 7을 넘을 수 없으며 편리하게 255입니다). 파스칼의 삼각형 모드 2 방법은 비용이 많이 드는 모드 2 작업으로 인해 실제로 훨씬 길지만 XOR은 구현하기가 훨씬 쉽습니다.


0

APL, 31 바이트

{({2⊥⊃~1 2=.{(64⍴2)⊤⍺×⍵}⍵}⍣⍵)1}

이것은 거의 끔찍한 코드이지만 완전한 APL newb입니다. 나는 어떤 기술을 가진 사람이라도 모든 D- 기능을 제거하고 상당히 단축시킬 수있을 것으로 기대합니다. 논리는 더 많거나 적은 같은 내있는 그대로 k4에 의해 다중 - 답 1이나 2와 비트 변환, 와 숫자로 변환 된 뒤, XOR은 동일하지 사용하여 함수에서 전체를 감싸고 사용하여 반복의 특정 번호를 물어 . 내부 제품에서 나오는 결과가 왜 동봉되는지 모르겠지만 그 결과를 정리합니다.


다음과 같이 변경 ~1 2=.하여 바이트를 저장할 수 있어야합니다.1 2≠.
Zacharý

그리고 어떤 APL 시스템이 켜져 있습니까? 그것이 Dyalog에 있다면, 그것을 만들 수있을 것입니다 {({2⊥⊃1 2≠.((64⍴2)⊤×)⍵}⍣⍵)1}[28 bytes]
Zacharý

0

정말 12 바이트

2,╣`2@%`Mεj¿

육각 덤프 :

322cb960324025604dee6aa8

온라인으로 사용해보십시오

심각하게 비트 xor를 수행하는 방법이 포함되어 있지 않기 때문에이 솔루션은 주어진 삼각형 행을 직접 계산하여 문자 그대로 완전히 도전합니다. 이 방법은 최대 n = 1029까지 정답을 제공합니다 (그 후 주어진 파스칼 삼각형 행을 계산하기에 메모리가 충분하지 않습니다).

설명:

 ,                       get input
  ╣                 push the nth row of pascal's triangle
   `2@%`M           take each element of the row mod 2
         εj         join all the binary digits into a string
2          ¿        interpret it as a base 2 number

0

Pyt , 40 10 바이트

Đ0⇹Řć2%ǰ2Ĩ

설명:

Binary Sierpinski Triangle이 Pascal의 Triangle mod 2와 동일하다는 것을 관찰하십시오.

                      Implicit input
Đ                     Duplicate input
 0⇹Ř                  Push [0,1,2,...,input]
    ć2%               Calculate the input-th row of Pascal's Triangle mod 2
       ǰ              Join elements of the array into a string
        2Ĩ            Interpret as a binary number
                      Implicit print

온라인으로 사용해보십시오!


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.