此处的任务是从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------------
-----------------------------------
------------------OOO---OOO--------
-----------------------------------
----------------------O------------
----------------------O----------OO
----------------------O----------OO
结果:
Glider 1
Blinker 4
Block 1
RLE:
x = 27, y = 15, rule = B3/S23
5b2o$5b2o9$11bo$o9bobo$o9bobo$o10bo12b3o!
#Here's a comment at the end
纯文本:
-----OO--------------------
-----OO--------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
-----------O---------------
O---------O-O--------------
O---------O-O--------------
O----------O------------OOO
!Here's a comment at the end
结果:
Block 1
Blinker 2
Beehive 1
RLE:
#You may have multiple comments
#As shown here
x = 13, y = 11, rule = B3/S23
2o$2o2$12bo$12bo$12bo$2b2o$2b2o4b2o$7bo2bo$7bobo$8bo!
纯文本:
!You may have multiple comments
!As shown here
OO-----------
OO-----------
-------------
------------O
------------O
------------O
--OO---------
--OO----OO---
-------O--O--
-------O-O---
--------O----
结果:
Block 2
Blinker 1
Loaf 1
RLE:
# Pentadecathlon
# Discovered by John Conway
# www.conwaylife.com/wiki/index.php?title=Pentadecathlon
x = 10, y = 3, rule = B3/S23
2bo4bo2b$2ob4ob2o$2bo4bo!
纯文本:
! Pentadecathlon
! Discovered by John Conway
! www.conwaylife.com/wiki/index.php?title=Pentadecathlon
--O----O--
OO-OOOO-OO
--O----O--
结果:
Pentadecathlon 1
奖金
如果您同时支持两种输入格式(使用文件扩展名[ .rle
用于rle文件和.cells
纯文本-未定义其他扩展名的读取方式]或命令行标志来区分它们),则可以从分数中减去5%。
OOO.OO\n....OO