Image:CARuleComparison18-18R.png

From Wikipedia, the free encyclopedia

Wikimedia Commons logo This is a file from the Wikimedia Commons. The description on its description page there is shown below.
Commons is a freely licensed media file repository. You can help.

Evolution of elementary CA rule 18 and its second order counterpart from the same initial state. Time runs downwards. Note the up/down asymmetric triangles formed by the nonreversible rule.

[edit] Licensing

Public domain I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.

In case this is not legally possible:
I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.


Afrikaans | Alemannisch | Aragonés | العربية | Asturianu | Български | Català | Česky | Cymraeg | Dansk | Deutsch | Eʋegbe | Ελληνικά | English | Español | Esperanto | Euskara | Estremeñu | فارسی | Français | Galego | 한국어 | हिन्दी | Hrvatski | Ido | Bahasa Indonesia | Íslenska | Italiano | עברית | Kurdî / كوردی | Latina | Lietuvių | Latviešu | Magyar | Македонски | Bahasa Melayu | Nederlands | ‪Norsk (bokmål)‬ | ‪Norsk (nynorsk)‬ | 日本語 | Polski | Português | Ripoarisch | Română | Русский | Shqip | Slovenčina | Slovenščina | Српски / Srpski | Svenska | ไทย | Tagalog | Türkçe | Українська | Tiếng Việt | Walon | ‪中文(简体)‬ | ‪中文(繁體)‬ | zh-yue-hant | +/-

[edit] Perl script

This image was generated by combining two PBM images generated by the following Perl script, which is released into the public domain under the same terms as the image itself. The script, if saved as "capbm.pl", may be invoked as:

perl capbm.pl rule[R] width height [ line1 [ line0 ] ] >output.pbm

where:

  • rule is the Wolfram code for the rule, with "R" appended for second-order rules,
  • width and height are the dimension of the output image in pixels/cells,
  • line1 is the starting configuration as a string of zeros and ones, padded by zeros on both sides if necessary (default = "1"),
  • line0 is the previous generation (for second-order rules) in the same format as line1 (default = ""),
  • output.pbm is the name of the image to create,

and square brackets denote optional parameters.

#!/usr/bin/perl -w
use strict;
 
my $rule = shift || 110;
 
$rule =~ /^(\d+)(R?)$/i and $1 < 256 or die "Invalid rule: '$rule'\n";
$rule = $1;
my $r = $2;
 
my %map;
$map{unpack "B3", pack "C", $_ << 5} =
    ($rule >> $_) & 1 for 0 .. 7;
 
my $w = shift || 200;
my $h = shift || $w;
 
$w =~ /\D/ and die "Invalid width: '$w'\n";
$h =~ /\D/ and die "Invalid heigth: '$h'\n";
 
my $pat1 = shift || "1";
$pat1 =~ /[^01]/ and die "Invalid pattern: '$pat1'\n";
length($pat1) > $w and die "Pattern too long.\n";
 
my $pat2 = shift || "";
$pat2 =~ /[^01]/ and die "Invalid pattern 2: '$pat2'\n";
length($pat2) > $w and die "Pattern 2 too long.\n";
 
my $buf1 = my $buf2 = "0" x $w;
 
substr($buf1, ($w-length($pat1))/2, length($pat1), $pat1);
substr($buf2, ($w-length($pat2))/2, length($pat2), $pat2);
 
print "P1 $w $h\n";
#$h--, print $buf2, "\n" if $r and $h;
 
while ($h--) {
    print $buf1, "\n";
    unless ($r) {
        substr($buf2,  0, 1, $map{substr($buf1, -1).substr($buf1, 0, 2)});
        substr($buf2, $_, 1, $map{substr($buf1, $_-1, 3)}) for 1 .. $w-2;
        substr($buf2, -1, 1, $map{substr($buf1, -2).substr($buf1, 0, 1)});
    } else {
        substr($buf2,  0, 1) ^= $map{substr($buf1, -1).substr($buf1, 0, 2)};
        substr($buf2, $_, 1) ^= $map{substr($buf1, $_-1, 3)} for 1 .. $w-2;
        substr($buf2, -1, 1) ^= $map{substr($buf1, -2).substr($buf1, 0, 1)};
    }
    last unless $h--;
 
    print $buf2, "\n";
    unless ($r) {
        substr($buf1,  0, 1, $map{substr($buf2, -1).substr($buf2, 0, 2)});
        substr($buf1, $_, 1, $map{substr($buf2, $_-1, 3)}) for 1 .. $w-2;
        substr($buf1, -1, 1, $map{substr($buf2, -2).substr($buf2, 0, 1)});
    } else {
        substr($buf1,  0, 1) ^= $map{substr($buf2, -1).substr($buf2, 0, 2)};
        substr($buf1, $_, 1) ^= $map{substr($buf2, $_-1, 3)} for 1 .. $w-2;
        substr($buf1, -1, 1) ^= $map{substr($buf2, -2).substr($buf2, 0, 1)};
    }
}
 
__END__

[edit] Original file history on the English Wikipedia

  • 19:53, 29 August 2005 . . Ilmari Karonen (Talk) . . 200x100 (5166 bytes) (Evolution of elementary CA rule 18 and its second order counterpart from the same initial state. Time runs downwards. Note the up/down asymmetric triangles formed by the nonreversible rule. {{PD-)

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeDimensionsUserComment
current17:16, 20 March 2006200×100 (5 KB)Maksim (La bildo estas kopiita de wikipedia:en. La originala priskribo estas: Evolution of elementary CA rule 18 and its second order counterpart from the same initial state. Time runs downwards. Note t)
The following pages on the English Wikipedia link to this file (pages on other projects are not listed):