クラークの三角形


10

わかりました。最近トライアングルキックに少し触れたので、こちらをもう1つ紹介します。

クラークの三角形は、各行の左端のエントリが1で、右端のエントリが6の倍数で構成される三角形で、行番号が増えるにつれて増加します。ここに視覚化があります

     1 6
    1 . 12
   1 . . 18
  1 . . . 24
 1 . . . . 30
1 . . . . . 36

PascalのTriangleと同様に、他のすべてのエントリは、右上と左上の数値の合計です。

以下が最初の数行です

          1   6
        1   7  12
      1   8  19  18
    1   9  27  37  24
  1  10  36  64  61  30
1  11  46  100 125 91  36

仕事

行番号(上から開始)と列番号(その行の最初のゼロ以外の項目から開始)を指定すると、その特定のセルの値が出力されます。両方の入力には、1または0のインデックスを付けることができます(必要に応じて、組み合わせることができます)。三角形の境界外は定義されていないため、これらの値を照会するときに、好きなように実行できます。

これはであり、目的はソリューションのバイト数を最小限に抑えることです。

OEIS A046902


1
最初の行がゼロのソリューションを構築できますか?OEISシーケンスのように
イェルクHülsermann

1
@JörgHülsermannこれは、ここで定義された三角形の境界を超えているので、好きなようにすることができます。
アドホックガーフハンター2017

回答:


7

MATL、15バイト

[lBB]i:"TTY+]i)

最初の入力は0ベースの行です。2番目は1から始まる列です。

オンラインでお試しください!

説明

[lBB]   % Push [1 6 6]
i       % Input: row number (0-based)
:"      % Repeat that many times
  TT    %   Push [1 1]
  Y+    %   Convolution, increasing size. This computes the sum of overlapping
        %   pairs, including the endpoints. So for example [1 6 6] becomes
        %   [1 7 12 6], which will later become [1 8 19 18 6], ...
]       % End
i       % Input: column number (1-based)
)       % Use as index. Implicit display


5

CJam22 18バイト

マーティンエンダーのおかげで-4バイト

X6_]ri{0X$+.+}*ri=

入力は (0-based row) (0-based column)

オンラインでお試しください!

説明

X6_]  e# Push the list [1 6 6]. This is the first row, but each row will have an extra 6 at
      e# the end, which is out of bounds.
ri    e# Push the first input as an integer.
{     e# The following block calculates the next row given a row on top of the stack:
 0X$+ e#  Copy the top list on the stack and prepend 0.
 .+   e#  Element-wise addition with the list before prepending 0. This adds each element of
      e#  with the one to its left, except the initial 1 gets added to 0 and the final number
      e#  gets added to the out-of-bounds 6. The out-of-bounds 6 is unchanged since one list
      e#  is longer.
}*    e# Run this block (row index) times.
ri=   e# Get the (column index)th item of the final list.

ペアの合計を取得する別の方法は、1つのコピーを左にシフトして使用すること.+です。通常、これには後続の要素を合計せずに保持するという問題があります(削除するのにバイトがかかります)が、この場合、反復ごとにを追加する必要がないため、実際にバイトが節約6されます。あなたも、より多くのあなたが唯一の前に付けた場合、左シフトすることは自由であるため、バイト保存することができます0一つのコピーに:X6_]ri{0X$+.+}*ri=
マーティン・エンダー

_0\+代わりに0X$+同じバイト数を使用することもできます。
マーティンエンダー2017

@MartinEnderああ、なるほど、あなたは各行の終わりに範囲外の余分な6を取得するので、それは問題ではありません。賢い、ありがとう。
ビジネス猫



3

Pythonの364の 60 52バイト

f=lambda r,c:c<2or c>r and r*6or f(r-1,c-1)+f(r-1,c)

オンラインでお試しください!

1インデックスを使用した再帰的ソリューション。ゴルフのために1ではなく「True」を出力します。


おかげで:

  • @totallyhuman 4バイト節約!
  • @Rodで8バイトを節約!


2
if / elseをブール演算子とより柔軟な出力で置き換える52バイト
Rod

@ロッド、これは素晴らしいソリューションです。それがなぜ機能するのか、まだ頭を抱えています。私はまだかなり新しいです(これはサイトでの2番目の回答です)ので、プロトコルがわかりません。Python3から2に切り替えた場合でも、私のリビジョンにリビジョンを含める必要がありますか?
Chase Vogeli 2017

3
@icosahedronその場合、Pythonバージョンは無関係ではないので、気にする必要はありません。通常、Pythonバージョンを切り替えて機能を利用することは問題ありません。
ウリエル2017

@Urielは説明をありがとうございます。
Chase Vogeli 2017


1

Mathematica、32バイト

b=Binomial;b[#,#2-1]6+b[#-1,#2]&

入力

[行、列]
[1インデックス、0インデックス]


1

JavaScript(ES6)、38バイト

f=(r,c)=>c?r>c?f(--r,c)+f(r,--c):r*6:1

負の列の場合はクラッシュし、負の行または大きすぎる列の場合は6の倍数を返します。


1

C#(.NET Core)、44バイト

f=(c,r)=>c<=1?1:c>r?6*r:f(c-1,r-1)+f(c,r-1);

列と行の両方を1インデックス付きで取得します。入力を入れ替えることにより、行と列を取得できます(r,c)row * 6右側の境界の外側の座標(つまりcolumn > row + 1)と1左側の境界の外側の座標(つまり)を返しcolumn < 1ます。


1

PHP、64バイト

再帰関数

行1にインデックスを付ける列0にインデックスを付ける

OEISシーケンスと同様に、row = 0およびcolumn = 0の出力は0です。

function f($r,$c){return$c-$r?$c?f($r-=1,$c-1)+f($r,$c):1:$r*6;}

オンラインでお試しください!

PHP、126バイト

行1にインデックスを付ける列0にインデックスを付ける

OEISシーケンスと同様に、row = 0およびcolumn = 0の出力は0です。

for(;$r<=$argv[1];$r++)for($z++,$c=~0;++$c<$z;)$t[+$r][$c]=$c<$r?$c?$t[$r-1][$c-1]+$t[$r-1][$c]:1:$r*6;echo$t[$r-1][$argv[2]];

オンラインでお試しください!



0

ゼリー、13 バイト

,"’U0¦c/x6,1S

[row, entry](エントリの0インデックス、行の1インデックス)のリストを取り、値を返すモナディックリンク。

オンラインでお試しください!

どうやって?

,"’U0¦c/x6,1S - Link: list of numbers, [row, entry]
  ’           - decrement     -> [row-1, entry-1]
 "            - zip with:
,             -   pair        -> [[row, row-1], [entry, entry-1]]
     ¦        - sparse application of:
   U          -   upend
    0         - for indexes: 0 -> [[row, row-1], [entry-1, entry]]
       /      - reduce by:
      c       -   choose       -> [(row choose entry-1), (row-1 choose entry)]
         6,1  - 6 paired with 1 = [6,1]
        x     - times        i.e. [a, a, a, a, a, a, a, b]
            S - sum            -> 6*(row choose entry-1) + (row-1 choose entry)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.