Elementary cellular automaton: Difference between revisions

Rename Perl 6 -> Raku, alphabetize, minor clean-up
(→‎{{header|Julia}}: just swapped the signs, so the output is now correct (was mirror image))
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
Line 261:
---(output snipped)---
</pre>
 
=={{header|C++}}==
<lang cpp>#include <bitset>
#include <stdio.h>
 
#define SIZE 80
#define RULE 30
#define RULE_TEST(x) (RULE & 1 << (7 & (x)))
 
void evolve(std::bitset<SIZE> &s) {
int i;
std::bitset<SIZE> t(0);
t[SIZE-1] = RULE_TEST( s[0] << 2 | s[SIZE-1] << 1 | s[SIZE-2] );
t[ 0] = RULE_TEST( s[1] << 2 | s[ 0] << 1 | s[SIZE-1] );
for (i = 1; i < SIZE-1; i++)
t[i] = RULE_TEST( s[i+1] << 2 | s[i] << 1 | s[i-1] );
for (i = 0; i < SIZE; i++) s[i] = t[i];
}
void show(std::bitset<SIZE> s) {
int i;
for (i = SIZE; --i; ) printf("%c", s[i] ? '#' : ' ');
printf("\n");
}
int main() {
int i;
std::bitset<SIZE> state(1);
state <<= SIZE / 2;
for (i=0; i<10; i++) {
show(state);
evolve(state);
}
return 0;
}</lang>
{{out}}
<pre> # |
### |
## # |
## #### |
## # # |
## #### ### |
## # # # |
## #### ###### |
## # ### # |
## #### ## # ### |</pre>
 
 
=={{header|C sharp|C#}}==
Line 459 ⟶ 414:
50: .##.#...#.#...#.##.
</pre>
 
=={{header|C++}}==
<lang cpp>#include <bitset>
#include <stdio.h>
 
#define SIZE 80
#define RULE 30
#define RULE_TEST(x) (RULE & 1 << (7 & (x)))
 
void evolve(std::bitset<SIZE> &s) {
int i;
std::bitset<SIZE> t(0);
t[SIZE-1] = RULE_TEST( s[0] << 2 | s[SIZE-1] << 1 | s[SIZE-2] );
t[ 0] = RULE_TEST( s[1] << 2 | s[ 0] << 1 | s[SIZE-1] );
for (i = 1; i < SIZE-1; i++)
t[i] = RULE_TEST( s[i+1] << 2 | s[i] << 1 | s[i-1] );
for (i = 0; i < SIZE; i++) s[i] = t[i];
}
void show(std::bitset<SIZE> s) {
int i;
for (i = SIZE; --i; ) printf("%c", s[i] ? '#' : ' ');
printf("\n");
}
int main() {
int i;
std::bitset<SIZE> state(1);
state <<= SIZE / 2;
for (i=0; i<10; i++) {
show(state);
evolve(state);
}
return 0;
}</lang>
{{out}}
<pre> # |
### |
## # |
## #### |
## # # |
## #### ### |
## # # # |
## #### ###### |
## # ### # |
## #### ## # ### |</pre>
 
=={{header|Ceylon}}==
Line 753 ⟶ 752:
 
</lang>
 
 
=={{header|Elixir}}==
Line 1,797 ⟶ 1,795:
| # # # # # # # # |
| # # # # # # # # # # # # # # # # |</pre>
 
=={{header|Perl 6}}==
 
Using the <tt>Automaton</tt> class defined at [[One-dimensional_cellular_automata#Perl_6]]:
 
<lang perl6>class Automaton {
has $.rule;
has @.cells;
has @.code = $!rule.fmt('%08b').flip.comb».Int;
method gist { "|{ @!cells.map({+$_ ?? '#' !! ' '}).join }|" }
method succ {
self.new: :$!rule, :@!code, :cells(
@!code[
4 «*« @!cells.rotate(-1)
»+« 2 «*« @!cells
»+« @!cells.rotate(1)
]
)
}
}
 
my @padding = 0 xx 10;
 
my Automaton $a .= new:
:rule(30),
:cells(flat @padding, 1, @padding);
 
say $a++ for ^10;</lang>
 
{{out}}
<pre>
| # |
| ### |
| ## # |
| ## #### |
| ## # # |
| ## #### ### |
| ## # # # |
| ## #### ###### |
| ## # ### # |
| ## #### ## # ### |
</pre>
 
=={{header|Phix}}==
Line 2,288 ⟶ 2,242:
#fx(522495)
0</pre>
 
=={{header|Raku}}==
(formerly Perl 6)
 
Using the <tt>Automaton</tt> class defined at [[One-dimensional_cellular_automata#Perl_6]]:
 
<lang perl6>class Automaton {
has $.rule;
has @.cells;
has @.code = $!rule.fmt('%08b').flip.comb».Int;
method gist { "|{ @!cells.map({+$_ ?? '#' !! ' '}).join }|" }
method succ {
self.new: :$!rule, :@!code, :cells(
@!code[
4 «*« @!cells.rotate(-1)
»+« 2 «*« @!cells
»+« @!cells.rotate(1)
]
)
}
}
 
my @padding = 0 xx 10;
 
my Automaton $a .= new:
:rule(30),
:cells(flat @padding, 1, @padding);
 
say $a++ for ^10;</lang>
 
{{out}}
<pre>
| # |
| ### |
| ## # |
| ## #### |
| ## # # |
| ## #### ### |
| ## # # # |
| ## #### ###### |
| ## # ### # |
| ## #### ## # ### |
</pre>
 
=={{header|Ruby}}==
Line 2,346 ⟶ 2,345:
..............#.#.....#.#..............
</pre>
 
=={{header|Rust}}==
<lang Rust>
10,327

edits