Los investigadores descubrieron recientemente una interesante colonia de abejas que vive en un campo infinito de panal:
Cada celda puede albergar una abeja o no. De hecho, la vida de esas criaturas parece ser un poco ... caótica. Se podría calcular que una colonia siempre comienza con el siguiente patrón:
(Abeja dibujada por Emmanuel Boutet en Wikimedia Commons . Esta imagen de nido de abeja y abejas se publica bajo CC-By-SA . Gruñe )
Después de eso, los ciclos de vida de la abeja se dividen en las llamadas generaciones. Cada generación de abejas viejas mueren y las nuevas eclosionan y depende principalmente de los vecinos de sus células:
- Si una abeja tiene menos de dos vecinos, muere debido a la soledad.
- Si una abeja tiene más de tres vecinos, muere debido al hacinamiento.
- Si una célula tiene dos, tres o cuatro abejas vivas en las celdas vecinas, una nueva abeja eclosiona allí en la próxima generación.
Las abejas moribundas no mueren hasta el final de una generación, por lo que aún afectan las células circundantes que podrían eclosionar en la próxima generación.
Ahora que sabemos cómo funciona esa colonia, podemos simularla a través de cualquier cantidad de generaciones.
Entrada
La entrada es un solo número N , dado en la entrada estándar, terminado por un salto de línea. 0 ≤ N ≤ 150. Este es el número de generaciones a simular.
Salida
La salida es un número único, en la salida estándar y opcionalmente seguido de un salto de línea único, que representa el número de abejas vivas después de N generaciones.
Se ignora la salida adicional en el error estándar.
Entradas de muestra
0
5
42
100
Resultados de muestra
6
44
1029
5296
Condición ganadora
El código más corto gana, como es habitual en el golf. En caso de empate, la solución anterior gana.
Casos de prueba
Hay dos scripts de prueba que contienen casos de prueba idénticos:
La invocación es en ambos casos: <test script> <my program> [arguments]
por ejemplo, ./test ruby beehive.rb
o ./test.ps1 ./beehive.exe
.
Sé que solo hay 22 pruebas en lugar de 151 (principalmente porque las soluciones son a menudo bastante lentas). Abstenerse de incorporar los casos de prueba exactos en lugar de resolver la tarea. Estos scripts son convenientes para que usted pruebe si un cambio aún hace que el programa se comporte correctamente; no es que pueda adaptar su código a los casos de prueba específicos.
Otra nota
Esta tarea fue parte de un concurso de golf celebrado en mi universidad durante 2011-W24. Los puntajes e idiomas de nuestros concursantes fueron los siguientes:
- 336 - C
- 363 - C
- 387 - C
- 389 - Haskell
- 455 - C
Nuestra propia solución fue
- 230 - Rubí