52 48 Bytes
./@$0<$
21\./01
..>..!\
@
.<..<\
20//\11
@01$00@
Probieren Sie es online!
Testfahrer
Erläuterung
In Klein beginnt die IP in der oberen linken Ecke und geht nach rechts. Der erste Schritt, den ich von meinem Programm wollte, bestand darin, die IP von der Programmspitze zu entfernen, um das erste und dritte Bit zu bestimmen. Die IP würde das Programm abhängig von der Topologie wie folgt erneut eingeben:
^
I|P
./.....
201, 211 -->.......<-- 100, 110
.......
.......
.......
200, 210 -->.......<-- 101, 111
.......
^ ^
| |
000 001
010 011
Ich habe beschlossen, dass mein Programm das dritte Bit der Topologie vor dem zweiten Bit aufzeichnet, sie aber $
vor dem Ende austauscht (verwendet ). Zu diesem Zweck habe ich Code hinzugefügt, um das erste und dritte Bit jeder Topologie an den oben beschriebenen Eintrittspunkten des IP zu verschieben.
./.....
21...01
.......
.......
.......
20...11
.0...0.
Als nächstes habe ich mich auf die Topologien mit 1
oder 2
als erstes Bit konzentriert. Ich entschied mich, sie neu zu kombinieren und sie auf der Seite loszuschicken, die nicht mit der Nordseite verbunden war, damit ich ihr zweites Bit bestimmen konnte.
./.....
21\./01
..>....--> 200, 201, 210, 211
.......
100, 101, 110, 111 <--....<..
20/.\11
.0...0.
^ ^
| |
/ \
110 100
111 101
210 200
211 201
Praktischerweise gruppierte dies die Topologien nach ihrem zweiten Bit neu, so dass ich das auf den Stapel schieben konnte.
./.....
21\./01
..>....
.......
....<..
20/.\11
.01.00.
Danach musste ich nur noch das zweite und dritte Bit tauschen und das Programm beenden.
./.$...
21\./01
..>....
@......
....<..
20//\11
.01$00.
Nachdem die Topologien mit 1
oder 2
als erstes funktionierten, konnte ich mich darauf konzentrieren, die Topologien mit 0
der richtigen Ausgabe zu versehen. Der erste Schritt bestand darin, sie neu zu kombinieren, damit sie basierend auf ihrem zweiten Bit in zwei Gruppen aufgeteilt werden konnten.
./.$...
21\./01
..>....<-- 010, 011
@......
000, 001, 010, 011 <--.<..<<.<-- 000, 001
20//\11
.01$00.
Ich habe mich zuerst auf diese Topologien konzentriert und 1
als zweites Bit. Diese stellten eine Herausforderung dar, da sich die IP auf einer Leitung befand, die bereits von den Topologien 2
als erstes Bit verwendet wurde. Da es schwierig wäre, mehr als einen Befehl in diese Zeile einzufügen (ein einzelner Befehl kann mit dem !
Befehl übersprungen werden ) und mir der Platz insgesamt ausgeht, habe ich beschlossen, die IP von dieser Zeile umzuleiten und einen vorhandenen 1
Befehl wiederzuverwenden das zweite Bit drücken.
./.$...
21\./01
..>..!\
@......
.<..<<.
20//\11
.01$00.
Nun war für die Topologien mit 1
ihrem zweiten Bit nur noch die Reihenfolge des zweiten und dritten Bits festzulegen und zu beenden.
^
|
./.$..$
21\./01
..>..!\
@......
.<..<<.
20//\11
@01$00@
^ ^
| |
011 010
Zuletzt blieben die Topologien mit 0
als zweitem Bit. Es war nicht mehr viel Speicherplatz im Programm vorhanden, und der größte nicht genutzte Speicherplatz befand sich in der obersten Zeile. Daher habe ich dort die IP für die Topologien 0
als zweites Bit umgeleitet .
./.$.<$
21\./01
..>..!\
@......
.<..<\.
20//\11
@01$00@
Ich musste immer noch auf 0
das zweite Bit drängen und die Reihenfolge des zweiten und dritten Bits festlegen sowie das Programm beenden. Glücklicherweise konnte ich eine vorhandene $
Anweisung wiederverwenden , sodass die Anweisungen 0
und @
in die verbleibenden Bereiche passen.
./@$0<$
21\./01
..>..!\
@......
.<..<\.
20//\11
@01$00@
Schließlich können die Nops von den Zeilenenden entfernt werden, um das endgültige Programm zu erhalten.