Вызов
Учитывая прямоугольную сетку печатаемых символов ascii в виде строки или через стандартный ввод, напишите функцию или программу, которая сворачивает непробельные символы в стопку внизу.
Правила:
- Вывод имеет те же размеры и символы, что и ввод.
- Не-символ пробела при
(row a,column b)
не может иметь пробел' '
на(a-1, b)
,(a-1,b-1)
или(a-1,b+1)
, где строки пронумерованы по сравнению с самой нижней. Это приводит к тому, что все вертикальные сваи должны разрушаться вбок. - Символ без пробела может перемещаться в большинстве
(initial height - final height)
мест слева или справа (см. Рис. 1). - Вы можете предположить, что на изображении достаточно места, чтобы свернуть его без выпадения символов с экрана.
Рисунок 1: возможные конечные местоположения для символов @#$
показаны x,y,z
соответственно.
..............
...@..........
..xxx.........
.xxxxx...#....
xxxxxxx.yyy.$.
Порядок, в котором персонажи разрушаются, можно выбирать свободно. Конечные пробелы не в порядке, но конечные переводы строки.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
пример
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
..."Have you mooed today?"...
Один из возможных выходов:
--(_
/----|/|(o_)
/|/~\---~\\/o)
..."Have*you~mooed~today?"...
Ответы:
JavaScript (ES6),
1009088 байтТребует, чтобы строка имела как минимум две строки и все строки дополнялись до одинаковой длины. Выход для примера изображения:
Обратите внимание, что когда он пытается переместить элементы вправо, если это возможно,
*
он не попадает междуHave
иyou
.Изменить: 10% сэкономлено благодаря @ETHproductions. Сохранено еще 2 байта благодаря @DanielIndie.
Сетчатка 0.8.2 , 50 байт
Попробуйте онлайн! Немного другой подход к моему ответу JavaScript, в котором используется балансирующая группа для соответствия пробелу под непробельным символом;
(?<-1>)?
позволяет пространство , чтобы быть один столбец влево в то время как.?
позволяет пространство , чтобы быть один столбец вправо.Сетчатка , 40 байт
Попробуйте онлайн! Порт моего JavaScript ответа.
0L$
Атомный этап принимает входной сигнал и заменяет две длину на вторую линию , в результате чего команды , которая фактически выполняет замены, который затем оценивали на исходном вход со стороны~
стадии соединения.источник
\n
его буквальным символом новой строки, чтобы сократить до двух цифр ;-)l=s.search`\n`
сэкономить несколько байтов.f=
требуется для рекурсии, но это все еще экономит мне 2 байта, спасибо!Python 2, 298 байт
Принимает ввод как список строк (по одной на строку)
Пример: ввод:
Выход:
источник
C, 252 байта
Тестовый код Ungolfed:
Результат теста:
источник
Альгодоо (неконкурентный)
Input - вырожденный пример.
Runnning - по умолчанию гравитация и подпрыгивание.
Вывод - точность можно регулировать с помощью настроек трения и плотности на объектах.
Algodoo является логически программируемым .
источник
JavaScript, 286 байт
Примеры
Выход:
Другой пример:
Выход:
Неуправляемая функция
источник
c>" "
гдеc
представляет собой символ , который вы проверяете.