1186 : 银行的OCR
Time Limit: 1 Sec Memory Limit: 128 MB Submitted: 13 Solved: 4Description
一家银行希望采用光学字符识别系统自动读出支票中的账号,组成账号的每个数字都是 7 段数位体。一种图象处理软件可以将组成数字的横段和竖段分别转换成 ASCII 码中的竖线‘|
’和下划线‘_
’。如果显示正常,则 10 个数字的序列应该具有如下形态:
支票中的账号有 9 位数字,但由于光学扫描装置可能会漏检某些数位段,所以 9 位数字未必都能正确地被扫描转换成对应的 ‘|
’ ’_
’字符形式。为了容错和纠错,对于一个 9 位账号 d9d8⋯d1,设定其校验条件为:
$$ \sum_{i=1}^{9}i\times d_{i} \mod 11 = 0 $$
你需要设计一个程序,从扫描转换的结果推测原始的账号,假定: 1. 若经扫描转换的某组数字全部保存了正确的数字形式而且满足校验条件,则该组数字就是原始的账号; 2. 9 位数中最多只有一位在扫描转换中失去正确的数字形式,即该数字的某些‘|
’或‘‘_
’’被扫描为‘.
’; 3. 扫描转换不会引入额外的数位段。
当检测到数位段时,扫描转换程序将输出 ASCII 码的‘|
’或’_
’;当检测到空白区域时,将输出‘.
’。比如下面的扫描转换结果:
...._.._....._.._.._.._.._.
..|._|._||_||_.|_...||_||_| ..|._.._|..|._||_|..||_|._|
正确的推测值是 123456789,其中的第 2 位经扫描转换后失去正确的数字形式,既像 2 又像 3,如果令其为 3 则与校验条件冲突;其中的第 5 位虽然保存了正确的数字形式,但既可能是 5 也可能是 6,但如果令其为 6,则与上面的假定 2 冲突。
Input
输入文件中包含一组用 ASCII 字符表示的账号。每个账号占 3 行,每位数字占 3 列,每行 27个字符。没有空行,也没有空格。不超过500组数据。
Output
每行代表一个账号的推测值。账号的顺序和数目与输入文件一致。如果没有找到合理值,则输出‘failure
’;如果找到多个合理的推测,则输出‘ambiguous
’。
Sample
...._.._....._.._.._.._.._. ..|._|._||_||_.|_...||_||_| ..|._.._|..|._||_|..||_|._| ...._.._.._.._.._.._....._. |_||_||.||.||_...|..|..||_. ..|._||_||_||_|..|..|..|._| ._.._.._.._.._.._.._.._.._. |_||_||_||_||_||_||_||_||_| |_||_||_||_||_||_||_||_||_| ._....._.._.._.._.._.._.._. |_|..||_||_||_||_||_||_||_| |_|..||_||_||_||_||_||_||_|
123456789 ambiguous failure 878888888