-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathautomaton.py
More file actions
39 lines (34 loc) · 1.53 KB
/
automaton.py
File metadata and controls
39 lines (34 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#@author: jascha paris
#@title: DEMCON Decode Challenge
import numpy as np
import sys
def create_out_str(generation):
out_str=np.full((len(generation),)," ")
out_str[generation==1]="*"
return ''.join(out_str) + '\n'
def calc_automaton(n_cells, n_generations, true_indices_start, automaton_config):
gen = np.zeros((n_cells+2,), dtype=int)
gen[true_indices_start[(true_indices_start>0) * (true_indices_start<=n_cells)]] = 1
out_str = create_out_str(gen[1:-1])
for idx in range(n_generations-1):
gen[1:-1] = automaton_config[4*np.roll(gen,1)+2*gen+np.roll(gen,-1)][1:-1]
out_str = out_str + create_out_str(gen[1:-1])
return(out_str)
if __name__ == "__main__":
# parsing inputs
data = sys.stdin.readlines()
operation = data[0].lstrip(' ').rstrip('\n').split(' ')[0]
n_cells = int(data[0].lstrip(' ').rstrip('\n').split(' ')[1])
n_generations = int(data[0].lstrip(' ').rstrip('\n').split(' ')[2])
true_indices_start = np.array(data[1].lstrip('init_start ').rstrip(' init_end\n').split(' '), dtype=int)
if operation=='A':
automaton_config = np.array([0,1,0,1,1,1,1,0], dtype=int)
elif operation=='B':
automaton_config = np.array([0,1,1,0,1,0,1,0], dtype=int)
else:
automaton_config = np.array(data[2].lstrip(' ').rstrip('\n').split(' '), dtype=int)[0:8]
automaton_config[automaton_config>0]=1
# run automaton
print(calc_automaton(n_cells, n_generations, true_indices_start, automaton_config))