day-05.jl (2167B)
1 function computer(program, input) 2 program = copy(program) 3 pc = 1 4 output = [] 5 get_param(loc, im_mode) = (im_mode ? program[loc] : program[program[loc] + 1]) 6 while true 7 op_code = program[pc] % 100 8 im_mode_1 = (program[pc] % 1000) ÷ 100 > 0; 9 im_mode_2 = (program[pc] % 10000) ÷ 1000 > 0; 10 if op_code == 1 11 program[program[pc + 3] + 1] = ( 12 get_param(pc + 1, im_mode_1) 13 + get_param(pc + 2, im_mode_2) 14 ) 15 pc += 4 16 elseif op_code == 2 17 program[program[pc + 3] + 1] = ( 18 get_param(pc + 1, im_mode_1) 19 * get_param(pc + 2, im_mode_2) 20 ) 21 pc += 4 22 elseif op_code == 3 23 program[program[pc + 1] + 1] = input 24 pc += 2 25 elseif op_code == 4 26 push!(output, get_param(pc + 1, im_mode_1)) 27 pc += 2 28 elseif op_code == 5 29 if get_param(pc + 1, im_mode_1) != 0 30 pc = get_param(pc + 2, im_mode_2) + 1 31 else 32 pc += 3; 33 end 34 elseif op_code == 6 35 if get_param(pc + 1, im_mode_1) == 0 36 pc = get_param(pc + 2, im_mode_2) + 1 37 else 38 pc += 3; 39 end 40 elseif op_code == 7 41 program[program[pc + 3] + 1] = ( 42 get_param(pc + 1, im_mode_1) 43 < get_param(pc + 2, im_mode_2) 44 ) ? 1 : 0; 45 pc += 4; 46 elseif op_code == 8 47 program[program[pc + 3] + 1] = ( 48 get_param(pc + 1, im_mode_1) 49 == get_param(pc + 2, im_mode_2) 50 ) ? 1 : 0; 51 pc += 4; 52 elseif op_code == 99 53 break 54 else 55 println("Unknown op code: ", op_code) 56 break 57 end 58 end 59 output 60 end 61 62 function part_1(input) 63 computer(input, 1)[end] 64 end 65 66 function part_2(input) 67 computer(input, 5)[end] 68 end 69 70 input = map(x -> parse(Int32, x), split(readlines(open("input.txt"))[1], ',')) 71 72 println("Julia:") 73 println("Part 1: ", part_1(input)) 74 println("Part 2: ", part_2(input))