Завдання тут полягає в тому, щоб прочитати з .rle
файлу Golly або Plaintext (на ваш вибір), ім'я якого файлу надано (на STDIN або як аргумент командного рядка) та визначити та підрахувати загальні шаблони в закодованій в ньому сітці.
Крім того, ви можете вибрати вміст цього файлу безпосередньо над STDIN.
Ваша програма повинна вміти визначати та розрізняти принаймні п’ятнадцять найпоширеніших суворих натюрмортів та п’ять найпоширеніших генераторів , а також планери .
Усі фази цих осциляторів повинні бути розпізнані, як і всі чотири фази планера.
Він повинен вивести список, що містить підсумковий підрахунок кожного шаблону, з назвою та кількістю кожного малюнка в окремому рядку. Ваша програма може включати до списку вихідних даних всі ці зразки або лише ті, з яких було знайдено хоча б один.
Шаблони, що входять до складу інших шаблонів, що підраховуються, не повинні рахуватися. (наприклад, 8-елементна фаза маяка також не повинна вважатися двома блоками, а корабельна зв'язка також не повинна вважатися двома кораблями)
Ви можете припустити, що вхід вже стабілізується і не містить шаблонів, не в аформованому наборі. Ви також можете припустити, що вхідна сітка поміститься у вікні 1024x1024.
Це код-гольф , тому найкоротша програма виграє.
Опис формату файлу RLE
Файл RLE містить сітку життя, закодовану довжиною. Усі рядки, що починаються з #
коментарів, повинні бути проігноровані.
Перший не порожній рядок без коментарів має форму x=<width>,y=<height>,rule=<rule>
. Для цілей цього завдання завжди буде правило B3/S23
. Він може містити пробіли, які слід викреслити перед обробкою цього рядка (звичайно, цей рядок взагалі не потрібно обробляти.)
Рядки без коментарів після першого слід розглядати як єдиний рядок. Він повинен складатися лише з десяткових цифр, символів $
, b
і o
та розривів рядків, а не закінчуватись цифрою. Розриви рядків слід ігнорувати, але ви можете припустити, що розриви рядків не перебиватимуть рядки цифр.
Це може бути припинено одним !
.
b
являє собою мертву клітинку, o
являє собою живу клітинку і $
представляє кінець ряду. Будь-яке десяткове число вказує на те, що наступний символ слід розглядати як такий, що повторюється багато разів.
Кодування зразкового тексту
Інший варіант - прочитати візерунок в іншому форматі простого тексту, описаному тут. У цьому кодуванні клітини представлені дефісами, а на клітинках представлені великими літерами Os, з новими рядками, що розділяють рядки.
Ви можете припустити, що всі рядки без коментарів будуть зафіксовані однаковою довжиною з дефісами.
Рядки, що починаються з !
коментарів, повинні бути проігноровані.
Деякі тестові випадки
ПРАВИЛА:
#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
ПРАВИЛА:
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
ПРАВИЛА:
#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
ПРАВИЛА:
# 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