24 december en meteen de laatste kans om de Kerstman te redden! De elfen denken de goede man inmiddels gelokaliseerd te hebben, maar beseffen dat hun lange zoektocht ertoe geleid heeft dat de brandstofvoorraad die je in de eerste puzzel voorzien had, inmiddels opgebruikt is. Jouw taak bestaat eruit om te berekenen hoeveel OREs, een ruw materiaal dat door de elfen verzameld kan worden op de planeet Mars, voorzien moeten worden om één eenheid brandstof te produceren. Hiertoe kan er gebruik gemaakt worden van een aantal chemische reacties, die een bepaalde hoeveelheid van een of meerdere stoffen omzet in een andere. Beschouw bijvoorbeeld de volgende reacties:

10 ORE => 10 A
1 ORE => 1 B
7 A, 1 B => 1 C
7 A, 1 C => 1 D
7 A, 1 D => 1 E
7 A, 1 E => 1 FUEL

In dit geval kan één ORE omgezet worden in één eenheid van de stof B, of tien OREs in tien eenheden van de stof A. Wanneer we alle reacties in beschouwing nemen, komen we tot de conclusie dat er 31 OREs nodig zijn om één eenheid brandstof (FUEL) te produceren:

30 ORE => 30 A
1 ORE => 1 B
7 A, 1 B => 1 C
7 A, 1 C => 1 D
7 A, 1 D => 1 E
7 A, 1 E => 1 FUEL

Als restproduct blijven er nog twee A over, waar we verder niks mee hoeven te doen. Een ander voorbeeld is het volgende:

9 ORE => 2 A
8 ORE => 3 B
7 ORE => 5 C
3 A, 4 B => 1 AB
5 B, 7 C => 1 BC
4 C, 1 A => 1 CA
2 AB, 3 BC, 4 CA => 1 FUEL

In dit geval hebben we 165 OREs nodig om één eenheid brandstof te produceren:

45 ORE => 10 A
64 ORE => 24 B
56 ORE => 40 C
6 A, 8 B => 2 AB
15 B, 21 C => 3 BC
16 C, 4 A => 4 CA
2 AB, 3 BC, 4 CA => 1 FUEL

Als restproduct blijven er dan één B en drie C over. Gevraagd wordt nu om een functie omzetting te implementeren, die als input een lijst van string heeft (de chemische reacties) en als output een geheel getal teruggeeft (het minimum aantal OREs nodig om één eenheid brandstof te produceren). Bijvoorbeeld:

omzetting(["10 ORE => 10 A", "1 ORE => 1 B", "7 A, 1 B => 1 C", "7 A, 1 C => 1 D", "7 A, 1 D => 1 E", "7 A, 1 E => 1 FUEL"]) # 31