examples: cleanup up the life automaton implementation
parent
518da92a7e
commit
cd399b7e6e
|
@ -8,6 +8,15 @@ pub mut:
|
||||||
data &int
|
data &int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn new_a2d(maxx int, maxy int) &A2D {
|
||||||
|
size := int(sizeof(int)) * (maxx * maxy)
|
||||||
|
return &A2D{
|
||||||
|
maxx: maxx
|
||||||
|
maxy: maxy
|
||||||
|
data: &int(vcalloc(size))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[inline]
|
[inline]
|
||||||
pub fn (a &A2D) set(x int, y int, newval int) {
|
pub fn (a &A2D) set(x int, y int, newval int) {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -42,7 +51,8 @@ pub mut:
|
||||||
new_field &A2D
|
new_field &A2D
|
||||||
}
|
}
|
||||||
|
|
||||||
fn new_automaton(f [][]int) Automaton {
|
fn new_automaton(ftext string) Automaton {
|
||||||
|
f := ftext.split('\n').map(it.trim_space()).filter(it.len > 0)
|
||||||
maxy := f.len
|
maxy := f.len
|
||||||
mut maxx := 0
|
mut maxx := 0
|
||||||
for y := 0; y < f.len; y++ {
|
for y := 0; y < f.len; y++ {
|
||||||
|
@ -50,20 +60,12 @@ fn new_automaton(f [][]int) Automaton {
|
||||||
maxx = f[y].len
|
maxx = f[y].len
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
size := (maxx * maxy)
|
field := new_a2d(maxx, maxy)
|
||||||
field := &A2D{
|
new_field := new_a2d(maxx, maxy)
|
||||||
maxx: maxx
|
|
||||||
maxy: maxy
|
|
||||||
data: &int(vcalloc(4 * (size)))
|
|
||||||
}
|
|
||||||
new_field := &A2D{
|
|
||||||
maxx: maxx
|
|
||||||
maxy: maxy
|
|
||||||
data: &int(vcalloc(4 * (size)))
|
|
||||||
}
|
|
||||||
for y in 0 .. field.maxy {
|
for y in 0 .. field.maxy {
|
||||||
for x in 0 .. field.maxx {
|
for x in 0 .. field.maxx {
|
||||||
field.set(x, y, f[y][x])
|
val := if x < f[y].len && f[y][x] == `#` { 1 } else { 0 }
|
||||||
|
field.set(x, y, val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Automaton{
|
return Automaton{
|
||||||
|
@ -94,65 +96,39 @@ pub fn (mut aa Automaton) update() {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn gun() Automaton {
|
pub fn gun() Automaton {
|
||||||
mut field := [
|
field := '
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
*******************************************
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
* A shooting gun: *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* # *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
* # # *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* ## ## ## *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
* # # ## ## *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* ## # # ## *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
|
* ## # # ## # # *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* # # # *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
|
* # # *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* ## *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
|
* *
|
||||||
0, 0, 0, 0, 0, 1, 1, 0, 0, 0],
|
* Tetris Life: *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
|
* *
|
||||||
0, 0, 0, 0, 0, 1, 1, 0, 0, 0],
|
* ## #### *
|
||||||
[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
|
* ## *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* *
|
||||||
[0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
|
* *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
|
* # ## *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* ### ## *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
* *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
* *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* # *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
* ### *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
* *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
* *
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
* *
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
*******************************************
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
'
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
]
|
|
||||||
return new_automaton(field)
|
return new_automaton(field)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue