편집 : 질문 끝에 보너스 퍼즐 의 첫 번째 해결사 에게 100 명성의 보상 을 수여합니다 !
이 현상금에 마감일이없는 답변이 표시되는 경우에만 현상금을 질문에 추가합니다.
감소하지 않는 한 자리 양의 정수 목록이 주어지면, 숫자가 얼마나 깊은 지하 감옥을 파낼 것인지 결정해야합니다.
███ ███ A dungeon with 5 blocks removed and a depth of 3.
███ ███
███ ████
████████
파기를 시작하기 전에지면이 수평입니다.
모든 자릿수는 그 아래에서 정확히 한 블록의 흙을 제거 할 수 있지만 던전 바깥에서 그 위치에 도달해야하며, 제거 된 후에는 던전을 떠나야합니다. 그렇게하는 동안 숫자 는 수평 단계에서 숫자보다 작거나 올라갈 수 없습니다 .
숫자는 파기에 다음 전략을 사용합니다.
- 가장 작은 값을 가진 숫자는 먼저 파고 그 다음 파는 항상 나머지 숫자 중 다음으로 가장 작은 값입니다.
- 첫 번째 숫자는 어느 위치에서나 파낼 수 있습니다. (모든 근거는 동일합니다.)
- 다음 자릿수는 항상 가장 왼쪽에있는 시작 열에서 파고 나올 수 있습니다. 이러한 열이 없으면 가장 오른쪽 열의 오른쪽에 새 열을 파기 시작합니다.
예를 들어 숫자 1 1 1 2 3 3
는 다음 던전을 파헤칩니다 ( 해당 숫자 가 해당 위치를 나타내는 숫자를 표시하는 단계별 시각화).
███1████ ███11███ ███11███ ███11███ ███11███ ███11███
████████ ████████ ███1████ ███1████ ███1████ ███13███
████████ ████████ ████████ ███2████ ███2████ ███2████
████████ ████████ ████████ ████████ ███3████ ███3████
████████ ████████ ████████ ████████ ████████ ████████
예에 대한 설명 :
- 두 번째
1
는-2
깊은 곳으로 깊숙이 들어가면 사용할 수있는 유일한 열에서 벗어날 수 없었 습니다. - 세 번째
1
는 가장 왼쪽 열을 파고2
깊이 열로 이동1
한 다음지면 수준 으로 이동할 수 있으므로 깊은 열을 생성 할 수 있습니다 . - 다음
2
과3
둘 다 가장 왼쪽 열을 파낼 수 있습니다. - 마지막
3
은 가장 왼쪽 열을 파낼 수 없지만 다음 열을 파낼 수는 없습니다.
입력
- 최소 하나 이상의 요소가 포함 된 양수 한 자릿수의 비 감소 목록입니다.
산출
- 단일 양의 정수로 구성된 던전의 깊이입니다.
예
입력 => 출력 (출력의 일부가 아닌 설명으로 던전의 열 깊이를 왼쪽에서 오른쪽으로)
[3] => 1
(column depths are [1])
[1, 1, 1, 2, 3, 3] => 4
(column depths are [4, 2])
[1, 1, 1, 1, 1, 1, 1, 1] => 3
(column depths are [3, 2, 2, 1])
[1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5] => 11
(column depths are [11, 6, 2])
[1, 1, 1, 1, 1, 2, 2, 9, 9, 9] => 7
(column depths are [7, 2, 1])
[2, 2, 2, 2, 2, 5, 5, 5, 7, 7, 9] => 9
(column depths are [9, 2])
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5] => 10
(column depths are [10, 5])
[1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 7, 7, 9] => 13
(column depths are [13, 5])
[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] => 13
(column depths are [13, 5])
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9] => 21
(column depths are [21, 12, 3])
이것은 코드 골프이므로 가장 짧은 항목이 이깁니다.
보너스 퍼즐
"숫자가 다음과 같은 파기 전략을 사용합니다" 섹션에 설명 된 전략이 항상 주어진 숫자에 대해 가장 깊은 던전을 제공 한다는 것을 증명 (또는 반증) 할 수 있습니까 ?