To pytanie właśnie zyskało popularność podczas recenzowania kodu i pomyślałem, że może ci się spodobać dostosowanie do gry w codegolf:
Otrzymujesz niepustą listę x domów reprezentowanych jako booleany. Każdego dnia domy konkurują z sąsiednimi. 1 oznacza „aktywny” dom, a 0 oznacza „nieaktywny” dom. Jeśli sąsiedzi po obu stronach danego domu są albo aktywni, albo obaj nieaktywni, dom ten staje się nieaktywny następnego dnia. W przeciwnym razie staje się aktywny.
def get_state_as_pos(thelist, pos):
if thelist[pos-1] == thelist[pos+1]:
return 0
else:
return 1
Na przykład, gdybyśmy mieli grupę sąsiadów [0, 1, 0], wówczas dom w [1] stałby się 0, ponieważ zarówno dom po lewej, jak i po prawej są nieaktywne. Komórki na obu końcach sprawdzają również przeciwną stronę, więc sąsiedzi o indeksie 0 znajdują się w indeksie length-1
i indeksie 1 i odwrotnie. Nawet po zaktualizowaniu komórki należy wziąć pod uwagę jej poprzedni stan podczas aktualizacji innych, aby informacje o stanie każdej komórki były aktualizowane jednocześnie.
Funkcja przyjmuje tablicę stanów i liczbę kroków i powinna wyświetlać stan domów po określonej liczbie kroków.
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]
Wykonaj listę i wykonaj dowolne kroki i wyślij wynikową listę za pomocą domyślnych operacji we / wy . Standardowe luki są zabronione. To jest codegolf, wygrywa najkrótsza odpowiedź w bajtach!
[0, 1, 0, 0, 1, 0, 1, 1]
?