Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:java:aoc:aoc2021:day24:start [26.12.2021 16:31] – [Was passiert also?] sbel | faecher:informatik:oberstufe:java:aoc:aoc2021:day24:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Tag 24: Arithmetic Logic Unit ====== | ||
- | |||
- | ===== Untersuchung des Problems ===== | ||
- | |||
- | Zunächst kann man einen Parser implementieren, | ||
- | |||
- | Man wird sehr wahrscheinlich erkennen, dass der Wert des z-Registers - scheinbar unabhängig von der eingegebenen Modellnummer - immer größer wird. | ||
- | |||
- | Der Versuch, alle denkbaren Modellnummern in der so geschaffenen ALU durch das Programm prüfen zu lassen, schlägt (zumindest mit Java) fehl, da die Eingabemenge mit 10< | ||
- | |||
- | ===== Reverse Engeneering ===== | ||
- | |||
- | Man sollte sich also als nächstes den als Puzzle-Input gegebenen Code ansehen. Bei einer ersten Analyse fällt auf, dass die 14 Segmente, die jeweils von einem '' | ||
- | < | ||
- | Variante A | ||
- | |||
- | 1 inp w inp w | ||
- | 2 mul x 0 mul x 0 | ||
- | 3 add x z add x z | ||
- | 4 mod x 26 mod x 26 | ||
- | 5 div z 1 div z 26 | ||
- | 6 add x 11 add x -5 (ADD_TO_X) | ||
- | 7 eql x w eql x w | ||
- | 8 eql x 0 eql x 0 | ||
- | 9 mul y 0 mul y 0 | ||
- | 10 add y 25 add y 25 | ||
- | 11 mul y x mul y x | ||
- | 12 add y 1 add y 1 | ||
- | 13 mul z y mul z y | ||
- | 14 mul y 0 mul y 0 | ||
- | 15 add y w add y w | ||
- | 16 add y 6 add y 12 (ADD_TO_Y) | ||
- | 17 mul y x mul y x | ||
- | 18 add z y add z y | ||
- | </ | ||
- | |||
- | ==== Betrachtung der Unterschiede und Auswirkungen ==== | ||
- | |||
- | |||
- | * In Zeile 5 taucht wahlweise '' | ||
- | * In Zeile 6 wird mit '' | ||
- | * (1) '' | ||
- | * (2) '' | ||
- | * In Zeile 16 unterscheiden sich die Anweisungen in der Zahl, die hier mit dem Befehl '' | ||
- | * Zum genaueren Verständnis ist außerdem die Bedeutung von Zeile 13 interessant: | ||
- | * Wenn '' | ||
- | * Wenn in seltenen Fällen '' | ||
- | |||
- | Interessant sind also vor allem die Fälle, bei denen in Zeile 5 '' | ||
- | |||
- | |||
- | |||
- | ==== Was passiert also? ==== | ||
- | |||
- | Das Register '' | ||
- | |||
- | === Standardfall === | ||
- | |||
- | ('' | ||
- | < | ||
- | Ziffer(w) | ||
- | Start | ||
- | 3 | ||
- | 2 | ||
- | 4 | ||
- | .... | ||
- | </ | ||
- | |||
- | === Variante B - 1 === | ||