Fun little problem. Here's another entry in my "The only data structure needed is a multi-line string" collection.
#!/usr/bin/perl
use strict; # https://perlmonks.org/?node_id=11148831
use warnings;
sub quarterturn
{
my $new = '';
$new .= "\n" while s/.$/ $new .= $&; '' /gem;
return $new;
}
my $forest = do { local (@ARGV, $/) = 'input8.txt'; <> };
my $visible = '';
for ( 0 .. 3 )
{
$visible |= $forest =~ s{(.)(?=(.*))}{ $2 =~ /[$1-9]/ ^ 1 }ger;
$_ = quarterturn for $forest, $visible;
}
my $totalvisible = $visible =~ tr/1//; # count ones
print "$forest\n$visible\ntotal visible: $totalvisible\n";