< Zpět na seznam úloh

S1 Buňkový automat

var datasets = [
  {argv: [1, ["010"]], out: 1},
  {argv: [2, ["010"]], out: 1},
  {argv: [1, []], out: 0},
  {argv: [0, []], out: 1},
  {argv: [1, ["101", "100", "001"]], out: 0},
  {argv: [2, ["101", "100", "001"]], out: 1},
  {argv: [100, ["101", "100", "001"]], out: 1},
  {argv: [100, ["100", "010", "001", "011"]], out: 0},
  {argv: [101, ["100", "010", "001", "011"]], out: 1},
  {argv: [102, ["100", "010", "001", "011"]], out: 1},
  {argv: [103, ["100", "010", "001", "011"]], out: 1},
  {argv: [104, ["100", "010", "001", "011"]], out: 0},
  {argv: [105, ["100", "010", "001", "011"]], out: 0},
  {argv: [106, ["100", "010", "001", "011"]], out: 0},
  {argv: [107, ["100", "010", "001", "011"]], out: 1},
  {argv: [108, ["100", "010", "001", "011"]], out: 1},
  {argv: [109, ["100", "010", "001", "011"]], out: 0},
  {argv: [110, ["100", "010", "001", "011"]], out: 1},
]
names = ["kroky", "pravidla"]

Buňkový automat je nekonečný pás buněk, které můžou být ve stavu 0 nebo 1. Vyvíjí se v krocích, kdy každá buňka svůj stav v následujícím kroku určí podle současného stavu sebe a svých dvou sousedů. Přesná pravidla se můžou lišit podle zadání úlohy.

Na začátku víme, že buňka uprostřed pásky je ve stavu 1 a všechny ostatní buňky jsou ve stavu 0. Program má určit, v jakém stavu bude buňka uprostřed pásky potom, co proběhne daný počet kroků.

Program dostává dva parametry:

Výstupem programu je buďto 0, nebo 1, udávající stav buňky uprostřed pásky po daném počtu kroků.

Rady

Na vysvětlenou

Cellular automaton si možná pamatujete z kvinty, já ho považuju za krásnou hračku. Můžete se na něj podívat na septima.dominec.eu/automat.html.

def main(kroky, pravidla):
  bunky = [0] * (2*kroky + 1)
  bunky[kroky] = 1
  for i in range(kroky):
    priste = list(bunky)
    for j in range(1, len(bunky) - 1):
      priste[j] = 0  # tohle chcete změnit
    bunky = priste
  return bunky[kroky]