平等は3つになります


11

撮影元:OEIS- A071816

の上限が与えられたタスクはn、方程式を満たす解の数を見つけることです。

a+b+c = x+y+z, where 0 <= a,b,c,x,y,z < n

シーケンスは、OEISページで説明されているように、以下のように開始されます(1-indexed):

1, 20, 141, 580, 1751, 4332, 9331, 18152, 32661, 55252, 88913, 137292, 204763, 296492, 418503, 577744, 782153, 1040724, 1363573, 1762004, 2248575, 2837164, 3543035, 4382904, 5375005, 6539156, 7896825, 9471196, 11287235, 13371756

n = 1解決策は1つだけです。(0,0,0,0,0,0)

のためにn = 2、20の順序付けられたソリューション(a,b,c,x,y,z)がありa+b+c = x+y+zます:

(0,0,0,0,0,0), (0,0,1,0,0,1), (0,0,1,0,1,0), (0,0,1,1,0,0), (0,1,0,0,0,1), 
(0,1,0,0,1,0), (0,1,0,1,0,0), (0,1,1,0,1,1), (0,1,1,1,0,1), (0,1,1,1,1,0), 
(1,0,0,0,0,1), (1,0,0,0,1,0), (1,0,0,1,0,0), (1,0,1,0,1,1), (1,0,1,1,0,1), 
(1,0,1,1,1,0), (1,1,0,0,1,1), (1,1,0,1,0,1), (1,1,0,1,1,0), (1,1,1,1,1,1).

I&O

  • 入力はを表す単一の整数nです。
  • 出力は、単一の整数/ストリング表すありf(n)f(...)上記関数です。
  • インデックス付けは説明したとおりであり、他のインデックス付けは受け入れられません。

これは、バイト数が最も少なくなります。


crapppああ、私はOEISに直接式に気付かなかった、私はこれができないだろうと思ったことが簡単にできます。まあ、私はその方程式の直接ポートを+1していません; P。
魔法のタコUr

1
少なくともフォーミュラは完璧にゴルフされていませんでした:P
fəˈnɛtɪk

繰り返しになりますが、これはreg-langsにeso-langsに対するチャンスを与えます。
魔法のタコUr

タイトルが「平等は三連符である」としたらもっといいでしょうか?
リーキー修道女

回答:


11

ゼリー9 6バイト

ṗ6ḅ-ċ0

O(n 6ソリューション。

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

使い方

ṗ6ḅ-ċ0  Main link. Argument: n

ṗ6      Cartesian power 6; build all 6-tuples (a, x, b, y, c, z) of integers in
        [1, ..., n]. The challenge spec mentions [0, ..., n-1], but since there
        are three summands on each side, this doesn't matter.
  ḅ-    Unbase -1; convert each tuple from base -1 to integer, mapping (a, ..., z)
        to a(-1)**5 + x(-1)**4 + b(-1)**3 + y(-1)**2 + c(-1)**1 + z(-1)**0, i.e.,
        to -a + x - b + y - c + z = (x + y + z) - (a + b + c). This yields 0 if and
        only if the 6-tuple is a match.
    ċ0  Count the number of zeroes.

ハ!Gottaは理論的な答えが大好きです(理論的な答えの私の根拠は、nの大きな値に対してTIOで実行されるようになったことです。これはおそらく悪いことです)。私はO(n^6)しかし見たいと思っていました:P。
魔法のタコUr

9

Mathematica 17または76バイト

式を使用して:

.55#^5+#^3/4+#/5&

(@GregMartinおよび@ngenisisごとに3バイト保存)

ここでは、式を使用するのではなく、文字通りすべてのソリューションを計算してカウントします。

Length@Solve[a+b+c==x+y+z&&And@@Table[(0<=i<#),{i,{a,b,c,x,y,z}}],Integers]&

2
非武装勢力の方法を投稿していただきありがとうございます:)。方程式または組み込みではない数学の答えに対して+1。
魔法のタコUr

あたりとしてこの答え、あなたは置き換えることができます11/20によって.552バイトの節約のため。
グレッグマーティン

また、最初の用語にアスタリスクは必要ありません。
-ngenisis

8

Haskell、48バイト

これを書く前に式に気づかなかったので、それは間違いなく最短(または最速)の一般的な方法ではありませんが、それはきれいだと思いました。

f n=sum[1|0<-foldr1(-)<$>pure[1..n]`mapM`[1..6]]

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

f nはから6個の要素のすべてのリストを生成し[1..n]、交互の合計が0であるものをカウントします。a+b+c==d+e+fと同じであるという事実を使用し、a-(d-(b-(e-(c-f))))==0すべての数値に1を追加してもかまいません。


多くの場合、最短の回答が最も印象的でないことに気づきました;)これは、この答えを見る前に考えていなかった、かなりクールなフォールドの使用です。
魔法のタコUr

6

MATL、12バイト

l6:"G:gY+]X>

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

説明

畳み込みを再び使用する機会を逃すことができませんでした!

これは、OEISからの次の特性評価を利用します。

a(n) = largest coefficient of (1+...+x^(n-1))^6

そしてもちろん、多項式の乗算は畳み込みです。

l        % Push 1
6:"      % Do the following 6 times
  G:g    %   Push a vector of n ones, where n is the input
  Y+     %   Convolution
]        % End
X>       % Maximum

5

ゼリー、9バイト

ṗ3S€ĠL€²S

@Dennisほど短くはありませんが、inputの場合は20秒未満で終了します100

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

使い方

ṗ3S€ĠL€²S  Main link. Argument: n

ṗ3         Cartesian power; yield all subsets of [1, ..., n] of length 3.
  S€       Sum each. 
    Ġ      Group indices by their values; for each unique sum S, list all indices whose
           values are equal to S.
     L€    Length each; for each unique sum S, yield the number of items in the original
           array that sum to S.
       ²   Square each; for each unique sum S, yield the number of pairs that both sum to S.
        S  Sum; yield the total number of equal pairs.

この方法を説明できますか?私は現在ゼリーを学んでいますが、まだ本当の答えを提出するのにまだ十分ではありません。良い例を探して、デニスと他の数人にいつも目を向けています。
魔法のタコUr

@carusocomputing説明を終了しました。まだ質問がある場合はお知らせください:
ETHproductions

恐ろしいことに、私は皆さんが投稿しているクレイジーな短いコードに対して行う、最も基本的なブルートフォース実装からの回答の最適化についてほとんど混乱しています。しかし、私はすべての説明が一歩近づいているように感じます、ありがとう!
魔法のタコUr

5

Pyth、13 12バイト

JsM^UQ3s/LJJ

Leaky Nunのおかげで1バイト節約されました。

説明

JsM^UQ3s/LJJ
   ^UQ3         Get all triples in the range.
JsM             Save the sums as J.
        /LJJ    Count occurrences of each element of J in J.
       s        Take the sum.

直接式:Pを使用しない場合は+1。
魔法のタコUr

オンライン通訳へのリンクを投稿することもできます
リーキー修道女

また、の/LJJ代わりに使用できますm/JdJ
リーキー修道女


2

TI-BASIC、19バイト

:Prompt X
:.05X(11X^4+5X²+4

OEISフォーミュラを評価します。


1
ここでバイトをどのように数えていますか?Prompt x= 2バイト?
魔法のタコUr


1
過去に5回TI-BASICの回答を投稿したことがあり、今までの履歴を調べた結果、正しく採点されなかったのは残念です。
魔法のタコUr

2

Oasis、17バイト

5m11*n3m5*nz++20÷

5                   n 5             implicit n for illustration
 m                  n**5
  11                n**5 11
    *               11*n**5
     n              11*n**5 n
      3             11*n**5 n 3
       m            11*n**5 n**3
        5           11*n**5 n**3 5
         *          11*n**5 5*n**3
          n         11*n**5 5*n**3 n
           z        11*n**5 5*n**3 4*n
            +       11*n**5 5*n**3+4*n
             +      11*n**5+5*n**3+4*n
              20    11*n**5+5*n**3+4*n 20
                ÷  (11*n**5+5*n**3+4*n)÷20

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

Oasisは、繰り返しシーケンス用に最適化されたスタックベースの言語です。ただし、この場合、再帰式は長すぎます。


2

Brachylog、17バイト

{>ℕ|↰}ᶠ⁶ḍD+ᵐ=∧D≜ᶜ

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

説明

{  |↰}ᶠ⁶           Generate a list of 6 variables [A,B,C,D,E,F]...
 >ℕ                  ...which are all in the interval [0, Input)
        ḍD         Dichotomize; D = [[A,B,C],[D,E,F]]
          +ᵐ=      A + B + C must be equal to D + E + F
             ∧
              D≜ᶜ  Count the number of possible ways you can label the elements of D while
                     satisfying the constraints they have

私の推測では、自動的に付属している必要があります
漏れ修道女

@LeakyNun 単独では実行できません。メタ述語です。
致命的

しかし、それがリストで使用されている場合、そのリストのラベル付けをデフォルトの述部にすることができますか?
マット

@matこの方法で作成できますが、現時点では変数にメタ述語を使用できません。
致命的



1

パイソン2.7、109の 105 99 96バイト

ETHproductionsとDennisに数バイトの節約をありがとう:

from itertools import*
lambda s:sum(sum(x[:3])==sum(x[3:])for x in product(range(s),repeat=6))

興味深いことに、Python 3には2.7よりも短い範囲関数がありませんか?
魔法のタコUr

sum(sum(x[:3])==sum(x[3:])for x ...)さらに短くなります。また、from itertools import*バイトを保存します。
デニス

前にスペースは必要ありませんfor。また、デフォルトで関数に名前を付ける必要がないため、を削除できますh=
デニス

1

Mathematica、52バイト

Kelly LowderによるOEIS公式の実装ははるかに短いですが、これは数値を直接計算します。

Count[Tr/@#~Partition~3&/@Range@#~Tuples~6,{n_,n_}]&

まあ、それは実際にソリューションの数を数え1 <= a,b,c,x,y,z <= nます。すべての変数に1を追加しても等式は変わらないため、これは同じ数値です。

説明:Range@#~Tuples~61からnまでの6つの整数のすべてのリストを作成し、#~Partition~3&/@各リストを長さ3の2つのリストに分割し、Tr/@これらのサブリストをCount[...,{n_,n_}]合計し、同じ合計を持つペアの数をカウントします。との間の優先順位で非常に幸運f @f /@なりました~f~



0

CJam、17バイト

ri,6m*{3/::+:=},,

11TIOのタイムアウトの入力、および12それ以上のメモリ不足。

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

説明

ri                e# Read an int from input.
  ,               e# Generate the range 0 ... input-1.
   6m*            e# Take the 6th Cartesian power of the range.
      {           e# Keep only the sets of 6 values where:
       3/         e#  The set split into (two) chunks of 3
         ::+:=    e#  Have the sums of both chunks equal.
              },  e# (end of filter)
                , e# Get the length of the resulting list.

0

Clojure、79バイト

#(count(for[r[(range %)]a r b r c r x r y r z r :when(=(+ a b c)(+ x y z))]1))

コード内の繰り返しの数が多いと、変数の数が多いとマクロが短くなる場合があります。

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