Jabłka spadają

15

Wprowadzenie

Na osi X znajduje się pień jabłoni, umieszczony między -2 a 2, a wokół niego spadają niektóre jabłka:

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

Każdego dnia n jabłek spada. Każde jabłko zachowuje swoją współrzędną x, gdy spada prosto na ziemię.

Ale jeśli wyląduje na innym jabłku, będzie toczyć się zgodnie z następującymi zasadami, aż dotrze do ziemi lub do warstwy podtrzymującej jabłka:

  1. Jeśli spacja w miejscu x + 1 na bieżącej wysokości jest pusta, bieżące jabłko tam trafi.
  2. W przeciwnym razie, jeśli miejsce na x-1 jest puste, to obecne jabłko tam trafi.
  3. W przeciwnym razie obecne jabłko pozostanie tam, gdzie jest na wierzchu tego drugiego jabłka.

Wyzwanie

Dane wejściowe będą n pozycjami początkowymi każdego jabłka w kolejności. Możesz wziąć to jako tablicę lub jako oddzielne liczby lub w inny prawidłowy sposób, po prostu upewnij się, że wyjaśnisz to w swojej odpowiedzi.

Wynikiem powinien być rysunek ASCII pnia drzewa i jabłek wokół. Teraz nie jest wymagane , aby narysować oś x na lewo od skrajnej lewej jabłko i po prawej skrajnej prawej jabłko, ale trzeba wyciągnąć go wszędzie jest pod pewnym jabłka. Możesz także przedłużyć drzewo powyżej najwyższego jabłka.

Możesz założyć, że wszystkie współrzędne x mają wartości od -100 do 100, ale nie od -2 do 2.

To jest .. Wygrywa najkrótsza odpowiedź w bajtach!

Przykłady

Wejście: [-3, 5, 5, -4, -4, 5, -3]

Wynik:

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

Wejście: [3, 3, 3, 3, 8, 9]

Wynik:

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

Wejście: [-5, -5, -5, -5, -5, -5, -5, -5, -5]

Wynik:

  a  |   |
 aaa |   |
aaaaa|   |
-----|---|
oddalony
źródło
Miłe wspomnienia. :)
Martin Ender
Twoje przykłady sugerują, że należy pokazać minimalny możliwy zasięg w kierunku x (bez pustej ziemi po lewej i prawej stronie drzew i jabłek). Czy to wymóg? Czy wolno nam również drukować końcowe spacje, przynajmniej w celu wypełnienia wydruku prostokątem?
Martin Ender
1
Bonusy nie są zbyt popularne. Wydaje mi się, że wymaganie minimalnego „widocznego” wyniku (brak pustych wierszy u góry, brak pustych komórek na krawędziach, które są puste) jest w porządku, ale zdecydowanie pozwoliłbym na wypełnienie wyjścia prostokątem spacjami.
Martin Ender
Ponadto premia obecnie nie ma sensu, ponieważ specyfikacja nie pozwala na rozpoczęcie innego formatu wyjściowego.
Martin Ender
2
Dam pierwszą nagrodę w Marbelous za 100 powtórzeń. Spadające jabłka obliczone przez spadające kulki ... to po prostu zbyt trafne.
kwintopia,

Odpowiedzi:

1

PHP, 230 bajtów

Dodałem pierwsze dwa nowe wiersze dla czytelności.

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

Oto wersja bez golfa:

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);
}
Czarna dziura
źródło
1

Python 2.7, 282 bajty

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

No cóż, próbowałem.

301 wyprowadził się permamentnie
źródło