Nu je de structuur van de bericht kan decoderen, kan je ook de waarde berekenen van de expressie die ze voorstellen.
Letterlijke waarden (type ID 4
) stellen één enkel getal voor zoals we hiervoor reeds beschreven. De overige type IDs zijn interessanter:
0
zijn som-pakketten - hun waarde is de som van de waarden van alle deelpakketten. Als ze maar één deelpakket hebben, dan is hun waarde de waarde van het deelpakket.1
zijn product-pakketten - hun waarde is het product van de waarden van alle deelpakketten. Als ze maar één deelpakket hebben, dan is hun waarde de waarde van het deelpakket.2
zijn minimum-pakketten - hun waarde is het minimum van de waarden van hun deelpakketten.3
zijn maximum-pakketten - hun waarde is het maximum van de waarden van hun deelpakketten.5
zijn groter dan-pakketten - hun waarde is 1 als de waarde van het eerste deelpakket groter is dan de waarde van het tweede deelpakket, anders is hun waarde 0. Dit soort pakketten hebben altijd exact twee deelpakketten.6
zijn kleiner dan-pakketten - hun waarde is 1 als de waarde van het eerste deelpakket kleiner is dan de waarde van het tweede deelpakket, anders is hun waarde 0. Dit soort pakketten hebben altijd exact twee deelpakketten.7
zijn gelijk aan-pakketten - hun waarde is 1 als de waarde van het eerste deelpakket gelijk is aan de waarde van het tweede deelpakket, anders is hun waarde 0. Dit soort pakketten hebben altijd exact twee deelpakketten.Op basis van deze regels kan je nu de waarde van het buitenste pakket in je BITS bericht bepalen.
Bijvoorbeeld:
C200B40A82
berekent de som van 1
en 2
, met als uitkomst de waarde 3
.04005AC33890
berekent het product van 6
en 9
, met als uitkomst de waarde 54
.880086C3E88112
berekent het minimum van 7
, 8
, en 9
, met als uitkomst de waarde 7
.CE00C43D881120
berekent het maximum van 7
, 8
, en 9
, met als uitkomst de waarde 9
.D8005AC2A8F0
heeft 1
als uitkomt, omdat 5
kleiner is dan 15
.F600BC2D8F
heeft 0
als uitkomt, omdat 5
niet groter is dan 15
.9C005AC2F8F0
heeft 0
als uitkomt, omdat 5
niet gelijk is aan 15
.9C0141080250320F1802104A08
heeft 1
als uitkomt, omdat \(1 + 3 = 2 + 2\).Wat is de uitkomst van de uitdrukking die voorgesteld wordt door een hexadecimaal gecodeerd BITS bericht? Bepaal dit op de volgende manier:
decode
waaraan de padnaam (String
) moet doorgegeven worden van een tekstbestand met een hexadecimaal gecodeerd BITS bericht. De functie moet de uitkomst (Int
) teruggeven van de uitdrukking die door dit bericht voorgesteld wordt.In deze interactieve sessie gaan we ervan uit dat de tekstbestanden transmission01.txt
1, transmission02.txt
2, transmission03.txt
3, transmission04.txt
4 en transmission05.txt
5 zich in de huidige directory bevinden.
> decode("transmission01.txt")
15
> decode("transmission02.txt")
46
> decode("transmission03.txt")
46
> decode("transmission04.txt")
54
> decode("transmission05.txt")
10637009915279