Advent of code

Día 11

El juego de la vida

Advent of code

El Advent of Code es una página web donde cada día del mes de diciembre van descubriendo un problema para que la gente haga un algoritmo que lo resuelva.

11 de diciembre de 2020

El de este día es una variación del Juego de la Vida de Conway.

Juego de la vida original

Dos estados → vivo y muerto

  • Si vivo y dos o tres vecinos → Sigue vivo
  • Si muerto y tres vecinos → Vivo
  • Si no → muerto

Juego del Advent of Code

Tres estados → Suelo(.) , Ocupado(#), Libre(L)

Reglas

  • Libre, vecinos = 0 → Ocupado
  • Ocupado, vecinos ≥ 4 → Libre
  • Resto → No cambia

Estrategia

  • Mantener dos arrays, el activo y la siguiente evolución.
  • Un contador de cambios que se resetea en cada pasada, si al final vale 0 es que es estable.
  • Un contador de pasadas para controlar que se estabiliza. Si llega, por ejemplo a 10.000 pasadas abortamos y decimos que no hay solución.

Implementación

Lo he hecho en Java pq es un lenguaje con el que me encuentro cómodo.

Se podía haber hecho en cualquier otro lenguaje (C, Python, Perl, Basic, Pascal, Javascript...), pero me he quedado con éste.

Código - 1

Apertura del fichero

Código - 2

Leer líneas

Código - 3

Hacer pasadas

Código - 4

Recorre y calcula

Código - 5

Procesa celda

Código - 6

Asientos ocupados

Optimización

He mirado cuantos milisegundos le cuesta hacer las 70 pasadas que hace hasta que se estabiliza y le ha costado 31 milisegundos, por lo que he decidido no optimizarlo.

Contacto

¿Quieres contactar conmigo?

@xblasco.com (blueSky)

@xblasco (twitter)

Vuelta al índice

índice

Web Analytics