バイナリシェルピンスキー三角形シーケンスの計算


23

Binary Sierpinski Triangleシーケンスは、バイナリ表現がBinary Sierpinski Triangleの行を与える数のシーケンスです。これは、ゼロの無限行の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。(30までのすべてのnで動作する必要があります。)

出力:10進数としてのシーケンスのn番目の用語(0から始まる)。

これはので、あなたの言語が可能なバイト単位で最短の答えを与えてみてください。回答は受け付けられません。このチャレンジが投稿された後に作成/変更された言語を使用できることを除いて、標準の抜け穴が適用されます(たとえば、シーケンスをハードコーディングしない)。(ソリューションが短い場合を除き、既に使用されている言語で別のソリューションを投稿しないでください。)

リーダーボード

この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、b)全体的なリーダーボードとして、回答からカタログを生成します。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

## Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

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

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

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

言語名をリンクにして、スニペットに表示することもできます。

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


8
私はどんなnに対しても間違った答えを出力してならないという大ファンではありません。これは基本的に力の入力が小さい十分であるかどうかをチェックするために、デフォルトでは、任意精度の整数を使用していない言語を...
デニス・

ルールが正しく理解されているか(ここここのコメントを参照)、丸められた出力(たとえば、入力33の1.288490189e10)が間違っているとカウントされるかどうかを明確にしてください。
デニス

「30までのすべてのnで動作する必要があり、nに対して間違った答えを出力してはなりません。」。これは自己矛盾している-確かに「しなければならない出力しない間違った答えは」同じである「しなければならない作業」 ???
デジタル外傷

5
入力検証の不合理で魂を砕く負担に対する圧倒的な人気の反対により、この要件は削除されました。nが大きい場合に必要なガベージを出力できます。楽しい!
キントピア

2
出力が間違っていてはならないと言うのではなく、投稿がnオーバーフローしない限り最大の入力をサポートする必要があると言うことをお勧めします。
アレックスA.

回答:


14

05AB1E5 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

ご存知のように、カスタム言語で多くのプログラムのバイトをゴルフにかける良い方法は、末尾}を自動的に挿入することです。次に、これは4バイトになります。:)
ETHproductions

1
@ETHproductionsちょっと待ってください。すでに実装されています:)。1バイトを削除してくれてありがとう。
アドナン

2
このコードにはバグがあります。どうやって知るの?デニスを破っています。
アークトゥルス

2
@Amporaデニスを破っているだけでなく、デニスのカスタムゴルフ言語を破っています。;)
ETHproductions

@Adnanうわー。あなたは何かに取り組んでいます。
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

Haskell、44バイト

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

では((->) r)モナド、(f >>= g) x等しいですg (f x) x


私はあなたが最後の行を匿名化することができると思う(iterate((2*)>>=xor)1!!)
XNOR

私はそれを試してみましたが、恐ろしい単相性の制限の理由で機能しません。
リン

ただし、単相性の制限は式ではなく宣言に適用されるため、これは正当な式として適用される場合があります。そして、私が間違っていなければ、表現は法的な答えと見なされます。
誇りに思ってhaskeller

4

Matlab、45バイト

溶液:

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

テスト:

ans(10)
ans =
1285

説明: pascalPascal三角形を作成しますが、1から始まるため、入力はである必要がありますi+1fliplr配列を左から右に反転します。mod(_,2)2で除算した後、余りを取ります。diag主対角線を抽出2.^[0:i]します。

私はここでMatlabの競合他社を見つけたことが嬉しいです@flawr :)


Octaveでも動作するようです。
デニス

4

JavaScript(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)返すため、この回答を無効にします15。また、フォーク爆弾アラート:Chromiumを強制的に閉じてf(30)(元のリビジョン)の実行を停止する必要がありました。:P
デニス

1
@Dennis待って、間違った値を出力できない場合、30を超える入力ではどうすればよいですか?
ETHproductions

私にはわかりません(そして、ルールが変更されることを望みます)が、何かf=x=>x?(y=f(x-(x<31)))^y*2:1がうまくいくでしょう。
デニス

@Dennis Ah、無限に再帰=出力なし。コンピューターに戻ったらこれを修正します。そのルールも変更されることを願っています。
ETHproductions

ルールは質問から削除されました。
デニス

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
マーティン・エンダー

いいえ、しかし、たった1つの変数でそれを行うのはとても派手です:)
Lynn

3

サマウ、4バイト

現在、SamauにはXOR乗算とXORパワー用の組み込み関数があります。

▌3$ⁿ

16進ダンプ(SamauはCP737エンコードを使用):

dd 33 24 fc

説明:

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

最初の2つのコマンドをスワップし、スワップを削除することで、これを3バイトに減らすことができますか?
キントピア

@quintopiaいいえ。サマウは自動的に入力を文字列としてスタックにプッシュし、文字列から数値を読み取ります。最初の2つのコマンドを入れ替えると3、文字列ではないから数値を読み取ろうとします。
-alephalpha

なぜsamauは可能な場合に文字列を評価しようとしないのですか?
キントピア


2

Pure Bash(外部ユーティリティなし)、37

Bash整数は64ビット符号付きであるため、これは62以下の入力に対して機能します。

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

2

Pythonの2.7.6、38 33バイト

数バイトを削ってくれたデニスに感謝します!

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

1
プログラミングパズルとコードゴルフへようこそ!exec'x^=x*2;'*input()このforアプローチで数バイト節約できます。
デニス

:これは私がちょうど後世のためにここに残しておきます、私のPythonのエントリ、打つf=lambda n:f(n-1)^2*f(n-1)if n>0 else 1
ジャックBrounstein



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/yxされている整数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です)。Pascalのtriangle mod 2メソッドは、実際には、高価なmod 2操作のためにはるかに長くなりますが、XORは実装がはるかに簡単です。


0

APL、31バイト

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

これはほぼ間違いなくひどいコードですが、私は完全なAPL初心者です。どんなスキルを持った人でも、すべてのD-functionを取り除き、かなり短縮できると期待しています。論理は多かれ少なかれ私のk4答えと同じです- 1または2で乗算し、ビットに変換し、XORを使用して等しくない、XORで数値に変換し、関数で全体をラップし、使用して特定の反復回数を求めます。内積から出てくる結果がなぜ囲まれているのかわかりませんが、それをきれいにします。


あなたは、変更することで、バイトを保存することができるはず~1 2=.1 2≠.
ザカリー

そして、これはどのAPLシステムにありますか?Dyalogにある場合は、{({2⊥⊃1 2≠.((64⍴2)⊤×)⍵}⍣⍵)1}[28バイト]
ザカリー

0

真剣に、12バイト

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

六角ダンプ:

322cb960324025604dee6aa8

オンラインで試す

真剣にビット単位のXORを実行する手段が含まれていないため、このソリューションは、三角形の特定の行を直接計算して、文字通り完全に挑戦します。この方法では、n = 1029までの正解が得られます(その後、Pascalの三角形の特定の行を計算するのに十分なメモリがなくなります)。

説明:

 ,                       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

Pyt40 10 バイト

Đ0⇹Řć2%ǰ2Ĩ

説明:

バイナリシェルピンスキートライアングルがパスカルのトライアングル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.