Un *** grafico ameoba **** è un tipo di albero i cui nodi hanno tutti valori da 0 a qualche numero intero non negativo N e qualsiasi nodo particolare con valore x <N si collega a x + 1 nodi distinti con valori x + 1.
Grafico ameoba per N = 3: (indicato con A 3 )

Si noti che ai 2 non è consentito condividere nessuno dei 3; esattamente tre 3 devono "appartenere" a ciascun 2.
Sfida
Il tuo compito è "far crescere" induttivamente questi grafici ameoba in una griglia bidimensionale minimizzando avidamente la distanza di Manhattan tra i nodi:
- Caso di base: uno 0 è semplicemente il grafico
0. - Fase induttiva: un N + 1 viene generato posizionando iterativamente i nuovi nodi valutati N + 1 il più vicino possibile ai nodi di valori N nella struttura A N esistente . (Può essere il più vicino possibile poiché i punti più vicini potrebbero già essere riempiti.)
Per la fase induttiva la procedura generale che devi seguire è:
for each existing node P with value N:
for each new N+1 valued node Q you need to connect to P: //this loops N+1 times
find the set of vacant spots that are minimally distant from P //by Manhattan distance
place Q in any of these vacant spots
(Una procedura diversa con output indistinguibile va bene.)
Esempio di crescita per A 4 :
A0 is always the same:
0
For A1 I happen to put the 1 to the right of the 0 (it has to go on one of the 4 open sides):
01
For A2 I happen to put the two 2's above and to the right of the 1:
2
012
For A3 I find that one of the six 3's I must place cannot be directly next to a 2, so I put in one of the next closest places:
3
323
0123
33 <-- this 3 is distance two away from its 2
The process continues in A4. Note that I'm iterating over each 3 and placing four 4's next to it or as close as possible, then moving to the next 3 (the order of 3's does not matter):
444
443444
4323444
4012344
44334
4444
44
Always keep in mind that nodes cannot be "shared".
Programma
Il programma che scrivi deve contenere un numero compreso tra 0 e 8 (incluso) e generare un grafico ameoba valido utilizzando il modello di crescita induttiva spiegato sopra.
Ciò che accade oltre l'8 non ha importanza.
(Un 8 contiene 46234 nodi che lo stanno spingendo. Qualsiasi cosa oltre A 8 sarebbe troppo lontana. Grazie a Martin Büttner per averlo notato.)
L'input dovrebbe provenire da stdin o dalla riga di comando e l'output dovrebbe andare in stdout o in un file.
Esempi (presi direttamente dall'alto)
Input: 0
Output:
0
Input: 1
Output:
01
Input: 2
Output:
2
012
Input: 3
Output:
3
323
0123
33
Input: 4
Output:
444
443444
4323444
4012344
44334
4444
44
* Questo tipo di grafici potrebbe già avere un nome. Ammetto di averli appena inventati. ;)