투표 삼각형 확인


12

투표 수가 우리는 라벨 것, B는 , 각각의 행 및 열은 임의의 증가 순서로되도록, 삼각형으로 B 내지 1의 숫자를 배열하는 방법의 수 (B + 1) / 2이다. 처음 네 개의 투표 번호는 다음과 같습니다.

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

a(3)2는 2에서 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

그렇다면 왜 1/4 5/2 3 6유효 하지 않습니까?
Leaky Nun

사양이 수정되었습니다. OEIS 항목을 잘못 읽었습니다. @ ballesta25
ArtOfCode

cc @LeakyNun ^
ArtOfCode

입력이 올바른 순서가 아니더라도 정확한 숫자를 포함한다고 가정 할 수 있습니까?
Dennis

답변:


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

자바 스크립트 (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 아니요, 이미 확인했지만 어쨌든 감사합니다.
Neil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.