#P1888. Crossword Answers
Crossword Answers
描述
填字游戏由一个黑白方格组成的矩形网格和两个定义(或描述)列表组成。
一个定义列表是用于从左到右横向填入白色方格的"单词",另一个列表是用于从上到下纵向填入白色方格的单词。(单词是字母字符的序列。)
为了解决填字游戏,需要将与定义相对应的单词写在网格的白色方格上。
定义通过"合格"白色方格上的连续整数与矩形网格对应。左侧或上方紧邻黑色方格的白色方格是"合格"的。左侧或上方没有方格的白色方格也是"合格"的。其他方格不编号。第一行的所有方格都编号。
编号从1开始,连续地跨越第一行的白色方格,然后跨越第二行的合格白色方格,接着跨越第三行的合格白色方格,依此类推,跨越谜题的所有其余行。下图说明了一个带有适当编号的矩形填字游戏网格。
一个定义的"横向"单词写在一行的白色方格序列上,从一个编号的方格开始,该方格不跟随同一行中的另一个白色方格。该单词的白色方格序列跨越编号方格所在的行,在该行中下一个黑色方格之前或该行最右侧的方格处结束。
一个定义的"纵向"单词写在一列的白色方格序列上,从一个编号的方格开始,该方格不跟随同一列中的另一个白色方格。该单词的白色方格序列向下跨越编号方格所在的列,在该列中下一个黑色方格之前或该列最底部的方格处结束。每个正确解决的谜题中的白色方格都包含一个字母。
你必须编写一个程序,将几个已解决的填字游戏作为输入,并输出构成解决方案的横向和纵向单词列表。
输入
输入中的每个谜题解决方案都以包含两个整数和(且)的行开始,其中(第一个数字)是谜题中的行数,(第二个数字)是列数。接下来的行输入每行包含个字符(不包括行尾),描述解决方案。这些个字符中的每一个都是单词的一部分的字母字符,或者是字符"*",表示黑色方格。输入的结束由仅包含数字0的行指示。
输出
每个谜题的输出包括谜题的标识符(puzzle #1、puzzle #2等)以及横向单词列表,后跟纵向单词列表。每个列表中的单词必须按其对应定义的编号递增顺序每行输出一个。横向单词列表的标题是"Across"。纵向单词列表的标题是"Down"。在列表为空的情况下(网格中的所有方格都是黑色的),Across和Down标题仍应出现。
输入数据 1
2 2
AT
*O
6 7
AIM*DEN
*ME*ONE
UPON*TO
SO*ERIN
*SA*OR*
IES*DEA
0
输出数据 1
puzzle #1:
Across
1.AT
3.O
Down
1.A
2.TO
puzzle #2:
Across
1.AIM
4.DEN
7.ME
8.ONE
9.UPON
11.TO
12.SO
13.ERIN
15.SA
17.OR
18.IES
19.DEA
Down
1.A
2.IMPOSE
3.MEO
4.DO
5.ENTIRE
6.NEON
9.US
10.NE
14.ROD
16.AS
18.I
20.A