Skip to content

Latest commit

 

History

History
163 lines (130 loc) · 6.38 KB

README.md

File metadata and controls

163 lines (130 loc) · 6.38 KB

Day 13: 조난 신호 (Distress Signal)

https://adventofcode.com/2022/day/13

Part 1

언덕을 오르고 다시 엘프들과 연락을 시도합니다. 그러나 연락이 되는 대신 예상하지 못했던 조난 신호를 받게 됩니다.

휴대용 장치가 여전히 제대로 작동하지 않는게 분명합니다. 조난 신호의 패킷이 잘못된 순서로 해독되었습니다. 메시지를 해독하려면 수신된 패킷 목록(퍼즐 입력)을 재정렬해야 합니다.

당신이 받은 목록은 패킷 쌍으로 구성되며, 쌍은 빈 줄로 구분됩니다. 당신은 올바른 순서의 패킷 쌍의 개수를 세아려야 합니다.

예를 들어, 다음과 같은 목록이 있다고 가정해봅시다.

[1,1,3,1,1]
[1,1,5,1,1]

[[1],[2,3,4]]
[[1],4]

[9]
[[8,7,6]]

[[4,4],4,4]
[[4,4],4,4,4]

[7,7,7,7]
[7,7,7]

[]
[3]

[[[]]]
[[]]

[1,[2,[3,[4,[5,6,7]]]],8,9]
[1,[2,[3,[4,[5,6,0]]]],8,9]

패킷 데이터는 목록과 정수로 구성됩니다. 각 목록은 [로 시작하고 ]로 끝나며, 0개 이상의 쉼표로 구분된 값(정수 또는 다른 목록)을 포함합니다. 각 패킷은 항상 목록이며 한 줄에 표시됩니다.

두 값을 비교할 때, 첫 번째 값을 왼쪽이라 하고 두 번째 값을 오른쪽이라 합시다. 그러면

  • 두 값이 모두 정수인 경우, 더 낮은 정수가 먼저 와야 합니다.
    • 왼쪽 정수가 오른쪽 정수보다 작으면 입력 순서가 올바른 것입니다.
    • 왼쪽 정수가 오른쪽 정수보다 크면 입력 순서가 잘못된 것입니다.
    • 그렇지 않고 두 값이 동일한 정수라면, 입력의 다음 값으로 넘어가세요.
  • 두 값이 모두 목록인 경우 각 목록의 첫 번째 값을 비교한 다음 두 번째 값 등을 비교합니다.
    • 왼쪽 목록에 먼저 항목이 부족하면 입력 순서가 올바른 것입니다.
    • 오른쪽 목록의 항목이 먼저 부족하면 입력 순서가 올바르지 않은 것입니다.
    • 두 목록 모두 항목이 남아있고, 두 항목을 비교했을 때 결정을 내릴 수 없다면, 입력의 다음 값으로 넘어가세요.
  • 정확히 하나의 값만 정수이면, 해당 정수 하나만 포함하는 목록으로 정수를 변환한 다음 다시 비교하십시오.
    • 예를 들어 [0,0,0]2를 비교하는 경우, 오른쪽 값을 [2](2를 포함하는 목록)으로 변환합니다. 결과는 [0,0,0][2]를 비교하여 찾습니다.

이러한 규칙을 사용하여 예제의 쌍 중 올바른 순서로 정렬된 쌍을 확인할 수 있습니다.

== Pair 1 ==
- Compare [1,1,3,1,1] vs [1,1,5,1,1]
  - Compare 1 vs 1
  - Compare 1 vs 1
  - Compare 3 vs 5
    - 왼쪽 값이 더 작기 때문에, 입력은 올바른 순서입니다.

== Pair 2 ==
- Compare [[1],[2,3,4]] vs [[1],4]
  - Compare [1] vs [1]
    - Compare 1 vs 1
  - Compare [2,3,4] vs 4
    - 타입이 섞인 경우, 오른쪽 값을 [4]로 변환한 다음 다시 비교합니다.
    - Compare [2,3,4] vs [4]
      - Compare 2 vs 4
        - 왼쪽 값이 더 작기 때문에, 입력은 올바른 순서입니다.

== Pair 3 ==
- Compare [9] vs [[8,7,6]]
  - Compare 9 vs [8,7,6]
    - 타입이 섞인 경우, 왼쪽 값을 [9]로 변환한 다음 다시 비교합니다.
    - Compare [9] vs [8,7,6]
      - Compare 9 vs 8
        - 오른쪽 값이 더 작기 때문에, 입력은 올바르지 않은 순서입니다.

== Pair 4 ==
- Compare [[4,4],4,4] vs [[4,4],4,4,4]
  - Compare [4,4] vs [4,4]
    - Compare 4 vs 4
    - Compare 4 vs 4
  - Compare 4 vs 4
  - Compare 4 vs 4
  - 왼쪽 목록의 항목이 먼저 부족하기 때문에, 입력은 올바른 순서입니다.

== Pair 5 ==
- Compare [7,7,7,7] vs [7,7,7]
  - Compare 7 vs 7
  - Compare 7 vs 7
  - Compare 7 vs 7
  - 오른쪽 목록의 항목이 먼저 부족하기 때문에, 입력은 올바르지 못한 순서입니다.

== Pair 6 ==
- Compare [] vs [3]
  - 왼쪽 목록의 항목이 먼저 부족하기 때문에, 올바른 순서입니다.

== Pair 7 ==
- Compare [[[]]] vs [[]]
  - Compare [[]] vs []
    - 오른쪽 목록의 항목이 먼저 부족하기 때문에, 입력은 올바르지 못한 순서입니다.

== Pair 8 ==
- Compare [1,[2,[3,[4,[5,6,7]]]],8,9] vs [1,[2,[3,[4,[5,6,0]]]],8,9]
  - Compare 1 vs 1
  - Compare [2,[3,[4,[5,6,7]]]] vs [2,[3,[4,[5,6,0]]]]
    - Compare 2 vs 2
    - Compare [3,[4,[5,6,7]]] vs [3,[4,[5,6,0]]]
      - Compare 3 vs 3
      - Compare [4,[5,6,7]] vs [4,[5,6,0]]
        - Compare 4 vs 4
        - Compare [5,6,7] vs [5,6,0]
          - Compare 5 vs 5
          - Compare 6 vs 6
          - Compare 7 vs 0
            - 오른쪽 값이 더 작기 때문에, 입력은 올바르지 않은 순서입니다.

당신은 이미 올바른 순서로 정렬된 쌍들의 인덱스를 알고 싶습니다. (첫 번째 쌍의 인덱스는 1이고, 두 번째 쌍의 인덱스는 2와 같이 증가합니다) 위의 예에서 올바른 순서로 정렬된 쌍의 인덱스는 1, 2, 4, 6입니다. 그리고 이 인덱스들의 합은 13입니다.

이미 올바른 순서로 정렬되어 있는 패킷 쌍을 확인하세요. 그 쌍들의 인덱스 합은 얼마인가요?

Part 2

이제 모든 패킷을 올바른 순서로 배치하기만 하면 됩니다. 수신된 패킷 목록의 빈 줄은 무시하세요.

또한 조난 신호 프로토콜을 사용하려면, 두 개의 분할 패킷을 추가로 포함해야 합니다.

[[2]]
[[6]]

이전과 동일한 규칙을 사용하여 모든 패킷(수신된 패킷 목록에 있는 패킷과 두 개의 분할 패킷)을 올바른 순서로 구성하세요.

위의 예에서 패킷을 올바른 순서로 정렬한 결과는 다음과 같습니다.

[]
[[]]
[[[]]]
[1,1,3,1,1]
[1,1,5,1,1]
[[1],[2,3,4]]
[1,[2,[3,[4,[5,6,0]]]],8,9]
[1,[2,[3,[4,[5,6,7]]]],8,9]
[[1],4]
[[2]]
[3]
[[4,4],4,4]
[[4,4],4,4,4]
[[6]]
[7,7,7]
[7,7,7,7]
[[8,7,6]]
[9]

그런 다음 분할 패킷을 찾습니다. 이 조난 신호에 대한 해독키를 찾으려면, 두 분할 패킷의 인덱스를 찾고 이 값을 곱해야 합니다. (첫 번째 패킷의 인덱스는 1이고, 두 번째 패킷의 인덱스는 2와 같이 증가합니다.) 이 예에서 분할 패킷은 10번째와 14번째에 있으므로 해독키는 140입니다.

모든 패킷을 올바른 순서로 구성하세요. 조난 신호의 해독키는 무엇인가요?