1
0
Fork 0

part 1 working and prep part 2

This commit is contained in:
Andrew Tomaka 2024-12-17 01:25:41 -05:00
parent 19147d460c
commit 4633a84ae1
Signed by: atomaka
GPG key ID: 61209BF70A5B18BE

View file

@ -27,53 +27,63 @@ OPERANDS = [
->() { :noop }, ->() { :noop },
] ]
stdout = [] def execute(registers, program)
stdout = []
i = 0 i = 0
while i < program.size while i < program.size
opcode = program[i] opcode = program[i]
literal_operand = program[i+1] literal_operand = program[i+1]
combo_operand = OPERANDS[literal_operand].call combo_operand = OPERANDS[literal_operand].call
i += 2 i += 2
case opcode case opcode
when 0 when 0
numerator = registers[:A] numerator = registers[:A]
denominator = 2 ** combo_operand denominator = 2 ** combo_operand
registers[:A] = numerator / denominator registers[:A] = numerator / denominator
when 1 when 1
registers[:B] = registers[:B] ^ literal_operand registers[:B] = registers[:B] ^ literal_operand
when 2 when 2
registers[:B] = combo_operand % 8 registers[:B] = combo_operand % 8
when 3 when 3
if registers[:A] == 0 if registers[:A] == 0
:noop :noop
else else
i = literal_operand i = literal_operand
end
when 4
registers[:B] = registers[:B] ^ registers[:C]
when 5
stdout << combo_operand % 8
when 6
numerator = registers[:A]
denominator = 2 ** combo_operand
registers[:B] = numerator / denominator
when 7
numerator = registers[:A]
denominator = 2 ** combo_operand
registers[:C] = numerator / denominator
end end
when 4
registers[:B] = registers[:B] ^ registers[:C]
when 5
stdout << combo_operand % 8
when 6
numerator = registers[:A]
denominator = 2 ** combo_operand
registers[:B] = numerator / denominator
when 7
numerator = registers[:A]
denominator = 2 ** combo_operand
registers[:C] = numerator / denominator
end end
[registers, program, stdout.join(",")]
end end
p registers original_registers = registers.dup
_, _, part_1 = execute(registers, program)
p part_1
puts stdout.join(",") registers = original_registers.dup
_, _, part_2 = execute(registers, program)
p program.join(",")
p part_2
p part_2 == program.join(",") ? "Correct!" : "Not correct!"
__END__ __END__
Register A: 729 Register A: 2024
Register B: 0 Register B: 0
Register C: 0 Register C: 0
Program: 0,1,5,4,3,0 Program: 0,3,5,4,3,0