Esta pregunta solo pasó a la revisión de código y pensé que te gustaría adaptarla como un desafío de codegolf:
Se le da una lista no vacía de x casas representadas como booleanos. Cada día, las casas compiten con las adyacentes. 1 representa una casa "activa" y 0 representa una casa "inactiva". Si los vecinos de ambos lados de una casa determinada están activos o ambos inactivos, esa casa se vuelve inactiva al día siguiente. De lo contrario, se vuelve activo.
def get_state_as_pos(thelist, pos):
if thelist[pos-1] == thelist[pos+1]:
return 0
else:
return 1
Por ejemplo, si tuviéramos un grupo de vecinos [0, 1, 0] entonces la casa en [1] se convertiría en 0 ya que tanto la casa a su izquierda como a la derecha están inactivas. Las celdas en ambos extremos verifican también el lado opuesto, por lo que los vecinos en el índice 0 están en index length-1
e indexn1 y viceversa. Incluso después de actualizar la celda, debe tener en cuenta su estado anterior al actualizar las demás para que la información de estado de cada celda se actualice simultáneamente.
La función toma la matriz de estados y una cantidad de pasos y debería generar el estado de las casas después del número de pasos dado.
input: states = [1, 0, 0, 0, 0, 1, 0, 0], steps = 1
output should be [0, 1, 0, 0, 1, 0, 1, 1]
input: states = [1, 1, 1, 0, 1, 1, 1, 1], steps = 2
intermediate state= [0, 0, 1, 0, 1, 0, 0, 0]
output should be [0, 1, 0, 0, 0, 1, 0, 0]
input: states = [1], steps=1
output: states= [0]
Tome la lista y los pasos como desee y envíe la lista resultante a través de E / S predeterminada . Las lagunas estándar están prohibidas. ¡Esto es codegolf, la respuesta más corta en bytes gana!
[0, 1, 0, 0, 1, 0, 1, 1]
?