これは切り捨てられた三角形の数ですか?


20

関連するOEISシーケンス:A008867

切り捨てられた三角数

三角形の数の一般的なプロパティは、三角形に配置できることです。たとえば、21を取り、osの三角形に配置します。

     o 
    ああ
   おー
  おおおお
 ああ
おっと

各角から同じサイズの三角形を切り取る「切り捨て」を定義しましょう。21を切り捨てる1つの方法は次のとおりです。

     。 
    。。
   おー
  おおおお
 。おー。
。。oo。。

(の三角形は.オリジナルからカットされます)。

o残りは12 秒なので、12は切り捨てられた三角形の番号です。

仕事

あなたの仕事は、整数を取り、数値が切り捨てられた三角形の数であるかどうかを返す(または標準出力メソッドのいずれかを使用する)プログラムまたは関数(または同等のもの)を書くことです。

ルール

  • 標準的な抜け穴はありません。
  • 入力は負でない整数です。
  • カットの辺の長さは元の三角形の半分を超えることはできません(つまり、カットは重なり合うことができません)
  • カットの辺の長さはゼロにすることができます。

テストケース

真実:

0
1
3
6
7
10
12
15
18
19

偽物:

2
4
5
8
9
11
13
14
16
17
20

50までのすべての整数のテストケース:TIOリンク

これはであるため、各言語でのバイト数が最短の提出が勝ちです!

code-golf  math  decision-problem  number-theory  integer  code-golf  number  decision-problem  functional-programming  code-golf  array-manipulation  matrix  code-golf  string  classification  string  code-challenge  binary  compression  decode  code-golf  string  string  code-challenge  balanced-string  encode  code-golf  number-theory  integer  base-conversion  code-golf  math  number-theory  geometry  abstract-algebra  code-golf  array-manipulation  sorting  optimization  code-golf  math  geometry  image-processing  generation  code-golf  string  cops-and-robbers  repeated-transformation  grammars  cops-and-robbers  repeated-transformation  grammars  code-challenge  restricted-source  tips  source-layout  javascript  code-challenge  kolmogorov-complexity  restricted-source  code-golf  combinatorics  counting  math  fastest-code  linear-algebra  code-golf  math  permutations  matrix  linear-algebra  code-golf  string  decision-problem  restricted-source  code-golf  number  array-manipulation  subsequence  code-golf  number  array-manipulation  matrix  code-golf  brainfuck  code-golf  color  code-golf  quine  source-layout  code-golf  subsequence  code-golf  string  ascii-art  code-golf  string  ascii-art  alphabet  code-golf  decision-problem  interpreter  hexagonal-grid  halting-problem  code-golf  string  polynomials  calculus  code-golf  math  decision-problem  matrix  complex-numbers  code-golf  random  code-golf  number  arithmetic 

1
真実の出力と偽の出力を出力するのですか、それとも2つの一貫した値で問題ありませんか?
小麦ウィザード

@WheatWizardの2つの一貫した値は許容されます。
ジョンファンミン

切り捨てがどれほど重なっているとしても、結果は、切り捨てが小さい三角形に等しくなります(切り捨ての辺の長さが0の場合)。
アソーヌトゥヒド

回答:



7

Haskell、46バイト

f n=or[mod(gcd(p^n)(4*n-1)-5)12<3|p<-[1..4*n]]

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

問題に数論の束を投げた(@flawrに感謝)、私はこの特徴付けを見つけました:

4n-1の素因数分解において、5 mod 12または7 mod 12の形式の素数が偶数回現れる場合、nは正確に切り捨てられた三角形の数です。

これは、例えば、4n-15 2 = 25でさらに割り切れず、5因子の総数が偶数でない限り、5で割り切れないことを意味します。

Haskellには因数分解が組み込まれていませんが、即興で作成できます。12 = 3 * 4のような素数への因数分解を扱う場合、同等のステートメントを使用できます。

4n-1の素数への因数分解に5 mod 12または7 mod 12の形式の項がない場合、nは厳密に切り捨てられた三角形の数値です。

私たちは、首相のパワーを抽出することができますPに登場kのようにgcd(p^k)k。次に、結果rが5または7 mod mod 12でないことを確認しmod(r-5)12>2ます。rは奇数であることに注意してください。また、複合体をpとしてチェックしますが、素数からそれらを区別する方法はありませんが、その要素が行う限りチェックはパスします。

最後に、出力を否定>2<3True/ を切り替えると、の代わりにFalse使用できるorようになり、バイトが節約されますand


関連する特性化は、12を法とする4n-1の除数の合計が1と11であり、5と7より多いことです。

53バイト

f n=sum[abs(mod k 12-6)-3|k<-[1..4*n],mod(4*n)k==1]<0

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


本当にいい説明だ!
Amphibological

6

Python 2、52バイト

f=lambda n,b=1:b>n+1or(8*n-2+3*b*b)**.5%1>0<f(n,b+1)

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

出力True/ False反転。この特性評価を使用します。

8n-2がいくつかの整数a、bに対してa 2 -3b 2を形成する場合、nは正確に切り捨てられた三角形の数です。

to からto 8*n-2+3*b*bに対して完全な正方形であるかどうかをチェックします。whenの負の平方根に対してエラーが発生するため回避しますが、奇数のみが機能するため、これは害になりません。b1n+1b=0n==0b

非再帰的に行われます:

Python 2、53バイト

lambda n:0in[(8*n-2+3*b*b)**.5%1for b in range(~n,0)]

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


再帰的および非再帰的ソリューションは通常、Pythonで互いに競争していますか?
boboquack

@boboquack通常、再帰的なソリューションは、数バイト以上勝ちますrange。ここでb>n+1は、ベースケースが長く、0in短いため、近くにあり ます。
-xnor

5

R45 43バイト

Vloのおかげで-2バイト

(n=scan())%in%outer(T<-cumsum(0:n),3*T,"-")

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

これについては、最初のn三角形の数だけをチェックする必要があると確信しています。ブルートフォースnは、三角形の数とそのトリプルのペアワイズ差にあるかどうかをチェックします。


scan() n<-scan();n%in%outer(T<-cumsum(0:n),3*T,"-")
Vlo

@Vlo facepalmどこでも関数を使用する習慣になりました...-
ジュゼッペ

そして、(n = scan())の代わりに<-代入を使用する習慣になりました... tsk tsk
Vlo

5

ゼリー、10 バイト

0r+\ð_÷3f⁸

整数を受け入れ、真実の値(空でないリスト)または偽の値(空のリスト)を返す単項リンク。

オンラインでお試しください!(フッターはPython表現を実行して[0]結果をそのまま表示します)
...またはテストスイートを表示します(0から20までの範囲で実行)

どうやって?

Nを指定すると、最初のN個の三角形番号を形成し、それぞれからNを減算し、各結果を3で除算し、最初のN個の三角形番号のいずれかである結果を保持します。

0r+\ð_÷3f⁸ - Link: integer, N             e.g. 7
0r         - zero inclusive range N            [    0, 1, 2,   3,    4, 5,   6,   7]
  +\       - cumulative reduce with addition   [    0, 1, 3,   6,   10,15,  21,  28]
    ð      - start a new dyadic link with that, t, on the left and N on the right
     _     - t subtract N (vectorises)         [   -7,-6,-3,  -1,    3, 8,  14,  21]
      ÷3   - divivde by three (vectorises)     [-2.33,-2,-1.33,-0.33,1,2.67,4.67, 7]
         ⁸ - chain's left argument, t          [    0, 1, 3,   6,   10,15,  21,  28]
        f  - filter keep                       [                     1             ]
                                               - a non-empty list, so truthy

4

Pyt、10 バイト

Đř△Đ3*ɐ-Ƒ∈

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

説明:

        Implicit input
Đ       Duplicate input
ř       Push [1,2,...,input]
△       For each element k in the array, get the kth triangle number
Đ       Duplicate the top of the stack
3*      Multiply by 3
ɐ       ɐ - All possible:
 -                       subtractions between elements of the two arrays  
Ƒ       Flatten the nested array
∈       Is the input in the array

あなたも私を倒した、+ 1 GG
FantaC

@tfbninja私は何のためのよりよい説明よかったɐ-
mudkip201を

1
追加、必要に応じてロールバックできます
-FantaC


3

J、22バイト

e.[:,@(-/3*])2![:i.2+]

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

率直でやや貧弱なゴルフアプローチ。

説明

e.[:,@(-/3*])2![:i.2+]
             2![:i.2+]  Range of triangular numbers up to N
      (-/3*])           All possible subtractions of 3T from T 
                        where T is triangular up to the Nth triangular number
    ,@                  Flattened into a single list
e.                      Is N in the list?

e.2,@(!-/3*!)[:i.2+]
-FrownyFrog

e.2,@(!-/3*!)1+i.,]多分
-FrownyFrog

3

MATL、12バイト

tQ:qYst!3*-m

1偽物、偽物の出力0

オンラインでお試しください!または、すべてのテストケースを確認します

仕組みと例

入力を検討する 6

t      % Implicit input. Duplicate
       % STACK: 6, 6
Q:q    % Increase, range, decrease element-wise. Gives [0 1 ... n]
       % STACK: 6, [0 1 ... 6]
Ys     % Cumulative sum
       % STACK: 6, [0 1 3 6 10 15]
t!     % Duplicate, transpose
       % STACK: 6, [0 1 3 6 10 15], [0;
                                     1;
                                     3;
                                     6;
                                     10;
                                     15]
3*     % Times 3, element-wise
       % STACK: 6, [0 1 3 6 10 15 21 28 36 45 55], [0;
                                                    3;
                                                    9;
                                                    18;
                                                    30;
                                                    45]
-      % Subtract, element-wise with broadcast
       % STACK: 6, [  0   1   3   6  10  15  21;
                     -3  -2   0   3   7  12  18;
                     -9  -8  -6  -3   1   6  12;
                    -18 -17 -15 -12  -8  -3   3;
                    -30 -29 -27 -24 -20 -15  -9;
                    -45 -44 -42 -39 -35 -30 -24;
                     -63 -62 -60 -57 -53 -48 -42]
m      % Ismember. Implicit display
       % STACK: 1



1

05AB1E、11バイト

ÅT3*+8*>ŲZ

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

説明

ÅT            # get a list of triangle numbers upto input
  3*          # multiply each by 3
    +         # add input to each
     8*       # multiply each by 8
       >      # increment each
        Ų    # check each for squareness
          Z   # max

これは、数値T8T+1奇数の完全な正方形である場合、三角形であるという事実に基づいています。
切り捨て可能な三角形のリストから開始し、それらに基づいて考えられる大きな三角形を計算し、実際に三角形かどうかを確認します。


1

Japt、16バイト

ò å+ d@Zd_-3*X¶U

それを試してください | すべてのテストケースを確認する


説明

                     :Implicit input of integer U
ò                    :Range [0,U]
  å+                 :Cumulative reduction by addition
     d@              :Does any X in array Z return true when passed through this function?
       Zd_           :  Does any element in Z return true when passe through this function?
          -3*X       :    Subtract 3*X
              ¶U     :    Check for equality with U

代替案

ò å+ £Zm-3*XÃdøU

それを試してみてください


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