验证选票三角形


12

签号码,我们将标签,是的布置从1号的方法,通过B(B + 1)2号/成三角形,使得每个行和列是任何递增的顺序。前四个投票号码是:

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

a(3)是2,这意味着有2种方式将数字从1排列到3(3+1)/2 = 6这样的三角形:

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 '16

那为什么1/4 5/2 3 6无效呢?
Leaky Nun

固定的规范-我读错了OEIS条目。@ ballesta25
ArtOfCode '16

cc @LeakyNun ^
ArtOfCode '16

我们是否可以假设输入将包含正确的数字,即使顺序不正确?
丹尼斯

Answers:


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这就是我一直以来的答案
Leaky 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不,我已经检查过了,但是还是谢谢。
尼尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.