#python #python-3.x
#python #python-3.x
Вопрос:
Итак, я начал изучать Python, начал выполнять прошлогодние головоломки с появлением кода, и в головоломке дня 2 мой результат сохраняется в позиции 1 списка вместо позиции 0, как и должно быть в головоломке. Число, которое я получаю, правильное, но по какой-то причине не в правильной позиции. У кого-нибудь есть идея относительно того, почему это происходит?
Код: Python 3
f = open("input2.txt")
opcode = f.read().strip('n').split(',')
opcode = [int(i) for i in opcode]
opcode[1] = 12
opcode[2] = 2
for i in range(0, len(opcode), 4):
opcodes = opcode[i]
inputA = opcode[opcode[i 1]]
inputB = opcode[opcode[i 2]]
output = opcode[opcode[i 3]]
if opcodes == 1:
opcode[output] = inputA inputB
elif opcodes == 2:
opcode[output] = inputA * inputB
elif opcodes == 99:
break
else:
print("Uknown opcode")
print(opcode)
Головоломка дня 2: https://adventofcode.com/2019/day/2
Введите 2 номера текстовых файлов:
1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,9,19,1,19,5,23,1,13,23,27,1,27,6,31,2,31,6,35,2,6,35,39,1,39,5,43,1,13,43,47,1,6,47,51,2,13,51,55,1,10,55,59,1,59,5,63,1,10,63,67,1,67,5,71,1,71,10,75,1,9,75,79,2,13,79,83,1,9,83,87,2,87,13,91,1,10,91,95,1,95,9,99,1,13,99,103,2,103,13,107,1,107,10,111,2,10,111,115,1,115,9,119,2,119,6,123,1,5,123,127,1,5,127,131,1,10,131,135,1,135,6,139,1,10,139,143,1,143,6,147,2,147,13,151,1,5,151,155,1,155,5,159,1,159,2,163,1,163,9,0,99,2,14,0,0
Результат:
[1, 4690667, 2, 14, 1, 1, 2, 3, 1, 3, 4, 3, 1, 5, 4, 3, 2, 1, 9, 36, 1, 19,
5, 37, 1, 13, 23, 42, 1, 27, 6, 44, 2, 31, 6, 88, 2, 6, 35, 176, 1, 39, 5,
177, 1, 13, 43, 182, 1, 6, 47, 184, 2, 13, 51, 920, 1, 10, 55, 924, 1, 59,
5, 925, 1, 10, 63, 929, 1, 67, 5, 930, 1, 71, 10, 934, 1, 9, 75, 937, 2, 13,
79, 4685, 1, 9, 83, 4688, 2, 87, 13, 23440, 1, 10, 91, 23444, 1, 95, 9, 23447,
1, 13, 99, 23452, 2, 103, 13, 117260, 1, 107, 10, 117264, 2, 10, 111, 469056,
1, 115, 9, 469059, 2, 119, 6, 938118, 1, 5, 123, 938119, 1, 5, 127, 938120,
1, 10, 131, 938124, 1, 135, 6, 938126, 1, 10, 139, 938130, 1, 143, 6, 938132,
2, 147, 13, 4690660, 1, 5, 151, 4690661, 1, 155, 5, 4690662, 1, 159, 2,
4690664, 1, 163, 9, 0, 99, 2, 14, 0, 0]
Ожидаемый результат: 4690667 как первое число в списке, а не 2-е
Комментарии:
1. Что в input2.txt ? Что вы распечатываете и чем это отличается от того, что вы ожидаете?
2. И что такое головоломка дня 2?
3. Отредактировал основной пост со ссылкой на головоломку и мой входной файл
4. Это python2 или python3? И вы должны привыкнуть закрывать свои дескрипторы файлов.
5. @JaredSmith Python 3
Ответ №1:
В головоломке говорится, что 4-й операнд кода операции — это индекс, в котором вы должны сохранить свой результат. Ваш код использует этот операнд для поиска нового значения, при котором он затем сохраняет результат. Допустим, ваш 4-й элемент равен = 30. Затем вы должны сохранить свое значение в индексе 30.
Вместо этого ваш код считывает 4-й элемент (опять же, допустим, код операции [i 3]= 30), а затем просматривает значение кода операции [30] (допустим, это значение равно коду операции [30] = 20), затем сохраняет ваш результат в коде операции [20] (с индексом 20)вместо кода операции [30] (с индексом 30). Другими словами, значение прочитанного вами операнда — это индекс, по которому вы сохраняете результат, а не значение, которое вам нужно использовать, чтобы найти индекс, по которому вы сохраните результат.
Замените строку output = код операции[код операции[i 3]]
с выводом = код операции [i 3]