1
计算常见的生活游戏模式
此处的任务是从Golly .rle或纯文本文件(您的选择)中读取文件(提供您的文件名)(在STDIN上或作为命令行参数),并在其中编码的网格中识别和计数通用模式。 或者,您可以选择直接通过STDIN提供文件的内容。 您的程序应该至少能够识别和区分15种最常见的严格静物,5种最常见的振荡器以及滑翔机。 应该识别出这些振荡器的所有相位,以及滑翔机的所有四个相位。 它应该输出一个列表,其中包含每个图案的最终计数,并在单独的行上包含每个图案的名称和数量。您的程序可能会将所有这些模式都包含在输出列表中,或者仅将其中至少一个找到。 作为计数中的其他图案的一部分的图案不应该计数。(例如,信标的8单元阶段也不应计为两个街区,并且船舶领带也不应计为两艘船) 您可以假定输入已经稳定并且不包含上述集合中没有的任何模式。您可能还假设输入网格将适合1024x1024框。 这是代码高尔夫球,因此最短的程序为准。 RLE文件格式说明 RLE文件包含游程长度编码的生命网格。以开头的所有行#均为注释,应忽略。 第一行非空,非注释行的格式为x=<width>,y=<height>,rule=<rule>。就此任务而言,规则将始终为B3/S23。它可能包含在处理该行之前应删除的空格(当然,根本不需要处理此行。) 第一行之后的非注释行应视为单个字符串。该名称只能由十进制数字,字符$,,b和o和换行符组成,并且不能以数字结尾。换行符将被忽略,但是您可以假定换行符不会中断数字字符串。 这可以由单个终止!。 b代表一个死单元,o代表一个活单元,并$代表一行的结尾。任何十进制数字表示以下符号将被视为重复多次。 纯文本模式编码 另一个选择是以此处描述的另一种纯文本格式读取模式。在此编码中,关闭的单元格用连字符表示,打开的单元格用大写字母Os表示,换行符分隔行。 您可以假定所有非注释行都将用连字符填充到相等的长度。 以开头的行!是注释,将被忽略。 一些测试案例 RLE: #This is a comment x = 35, y = 16, rule = B3/S23 bo$2o$obo5$22bo$22bo$22bo2$18b3o3b3o2$22bo$22bo10b2o$22bo10b2o! 纯文本: !This is a comment -O--------------------------------- OO--------------------------------- O-O-------------------------------- ----------------------------------- ----------------------------------- ----------------------------------- ----------------------------------- ----------------------O------------ ----------------------O------------ ----------------------O------------ …