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í
Respuestas:
Ruby,
181163153146 caracteresEsta implementación sigue un enfoque estándar utilizando una matriz
h
(dimensiones200
x200
aplanado), donde cada elemento es0
(sin abeja) o1
(abeja incluida). La matriz[0,-200,201,202,2,3]
describe las posiciones iniciales de las abejas (en relación con cualquier celda inicial).La entrada y salida como se especifica arriba, pasa todos los casos de prueba definidos.
Edición 1: cambió de nuevo a una solución de ajuste en lugar de la versión "espacio adicional" (que era más corta en una versión intermedia pero ahora tiene varios caracteres más).
Edición 2: variable eliminada por
b
completo.Edición 3: advertencia: esta edición hizo que el programa fuera terriblemente lento. Por lo tanto, reduje las dimensiones a 200 cada una, lo que aún es suficiente para hasta 150 iteraciones. En lugar de indexar la matriz por una variable, rotamos constantemente la matriz hacia adelante. Realmente no es un buen diseño, pero ahora estamos considerablemente por debajo de los 150.
fuente
Python, 152 caracteres
Esta solución realiza un seguimiento de las ubicaciones de las abejas con un conjunto de números complejos. Es bastante lento porque el bucle interno es cuadrático en el número de abejas. He probado hasta 50 y funciona.
fuente
P={0,2,3,1j,1+1j,1-1j}
y luego usar{p}<P
para comprobar la pertenencia (ahorra 1 carácter)Python,
171169158 caracteresModelo el mundo como una matriz 1D 300 * 300 = 900000 (en
h
realidad es más grande, pero el final no se usa), donde una abeja es un 1 y el vacío es 0. El tamaño de 300 está bien porque a lo sumo el crecimiento sería de 2 en cada dimensión para cada generación, y no hay más de 150 generaciones.Aquí hay una versión ungolfed y comentada:
fuente