센서 부스트

코드 출현 2019 9일차



퍼즐 입력으로 시뮬레이터를 사용해 보세요!





과제: X에 대해 풀기 여기서...



1 부




X = the BOOST keycode


2 부




X = the coordinates of the distress signal


몇 가지 예제 입력




109,1,204,-1,1001,100,1,100,1008,100,16,101,1006,101,0,99

1102,34915192,34915192,7,4,7,99,0

104,1125899906842624,99


각각은 다음을 나타냅니다.
  • Intcode 컴퓨터에서 실행되는 Intcode 프로그램
  • 여기서 각 정수는 opcode, 매개변수 모드 또는 더 큰 명령어 내의 매개변수를 나타냅니다
  • .

    1 부


  • 인코드 컴퓨터: 4라운드!
  • test mode를 사용하여 내 컴퓨터
  • 문제 해결

    인코드 컴퓨터: 4라운드!



    이 시리즈의 이전 기사(2일, 5일, 7일차)에서는 해당 지점까지 배운 규칙을 요약합니다.

    지금까지 내 Intcode 컴퓨터는 다음 규칙을 이해합니다.
  • 연산 코드1,2,3,4,5,6,7,8,99
  • 매개변수 모드0,1

  • 이 퍼즐은 다음을 소개합니다.
  • 관리할 새로운 상태 비트: relative base , 0에서 시작
  • 하나의 새로운 opcode: 9 - 이것은 relative base를 수정합니다.
  • 새로운 매개변수 모드: 2 - relative base와 관련하여 메모리에서 적절한 값을 찾습니다.
  • 메모리에 저장된 값이 이전에 발생한 것보다 훨씬 더 커집니다
  • .
  • 할당된 초기 최대 주소를 넘어 존재하는 프로그램 전체에서 참조되는 메모리 주소 - 프로그램 실행 중간에 오류 없이 이러한 위치를 수용하고 조회하거나 기록하도록 프로그램을 업데이트해야 함

  • 테스트 모드를 사용하여 내 컴퓨터 문제 해결



    지침에 명시된 바와 같이:

    The BOOST program will ask for a single input; run it in test mode by providing it the value 1. It will perform a series of checks on each opcode, output any opcodes (and the associated parameter modes) that seem to be functioning incorrectly, and finally output a BOOST keycode.
    Once your Intcode computer is fully functional, the BOOST program should report no malfunctioning opcodes when run in test mode; it should only output a single value, the BOOST keycode.



    새 규칙을 수용하기 위해 코드를 추가한 후 프로그램을 입력1으로 실행했습니다.

    이 출력을 보았습니다.

    [203, 0]
    


    이것이 내 Intcode 컴퓨터의 논리에 버그가 있음을 의미한다는 것을 알았습니다.

    추가 도움으로 프로그램이 중단되는 지점까지 프로그램 중에 발생한 각 opcode-매개변수 조합을 로그아웃했습니다.

    해당 출력 근처에서 본 내용은 다음과 같습니다.

    209
    209
    203
    


    첫 번째 209 이전에는 매개변수 위치에 2가 포함된 정수가 기록되지 않았습니다.

    이것은 나에게 무엇을 말하려고 했습니까?
  • opcoderelative mode9에 대한 명령 함수에서 3를 올바르게 처리하지 않았을 수 있습니다.

  • 해당 함수의 코드를 검사할 때 Day 5의 규칙에서 간과한 사항을 발견했습니다.

    Parameters that an instruction writes to will never be in immediate mode.



    나는 값을 쓰는 함수에서 position mode 일명 0 하드 코딩하여 이것을 과도하게 설명했습니다.

    수정 사항으로 항상 적시에 사용되는 매개 변수 모드를 참조하도록 모든 인스턴스를 조정했습니다.

    프로그램을 다시 실행했습니다.

    내 출력에는 하나의 값만 포함되었습니다.
  • 10자리 정수

  • 정답이었습니다!

    2 부



    가장 쉬운 파트 2:

    Run the program with input 2
    Wait a little while
    Return the single output value, a coordinate
    


  • 체크
  • 체크
  • 체크

  • 역시나 정답이었습니다!

    해냈어!!



    파트 2 지침의 시작 부분에서 다음과 같이 축하합니다.

    I now have a complete Intcode computer.



    또한:
  • 두 부분 모두 해결했습니다!
  • 이제 Intcode 컴퓨터
  • 를 성공적으로 구축한 네 가지 퍼즐 중 여덟 부분을 풀었습니다.
  • Intcode 컴퓨터
  • 의 특정 기능을 재현하는 4개의 시뮬레이터를 구축했습니다.
  • 25일차에 참조된 4/5 퍼즐을 완료했습니다. 17일차 퍼즐도 풀 수 있을 것 같습니다!
  • 좋은 웹페이지 즐겨찾기