Elementary cellular automaton/Infinite length: Difference between revisions

no edit summary
m (→‎{{header|Racket}}: Brackets; indentation; fix link.)
No edit summary
Line 14:
 
More complex methods can be imagined, provided it is possible to somehow encode the infinite sections. But for this task we will stick to this simple version.
 
=={{header|C++}}==
<lang cpp>
#include <iostream>
#include <iomanip>
#include <string>
 
class oo {
public:
void evolve( int l, int rule ) {
std::string cells = "O";
std::cout << " Rule #" << rule << ":\n";
for( int x = 0; x < l; x++ ) {
addNoCells( cells );
std::cout << std::setw( 40 + ( static_cast<int>( cells.length() ) >> 1 ) ) << cells << "\n";
step( cells, rule );
}
}
private:
void step( std::string& cells, int rule ) {
int bin;
std::string newCells;
for( size_t i = 0; i < cells.length() - 2; i++ ) {
bin = 0;
for( size_t n = i, b = 2; n < i + 3; n++, b >>= 1 ) {
bin += ( ( cells[n] == 'O' ? 1 : 0 ) << b );
}
newCells.append( 1, rule & ( 1 << bin ) ? 'O' : '.' );
}
cells = newCells;
}
void addNoCells( std::string& s ) {
char l = s.at( 0 ) == 'O' ? '.' : 'O',
r = s.at( s.length() - 1 ) == 'O' ? '.' : 'O';
s = l + s + r;
s = l + s + r;
}
};
int main( int argc, char* argv[] ) {
oo o;
o.evolve( 35, 90 );
std::cout << "\n";
return 0;
}
</lang>
{{out}}
<pre>
Rule #90: Rule #30:
..O.. ..O..
..O.O.. ..OOO..
..O...O.. ..OO..O..
..O.O.O.O.. ..OO.OOOO..
..O.......O.. ..OO..O...O..
..O.O.....O.O.. ..OO.OOOO.OOO..
..O...O...O...O.. ..OO..O....O..O..
..O.O.O.O.O.O.O.O.. ..OO.OOOO..OOOOOO..
..O...............O.. ..OO..O...OOO.....O..
..O.O.............O.O.. ..OO.OOOO.OO..O...OOO..
..O...O...........O...O.. ..OO..O....O.OOOO.OO..O..
..O.O.O.O.........O.O.O.O.. ..OO.OOOO..OO.O....O.OOOO..
..O.......O.......O.......O.. ..OO..O...OOO..OO..OO.O...O..
..O.O.....O.O.....O.O.....O.O.. ..OO.OOOO.OO..OOO.OOO..OO.OOO..
..O...O...O...O...O...O...O...O.. ..OO..O....O.OOO...O..OOO..O..O..
..O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.O.. ..OO.OOOO..OO.O..O.OOOOO..OOOOOOO..
..O...............................O.. ..OO..O...OOO..OOOO.O....OOO......O..
..O.O.............................O.O.. ..OO.OOOO.OO..OOO....OO..OO..O....OOO..
..O...O...........................O...O.. ..OO..O....O.OOO..O..OO.OOO.OOOO..OO..O..
..O.O.O.O.........................O.O.O.O.. ..OO.OOOO..OO.O..OOOOOO..O...O...OOO.OOOO..
..O.......O.......................O.......O.. ..OO..O...OOO..OOOO.....OOOO.OOO.OO...O...O..
..O.O.....O.O.....................O.O.....O.O.. ..OO.OOOO.OO..OOO...O...OO....O...O.O.OOO.OOO..
..O...O...O...O...................O...O...O...O.. ..OO..O....O.OOO..O.OOO.OO.O..OOO.OO.O.O...O..O..
..O.O.O.O.O.O.O.O.................O.O.O.O.O.O.O.O.. ..OO.OOOO..OO.O..OOO.O...O..OOOO...O..O.OO.OOOOOO..
..O...............O...............O...............O.. ..OO..O...OOO..OOOO...OO.OOOOO...O.OOOOO.O..O.....O..
</pre>
 
=={{header|D}}==