Les chercheurs ont récemment découvert une colonie d'abeilles intéressante qui vit dans un champ infini de nids d'abeilles:
Chaque cellule peut héberger une abeille ou non. En fait, la vie de ces créatures semble être un peu ... chaotique. On pourrait calculer qu'une colonie commence toujours par le modèle suivant:
(Abeille dessinée par Emmanuel Boutet sur Wikimedia Commons . Cette image en nid d'abeille est donc publiée sous CC-By-SA . Grommelle )
Après cela, les cycles de vie de l'abeille sont divisés en soi-disant générations. Chaque génération d'abeilles meurent et de nouvelles éclosent et cela dépend principalement des voisins de leur cellule:
- Si une abeille a moins de deux voisins, elle meurt à cause de la solitude.
- Si une abeille a plus de trois voisins, elle meurt à cause du surpeuplement.
- Si une cellule a deux, trois ou quatre abeilles vivantes dans les cellules voisines, une nouvelle abeille éclosera dans la prochaine génération.
Les abeilles mourantes ne meurent pas avant la fin d'une génération, elles affectent donc toujours les cellules environnantes qui pourraient éclore des abeilles dans la génération suivante.
Maintenant que nous savons comment fonctionne une telle colonie, nous pouvons la simuler à travers un certain nombre de générations.
Contribution
L'entrée est un seul nombre N , donné sur l'entrée standard, terminé par un saut de ligne. 0 ≤ N ≤ 150. Il s'agit du nombre de générations à simuler.
Production
La sortie est un nombre unique, sur la sortie standard et éventuellement suivi d'un saut de ligne unique, qui représente le nombre d'abeilles vivantes après N générations.
La sortie supplémentaire sur l'erreur standard est ignorée.
Exemples d'entrées
0
5
42
100
Exemples de sorties
6
44
1029
5296
Condition gagnante
Le code le plus court gagne, comme c'est la coutume dans le golf. En cas d'égalité, la solution précédente l'emporte.
Cas de test
Il existe deux scripts de test, contenant des cas de test identiques:
L'invocation est dans les deux cas:, <test script> <my program> [arguments]
par exemple ./test ruby beehive.rb
ou ./test.ps1 ./beehive.exe
.
Je sais qu'il n'y a que 22 tests au lieu de 151 (principalement parce que les solutions sont souvent assez lentes). Veuillez vous abstenir d'incorporer les cas de test exacts au lieu de résoudre la tâche. Ces scripts vous permettent de tester si une modification entraîne toujours le comportement correct du programme; pas que vous puissiez adapter votre code aux cas de test spécifiques.
Une autre note
Cette tâche faisait partie d'un concours de golf organisé dans mon université en 2011-S24. Les scores et les langues de nos candidats étaient les suivants:
- 336 - C
- 363 - C
- 387 - C
- 389 - Haskell
- 455 - C
Notre propre solution était
- 230 - Rubis
Réponses:
Ruby,
181163153 153146 caractèresCette implémentation suit une approche standard utilisant un tableau
h
(dimensions200
x200
aplati), où chaque élément est soit0
(pas d'abeille) ou1
(abeille incluse). Le tableau[0,-200,201,202,2,3]
décrit les positions initiales des abeilles (par rapport à n'importe quelle cellule initiale).L'entrée et la sortie, comme spécifié ci-dessus, réussissent tous les cas de test définis.
Édition 1: reconvertie en une solution d'encapsulation au lieu de la version "espace supplémentaire" (qui était plus courte dans une version intermédiaire mais qui a maintenant plusieurs caractères de plus).
Edit 2: variable supprimée
b
complètement.Édition 3: avertissement: cette édition a rendu le programme horriblement lent. J'ai ainsi réduit les dimensions à 200 chacune ce qui est encore suffisant pour jusqu'à 150 itérations. Au lieu d'indexer le tableau par une variable, nous tournons constamment le tableau vers l'avant. Pas vraiment un bon design, mais maintenant nous sommes considérablement en dessous du 150.
la source
Python, 152 caractères
Cette solution garde la trace des emplacements des abeilles avec un ensemble de nombres complexes. C'est assez lent car la boucle intérieure est quadratique en nombre d'abeilles. J'ai testé jusqu'à 50 et ça marche.
la source
P={0,2,3,1j,1+1j,1-1j}
et ensuite utiliser{p}<P
pour tester l'appartenance (enregistre 1 caractère)Python,
171169158 158 caractèresJe modélise le monde comme un tableau 300 * 300 = 900000 1D (
h
est en fait plus grand, mais la fin n'est pas utilisée), où une abeille est un 1 et vide est 0. La taille de 300 est bien parce que tout au plus la croissance serait de 2 dans chaque dimension pour chaque génération, et il n'y a pas plus de 150 générations.Voici une version légèrement non golfée et commentée:
la source