Skip to content

Commit

Permalink
delay is a root, doesn't propagate if no new value; latch with delay
Browse files Browse the repository at this point in the history
  • Loading branch information
birchb1024 committed Oct 3, 2021
1 parent 569fc5a commit 74cfb17
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 70 deletions.
52 changes: 26 additions & 26 deletions delay.betula
Original file line number Diff line number Diff line change
@@ -1,57 +1,57 @@


101010111111111010101011111111101010101111111110101010111111111010101011111111101010101111111110101010111111111010101011
22C-------D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-


1e1d1c1b1a191817161514131211101z1y1x1w1v1u1t1s1r1q1p1o1n1m1l1k1j1i1h1g1f1e1d1c1b1a191817161514131211101z1y1x1w1v1u1t1s1r
00CJ------D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-
e


2p 1p1p1p1p1p1o1o1o1o1o1o1o1o1n1n1n1n1n1n1n1n1m1m1m1m1m1m1m1m1l1l1l1l1l1l1l1l1k1k1k1k1k1k1k1k1j1j1j1j1j1j1j1j1i1i1i1i1i1i1i
30CJ->D-J-DJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJ
p p p p p p o o o o o o o o n n n n n n n n m m m m m m m m l l l l l l l l k k k k k k k k j j j j j j j j i i i i i i i i

j 2j2j2j2j2j2j2j2j2j2i2i2i2i2i2i2i2i i
5zCL--D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D---L


7 2727272727272726262626262626262626 6
5zCL--DJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJ--L
7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6



53 3
5c c
2gCJ---D-----L
3
c



01 1 17 7
00 0 17 7
@--D--L 7*----D-----L
|
| 11 1
| 10 0
@--D--L
| 6 262626262626262525252525252525252525252525252524242424242424
| 21 1 59C----L--@-----DJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJ-@
@--D--L 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 |
| 1 212121212121212121202020202020202020202020202020202828282828
| 20 0 59C----L--@-----DJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJ-@
@--D--L 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 8 8 8 |
| @------------------------------------------------------------------@
1 | 41 1 |
33CL-----@--D--L | 242424242424242424232323232323232323232323232323232222222222
0 | 40 0 |
33CL-----@--D--L | 282828282828282828282827272727272727272727272727272727262626
| @-----DJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJ-@
| 81 1 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 |
| 80 0 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 |
@--D--L @------------------------------------------------------------------@
| |
| g0 0 | 222222222222222222222221212121212121212121212121212121202020
| g0 0 | 262626262626262626262626262525252525252525252525252525252524
@--D--L @-----DJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJ-@
| 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 |
| z1 1 @------------------------------------------------------------------@
| 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 |
| z2 2 @------------------------------------------------------------------@
@--D--L |
| 202020202020202020202020202828282828282828282828282828282827
| 242424242424242424242424242424232323232323232323232323232323
@-----DJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJ-@
0 0 0 0 0 0 0 0 0 0 0 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 |
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 |
@------------------------------------------------------------------@
|
| 272727272727272727272727272727262626262626262626262626262626
| 232222222222222222222222222222222221212121212121212121212121
@-----DJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJ-@
7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 |
3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 |
@------------------------------------------------------------------@
|
| 262525252525252525252525252525252524242424242424242424242424
| 212121202020202020202020202020202020202828282828282828282828
@-----DJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJDJ-@
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 |
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 8 8 8 8 8 8 8 8 8 |
39 changes: 18 additions & 21 deletions latch.betula
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
_latch_






7
2*-----------@-L--@
| |
| |
7*------S---J@
777 7



000 0
7*------Z--L--@
| |
| |
0*-----J----@--J--@












0*------->-@-----<-@
| |
|1 18 |
8*----------------S--@-D--@
8 | 8
@-------------L
53 changes: 30 additions & 23 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,32 +63,35 @@ type delay struct {
oldValue rune
oldValueXY coord
outputXY coord
nextValue rune
selfXY coord
lag int
}

var allDelays = map[coord]*delay{}

func makeDelay(p coord, value rune, b board) *delay {
var del = delay{}

del.selfXY = p
del.inputXY = coord{p.x - 1, p.y}
del.outputXY = coord{p.x + 1, p.y}
del.oldValueXY = coord{p.x + 1, p.y - 1}
del.lagXY = coord{p.x, p.y - 1}
del.oldValue = value
del.lag = rune2Int(b.getC(del.lagXY))
if del.lag == -1 {
del.lag = 0
b.setC(del.lagXY, int2Rune(0))
}
del.expiration = clockTicks + del.lag
return &del
var d = delay{}

d.selfXY = p
d.inputXY = coord{p.x - 1, p.y}
d.outputXY = coord{p.x + 1, p.y}
d.oldValueXY = coord{p.x + 1, p.y - 1}
d.lagXY = coord{p.x, p.y - 1}
d.oldValue = value
d.nextValue = 0
d.lag = rune2Int(b.getC(d.lagXY))
if d.lag == -1 {
d.lag = 0
b.setC(d.lagXY, int2Rune(0))
}
d.expiration = clockTicks + d.lag
return &d
}
func (d *delay) reset(b board, value rune) {
// delay is over - use the new value
d.oldValue = value
d.nextValue = 0
b.setC(d.oldValueXY, value)
d.lag = rune2Int(b.getC(d.lagXY))
if d.lag == -1 {
Expand All @@ -98,7 +101,10 @@ func (d *delay) reset(b board, value rune) {
d.expiration = clockTicks + d.lag
}

func (d *delay) propagate(visited visitors, b board, value rune, multi map[coord]int) {
func (d *delay) propagate(visited visitors, b board, f coord, value rune, multi map[coord]int) {
if f == d.inputXY {
d.nextValue = value
}
if visited.yes(d.selfXY) {
return
}
Expand All @@ -107,9 +113,11 @@ func (d *delay) propagate(visited visitors, b board, value rune, multi map[coord
propagate(visited, b, d.selfXY, d.outputXY, d.oldValue, multi)
return
}
// delay is over, send the saved value
propagate(visited, b, d.selfXY, d.outputXY, d.oldValue, multi)
d.reset(b, value)
// delay is over, reset if we have a new value
if d.nextValue != 0 {
propagate(visited, b, d.selfXY, d.outputXY, d.oldValue, multi)
d.reset(b, d.nextValue)
}
}

type relay struct {
Expand Down Expand Up @@ -484,10 +492,7 @@ func propagate(visited visitors, b board, f coord, p coord, value rune, multi ma
del = makeDelay(p, value, b)
allDelays[p] = del
}
if f == del.inputXY {
del.propagate(visited, b, value, multi)
return
}
del.propagate(visited, b, f, value, multi)

case '=':
// ..
Expand Down Expand Up @@ -715,6 +720,8 @@ func interpreter(b board) {
roots = append(roots, coord{x, y})
case 'R':
roots = append(roots, coord{x, y})
case 'D':
roots = append(roots, coord{x, y})
default:
}
}
Expand Down

0 comments on commit 74cfb17

Please sign in to comment.