이 추가 피라미드 퍼즐에는 고유 한 솔루션이 있습니까?


12

추가 피라미드 주어지면 그것을 해결할 수 있는지 결정하십시오. 추가 피라미드는 레이어 로 구성되며 각 레이어 는 아래에있는 것보다 하나 적은 수를 갖습니다. 레이어 는 됩니다. 은 기본 레이어이고 은 위에있는 레이어 입니다. 의 번째 수는 로 표시된다 . 은 의 가장 왼쪽 숫자 이고 은 의 오른쪽 숫자 입니다. 위에있는 시각화 할 수 있습니다나는나는1나는+1나는제이나는나는,제이나는,1나는나는,제이+1나는,제이나는+1,제이나는,제이및 중간 따라서 이름 "부가의 피라미드 ".나는,제이+1

  • 나는,제이,나는,제이 즉, 피라미드의 모든 숫자는 0이 아닌 양의 정수입니다.
  • 나는>1,나는,제이=나는1,제이+나는1,제이+1 즉, 피라미드의 기본 레이어에없는 모든 숫자의 합은 그 아래 두 숫자.
  • 에 숫자 가 있으면 에 숫자가 있으므로 은 의 가장 오른쪽 숫자입니다 . 간단히 말하면, 각 레이어는 그 아래 레이어보다 하나 적은 숫자를 갖습니다.1나는나는+1나는,나는+1나는

또한 피라미드 퍼즐 제거 어떤 숫자와 부가 피라미드 (대체 ). 그것의 해결책은 추가 피라미드 . 여기서 퍼즐에 원래 존재했던 숫자는 변경되지 않은 채 남아 있습니다. 이러한 퍼즐에는 둘 이상의 솔루션이있을 수 있습니다.?나는,제이?,나는,제이=나는,제이

피라미드 퍼즐이 추가되어 정확히 하나의 솔루션이 있는지 확인합니다.

입력

다음과 같은 형식으로 입력 할 수 있지만 일관성이 있습니다.

  • 레이어 배열.
  • 왼쪽과 오른쪽 패딩뿐만 아니라 요소 사이의 구분자 (일회에 한 번만 사용됨)로 일관된 비 양성 정수 값을 사용하는 피라미드 모양의 레이어 배열입니다. 분리기와 패딩이 같아야합니다.
  • 일관된 유효한 오른쪽 또는 왼쪽 패딩이있는 레이어 배열 (일관되어야하며이 경우 오른쪽과 왼쪽 패딩을 혼합해서는 안 됨)

양의 정수가 아닌 일관된 값을 사용하여 누락 된 숫자를 나타내야합니다. 이 값은 패딩으로 사용할 수 없습니다. 또한 레이어를 연결하여 (여전히 분리 할 수 ​​있음) 순서는베이스에서 맨 위 또는 맨 위에서베이스로 정렬 할 수 있습니다.

산출

두 가지 일관된 고유 값 중 하나입니다. 하나는 고유 한 솔루션이 존재하고 다른 하나는 솔루션이 없거나 둘 이상의 솔루션이 존재 함을 나타냅니다.

규칙

  • 나는+1,제이=나는,제이+나는,제이+1 은 경우 항상 참입니다. 즉, 입력은 세 개의 숫자가 모두 알려진 경우 합계가 아닌 다른 두 개의 숫자 위에 숫자가 포함되지 않도록 보장됩니다.나는,제이,나는,제이+1,나는+1,제이
  • 나는,제이,나는,제이? 즉, 피라미드에는 알려진 숫자가 하나 이상 포함됩니다.
  • 이런 일을 하지 마십시오 .
  • 이것은 이므로 가장 짧은 답변이 이깁니다! 그러나 언어가 "너무 장황하다"고해서 솔루션을 게시하지 못하게해서는 안됩니다.

테스트 사례

상기베이스의 상부로부터 레이어 배열은,이 시험의 경우에 사용되는 0표현.?

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

작동 예

테스트 사례가 여기에서 작동합니다.

독특한 솔루션 1

10???2????1

단계 1 : .엑스+와이=2엑스=와이=1

10???2??111

2 단계 : .엑스=와이=1엑스+와이=2

10???22?111

단계 3 : .엑스=와이=2엑스+와이=4

10?4?22?111

4 단계 : .엑스+4=10엑스=6

1064?22?111

5-6 단계는 4와 유사합니다.

1064422111

여기에 우리 고유의 솔루션이 있습니다.

독특한 솔루션 2

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

1 단계 : 여기에는 분명한 접근 방법이 없으므로 가능한 최소값을 사용해 봅시다.

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

2-5 단계 : 최소값이 솔루션으로 표시되는 것처럼 보이므로 이것이 유일한 솔루션이므로 고유합니다.

321616888444422222111111

힌트 : 충분히 생각하면 증명할 수있는이 퍼즐과 관련된 추가 피라미드 퍼즐에 대한 정리가 있습니다.

독특한 솔루션 3

?11

1 단계 : .엑스=와이=1엑스+와이=2

211

이것은 분명히 독특한 솔루션입니다.

해결책 없음 1

1??

=1엑스,와이1엑스+와이2>1 이므로 해결책이 없습니다.

해결책 없음 2

105522????

1-2 단계 : .엑스+와이=2엑스=와이=1

1055221111

거기에서 모순되는 따르 므로 해결책이 없습니다.1+1=

고유하지 않은 솔루션

5?????

두 가지 솔루션 :

5522112211

솔루션이 두 개 이상 있으므로 고유 한 솔루션이 없습니다.


답변:


5

젤리 , 18 16 바이트

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

온라인으로 사용해보십시오!

피라미드를 역순으로 가져가 true로 1을, false로 0을 반환하는 모나드 링크. 피라미드의 최대 수를 기준으로 가능한 모든 피라미드를 생성하고 입력에 대해 하나의 고유 한 일치가 있는지 확인합니다.

이것이 실패했다고 지적한 @Arnauld에게 감사드립니다 [[1,0],[0]]. 이제 수정되었습니다.

2 바이트를 절약 한 @JonathanAlan에게 감사합니다!

설명

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

아주 좋아요 "모든 가능성 생성"논리는 어떻게 작동합니까?
Jonah

1
@Jonah는 밑면 의 길이와 함께 그리드의 최대 수 의 카테타 힘 입니다. 예를 들면 최대가 10이었고,베이스 4의 길이는이 모든 것을 테스트하는 것 [1,1,1,1]까지 [10,10,10,10], 즉 10000 가능성.
Nick Kennedy

에 대한 진실을 출력합니다 [[0,0],[0]].
Kevin Cruijssen

@KevinCruijssen 나는 알려진 값이없는 입력이 유효한지 명확히하기 위해 요청했습니다. 그렇다면, 내가 바꿀 수 »2또한 바이트의 비용이기는하지만, 내 마지막 변화와 손실 효율성을 회복하는 장점을 가지고있다.
Nick Kennedy

2
...Ƭ€Ṗ€a@ċ⁼12 바이트를 절약합니다 (테스트에서 AND가 적용되지 않은 경우가 있습니까?)
Jonathan Allan


1

Wolfram Language (Mathematica) , 85 88 바이트

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

온라인으로 사용해보십시오!

+3 고정

무차별 대입 : 값이있는 모든 염기에 대해 결과 피라미드가 주어진 형태와 일치하는지 확인하고 총 일치 수가 1인지 확인 합니다. 누락 된 숫자 를 나타내는 첫 번째로 밑의 레벨 목록으로 입력을 받습니다.1..(sum of all numbers)0


1

05AB1E , 25 바이트

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

피라미드 레이어를 거꾸로하여 밑에서 끝까지 (즉 [[0,0,0,1],[0,2,0],[0,0],[10]]) 가져옵니다 .

또한 05AB1E의 어딘가에 맵 이있는 버그가있는 것 같습니다 . -1 바이트 ©...®š여야합니다 ...yš.

온라인으로 시도 하거나 몇 가지 테스트 사례를 확인하십시오 .

미성년자에 대한 대안 동등한 바이트 ©.ΓüO}®š[Ðg#üO}\): 온라인을보십시오.

설명:

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
많은 쉬운 경우에 실패합니다 . 에 a%b == 0대한 바로 가기 로 사용하려는 것처럼 a == b || a == 0보이지만 a가 b의 배수 일 수 있으므로 작동하지 않습니다.
Grimmy

별도의 문제 : 코드는와 같은 경우 [[0,0],[0]]무한히 많은 솔루션을 가진 경우 true를 반환합니다 . >올바르게 강조된 I수정으로 변경 하는 것 같습니다 .
Grimmy

1
@Grimy .S*대신에 %+2 바이트 를 사용하여 수정했습니다 .
Kevin Cruijssen

0

하스켈, 106 바이트

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]

예를 들어 거꾸로 된 피라미드를 사용 [[0,0,0,1],[0,2,0],[0,0],[10]]합니다.

온라인으로 사용해보십시오!

Haskell의 무차별 대입 방식 :

  • 가능한 모든 기본 레이어 t( mapM(\_->[1..sum(sum<$>x)])x)를 생성합니다 . 여기서 숫자는 1에서 입력 피라미드의 모든 숫자의 합으로 이동합니다.
  • t( iterate(z(+)=<<tail)t) 에서 피라미드 만들기
  • 각 레이어를 요소별로 입력과 비교하십시오 ( z(z(#))x). 비교 함수 a # bTrue두 숫자가 같거나 a0 ( a*b==a*a) 인 경우 반환 합니다 .
  • 1일치하는 모든 피라미드 에 대해를 가져와 결과 목록을 싱글 톤 목록과 비교하십시오 [1].
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.