Il compito qui è leggere da un .rle
file Golly o in testo semplice (a scelta) il cui nome file è fornito (su STDIN o come argomento della riga di comando) e identificare e contare i modelli comuni nella griglia in esso codificata.
In alternativa, è possibile scegliere di disporre invece dei contenuti del file direttamente su STDIN.
Il tuo programma dovrebbe essere in grado di identificare e distinguere almeno le quindici nature morte più comuni e i cinque oscillatori più comuni , oltre agli alianti .
Tutte le fasi di questi oscillatori dovrebbero essere riconosciute, così come tutte e quattro le fasi dell'aliante.
Dovrebbe essere visualizzato un elenco contenente il conteggio finale di ogni modello, con il nome e la quantità di ciascun modello su una riga separata. Il programma può includere nell'elenco di output tutti questi schemi o solo quelli di cui è stato trovato almeno uno.
I pattern che fanno parte di altri pattern contati non devono essere conteggiati. (ad esempio, la fase a 8 celle di un faro non deve essere conteggiata come due blocchi e un legame di nave non deve essere conteggiato come due navi)
Si può presumere che l'input si sia già stabilizzato e non contenga pattern non inclusi nel set di cui sopra. Si può anche supporre che la griglia di input si adatti a una casella 1024x1024.
Questo è code-golf , quindi vince il programma più breve.
Descrizione del formato di file RLE
Un file RLE contiene una griglia di vita codificata di lunghezza di esecuzione. Tutte le righe che iniziano con #
sono commenti e devono essere ignorate.
La prima riga non vuota, non commentata è del modulo x=<width>,y=<height>,rule=<rule>
. Ai fini di questa attività, la regola sarà sempre B3/S23
. Può contenere spazi che devono essere rimossi prima di elaborare questa linea (ovviamente, non è necessario elaborare questa linea).
Le righe senza commento dopo la prima devono essere trattate come una singola stringa. Questo dovrebbe consistere solo di cifre decimali, i personaggi $
, b
e o
, e interruzioni di riga, e non finirà con una cifra. Le interruzioni di riga devono essere ignorate, ma si può presumere che le interruzioni di riga non interrompano le stringhe di cifre.
Questo può essere terminato da un singolo !
.
b
rappresenta una cellula morta, o
rappresenta una cellula viva e $
rappresenta la fine di una riga. Qualsiasi numero decimale indica che il seguente simbolo deve essere trattato come ripetuto più volte.
Codifica del modello in chiaro
L'altra opzione è leggere il modello in un altro formato di testo normale qui descritto . In questa codifica, le celle off sono rappresentate con trattini e le celle sono rappresentate con O maiuscole, con le nuove linee che separano le righe.
Si può presumere che tutte le righe senza commento verranno riempite alla stessa lunghezza dei trattini.
Le righe che iniziano con !
sono commenti e devono essere ignorate.
Alcuni casi di test
RLE:
#This is a comment
x = 35, y = 16, rule = B3/S23
bo$2o$obo5$22bo$22bo$22bo2$18b3o3b3o2$22bo$22bo10b2o$22bo10b2o!
plaintext:
!This is a comment
-O---------------------------------
OO---------------------------------
O-O--------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
----------------------O------------
----------------------O------------
----------------------O------------
-----------------------------------
------------------OOO---OOO--------
-----------------------------------
----------------------O------------
----------------------O----------OO
----------------------O----------OO
risultati:
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
plaintext:
-----OO--------------------
-----OO--------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
---------------------------
-----------O---------------
O---------O-O--------------
O---------O-O--------------
O----------O------------OOO
!Here's a comment at the end
risultati:
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!
plaintext:
!You may have multiple comments
!As shown here
OO-----------
OO-----------
-------------
------------O
------------O
------------O
--OO---------
--OO----OO---
-------O--O--
-------O-O---
--------O----
risultati:
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!
plaintext:
! Pentadecathlon
! Discovered by John Conway
! www.conwaylife.com/wiki/index.php?title=Pentadecathlon
--O----O--
OO-OOOO-OO
--O----O--
risultati:
Pentadecathlon 1
indennità
Se si supportano entrambi i formati di input (utilizzando l'estensione del file [ .rle
per i file rle e .cells
per il testo in chiaro - come viene definita la definizione di altre estensioni) o un flag della riga di comando per distinguerli) è possibile sottrarre il 5% dal punteggio.
OOO.OO\n....OO