Cette question vient de faire l'objet d'une révision de code et je me suis dit que vous pourriez l'aimer comme un défi de codegolf:
Vous obtenez une liste non vide de x maisons représentées comme des booléens. Chaque jour, les maisons rivalisent avec les maisons adjacentes. 1 représente une maison "active" et 0 représente une maison "inactive". Si les voisins des deux côtés d'une maison donnée sont tous deux actifs ou inactifs, cette maison devient inactive le lendemain. Sinon, il devient actif.
def get_state_as_pos(thelist, pos):
if thelist[pos-1] == thelist[pos+1]:
return 0
else:
return 1
Par exemple, si nous avions un groupe de voisins [0, 1, 0], la maison à [1] deviendrait 0 car la maison à gauche et à droite sont toutes les deux inactives. Les cellules aux deux extrémités vérifient également le côté opposé, de sorte que les voisins à l'index 0 sont à l'index length-1
et à l'index n1 et vice versa. Même après la mise à jour de la cellule, vous devez tenir compte de son état antérieur lors de la mise à jour des autres afin que les informations d'état de chaque cellule soient mises à jour simultanément.
La fonction prend le tableau des états et un certain nombre d'étapes et doit afficher l'état des maisons après le nombre d'étapes donné.
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]
Suivez la liste et les étapes comme vous le souhaitez et sortez la liste résultante via les E / S par défaut . Les failles standard sont interdites. Ceci est codegolf, la réponse la plus courte en octets gagne!
[0, 1, 0, 0, 1, 0, 1, 1]
?