*** Ein Ameoba Graph **** eine Art ist Baum , dessen Knoten alle Werte von 0 bis einigen nicht-negative ganze Zahl N, und jeder bestimmten Knoten mit dem Wert x <N verbindet sich mit x + 1 unterschiedliche Knoten mit Werten x + 1.
Ameoba-Graph für N = 3: (mit A 3 bezeichnet )
Beachten Sie, dass die 2er keine der 3er teilen dürfen. genau drei 3er müssen zu jeder 2 "gehören".
Herausforderung
Ihre Aufgabe ist es, diese Ameoba-Graphen in einem zweidimensionalen Raster induktiv zu "wachsen", indem Sie den Abstand zwischen den Knoten in Manhattan gierig minimieren :
- Basisfall: Eine 0 ist einfach der Graph
0
. - Induktiver Schritt: Ein N + 1 wird erzeugt, indem die neuen N + 1-Wertknoten iterativ so nahe wie möglich an den N-Wertknoten in der vorhandenen A N -Struktur platziert werden. (Es kann nur so nah wie möglich sein, da die nächstgelegenen Stellen möglicherweise bereits besetzt sind.)
Für den induktiven Schritt müssen Sie im Allgemeinen folgende Schritte ausführen:
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
(Ein anderes Verfahren mit nicht unterscheidbarer Ausgabe ist in Ordnung.)
Wachstumsbeispiel für 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".
Programm
Das Programm, das Sie schreiben, muss eine Zahl von 0 bis einschließlich 8 aufnehmen und ein gültiges Ameoba-Diagramm davon unter Verwendung des oben erläuterten induktiven Wachstumsmusters ausgeben.
Was nach 8 passiert, spielt keine Rolle.
(Eine 8 enthält 46234 Knoten, die sie drücken. Alles, was über A 8 hinausgeht, wäre zu weit. Vielen Dank an Martin Büttner, der dies bemerkt hat.)
Die Eingabe sollte von stdin oder der Befehlszeile kommen und die Ausgabe sollte an stdout oder eine Datei gehen.
Beispiele (direkt von oben genommen)
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
* Diese Art von Grafiken hat möglicherweise bereits einen Namen. Ich gebe zu, ich habe sie gerade erfunden. ;)