私は二次タクシーですか?


13

バックグラウンド

ラマヌジャンの番号1729は、ハーディがこの番号を持っている病院でラマヌジャンを訪問するためにタクシーに乗り込んだという話から、おそらくタクシーの番号と呼ばれます。

それ以来、2つの(正の整数の)n乗の合計として2つの(または「k」)異なる方法で表現できる「タクシー番号」として知られる整数クラスの最も有名なものとして知られています。

1729は、2つの異なる方法で2つの立方体の合計として表現できる最小の自然数で、最初の「3,2」タクシー番号(「n、k」が一般的)になります。

チャレンジ

番号を指定して、それが「3,2」「二次タクシー番号」であるかどうかを決定します-1729(キューブの2つの一意の合計)と同じ制約を満たしますが、「3 、2 "クラス(もちろん1729です)。

例:

1729 = 10 ^ 3 + 9 ^ 3 = 12 ^ 3 + 1 ^ 3

4104 = 15 ^ 3 + 9 ^ 3 = 16 ^ 3 + 2 ^ 3

13832 = 2 ^ 3 + 24 ^ 3 = 18 ^ 3 + 20 ^ 3

20683、32832、39312 ...

得点

これはであるため、各言語で最も短い回答が優先されます。

総当たりで他のケースを見つけるための大まかなMatlabコード:

for k = 1729:20000
    C = sum(round(mod(real((k-[1:ceil(k^(1/3))].^3).^(1/3)),1)*10000)/10000==1);
    if C > 1
        D = (mod(C,2)==0)*C/2 + (mod(C,2)==1)*((C+1)/2);
        disp([num2str(k),' has ',num2str(D),' solns'])
    end
end

PPCGへようこそ!あなたの質問をもう少し明確にするために少し編集しました。テストケースを追加してもよろしいですか?
musicman523

はい、私は仕事をしていてMatlabを持っていないので苦労していましたが、Octaveをオンラインで動作させることができ、4104 = 16 ^ 3 + 4 ^ 3 = 15 ^ 3 + 9 ^ 3
DrQuarius


1
数字を書くために正確に2つの方法、または少なくとも2つの方法が必要ですか?
ジョンドヴォルザーク

2
誰かがタクシーに答えを書く必要がありますbigzaphod.github.io/Taxi
SaggingRufus

回答:


4

05AB1E、9バイト

コード(非常に遅い)

L3mãOQO3›


コード(はるかに高速)、12バイト

tL3mDδ+˜QO3›

05AB1Eエンコードを使用します。オンラインでお試しください!

説明

t                # Square root (not necessary but added for speed)
 L               # Create a list [1 .. sqrt(input)]
  3m             # Raise to the power of 3
    D            # Duplicate
     δ+          # 2 dimensional addition
       ˜         # Deep-flatten the entire list
        Q        # Check which are equal to the input
         O       # Sum up to get the number of equalities
          3›     # Checks whether there are 4 or more equalities. In order for a number
                   to be a secondary taxicab number, there are at least two distinct
                   ways to get to that number and 4 ways when you also take reversed
                   arguments in account.

2
確かに、平方根を削除することでバイトを節約できます。これはコードゴルフであり、最速のコードではありません。
散布

@Christian遅いバージョンのコードを追加しました。
アドナン

6

ゼリー、9バイト

Erik the Outgolferのクレジット。

Œċ*3S€ċ>1

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

これは遅すぎるため、1729オンラインでも機能しません。

より高速、12バイト

デニスへのクレジット。

R*3fRŒċS€ċ>1

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


「4104」でこれをテストしたところ、合格しました。:)これ以上のものはまだ見つかりませんでしたが、それはすごい速さでした!
-DrQuarius

Ðf⁸になることができfRます。2番目は削除できます。
デニス

2番目のTheは実際に削除できますが、fRスワップは失敗につながります。
-DrQuarius

ちなみに、これはコードゴルフですので、速度は気にしません;)が、TIOリンクに高速バージョンを含めることはできます。
クリティキシリソス

1
速度を気にする必要はありませんŒċ*3S€ċ>1
エリックアウトゴルファー

5

Mathematica、35バイト

Count[#^3+#2^3&~Array~{#,#},#,2]>2&

正の整数を取り、Trueまたはを返す純関数False

#^3+#2^3&~Array~{#,#}1と入力の間の2つの整数の立方体のすべての合計を表にします。(これは、入力の立方根のような立方体する整数、上に結合さ賢明とはるかに高速になります。。しかし、それは貴重なバイトを取ることがあるので、コードが入力に約30秒かかる13832、少なくとも二次およびスケールを入力で)。Count[...,#,2]入力がネストレベル2でこのリストに表示される回数をカウントします。この数値がより大きい場合2、入力は準タクシー番号です(a ^ 3 + b ^ 3とb ^ 3 + a ^ 3が別々にカウントされるため、1よりも2よりも大きい)。


3

Mathematica、38 37バイト

Tr[1^PowersRepresentations[#,2,3]]>1&

@GregMartinのおかげで-1バイト

いつものように、すべてにMathematicaが組み込まれています。


1
OPが2つ以上の表現で大丈夫だと仮定すると、のTr[1^...]代わりに機能すると思いますLength@
グレッグマーティン

2

JavaScript(ES7)、63バイト

最終的にブール値を返す比較的高速な再帰関数。

f=(n,k,r=0,x=n-k**3)=>x<0?r>3:f(n,-~k,r+=(x**(1/3)+.5|0)**3==x)

デモ


2

Mathematica、48バイト

Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&

入力

[4104]

出力

本当だ


#!=1729&&仕様が明確になったので、もはや必要ではないことに注意してください。
グレッグマーティン

Solveではなく使用できますReduceか?
イアンミラー

もちろん... 1バイトは1バイトです!
J42161217

with と少しの再配置Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&を置き換える1バイトを節約できます。&&-
イアンミラー


1

MATL(16 15バイト)(理想的には13 12)

.4^:3^2XN!sG=sq

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

説明:

'Leaky Nun'のJellyソリューションに基づいて、MATLに変換されたばかりで、一部の部分はおそらく冗長であり、改善することができます。

.4^  % rough cube root of input, as maximum potential integer N.
:3^   % create array of all cubes from 1^3 up to N^3.
2XN   % do nchoosek on cube array, creating all possible pairs (k=2) to add.
!s    % transpose array and add all pairs to find sums.
G=    % find all pairs that equal the original input.
sq   % if there is more than one solution, then pass the test.

注:偽の出力には0と-1が含まれますが、真実の出力には1が含まれます。LuisMendoが、「s1>」を「sq」に置き換えて余分なバイトを保存してくれたことに感謝します。

理想的には(13 12バイト):

:3^2XN!sG=sq

...これで十分ですが、大きな数値の場合、tio.runのページでクラッシュします。


オリジナル:MATL(19バイト)=============== XH.34 ^:3 ^ 2XN!sH = s1>
-DrQuarius

1
任意のtruthy出力が有効である場合は、交換することができます1>によってq。また、H代わりにG説明があります。プログラムが多数の場合にクラッシュするという事実は、通常、スコアリングとは無関係です。それが動作する場合はそうでない挑戦指定しない限り、許容可能だ十分な時間とメモリを与えられた
ルイス・Mendo

1
ルイスありがとう!「真の」出力は初めてですが、今ではうまく機能しています。修正するために編集されました。また、このような楽しくて使いやすいエソランを作成してくれてありがとう!
DrQuarius

0

ルビー、52バイト

->n{r=*1..n;r.product(r).count{|i,j|i**3+j**3==n}>1}

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

このバージョンは大規模なn 2サイズの配列を作成するため1729、より大きいすべての真のテストケースで失敗します。ここでは、少なくとも31392までチェックに成功する約n 2/3の小さな配列サイズを持つ修正バージョンがあります。

オンラインでお試しください!(変更)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.