The Structured Text file is the logic, Instructions.txt tells us the door order and where the flag will be. Tricky part was opening door 4 after door 0 as the coils setup would trigger an open for 3 first.
You probably dont need reset_coils()
, but it helped debugging.
❯ python3 client.py
connected
_| resetting all sensors
|_-- processing door 3, [4, 3]
_| current door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| resetting all sensors
_| writing door 3 coils
_| coils for door 3 written, waiting for door to open
_| (waiting for door 3 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 3 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 3 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| door 3 opened! resetting
_| resetting all sensors
_| coils reset, waiting for door 3 to close
_| door 3 closed
|_-- processing door 0, [4, 0]
_| current door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| resetting all sensors
_| writing door 0 coils
_| coils for door 0 written, waiting for door to open
_| (waiting for door 0 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 0 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 0 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 0 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| door 0 opened! resetting
_| resetting all sensors
_| coils reset, waiting for door 0 to close
_| door 0 closed
|_-- processing door 4, [4, 4]
_| current door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| resetting all sensors
_| writing door 4 coils
_| coils for door 4 written, waiting for door to open
_| (waiting for door 4 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 4 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 4 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 4 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| door 4 opened! resetting
_| resetting all sensors
_| coils reset, waiting for door 4 to close
_| door 4 closed
|_-- processing door 1, [4, 1]
_| current door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| resetting all sensors
_| writing door 1 coils
_| coils for door 1 written, waiting for door to open
_| (waiting for door 1 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 1 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 1 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| door 1 opened! resetting
_| resetting all sensors
_| coils reset, waiting for door 1 to close
_| door 1 closed
|_-- processing door 2, [4, 2]
_| current door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| resetting all sensors
_| writing door 2 coils
_| coils for door 2 written, waiting for door to open
_| (waiting for door 2 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 2 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 2 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 2 open) door_status={0: False, 1: False, 2: False, 3: False, 4: False}
_| (waiting for door 2 open) door_status={0: False, 1: False, 2: True, 3: False, 4: False}
_| door 2 opened! resetting
_| resetting all sensors
_| coils reset, waiting for door 2 to close
_| door 2 closed
_| all doors opened, reading flag from holding registers
flag: HTB{m15510n_c0mp1373d_734m_8234ch3d_7h3_f4c1117y!394}