Яблоки падают


15

Вступление

Существует ствол яблони, расположенный между -2 и 2 на оси X, где вокруг него падают яблоки:

        |   |
        |   |
<-------|---|------->
       -2   2

Каждый день, п яблоки падают. Каждое яблоко сохраняет свою координату х, падая прямо на землю.

Но если он приземлится поверх другого яблока, он будет катиться по следующим правилам, пока не достигнет земли или поддерживающего слоя яблок:

  1. Если пространство в точке x + 1 на его текущей высоте пусто, текущее яблоко идет туда.
  2. Иначе, если пространство в x-1 пусто, текущее яблоко идет туда.
  3. В противном случае текущее яблоко остается там, где оно находится поверх другого яблока.

Вызов

На входе будут n стартовых позиций каждого яблока по порядку. Вы можете воспринимать его как массив или как отдельные числа или любым другим допустимым способом, просто убедитесь, что вы объясните это в своем ответе.

На выходе должен быть ASCII-рисунок ствола дерева и яблок вокруг. От вас не требуется рисовать ось X слева от крайнего левого яблока и справа от крайнего правого яблока, но вам нужно нарисовать ее в любом месте под яблоком. Вы также можете расширить дерево выше самого высокого яблока.

Можно предположить, что все x-координаты находятся в диапазоне от -100 до 100, но не между -2 и 2.

Это .. Самый короткий ответ в байтах побеждает!

Примеры

Входные данные: [-3, 5, 5, -4, -4, 5, -3]

Выход:

  a|   |
aaa|   | aaa
---|---|----

Входные данные: [3, 3, 3, 3, 8, 9]

Выход:

|   |a
|   |aaa  aa
|---|-------

Входные данные: [-5, -5, -5, -5, -5, -5, -5, -5, -5]

Выход:

  a  |   |
 aaa |   |
aaaaa|   |
-----|---|


Ваши примеры подразумевают, что минимальный возможный экстент в направлении х должен быть показан (без пустого основания слева и справа от деревьев и яблок). Это требование? Кроме того, мы можем печатать конечные пробелы, по крайней мере, чтобы заполнить вывод в прямоугольник?
Мартин Эндер

1
Бонусы не очень популярны. Я думаю, что требование минимального «видимого» вывода (без пустых строк вверху, без пустых ячеек на краях, которые пусты) хорошо, но я бы определенно разрешил заполнить вывод прямоугольником с пробелами.
Мартин Эндер

Кроме того, ваш бонус в настоящее время не имеет смысла, потому что спецификация фактически не позволяет начинать с какого-либо другого выходного формата.
Мартин Эндер

2
Я дам 100 повторений за первый ответ в Marbelous. Падающие яблоки, рассчитанные по падающим шарикам ... это просто слишком уместно.
Quintopia

Ответы:


1

PHP, 230 байт

Я добавил первые две строки для удобства чтения.

function($l){for($y=count($l);$y>=0;$f[]="$a|   |$a")$a=str_repeat($y--?$w=' ':'-',99);
foreach($l as$x){for($x+=101,$s=$y=0;!$s;$b[$x]!=$w?$b[$x+1]!=$w?$b[$x-1]!=$w?$s=1:--$x
:++$x:0)$b=$f[$y++];$f[$y-2][$x]=a;}echo join('
',$f);};

Ideone

Вот негольфированная версия:

function drawApples(array $listStartX)
{
    $field = [];
    $maximalHeight = count($listStartX);
    for ($y = $maximalHeight; $y >= 0; --$y)
    {
        $line = str_repeat($y > 0 ? ' ' : '-', 98);
        $field[] = $line .'|   |'. $line;
    }

    foreach ($listStartX as $x)
    {
        $x += 100;
        for ($y = 0; true; ++$y)
        {
            if ($field[$y][$x] === ' ') {
                continue;
            }

            if ($field[$y][$x + 1] === ' ') {
                ++$x;
                continue;
            }

            if ($field[$y][$x - 1] === ' ') {
                --$x;
                continue;
            }

            $field[$y - 1][$x] = 'a';
            break;
        }
    }

    echo implode("\n", $field);
}

1

Python 2,7, 282 байта

from collections import*;a=Counter();a[2]=-1;a[-2]=-1
for d in input():
 while 0<=a[d+1]<a[d]:d+=1
 while 0<=a[d-1]<a[d]:d-=1
 a[d]+=1
m=max(a.values())+1
print'\n'.join(''.join(' '*(m-a[i]-1)+'a'*a[i]+'-'if i**2!=4 else'|'*m for i in range(min(a),max(a)+1))[i::m]for i in range(m))

Ideone

Ну ... я попробовал.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.