var datasets = [
{argv: [0, [[0,0,0], [1,1,1], [0,0,0]]], out: [[0,0,0], [1,1,1], [0,0,0]]},
{argv: [1, [[0,0,0], [1,1,1], [0,0,0]]], out: [[0,1,0], [0,1,0], [0,1,0]]},
{argv: [2, [[0,0,0], [1,1,1], [0,0,0]]], out: [[0,0,0], [1,1,1], [0,0,0]]},
{argv: [3, [[0,0,0], [1,1,1], [0,0,0]]], out: [[0,1,0], [0,1,0], [0,1,0]]},
{argv: [1, [[0,1,0,0,0], [0,0,1,0,0], [1,1,1,0,0], [0,0,0,0], [0,0,0,0]]], out: [[0, 0, 0, 0, 0], [1, 0, 1, 0, 0], [0, 1, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0]]},
{argv: [2, [[0,1,0,0,0], [0,0,1,0,0], [1,1,1,0,0], [0,0,0,0], [0,0,0,0]]], out: [[0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [1, 0, 1, 0, 0], [0, 1, 1, 0], [0, 0, 0, 0]]},
{argv: [3, [[0,1,0,0,0], [0,0,1,0,0], [1,1,1,0,0], [0,0,0,0], [0,0,0,0]]], out: [[0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0]]},
{argv: [4, [[0,1,0,0,0], [0,0,1,0,0], [1,1,1,0,0], [0,0,0,0], [0,0,0,0]]], out: [[0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 1, 1, 1], [0, 0, 0, 0]]},
{argv: [5, [[0,1,0,0,0], [0,0,1,0,0], [1,1,1,0,0], [0,0,0,0], [0,0,0,0]]], out: [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 1, 0, 1, 0], [0, 0, 1, 1], [0, 0, 1, 0]]},
]
names = ["kroky", "bunky"]
var validator = (result, {out}) => {
let s = result.map(row => [...row])
console.log(s)
console.log(out)
return JSON.stringify(s) === JSON.stringify(out)
}
var remapInput = `_main_inputs[1] = [list(p) for p in _main_inputs[1]]`
pyodidePackages = ["numpy"]
Na Petriho misce máme čtvercovou mřížku, ve které žijí buňky. V každém čtverečku mřížky může být jedna živá buňka, nebo žádná.
Buňka bude v příštím kole živá, pokud má správný počet živých sousedů. Za sousedy považujeme všech osm buněk, které v mřížce sousedí třeba i jen rohem. Buňky na okraji mřížky mají přirozeně menší počet sousedů.
Konkrétně, buňka bude v příštím kole živá, pokud:
Program dostává dva parametry:
Většina kódu už je hotová. Zbývá doplnit logiku, která určí stav každé buňky v příštím kroku.
def kopie(bunky):
return [list(radek) for radek in bunky]
def pocet_sousedu(bunky, y, x):
vysledek = 0
for i in range(max(y-1, 0), min(y+2, len(bunky))):
for j in range(max(x-1, 0), min(x+2, len(bunky[i]))):
vysledek += bunky[i][j]
return vysledek - bunky[y][x]
def main(kroky, bunky):
for i in range(kroky):
pristi = kopie(bunky)
for y, radek in enumerate(bunky):
for x, stav in enumerate(radek):
pocet = pocet_sousedu(bunky, y, x)
# tady je potřeba rozhodnout, jestli buňka bude žít
pristi[y][x] = 1
# na konci kroku, když máte spočítaný `příští` stav,
# nezapomeňte ho přepsat do reality
return bunky