Декодирование перфокарты
Помогите пожалуйста, декодировать это. Уже второй день мучусь. Если не сложно, опишите как вы это сделали 
Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
Я взял картинку из Википедии, быстренько состряпал программку на Питоне, вручную ввёл данные.
Ну и получил даже что-то осмысленное:
FLAG-DB-INDEX:3801T,VAL:FLAG-B49301CDB-831ABDDFA628AC31.
Программка:
template = """
|&-0123456789ABCDEFGHIJKLMNOPQR/STUVWXYZ:#@'="[.<(+|]$*);^\,%_>?
12|X XXXXXXXXX XXXXXX
11| X XXXXXXXXX XXXXXX
0| X XXXXXXXXX XXXXXX
1| X X X X
2| X X X X X X X X
3| X X X X X X X X
4| X X X X X X X X
5| X X X X X X X X
6| X X X X X X X X
7| X X X X X X X X
8| X X X X XXXXXXXXXXXXXXXXXXXXXXXX
9| X X X X
"""
# мне лень было перевбивать сразу в нужном мне виде, так что я "распознал"
# то что мне было нужно из текстовой "картинки", и преобразовал в словарь,
# чтобы было легче искать
bits = [None]*13
for line in template.split("\n"):
line = line.strip()
if line:
n, data = line.split("|",1)
n = n.strip()
if not n:
symbols = data
else:
bits[int(n)] = data
codes = {}
for i,ch in enumerate(symbols):
for b in range(13):
if bits[b] and i<len(bits[b]) and bits[b][i] == "X":
codes[ch] = codes.get(ch, []) + [b]
#print(codes)
decodes = {tuple(b):c for c,b in codes.items()}
#print(decodes)
# конец распознавания "картинки"
# данные с перфокарты - номера пробитых бит в каждом столбце
card = (
(6,12),
(3,11),
(1,12),
(7,12),
(11,),
(4,12),
(2,12),
(11,),
(9,12),
(5,11),
(4,12),
(5,12),
(0,7),
(2,8),
(3,),
(8,),
(0,),
(1,),
(0,3),
(0,3,8),
(0,5), #20 столбец
(1,12),
(3,11),
(2,8),
(6,12),
(3,11),
(1,12),
(7,12),
(11,),
(2,12),
(4,),
(9,),
(3,),
(0,),
(1,), #35
(3,12),
(4,12),
(2,12),
(11,),
(8,),
(3,),
(1,), #42
(1,12),
(2,12),
(4,12),
(4,12),
(6,12),
(1,12),
(6,),
(2,), #50
(8,),
(1,12),
(3,12),
(3,),
(1,), #55
)
# декодируем по таблице из картинки
res = [decodes[x] if x in decodes else "?" for x in card]
print("".join(res))