#!/usr/bin/ruby

#
## https://rosettacode.org/wiki/Wireworld
#

var f = [[], DATA.lines.map {['', .chomp.chars..., '']}..., []];

var gens = [];

range(1, 10).each {
    gens << f;
    var a = [[]];
    range(1, f.end-1).each { |y|
        var r = f[y];
        var rr = [''];
        range(1, r.end-1).each { |x|
            var c = r[x];
            rr.append(
              given(c) {
                when('H') { 't' }
                when('t') { '.' }
                when('.') { <. H>[f.slice(y-1, 3).map{.slice(x-1, 3)...}.count('H') ~~ [1,2]] }
                default   { c }
              }
            )
        }
        rr.append('');
        a.append(rr);
    }
    f = [a..., []];
}

var gen10 = <<'EOT'.lines.map{.strip}.join("\n");

 t H . t H . t H . t H
 .       H
       . . .
 .       .
 H t H .   . . . . . .
EOT

var t = gens[-1].map { .join(" ") }.map{.strip}.join("\n").chomp;
assert_eq(t, gen10);

say "** Test passed!";

__DATA__
tH.........
.   .
   ...
.   .
Ht.. ......