Вступление
В последнее время у Сизифа были проблемы на работе. Кажется, он просто ничего не делает, и ему очень хотелось бы найти решение этой проблемы.
Его текущая работа требует, чтобы катить камень в гору. Обычно он хорошо выполняет свою работу, но каждый раз, когда он оказывается на вершине холма, он снова падает.
Он очень расстроен своей работой и хочет научиться решать эту проблему с помощью компьютера, имитирующего скалу, катящуюся по склону.
Случилось так, что Сизиф не особенно хорош в программировании, так что, может быть, вы можете помочь ему?
Соревнование
После этого глупого вступления давайте перейдем к делу. Ваша программа получит иллюстрацию холма и скалы, которая выглядит примерно так:
#o
##
###
######
########
Где #
представляет собой часть холма и o
представляет скалу.
Теперь вам нужно реализовать программу, которая перемещает слой на 1 слой вниз. Например, результат вышеупомянутого должен быть:
#
##o
###
######
########
Если есть горизонтальная ровная область, холм просто катится горизонтально, так что ...
o
########
... это просто заставит камень катиться в сторону.
o
########
Если есть вертикальная зона, камень падает на один шаг, так что ...
#o
#
#
#####
... уступил бы ...
#
#o
#
#####
Вы также получите ширину и высоту изображения соответственно в одну строку над изображением. Итак, в целом, наш пример ввода будет выглядеть так:
10 5
#o
##
###
######
#########
(Обратите внимание, что пробелами здесь являются пробелы. Выделите текст и посмотрите, что я имею в виду.)
Некоторые детали
- Когда рок уже находится в последней строке при запуске программы, вы можете либо завершить программу, либо вывести неизмененный ввод
- Холм спускается только вниз
Ваша программа должна форматировать выходные данные точно так же, как и входные данные (включая размеры), поэтому, если вы передаете выходные данные программы себе, она вычисляет следующий шаг.
Вы можете предположить, что всегда есть путь ко дну, поэтому ввод, где путь «заблокирован», может вызвать неопределенное поведение
Вы можете предположить, что в последней строке всегда есть пробел. Камень должен «отдыхать» там, так что после вызова программы несколько раз, всегда направляя ее вывод в себя, вы должны в конечном итоге получить камень в последней строке, лежащий там, где ранее было пространство.
Вы можете принимать ввод в любой форме, которая вам нравится (стандартный, файл, ...). Вы должны опубликовать ВЕСЬ программу (поэтому все предварительно инициализированные переменные считаются кодом).
Строки оканчиваются на
\n
.Вы можете получить некоторые примеры ввода здесь (убедитесь, что вы правильно скопировали пробелы!)
Это код-гольф , поэтому выигрывает рабочая подача с наименьшим количеством байтов .
Победитель будет выбран 26 июля 2014 года. После этого вы можете публиковать решения, но не можете выиграть
Если у вас есть какие-либо вопросы, дайте мне знать в комментариях.
Удачного игры в гольф!
#
с, так что в конце есть один пробел, потому что ширина равна 10. В этом случае (после нескольких итераций) камень будет лежать там, где есть пробел (так внизу) -правый угол).