Xác nhận hình tam giác


12

Một số phiếu , mà chúng tôi sẽ gắn nhãn B , là số cách sắp xếp các số từ 1 đến B (B + 1) / 2 thành một hình tam giác, sao cho mỗi hàng và cột theo thứ tự tăng dần. Bốn số phiếu đầu tiên là:

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

a(3)là 2, có nghĩa là có 2 cách sắp xếp các số từ 1 đến 3(3+1)/2 = 6trong một tam giác như vậy:

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

Xem mục trình tự OEIS để biết thêm chi tiết.

Thách thức của bạn, được đưa ra một hình tam giác lá phiếu, là để xác minh tính đúng đắn của nó. Nếu nó đáp ứng các điều kiện của một tam giác phiếu (hàng và cột tăng), bạn nên đầu ra có bao nhiêu khác cách (không bao gồm một trong các đầu vào) có để sắp xếp các hình tam giác một cách chính xác. Nếu tam giác đầu vào được xây dựng không chính xác, bạn sẽ không xuất ra gì.

Trailing newlines được cho phép.

Đầu vào

Một tam giác số, có thể có hoặc không phải là tam giác phiếu hợp lệ. Ví dụ:

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

Đầu ra

Nếu đầu vào là một tam giác phiếu hợp lệ, số cách còn lại để sắp xếp các số giống nhau trong một tam giác phiếu hợp lệ. Nếu đầu vào không phải là một tam giác phiếu hợp lệ, không có gì. Ví dụ: các đầu vào ở trên tạo ra các đầu ra này ( <nothing>là một giữ chỗ cho một đầu ra trống thực tế):

1                     # the same as a(3)-1

<nothing>

<nothing>

<nothing>

33591                 # the same as a(6)-1

Chấm điểm

Đây là : như thường lệ, số byte thấp nhất sẽ thắng. Tiebreaker được đăng sớm nhất.


1
Bạn có lẽ nên đề cập rằng các cột cũng theo thứ tự tăng dần. Điều đó làm tôi bối rối cho đến khi tôi tra cứu định nghĩa OEIS.
ballesta25

Vậy thì tại sao không 1/4 5/2 3 6hợp lệ?
Nữ tu bị rò rỉ

Spec đã sửa - Tôi đọc mục OEIS sai. @ ballesta25
ArtOfCode

cc @LeakyNun ^
ArtOfCode

Chúng ta có thể cho rằng đầu vào sẽ chứa các số chính xác, ngay cả khi không theo đúng thứ tự?
Dennis

Câu trả lời:


4

Thạch , 20 byte

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

Đối với các tam giác phiếu hợp lệ, thời gian chạy và sử dụng bộ nhớ ít nhất là O (n!) , Trong đó n là số lượng mục nhập của tam giác. Những cái không hợp lệ được nhận ra bằng cách sụp đổ, do đó không in được gì.

Hãy thử trực tuyến!

Chạy thử nghiệm

Tại địa phương, tôi có thể xác minh rằng (4) được tính toán chính xác.

$ 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

Làm thế nào nó hoạt động

;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 byte

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

Hãy thử trực tuyến!

Điều này chạy trong thời gian theo cấp số nhân, vì vậy đối với các thử nghiệm trung thực, bạn sẽ cần phải tin tôi rằng về mặt lý thuyết nó tạo ra kết quả chính xác, cho các tam giác có chiều dài lớn hơn hoặc bằng 3.

Bạn vẫn có thể kiểm tra thử nghiệm falsey, những người nên chấm dứt khá nhanh.


Tôi đã phải cập nhật thông số kỹ thuật - cả hàng và cột sẽ tăng lên. Kết quả tôi đọc mục OEIS không chính xác. Xin lỗi nếu điều đó làm mất hiệu lực câu trả lời của bạn!
ArtOfCode

@ArtOfCode Đó là những gì câu trả lời của tôi thực hiện cùng
Leaky Nun

2

JavaScript (ES6), 143 byte

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))

Tìm kiếm tam giác cho một mục nhập không hợp lệ và sau đó sử dụng công thức đệ quy của công thức trong OEIS để tính kết quả.


Tôi đã phải cập nhật thông số kỹ thuật - cả hàng và cột sẽ tăng lên. Kết quả tôi đọc mục OEIS không chính xác. Xin lỗi nếu điều đó làm mất hiệu lực câu trả lời của bạn!
ArtOfCode

@ArtOfCode Không, tôi đã kiểm tra rồi, nhưng dù sao cũng cảm ơn.
Neil
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.