Buradaki görev .rle
, dosya adı (STDIN'de veya bir komut satırı argümanı olarak) verilen bir Golly veya düz metin dosyasından (seçiminiz) okumak ve burada kodlanan ızgaradaki ortak kalıpları tanımlamak ve saymaktır.
Alternatif olarak, bunun yerine doğrudan STDIN üzerinden sağlanan dosyanın içeriğine sahip olmayı seçebilirsiniz.
Programınız en azından en yaygın onbeş katı durgun yaşamı ve en yaygın beş osilatörü ve planörleri tanımlayabilmeli ve ayırt edebilmelidir .
Bu osilatörlerin tüm aşamaları, planörün dört fazının da olduğu gibi tanınmalıdır.
Her bir kalıbın son sayısını içeren, her kalıbın adı ve miktarını ayrı bir satırda içeren bir liste çıkarmalıdır. Programınız, tüm bu kalıpları ya da yalnızca en az birinin bulunduğu kalıpları listeye dahil edebilir.
Sayılan diğer kalıpların bir parçası olan desenler sayılmamalıdır. (örneğin, bir işaretin 8 hücreli fazı iki blok olarak da sayılmamalı ve bir gemi bağı da iki gemi olarak sayılmamalıdır)
Girişin zaten stabilize olduğunu ve yukarıda belirtilen sette olmayan bir model içerdiğini varsayabilirsiniz. Giriş ızgarasının bir 1024x1024 kutuya sığacağını da varsayabilirsiniz.
Bu kod golf , bu yüzden en kısa program kazanır.
RLE dosya formatı açıklaması
Bir RLE dosyası, çalışma boyu kodlanmış bir yaşam ızgarası içeriyor. İle başlayan tüm satırlar yorumdur #
ve dikkate alınmamalıdır.
Boş olmayan, yorum yapmayan ilk satır biçimdir x=<width>,y=<height>,rule=<rule>
. Bu görevin amaçları için kural her zaman olacaktır B3/S23
. Bu çizgiyi işlemeden önce sıyrılması gereken boşluklar içerebilir (tabii ki, bu çizginin hiç işlemesi gerekli değildir).
İlk satırdan sonraki yorum dışı satırlar tek bir dize olarak değerlendirilmelidir. Bu yalnızca ondalık basamak, karakterden oluşmalı $
, b
ve o
, ve satır sonları ve bir rakam ile sona ermez. Satır sonları dikkate alınmaz, ancak satır sonlarının rakam dizelerini engellemeyeceğini varsayabilirsiniz.
Bu, tek bir kişi tarafından sonlandırılabilir !
.
b
ölü bir hücreyi o
temsil eder, canlı bir hücreyi $
temsil eder ve bir satırın sonunu temsil eder. Ondalık bir sayı, aşağıdaki sembolün, bunu birçok kez tekrar ediyormuş gibi ele alınması gerektiğini gösterir.
Düz metin desen kodlaması
Diğer seçenek, deseni burada açıklanan başka bir düz metin biçiminde okumaktır . Bu kodlamada, off hücreler tire ile temsil edilir ve hücreler üzerinde, satırları ayıran yeni çizgilerle büyük harf Os ile temsil edilir.
Yorum içermeyen tüm satırların kısa çizgi ile eşit uzunluğa getirileceğini varsayabilirsiniz.
İle başlayan satırlar yorumdur !
ve dikkate alınmaz.
Bazı test durumları
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
Sonuçlar:
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
Sonuçlar:
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----
Sonuçlar:
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--
Sonuçlar:
Pentadecathlon 1
Bonus
Her iki giriş biçimini de destekliyorsanız ([ .rle
rle dosyaları ve .cells
düz metin için dosya uzantısını kullanarak - diğer uzantıların nasıl okunacağını tanımlayın] veya bunlar arasında ayrım yapmak için bir komut satırı bayrağı kullanın) puanınızdan% 5 oranında bir puan alabilirsiniz.
OOO.OO\n....OO