投票の三角形を確認する


12

投票数我々は、ラベルう、Bは、それぞれ行及び列は、任意の昇順になるように、三角形にBを通って1から番号を配置するいくつかの方法(B + 1)/ 2です。最初の4つの投票番号は次のとおりです。

a(0) = 1
a(1) = 1
a(2) = 1
a(3) = 2

a(3)は2です。つまり、1から2までの数字3(3+1)/2 = 6をこのような三角形に配置するには2つの方法があります。

1          1
2 3    or  2 4
4 5 6      3 5 6

詳細については、OEISシーケンスエントリを参照してください。

投票の三角形を与えられたあなたの挑戦は、その正しさを検証することです。投票三角形の条件を満たす(行と列が増加する)場合、三角形を正しく配置するために他にいくつの方法(入力方法を除く)を出力する必要があります。入力三角形が正しく構成されていない場合は、何も出力しないでください。

末尾の改行が許可されます。

入力

有効な投票三角形である場合とそうでない場合がある数字の三角形。例えば:

1
2 3
4 5 6

1
10 5 
9 8 2
7 6 4 3

1
3 2

9
2 11
14 3 5
12 8 1 7
15 13 10 4 6

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21

出力

入力が有効な投票三角形の場合、有効な投票三角形に同じ番号を配置する残りの方法。入力が有効な投票の三角形でない場合、何もありません。たとえば、上記の入力はこれらの出力を生成します(<nothing>実際の空の出力のプレースホルダーです):

1                     # the same as a(3)-1

<nothing>

<nothing>

<nothing>

33591                 # the same as a(6)-1

得点

これはです。いつものように、最小のバイト数が勝ちます。Tiebreakerは最も早く投稿されます。


1
おそらく列も昇順であることに言及する必要があります。OEISの定義を調べるまで、それは私を混乱させました。
ballesta25

次に、なぜ1/4 5/2 3 6無効なのですか?
リーキー修道女

仕様が修正されました-OEISエントリを間違って読みました。@ ballesta25
ArtOfCode

cc @LeakyNun ^
ArtOfCode

入力が正しい順序でなくても、入力に正しい番号が含まれると想定できますか?
デニス

回答:


4

ゼリー、20 バイト

;Zµ⁼Ṣ€
ẋÇFŒ!ṁ€⁸ÇÐfL’

有効な投票三角形の場合、実行時間とメモリ使用量は少なくとも O(n!)で、nは三角形のエントリ数です。無効なものはクラッシュによって認識されるため、何も印刷されません。

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

テスト走行

ローカルでは、a(4)が正しく計算されることを確認できました。

$ time jelly eun ';Zµ⁼Ṣ€¶ẋÇFŒ!ṁ€⁸ÇÐfL’' '[1],[2,3],[4,5,6],[7,8,9,10]'
11

real    6m9.829s
user    6m7.930s
sys     0m2.579s

使い方

;Zµ⁼Ṣ€         Helper link. Argument: T (triangular array)

 Z             Zip/transpose T.
;              Concatenate the original and the transposed copy.
  µ            Begin a new monadic chain, with the previous result (R) as argument.
    Ṣ€         Sort each array in R.
   ⁼           Test for equality with R.
               This returns 1 if T is a ballot triangle, 0 if not.

ẋÇFŒ!ṁ€⁸ÇÐfL’  Main link. Argument: A (triangular array)

 Ç             Call the helper link with argument A.
ẋ              Repeat A that many times.
               This yields an empty array if A is not a ballot triangle.
  F            Flatten the result.
   Œ!          Generate all permutations of the digits of A.
     ṁ€⁸       Mold each permutation like A, i.e., give it triangular form.
               This crashes if permutation array is empty.
        ÇÐf    Filter; keep permutations for which the helper link returns 1.
           L’  Compute the length and decrement it.

3

Brachylog、44バイト

{:{o?}a,?z:2a},?ly+yb:3flw
p~c.:laBtybB,.:1&

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

これは二重指数時間で実行されるため、真実のテストケースでは、長さが以上の三角形の場合、理論的には正しい結果が得られると信じる必要があります。 3

それでも偽のテストケースをテストできますが、テストケースはかなり早く終了するはずです。


仕様を更新する必要がありました-行と列の両方が増加するはずです。OEISエントリを誤って読んだ結果。回答が無効になる場合は申し訳ありません!
-ArtOfCode

@ArtOfCode私の答えはずっとそうでした
Nun

2

JavaScript(ES6)、143バイト

a=>a.some((b,i)=>b.some((c,j)=>c<b[j-1]||i&&c<a[i-1][j]))?'':(f=n=>n<2||n*f(n-1),g=(n,m=f(n*n+n>>1))=>n<2?m:g(--n,m*f(n)/f(n+n+1)),g(a.length))

無効なエントリの三角形を検索し、OEISの式の再帰的な定式化を使用して結果を計算します。


仕様を更新する必要がありました-行と列の両方が増加するはずです。OEISエントリを誤って読んだ結果。回答が無効になる場合は申し訳ありません!
-ArtOfCode

@ArtOfCodeいいえ、すでにチェックしていましたが、とにかく感謝します。
ニール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.