你的好朋友 Marta 最近得到了梦寐以求的工作,在当地一家历史博物馆的藏品部门工作。 他们知道你热爱编程,便向你倾诉了工作中遇到的一个难题:博物馆即将举办一场关于计算机历史的展览。 当地一所大学的数学系捐赠了几箱历史打印资料,但考虑到这些文件保存状况很差,大家决定把上面的文本数字化。 不过,那所大学的旧打印机在表示文本的方式上有一些古怪之处,你的朋友需要你的帮助才能顺利提取出数据。
光学字符识别(OCR)是一种把文本图像转换成机器可读文本的软件。
给定一个由字符组成的网格,表示若干个数字,请把这个网格转换成由数字组成的字符串。
如果网格包含多行单元格,输出中的各行之间应该用","分隔。
"|")、下划线("_")和空格(" ")绘制。"?"。下面的输入(不含注释)会被转换成"1234567890"。
_ _ _ _ _ _ _ _ #
| _| _||_||_ |_ ||_||_|| | # Decimal numbers.
||_ _| | _||_| ||_| _||_| #
# The fourth line is always blank,
下面的输入会被转换成"123,456,789"。
_ _
| _| _|
||_ _|
_ _
|_||_ |_
| _||_|
_ _ _
||_||_|
||_| _|
按照说明第 1 步的描述,定义一个 recognizeDigit 函数,只不过要让它能识别 0 到 9 这全部十个数字。 形参和返回值随你定,但要让它能当作第 2 步的子程序来用。
第 2 步要定义
func Recognize(string) []string
并用 recognizeDigit 实现它。
这里测试的输入字符串,每一行的开头都有一个 \n,而最后一行的末尾没有 \n。(这样便于写出易读的原始字符串字面量。)
加分项:优雅地处理格式有误的数据。
不完整的单元格该怎么办?
丢掉它?
用空格补齐?
还是用 "?" 字符报告出来?
如果第一个字符不是 \n,又该怎么办?