ほぼ等辺ヘロニアン三角形


14

ほぼ等辺ヘロンの三角形は、フォームの整数長を有する三角形でありn-1nおよびn+1また、整数面積を有しています。最初のいくつかは:

 3,  4,  5 ->    6
13, 14, 15 ->   84
51, 52, 53 -> 1170

クエスト:そのnようなトリプルを出力する最短のプログラムを生成します。(ヒント:これは既知のシーケンスです)。

受賞者は2014年5月2日に選出されます。


価値のあることは、これはより広く研究されているペル方程式の1つと同等です。
ピーターテイラー14

3
私はダウン票を本当に理解していません。これは非常に簡単な作業ですが、質問には何の問題もありません。しかし、私は(左利きの人として)制限は私が今まで見た中で最も奇妙で遵守しやすいものの一つだと言わなければなりません。
レベルリバーセント14

2
@steveverrill、私はダウン投票しませんでしたが、無意味な制限のためにアップ投票しないことを選びました。投票権の制限も制限によるものと思われます。世界の人口の10%未満がKyleと同じキーボードレイアウトを使用しているに違いないと思います。
ピーターテイラー14

2
私は左利きの人が私を嫌悪にもかかわらず、制限@KyleKanosを気に入っ
ardnew

2
P:すべての場所の@ardnew、これはおそらく、私は、このようなhandistコメント期待以上の一つである
デジタルトラウマ

回答:


6

APL、15 14文字

0 1 2+⌊⎕*⍨2+√3

alephalphaのソリューションと同じアプローチですが、修正項の代わりにフロアを使用します。

通勤オペレーターが1文字を節約することを指摘してくれたalgorithmsharkに感謝します。


1
(⍳3)でcharを保存し0 1 2ます。Commuteを使用してそれを作成し⎕*⍨2+√3、別の文字を保存できると確信しています。
algorithmshark 14

@algorithmsharkこれらのアイデアをありがとう。残念ながら⍳3もたらし1 2 3、したがって、長い1つの文字です。
ハワード14


5

GolfScript(24 21文字)

2 4@~{.4*@-}*;.(\.)]p

stdinで入力を受け取り、フォームでstdoutに出力します

[3 4 5]

オンラインデモ

シーケンスの0番目の要素は[1 2 3](領域0を持つ)であると仮定していることに注意してください。これはOEIS A003500と一致すると思います。

ハワードのおかげで3文字節約できました。


使用する(.).)]と、2文字短くなります。さらに、あなたが始めたら、あなたは2 4それを置き換え\;;追加のものを保存することができます。
ハワード14

@Howard、私はもともと0番目の要素として2 4扱っ[3 4 5]ていたので、オフセットを活用する代替方法を見つけられなかったことに恥ずかしいです。ありがとう。
ピーターテイラー

2

GNU dc30 19バイト

9k3v2+?^0k1/p1+p1+p

これは、@ HowardのAPL回答と同じトリックを使用するため、1つの用語のみを計算する必要があります。stdinからnの入力を受け取ります。

出力:

$ dc -e '9k3v2+?^0k1/p1+p1+p' <<< 1
3
4
5
$ dc -e '9k3v2+?^0k1/p1+p1+p' <<< 2
13
14
15
$ dc -e '9k3v2+?^0k1/p1+p1+p' <<< 3
51
52
53
$ 

1

Python 77

Pythonでの非常に冗長な実装

[(a-1,a,a+1)for a in(int((2+3**.5)**t+(2-3**.5)**t+.1)for t in range(N))][-1]

1
N値に置き換えることになっていますか?プログラムは入力を求めません。
golfer9338 14

1

Python 3、83文字

f=lambda t:4*f(t-1)-f(t-2)if t>2 else(4,14)[t-1];n=f(int(input()));print(n-1,n,n+1)

これは、(ウィキペディアからの引用)という事実を利用して、再帰的なソリューションを使用します:

nの後続の値は、前の値に4を乗算し、その前の値を減算することで見つけることができます(52 = 4×14 − 4、194 = 4×52 − 14など)


1

JavaScript(ECMAScript 6)-52文字

f=x=>x?--x?4*f(x)-f(x-1):4:2
g=x=>[a=f(x)-1,a+1,a+2]

fn 番目の項を返す再帰関数とg、対応するトリプルを含む配列を返す関数を定義します。

JavaScript-41文字

for(a=2,b=4;--x;)b=-a+4*(a=b);[a-1,a,a+1]

計算される用語がグローバル変数に格納されることを期待しx、トリプルをコンソールに出力します。


1

CJam、13バイト

3,3mq))ri#if+p

CJamの最初のバージョンはこのチャレンジよりも10日古いですが、使用しているすべての機能が当時存在していたかどうかはわかりません。とにかく、チャレンジは公式に閉じられているので...

ここでテストしてください。

説明

3mq            e# Push √3.
   ))          e# Increment twice.
     ri        e# Read input and convert to integer.
       #       e# Raise 2+√3 to that power.
        i      e# Convert to integer, truncating the result.
         3,    e# Push [0 1 2]
           f+  e# Add the previous number to each of these.
             p e# Pretty-print the result.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.