Le mele stanno cadendo


15

introduzione

C'è un tronco di melo posizionato tra -2 e 2 sull'asse x, dove alcune mele cadono attorno ad esso:

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

Ogni giorno, n mele cadono. Ogni mela mantiene la sua coordinata x mentre cade direttamente a terra.

Ma se atterra su un'altra mela, rotolerà secondo le seguenti regole fino a raggiungere il terreno o uno strato di supporto di mele:

  1. Se lo spazio in x + 1 alla sua altezza attuale è vuoto, la mela corrente va lì.
  2. Altrimenti se lo spazio in x-1 è vuoto, la mela corrente va lì.
  3. Altrimenti la mela corrente rimane dove si trova sopra quell'altra mela.

Sfida

L'input saranno le n posizioni iniziali di ciascuna mela in ordine. Puoi prenderlo come un array o come numeri separati o in qualsiasi altro modo valido, assicurati solo di spiegarlo nella tua risposta.

L'output dovrebbe essere un disegno ASCII del tronco d'albero e delle mele intorno. Non è necessario disegnare l'asse x alla sinistra della mela più a sinistra e alla destra della mela più a destra, ma è necessario disegnarlo ovunque si trovi sotto una mela. Puoi anche estendere l'albero sopra la mela più alta.

Puoi assumere tutto coordinate x siano comprese tra -100 e 100, ma non tra -2 e 2.

Questo è .. Vince la risposta più breve in byte!

Esempi

Ingresso: [-3, 5, 5, -4, -4, 5, -3]

Produzione:

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

Ingresso: [3, 3, 3, 3, 8, 9]

Produzione:

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

Ingresso: [-5, -5, -5, -5, -5, -5, -5, -5, -5]

Produzione:

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


I tuoi esempi implicano che dovrebbe essere mostrata la minima estensione possibile nella direzione x (nessun terreno vuoto a sinistra e a destra degli alberi e delle mele). È un requisito? Inoltre, siamo autorizzati a stampare spazi finali, almeno per riempire l'output in un rettangolo?
Martin Ender,

1
I bonus non sono molto popolari. Penso che richiedere che l'output "visibile" sia minimo (nessuna riga vuota nella parte superiore, nessuna cella a terra ai bordi vuoti) va bene, ma consentirei sicuramente di riempire l'output in un rettangolo con spazi.
Martin Ender,

Inoltre, il tuo bonus attualmente non ha senso perché le specifiche non consentono in realtà un diverso formato di output per iniziare.
Martin Ender,

2
Darò una ricompensa di 100 rep alla prima risposta in Marbelous. Mele che cadono calcolate dai marmi che cadono ... è semplicemente troppo appropriato.
Quintopia,

Risposte:


1

PHP, 230 byte

Ho aggiunto le prime due nuove righe per la leggibilità.

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

Ecco la versione ungolfed:

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 byte

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

Beh ... ci ho provato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.