Декодирование перфокарты

Помогите пожалуйста, декодировать это. Уже второй день мучусь. Если не сложно, опишите как вы это сделали введите сюда описание изображения


Ответы (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))
→ Ссылка