Прочитать число из шифра
На вход всегда подаются только 4 строки - это графический образ зашифрованного числа, каждая цифра которого изображена символами ('#' и '.') одной из представленных ниже матриц:

Например, если на вход поданы такие 4 строки:
,
то на выход нужно подать одну строку с числом 79098654321.
Итак, в данной задаче на выход нужно подать число, распознанное из графического образа. Число может быть в диапазоне [0; 1000000000000].
sp = [['##','##','##','##'],
['.#','##','.#','.#'],
['##','.#','#.','##'],
['##','.#','.#','##'],
['##','##','.#','.#'],
['##','#.','.#','##'],
['.#','#.','##','##'],
['##','.#','#.','#.'],
['##','..','##','##'],
['##','##','.#','#.']]
tmp = []
text = []
for i in range(4):
text = input()
tmp.append([text[i:i+2] for i in range(0, len(text), 2)])
Начал так, закончить не могу. Подскажите пожалуйсто. Не могу понять как входящие данные выстроить в нужном порядке?
Ответы (2 шт):
например можно такой код сделать:
text = ['.###', '##.#', '.##.', '.##.'] # пример числа 17
dictionary = ['########', '.###.#.#', '##.##.##', '##.#.###', '####.#.#', '###..###', '.##.####', '##.##.#.', '##..####', '####.##.']
res = ''
for i in range(0, len(text[0]), 2):
figure = text[0][i:i+2] + text[1][i:i+2] + text[2][i:i+2] + text[3][i:i+2]
if figure not in dictionary:
res += '*'
else:
res += str(dictionary.index(figure))
print(res)
в переменную text я занес 2 числа, но если надо запросить с клавиатуры, то надо сделать так:
text = [input(), input(), input(), input()]
Ну и если есть желание сделать все в 1 строку:
res = ''.join(str(dictionary.index(''.join(text[j][i:i+2] for j in range(4)))) if ''.join(text[j][i:i+2] for j in range(4)) in dictionary else '*' for i in range(0, len(text[0]), 2))
А если гарантированно нет левых символов вне словаря (которые заменяются у меня на '*'), то код можно еще упростить:
res = ''.join(str(dictionary.index(''.join(text[j][i:i+2] for j in range(4)))) for i in range(0, len(text[0]), 2))
у меня так получилось, вроде работает, попробуйте:
sp = [['##','##','##','##'],
['.#','##','.#','.#'],
['##','.#','#.','##'],
['##','.#','.#','##'],
['##','##','.#','.#'],
['##','#.','.#','##'],
['.#','#.','##','##'],
['##','.#','#.','#.'],
['##','..','##','##'],
['##','##','.#','#.']]
text = ['##########',
'.#######..',
'#..###.###',
'#.#.###.##']
from textwrap import wrap
w = [wrap(i,2) for i in text]
res = ''.join(str(sp.index(list(j))) for j in zip(*w)) # '79098'