Elementary cellular automaton/Random number generator: Difference between revisions
Elementary cellular automaton/Random number generator (view source)
Revision as of 22:06, 14 August 2018
, 5 years agoAdded Go
SqrtNegInf (talk | contribs) m (→{{header|Perl}}: inline package code from 'Elementary cellular automaton' task) |
(Added Go) |
||
Line 150:
44</pre>
Run-time: less than two seconds with the ldc2 compiler.
=={{header|Go}}==
{{trans|C}}
<lang go>package main
import "fmt"
const n = 64
func pow2(x uint) uint64 {
return uint64(1) << x
}
func evolve(state uint64, rule int) {
for p := 0; p < 10; p++ {
b := uint64(0)
for q := 7; q >= 0; q-- {
st := state
b |= (st & 1) << uint(q)
state = 0
for i := uint(0); i < n; i++ {
var t1, t2, t3 uint64
if i > 0 {
t1 = st >> (i - 1)
} else {
t1 = st >> 63
}
if i == 0 {
t2 = st << 1
} else if i == 1 {
t2 = st << 63
} else {
t2 = st << (n + 1 - i)
}
t3 = 7 & (t1 | t2)
if (uint64(rule) & pow2(uint(t3))) != 0 {
state |= pow2(i)
}
}
}
fmt.Printf("%d ", b)
}
fmt.Println()
}
func main() {
evolve(1, 30)
}</lang>
{{out}}
<pre>
220 197 147 174 117 97 149 171 100 151
</pre>
=={{header|Haskell}}==
|