תשובה- חלק א' + ב'
# Part 1
def program_alarm(noun, verb, number_list):
number_list[1] = noun
number_list[2] = verb
index = 0
while number_list[index] != 99:
current_row = number_list[index: index + 4]
if current_row[0] == 1:
tot = number_list[current_row[1]] + number_list[current_row[2]]
number_list[current_row[3]] = tot
else:
tot = number_list[current_row[1]] * number_list[current_row[2]]
number_list[current_row[3]] = tot
index += 4
return number_list
# Part 2
def get_noun_and_verb(number_list, number_to_get):
noun = 0
while noun <= 99:
verb = 0
while verb <= 99:
number_list_copy = number_list.copy()
number_list[1] = noun
number_list[2] = verb
index = 0
while number_list_copy[index] != 99 and index <= len(number_list_copy):
current_row = number_list_copy[index: index + 4]
if current_row[0] == 1:
tot = number_list_copy[current_row[1]] + number_list_copy[current_row[2]]
number_list_copy[current_row[3]] = tot
else:
tot = number_list_copy[current_row[1]] * number_list_copy[current_row[2]]
number_list_copy[current_row[3]] = tot
if number_list_copy[0] == number_to_get:
return noun, verb
index += 4
verb += 1
noun += 1
number_list = [1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,13,19,1,9,19,23,2,13,23,27,2,27,13,31,2,31,10,35,1,6,35,39,1,5,39,43,1,10,43,47,1,5,47,51,1,13,51,55,2,55,9,59,1,6,59,63,1,13,63,67,1,6,67,71,1,71,10,75,2,13,75,79,1,5,79,83,2,83,6,87,1,6,87,91,1,91,13,95,1,95,13,99,2,99,13,103,1,103,5,107,2,107,10,111,1,5,111,115,1,2,115,119,1,119,6,0,99,2,0,14,99]
print(program_alarm(12, 2, number_list))
print()
number_list = [1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,13,19,1,9,19,23,2,13,23,27,2,27,13,31,2,31,10,35,1,6,35,39,1,5,39,43,1,10,43,47,1,5,47,51,1,13,51,55,2,55,9,59,1,6,59,63,1,13,63,67,1,6,67,71,1,71,10,75,2,13,75,79,1,5,79,83,2,83,6,87,1,6,87,91,1,91,13,95,1,95,13,99,2,99,13,103,1,103,5,107,2,107,10,111,1,5,111,115,1,2,115,119,1,119,6,0,99,2,0,14,99]
noun_and_verb = get_noun_and_verb(number_list, 19690720)
print(100 * noun_and_verb[0] + noun_and_verb[1])