Now that you have the structure of your transmission decoded, you can calculate the value of the expression it represents.
Literal values (type ID 4
) represent a single number as described above. The remaining type IDs are more interesting:
0
are sum packets - their value is the sum of the values of their sub-packets. If they only have a single sub-packet, their value is the value of the sub-packet.1
are product packets - their value is the result of multiplying together the values of their sub-packets. If they only have a single sub-packet, their value is the value of the sub-packet.2
are minimum packets - their value is the minimum of the values of their sub-packets.3
are maximum packets - their value is the maximum of the values of their sub-packets.5
are greater than packets - their value is 1 if the value of the first sub-packet is greater than the value of the second sub-packet; otherwise, their value is 0. These packets always have exactly two sub-packets.6
are less than packets - their value is 1 if the value of the first sub-packet is less than the value of the second sub-packet; otherwise, their value is 0. These packets always have exactly two sub-packets.7
are equal to packets - their value is 1 if the value of the first sub-packet is equal to the value of the second sub-packet; otherwise, their value is 0. These packets always have exactly two sub-packets.Using these rules, you can now work out the value of the outermost packet in your BITS transmission.
For example:
C200B40A82
finds the sum of 1
and 2
, resulting in the value 3
.04005AC33890
finds the product of 6
and 9
, resulting in the value 54
.880086C3E88112
finds the minimum of 7
, 8
, and 9
, resulting in the value 7
.CE00C43D881120
finds the maximum of 7
, 8
, and 9
, resulting in the value 9
.D8005AC2A8F0
produces 1
, because 5
is less than 15
.F600BC2D8F
produces 0
, because 5
is not greater than 15
.9C005AC2F8F0
produces 0
, because 5
is not equal to 15
.9C0141080250320F1802104A08
produces 1
, because \(1 + 3 = 2 + 2\).What do you get if you evaluate the expression represented by your hexadecimal-encoded BITS transmission? Determine this in the following way:
Write a function decode
that takes the pathname (String
) of a text file containing a hexadecimal-encoded BITS transmission. The function must return the evaluation (int
) the expression represented by the transmission.
The function must be declared statically in the class Submission.
In this interactive session we assume the text files transmission01.txt
1, transmission02.txt
2, transmission03.txt
3, transmission04.txt
4 and transmission05.txt
5 to be located in the current directory.
> Submission.decode("transmission01.txt")
15
> Submission.decode("transmission02.txt")
46
> Submission.decode("transmission03.txt")
46
> Submission.decode("transmission04.txt")
54
> Submission.decode("transmission05.txt")
10637009915279