Liệu câu đố kim tự tháp bổ sung này có một giải pháp độc đáo?


11

Cho thêm một hình chóp P , xác định xem nó có thể được giải không. Một kim tự tháp bổ sung bao gồm các lớp , mỗi lớp có một số nhỏ hơn một số bên dưới nó. Lớp i được ký hiệu là Pi . P1 là lớp cơ sở và Pi+1 là lớp trên cùng Pi . Số thứ j của Pi được ký hiệu là Pi,j . Pi,1 là số ngoài cùng của PiPi,j+1 là số ở bên phải củaPi,j . Bạn có thể hình dungPi+1,j nằm trên đỉnhPi,jPi,j+1 ở giữa, do đó có tên là "kim tự thápbổ sung".

  • Pi,j,Pi,jN , có nghĩa là, mỗi số trong kim tự tháp là một số nguyên khác không tích cực.
  • i>1,Pi,j=Pi1,j+Pi1,j+1 , nghĩa là, mọi số không nằm trên lớp cơ sở của kim tự tháp là tổng của hai số bên dưới nó.
  • Nếu P1n số, Pini+1 số, do đó Pi,ni+1 là số Pi ngoài cùng bên phải . Nói một cách đơn giản hơn, mỗi lớp có một số ít hơn một lớp bên dưới nó.

Một câu đố kim tự tháp bổ sung Q là một kim tự tháp bổ sung với một số số bị loại bỏ (thay thế bằng ? ). Giải pháp của nó là một kim tự tháp Ngoài P , nơi Qi,j?,Pi,j=Qi,j , nghĩa là các số ban đầu có trong câu đố đã được giữ nguyên. Một câu đố như vậy có thể có nhiều hơn một giải pháp.

Công việc của bạn là, đưa ra một câu đố kim tự tháp bổ sung, để xác định xem nó có chính xác một giải pháp hay không.

Đầu vào

Bạn có thể nhận đầu vào dưới bất kỳ hình thức nào sau đây, nhưng phải nhất quán:

  • Mảng các lớp.
  • Mảng các lớp, có hình dạng như một kim tự tháp sử dụng giá trị số nguyên không dương nhất quán làm dấu phân cách giữa các phần tử (chỉ được sử dụng một lần mỗi lần) cũng như phần đệm bên trái và bên phải. Dải phân cách và phần đệm phải giống nhau.
  • Mảng các lớp với phần đệm bên phải hoặc bên trái hợp lệ (bạn phải nhất quán và không trộn phần đệm bên phải và bên trái trong trường hợp này).

Xin lưu ý rằng một giá trị nhất quán không phải là số nguyên dương hoàn toàn phải được sử dụng để biểu thị một số bị thiếu; giá trị này không thể được sử dụng làm phần đệm. Ngoài ra, bạn có thể lấy các lớp được ghép nối (bạn vẫn có thể tách chúng ra) và thứ tự có thể từ cơ sở lên trên cùng hoặc từ trên xuống cơ sở.

Đầu ra

Một trong hai giá trị riêng biệt nhất quán, trong đó một giá trị đại diện cho sự hiện diện của một giải pháp duy nhất và cái còn lại là sự vắng mặt của một giải pháp hoặc sự hiện diện của nhiều hơn một giải pháp.

Quy tắc

  • Qi+1,j=Qi,j+Qi,j+1 sẽ luôn luôn đúng nếuQi,j,Qi,j+1,Qi+1,jN , có nghĩa là, đầu vào được đảm bảo không chứa một số nằm trên hai số khác không phải là tổng của chúng nếu biết cả ba số.
  • Qi,j,Qi,j?, nghĩa là, kim tự tháp sẽ chứa ít nhất một số đã biết.
  • Đừng làm những điều này .
  • Đây là , vì vậy câu trả lời ngắn nhất sẽ thắng! Tuy nhiên, đừng để điều đó ngăn cản bạn đăng một giải pháp chỉ vì ngôn ngữ của bạn "quá dài dòng".

Các trường hợp thử nghiệm

Một mảng với các lớp từ đầu đến chân đế được sử dụng cho các trường hợp thử nghiệm này, với 0đại diện ?.

[[10], [0, 0], [0, 2, 0], [0, 0, 0, 1]] -> True
[[32], [0, 0], [0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] -> True
[[0], [1, 1]] -> True
[[1], [0, 0]] -> False
[[10], [5, 5], [2, 3, 2], [0, 0, 0, 0]] -> False
[[5], [0, 0], [0, 0, 0]] -> False

Ví dụ làm việc

Các trường hợp thử nghiệm được làm việc ở đây.

Giải pháp độc đáo 1

10???2????1

x+y=2x=y=1

10???2??111

x=y=1x+y=2

10???22?111

x=y=2x+y=4

10?4?22?111

x+4=10x=6

1064?22?111

Bước 5-6 tương tự như 4.

10644223111

Vì vậy, ở đây chúng tôi có giải pháp độc đáo của chúng tôi.

Giải pháp độc đáo 2

32????????????????????

Bước 1: Không có cách tiếp cận rõ ràng nào ở đây, vì vậy hãy thử sử dụng các giá trị tối thiểu có thể.

32??????????????111111

Bước 2-5: Có vẻ như các giá trị tối thiểu dẫn đến một giải pháp, do đó đây là giải pháp duy nhất và do đó là duy nhất.

321616888444422222111111

Gợi ý: Có một định lý về các câu đố kim tự tháp bổ sung liên quan đến câu đố này mà bạn có thể chứng minh nếu bạn suy nghĩ đủ mạnh.

Giải pháp độc đáo 3

?11

x=y=1x+y=2

211

Đây là một giải pháp rõ ràng độc đáo.

Không có giải pháp 1

1??

minN=1x,y1x+y2>1

Không có giải pháp 2

1055232????

Các bước 1-2: .x+y=2x=y=1

10552321111

Từ đó, theo đó , đó là một mâu thuẫn, do đó không có giải pháp.1+1=3

Giải pháp không độc đáo

5?????

Hai giải pháp:

552332112211

Vì có ít nhất hai giải pháp, không có giải pháp duy nhất.


Câu trả lời:


5

Thạch , 18 16 byte

FṀ‘ṗLSƝƬ€Ṗ€a@ċ⁼1

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

Một liên kết đơn thể đưa kim tự tháp theo thứ tự ngược lại và trả về 1 cho đúng và 0 cho sai. Tạo tất cả các kim tự tháp có thể có cơ sở lên đến số lượng tối đa trong kim tự tháp và kiểm tra xem có một kết quả khớp duy nhất cho đầu vào không.

Cảm ơn @Arnauld đã chỉ ra rằng điều này không thành công [[1,0],[0]]; Bây giờ sửa lại.

Cảm ơn @JonathanAlan vì đã lưu 2 byte!

Giải trình

F                | Flatten
 Ṁ               | Maximum
  ‘              | Increase by 1
   ṗ             | Cartesian power of this with:
    L            | - Length of input
        €        | For each:
       Ƭ         | - Repeat the following until no change
     SƝ          |   - Sum of neighbours
         Ṗ€      | Remove last element from each list
           a@    | Logical and input with each list
             ċ   | Count times input appears
              ⁼1 | Check if equal to 1

Rất đẹp. Làm thế nào để logic "tạo ra tất cả khả năng" hoạt động?
Giô-na

1
@Jonah sức mạnh Catrtesian của số tối đa trong lưới với chiều dài của cơ sở. ví dụ: nếu Số lượng tối đa là 10 và chiều dài của cơ sở 4 thì nó sẽ kiểm tra mọi thứ từ [1,1,1,1]đến [10,10,10,10], tức là 10000 khả năng.
Nick Kennedy

Đầu ra trung thực cho [[0,0],[0]].
Kevin Cruijssen

@KevinCruijssen Tôi đã yêu cầu làm rõ liệu đầu vào không có giá trị được biết có hợp lệ hay không. Nếu vậy, tôi có thể thay đổi thành »2lợi thế để lấy lại hiệu quả đã mất với thay đổi cuối cùng của tôi, mặc dù với chi phí là một byte.
Nick Kennedy

2
...Ƭ€Ṗ€a@ċ⁼1lưu hai byte (trừ khi có các trường hợp cạnh với AND không được phục vụ cho các thử nghiệm?)
Jonathan Allan


1

Ngôn ngữ Wolfram (Mathicala) , 85 88 byte

Count[l=Length@#;NestList[2#~MovingMedian~2&,#,l-1]&/@Range@Max@#~Tuples~l,#/. 0->_]==1&

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

+3 cố định.

Lực lượng vũ trụ: đối với tất cả các cơ sở có giá trị , hãy xem liệu kim tự tháp kết quả có khớp với hình thức đã cho hay không và kiểm tra xem tổng số trận đấu có phải là 1. Lấy đầu vào làm danh sách các cấp, trước tiên, đại diện cho các số bị thiếu.1..(sum of all numbers)0


1

05AB1E , 25 byte

ZÌLsgãε©.Γü+}¨®š.S*˜O_}OΘ

Đưa các lớp kim tự tháp theo thứ tự lộn ngược, từ đầu đến chân (nghĩa là [[0,0,0,1],[0,2,0],[0,0],[10]]).

Ngoài ra, dường như có một lỗi ở đâu đó trong 05AB1E với bên trong bản đồ .. Chỉ ©...®šnên ...yšcho -1 byte ..

Hãy thử trực tuyến hoặc xác minh một vài trường hợp thử nghiệm .

Một thay thế nhỏ bằng byte cho ©.ΓüO}®šcó thể là [Ðg#üO}\): Hãy thử trực tuyến.

Giải trình:

Z        # Get the flattened maximum of the (implicit) input (without popping)
 Ì       # Increase it by 2
  L      # Create a list in the range [1, max+2]
   sg    # Swap to get the input again, and get the length (amount of layers)
     ã   # Create a cartesian product of this list repeated that many times
ε        # Map each inner list to:
 ©       #  Store it in variable `®` (without popping)
       #  Collect all results until the following doesn't change anymore:
    ü    #   Get the pairwise:
     +   #    Sums
   }®š   #  After we've collected all, prepend the original list `®`
 .S      #  Now compare this potential pyramid with the (implicit) input-pyramid
         #  (-1 if a<b; 0 if a==b; 1 if a>b)
   *     #  Multiply that with the (implicit) input-pyramid
    ˜O   #  Then take the flattened sum
      _  #  And check that this sum equals 0 (1 if truhy; 0 if falsey)
}O       # After the map, take the sum to get the amount of truthy values
  Θ      # And trutify it (== 1), since we must output distinct values instead of truthy/falsey
         # (after which the result is output implicitly)

1
Thất bại trong nhiều trường hợp dễ dàng . Có vẻ như bạn đang cố gắng sử dụng a%b == 0làm lối tắt cho a == b || a == 0, nhưng điều đó không hiệu quả vì có thể là bội số của b.
Grimmy

Vấn đề riêng biệt: mã trả về true cho các trường hợp như [[0,0],[0]], có vô số giải pháp. Tôi nghĩ rằng chỉ cần thay đổi >để Isửa chữa có dấu chính xác đó.
Grimmy

1
@Grimy Đã sửa lỗi bằng cách sử dụng .S*thay vì %, chỉ là +2 byte.
Kevin Cruijssen

0

Haskell, 106 byte

z=zipWith
a#b=a*b==a*a
f x=[1|t<-mapM(\_->[1..sum(sum<$>x)])x,all and$z(z(#))x$iterate(z(+)=<<tail)t]==[1]

Có một kim tự tháp lộn ngược, ví dụ [[0,0,0,1],[0,2,0],[0,0],[10]].

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

Cách tiếp cận vũ phu trong Haskell:

  • tạo tất cả các lớp cơ sở có thể t( mapM(\_->[1..sum(sum<$>x)])x), trong đó các số đi từ 1 đến tổng của tất cả các số trong kim tự tháp đầu vào
  • tạo một kim tự tháp từ t( iterate(z(+)=<<tail)t)
  • so sánh từng lớp phần tử khôn ngoan với đầu vào ( z(z(#))x). Hàm so sánh a # btrả về Truenếu cả hai số bằng hoặc abằng 0 ( a*b==a*a).
  • lấy một 1kim tự tháp phù hợp và so sánh danh sách kết quả với danh sách đơn [1].
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.