Files
furtest.fr/content/writeups/2025/fcsc/hardware/mechanical_display/solve.py

30 lines
890 B
Python
Executable File

#!/usr/bin/python3
def closest_number(target):
numbers = list(range(60, 241, 10))
target += 2
closest = min(numbers, key=lambda x: abs(x - target))
return closest
if __name__ == "__main__":
flag = ""
values = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'F', 'S', '{', '}', '_']
with open('mechanical-display.vcd', 'r') as file:
data = [line.strip() for line in file][11:]
last = -1
first = data[1].split()[0][1:]
second = data[2].split()[0][1:]
for i in range(3, len(data) - 1, 2):
first = data[i].split()[0][1:]
second = data[i+1].split()[0][1:]
diff = int(second) - int(first)
if (diff - 7) > last or (diff + 7) < last:
last = diff
val = closest_number(diff)
char = str(values[int(val/10 - 6)])
flag += char
print(flag)