function tick(state) {
const nextState = new Set()
for (let k of state) {
for (let i = k - 2; i <= k + 2; i++) {
for (let pattern of rules) {
let match = true
for (let j = 0; j < pattern.length; j++) {
if ((state.has(i + j - 2) ? '#' : '.') !== pattern[j]) {
match = false
break
}
}
if (match) {
nextState.add(i)
break
}
}
}
}
return nextState
}