Un graphe *** ameoba **** est un type d' arbre dont les nœuds ont tous des valeurs de 0 à un entier non négatif N, et tout nœud particulier avec la valeur x <N se connecte à x + 1 nœuds distincts avec les valeurs x + 1.
Graphique Ameoba pour N = 3: (noté A 3 )
Notez que les 2 ne sont autorisés à partager aucun des 3; exactement trois 3 doivent "appartenir" à chacun des 2.
Défi
Votre tâche est de "développer" par induction ces graphiques ameoba dans une grille à 2 dimensions en minimisant goulûment la distance de Manhattan entre les nœuds:
- Cas de base: Un 0 est simplement le graphique
0
. - Étape inductive: un N + 1 est généré en plaçant de manière itérative les nouveaux nœuds à valeur N + 1 aussi près que possible des nœuds à valeurs N dans la structure A N existante . (Il ne peut être aussi proche que possible car les emplacements les plus proches peuvent déjà être remplis.)
Pour l'étape inductive, la procédure générale que vous devez suivre est la suivante:
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
(Une procédure différente avec une sortie impossible à distinguer est très bien.)
Exemple de croissance pour 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".
Programme
Le programme que vous écrivez doit prendre un nombre compris entre 0 et 8 (inclus) et en produire un graphique ameoba valide, en utilisant le schéma de croissance inductif expliqué ci-dessus.
Ce qui se passe au-delà de 8 n'a pas d'importance.
(A 8 contient 46234 nœuds qui le poussent. Tout ce qui dépasse A 8 serait trop loin. Merci à Martin Büttner de l'avoir remarqué.)
L'entrée doit provenir de stdin ou de la ligne de commande et la sortie doit aller vers stdout ou un fichier.
Exemples (pris directement d'en haut)
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
* Ces types de graphiques peuvent déjà avoir un nom. J'avoue que je viens de les inventer. ;)