Вступ
Сизіф останнім часом мав деякі проблеми на роботі. Здається, він просто ніколи нічого не робить, і він би хотів знайти рішення цієї проблеми.
Його теперішня робота вимагає кочення скелі в гору. Зазвичай він добре виконує свою роботу, але щоразу, коли знаходиться біля вершини пагорба, він знову котиться вниз.
Він дуже засмучений своєю роботою і хоче вирішити проблему науково за допомогою комп'ютера, що імітує скелю, котившись у гору.
Так трапляється, що Сизіф не особливо хороший у програмуванні, тож, може, ти можеш йому допомогти?
Змагання
Після цього дурного вступу, давайте приступимо до справи. Ваша програма отримає ілюстрацію пагорба та скелі, яка виглядає приблизно так:
#o
##
###
######
########
Де #
являє собою частину пагорба і o
являє собою скелю.
Тепер вам доведеться реалізувати програму, яка переміщує шар 1 скелі вниз. Наприклад, вихід із зазначеного повинен бути:
#
##o
###
######
########
Якщо є горизонтально рівна ділянка, пагорб просто котиться горизонтально, так що ...
o
########
... це просто зробить камінний рулон набік.
o
########
Якщо є вертикальна площа, скеля падає вниз на один крок, тому ...
#o
#
#
#####
... принесуть ...
#
#o
#
#####
Ви також отримаєте ширину та висоту зображення відповідно в одному рядку над зображенням. Таким чином, в нашому прикладі вибірки буде виглядати приблизно так:
10 5
#o
##
###
######
#########
(Зверніть увагу, що пробіли тут є пробілами. Виберіть текст і подивіться, що я маю на увазі.)
Деякі деталі
- Коли рок вже знаходиться в останньому рядку під час запуску програми, ви можете вибрати або припинити програму, або вивести незмінний вхід
- Пагорб лише колись спускається вниз
Ваша програма повинна форматувати вихід точно такий же, як і вхідний (включаючи розміри), тому якщо ви передаєте висновок програми собі, він обчислює наступний крок.
Ви можете припустити, що завжди є шлях до низу, тому введення, де шлях «заблокований», може спричинити не визначену поведінку
Можна припустити, що в останньому рядку завжди є пробіл. Скеля повинна там «відпочити», тому після виклику програми декілька разів, завжди прокладаючи її вихід у себе, ви повинні в кінцевому підсумку зі скелею в останньому рядку, лежачи там, де раніше був простір.
Ви можете прийняти вхід у будь-якій формі, яку вам подобається (stdin, файл, ...). Ви повинні розмістити програму WHOLE (тому всі попередньо ініціалізовані змінні вважаються кодом).
Лінії закінчуються с
\n
.Ви можете отримати деякі приклади входів тут (переконайтеся , що ви скопіювали прогалини правильно!)
Це код-гольф , тому робоче подання з найменшими байтами виграє.
Переможець буде обраний 26 липня 2014 року. Ви можете розміщувати рішення після цього, але ви не можете перемогти
Якщо у вас є якісь питання, повідомте мене в коментарях.
Щасливого гольфу!
#
с, тому в кінці є один пробіл, оскільки ширина - 10. У цьому випадку (після декількох ітерацій) скеля лежала б там, де є пробіл (так внизу -правий кут).