2017-22
This commit is contained in:
parent
a1a18c063e
commit
e330552b51
84
21/1.pl
Normal file
84
21/1.pl
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
use 5.20.0;
|
||||||
|
|
||||||
|
use Grid::Transform;
|
||||||
|
|
||||||
|
my %transform;
|
||||||
|
my $i = 0;
|
||||||
|
while(<>) {
|
||||||
|
chomp;
|
||||||
|
s/\///g;
|
||||||
|
my ($from,$to) = split ' => ';
|
||||||
|
|
||||||
|
my @from = split '', $from;
|
||||||
|
my $gt = Grid::Transform->new( \@from, rows => sqrt @from );
|
||||||
|
|
||||||
|
for my $t (
|
||||||
|
map { $_, $_->copy->rotate90, $_->copy->rotate180, $_->copy->rotate270 }
|
||||||
|
map { $_, $_->copy->flip_vertical } $gt ) {
|
||||||
|
$transform{ join '', $t->grid} = $to;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
use DDP;
|
||||||
|
#p %transform;
|
||||||
|
|
||||||
|
my @grid = ([qw/ . # . /], [qw/ . . # /], [qw/ # # # /] );
|
||||||
|
|
||||||
|
for( 1..5 ) {
|
||||||
|
my @new_grid;
|
||||||
|
if( not @grid % 2 ) {
|
||||||
|
for my $x ( 0..$#grid/2 ) {
|
||||||
|
for my $y ( 0..$#grid/2 ) {
|
||||||
|
transform_2(\@grid,\@new_grid,$x,$y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for my $x ( 0..$#grid/3 ) {
|
||||||
|
for my $y ( 0..$#grid/3 ) {
|
||||||
|
transform_3(\@grid,\@new_grid,$x,$y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
say @$_ for @new_grid;
|
||||||
|
say "\n\n";
|
||||||
|
@grid = @new_grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
say scalar grep { $_ eq '#' } map { @$_ } @grid;
|
||||||
|
|
||||||
|
sub transform_2 {
|
||||||
|
my ( $grid, $n, $x, $y ) = @_;
|
||||||
|
warn "$x:$y";
|
||||||
|
my $k;
|
||||||
|
for my $i ( 0..1 ) {
|
||||||
|
for my $j ( 0..1 ) {
|
||||||
|
$k .= $grid->[2*$x+$i][2*$y+$j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
my @new = split '', $transform{$k};
|
||||||
|
warn @new;
|
||||||
|
my ($r,$c) = ($x,$y);
|
||||||
|
for my $k ( 0..2 ) {
|
||||||
|
$n->[3*$r+$k] ||= [];
|
||||||
|
$n->[3*$r+$k][3*$c+$_] = shift @new for 0..2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub transform_3 {
|
||||||
|
my ( $grid, $n, $x, $y ) = @_;
|
||||||
|
my $k;
|
||||||
|
for my $i ( 0..2 ) {
|
||||||
|
for my $j ( 0..2 ) {
|
||||||
|
$k .= $grid->[3*$x+$i][3*$y+$j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
warn $k;
|
||||||
|
my @new = split '', $transform{$k};
|
||||||
|
my ($r,$c) = ($x,$y);
|
||||||
|
for my $k ( 0..3 ) {
|
||||||
|
$n->[4*$x+$k] ||= [];
|
||||||
|
$n->[4*$x+$k][4*$c+$_] = shift @new for 0..3;
|
||||||
|
}
|
||||||
|
}
|
108
21/input.txt
Normal file
108
21/input.txt
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
../.. => .##/#../..#
|
||||||
|
#./.. => .##/#../###
|
||||||
|
##/.. => ..#/#.#/#..
|
||||||
|
.#/#. => #../#../.#.
|
||||||
|
##/#. => .#./#../#..
|
||||||
|
##/## => .##/.../.##
|
||||||
|
.../.../... => #.#./###./####/#..#
|
||||||
|
#../.../... => .###/####/##../#.##
|
||||||
|
.#./.../... => ###./.###/#..#/#.##
|
||||||
|
##./.../... => ..../..../.#../##..
|
||||||
|
#.#/.../... => ...#/.##./..../##..
|
||||||
|
###/.../... => ##../##../##.#/..##
|
||||||
|
.#./#../... => .#../###./##../####
|
||||||
|
##./#../... => ####/##.#/..../..##
|
||||||
|
..#/#../... => ..#./####/...#/#.##
|
||||||
|
#.#/#../... => #.#./##../##../.##.
|
||||||
|
.##/#../... => ##../####/..#./...#
|
||||||
|
###/#../... => #..#/#.#./##.#/#.#.
|
||||||
|
.../.#./... => .#.#/..#./#.../....
|
||||||
|
#../.#./... => ##../..##/..##/.#..
|
||||||
|
.#./.#./... => ..../##../##../#.##
|
||||||
|
##./.#./... => ...#/##../#..#/.###
|
||||||
|
#.#/.#./... => ####/##.#/###./..##
|
||||||
|
###/.#./... => ..../...#/.###/.#..
|
||||||
|
.#./##./... => #.#./#..#/.##./.#.#
|
||||||
|
##./##./... => .###/#.../#..#/#.#.
|
||||||
|
..#/##./... => .###/####/..../#.##
|
||||||
|
#.#/##./... => ...#/.###/.###/.###
|
||||||
|
.##/##./... => ..##/..##/.###/##.#
|
||||||
|
###/##./... => ####/#..#/####/#.#.
|
||||||
|
.../#.#/... => #.##/..#./.###/#.#.
|
||||||
|
#../#.#/... => ####/##.#/##.#/....
|
||||||
|
.#./#.#/... => #.../...#/#.##/#..#
|
||||||
|
##./#.#/... => .#.#/##../##../....
|
||||||
|
#.#/#.#/... => ##.#/#.../##../.#..
|
||||||
|
###/#.#/... => ...#/###./.#.#/...#
|
||||||
|
.../###/... => .###/#.##/#.../###.
|
||||||
|
#../###/... => ..##/.#../.###/..#.
|
||||||
|
.#./###/... => ..../.##./#.##/#.##
|
||||||
|
##./###/... => .#.#/##.#/#.../#.#.
|
||||||
|
#.#/###/... => ..#./#.../#.#./.##.
|
||||||
|
###/###/... => ..##/.#.#/#..#/.##.
|
||||||
|
..#/.../#.. => ..##/.#../##.#/##..
|
||||||
|
#.#/.../#.. => ..#./..../#.../...#
|
||||||
|
.##/.../#.. => .##./..##/####/#...
|
||||||
|
###/.../#.. => #.##/..../##../#.##
|
||||||
|
.##/#../#.. => .###/...#/###./....
|
||||||
|
###/#../#.. => .#.#/#.#./#.##/..#.
|
||||||
|
..#/.#./#.. => ...#/..#./..##/.#.#
|
||||||
|
#.#/.#./#.. => #.../##.#/.###/#.#.
|
||||||
|
.##/.#./#.. => ###./####/#..#/##.#
|
||||||
|
###/.#./#.. => ..../..#./..../#...
|
||||||
|
.##/##./#.. => .#.#/.##./.#.#/#.##
|
||||||
|
###/##./#.. => ..../##../###./.#.#
|
||||||
|
#../..#/#.. => ...#/#.../#.##/.###
|
||||||
|
.#./..#/#.. => #..#/.#../###./#.#.
|
||||||
|
##./..#/#.. => #.#./..#./###./###.
|
||||||
|
#.#/..#/#.. => .#.#/##.#/##../####
|
||||||
|
.##/..#/#.. => ###./..../.#../...#
|
||||||
|
###/..#/#.. => #.#./.##./.#.#/#..#
|
||||||
|
#../#.#/#.. => #.#./##.#/.#../.###
|
||||||
|
.#./#.#/#.. => ##.#/#.#./#.../####
|
||||||
|
##./#.#/#.. => .#.#/#.../..#./#.##
|
||||||
|
..#/#.#/#.. => ##.#/.##./#.../.###
|
||||||
|
#.#/#.#/#.. => ..##/..../..../####
|
||||||
|
.##/#.#/#.. => ####/#.#./###./.#.#
|
||||||
|
###/#.#/#.. => #.##/..#./##../#...
|
||||||
|
#../.##/#.. => ..##/##.#/####/.#..
|
||||||
|
.#./.##/#.. => ..##/##../.#../..##
|
||||||
|
##./.##/#.. => ..##/.#.#/#..#/....
|
||||||
|
#.#/.##/#.. => #.../##../...#/.#.#
|
||||||
|
.##/.##/#.. => ##../...#/.###/.#.#
|
||||||
|
###/.##/#.. => ####/..#./.##./#.##
|
||||||
|
#../###/#.. => .#.#/##.#/#.#./#.#.
|
||||||
|
.#./###/#.. => .###/#..#/.#.#/###.
|
||||||
|
##./###/#.. => ##../.#../###./.#.#
|
||||||
|
..#/###/#.. => #.##/..../...#/..#.
|
||||||
|
#.#/###/#.. => #.../#..#/..../.#..
|
||||||
|
.##/###/#.. => ####/#..#/..#./.#.#
|
||||||
|
###/###/#.. => .##./##../.#../..#.
|
||||||
|
.#./#.#/.#. => #.#./.###/#.#./..##
|
||||||
|
##./#.#/.#. => .##./..../..##/##..
|
||||||
|
#.#/#.#/.#. => ...#/..../.#.#/..##
|
||||||
|
###/#.#/.#. => .#../####/#.#./#.##
|
||||||
|
.#./###/.#. => #..#/.#.#/#..#/#.#.
|
||||||
|
##./###/.#. => .#../##../#..#/..##
|
||||||
|
#.#/###/.#. => #.#./.##./##.#/.#.#
|
||||||
|
###/###/.#. => #.#./...#/..##/#...
|
||||||
|
#.#/..#/##. => ..#./..#./...#/#..#
|
||||||
|
###/..#/##. => #..#/###./..../##.#
|
||||||
|
.##/#.#/##. => #.##/.#.#/...#/..##
|
||||||
|
###/#.#/##. => #.##/...#/.##./.###
|
||||||
|
#.#/.##/##. => ..../##.#/..../...#
|
||||||
|
###/.##/##. => .###/#.../###./###.
|
||||||
|
.##/###/##. => #.../#.#./.###/..#.
|
||||||
|
###/###/##. => #.##/.#../..#./.#.#
|
||||||
|
#.#/.../#.# => .##./##../###./.###
|
||||||
|
###/.../#.# => ..##/...#/###./.#..
|
||||||
|
###/#../#.# => ##.#/..#./#.##/.#..
|
||||||
|
#.#/.#./#.# => .#../#.##/...#/###.
|
||||||
|
###/.#./#.# => ..#./..../####/####
|
||||||
|
###/##./#.# => ###./#..#/..../#..#
|
||||||
|
#.#/#.#/#.# => ##.#/###./..../#...
|
||||||
|
###/#.#/#.# => ##../.###/#..#/.#..
|
||||||
|
#.#/###/#.# => #.../###./.###/..#.
|
||||||
|
###/###/#.# => ..../.##./.#../###.
|
||||||
|
###/#.#/### => ##../#.../.###/#...
|
||||||
|
###/###/### => .###/###./#.##/..#.
|
38
22/1.pl
Normal file
38
22/1.pl
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
use 5.20.0;
|
||||||
|
|
||||||
|
use Math::Vector::Real;
|
||||||
|
|
||||||
|
use experimental qw/ postderef signatures /;
|
||||||
|
|
||||||
|
my @d = map { V(@$_) } [ -1,0], [0,1],[1,0],[0,-1];
|
||||||
|
my $di = 0;
|
||||||
|
|
||||||
|
my %grid;
|
||||||
|
my ($i,$j) = (0,0);
|
||||||
|
for my $r( <> ) {
|
||||||
|
$j = 0;
|
||||||
|
chomp $r;
|
||||||
|
for ( split '', $r ) {
|
||||||
|
$grid{$i}{$j++} = $_;
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
use DDP;
|
||||||
|
p %grid;
|
||||||
|
|
||||||
|
my $coord = V(12,12);
|
||||||
|
|
||||||
|
|
||||||
|
my $sum;
|
||||||
|
for(1..10_000){
|
||||||
|
my $infected = $grid{$coord->[0]}{$coord->[1]} eq '#';
|
||||||
|
$di += $infected ? 1 : 3;
|
||||||
|
$di %= 4;
|
||||||
|
$grid{$coord->[0]}{$coord->[1]} = $infected ? '.' : '#';
|
||||||
|
$sum++ unless $infected;
|
||||||
|
$coord += $d[$di];
|
||||||
|
}
|
||||||
|
|
||||||
|
say $sum;
|
||||||
|
|
46
22/2.pl
Normal file
46
22/2.pl
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
use 5.20.0;
|
||||||
|
|
||||||
|
use Math::Vector::Real;
|
||||||
|
|
||||||
|
use experimental qw/ postderef signatures /;
|
||||||
|
|
||||||
|
my @d = map { V(@$_) } [ -1,0], [0,1],[1,0],[0,-1];
|
||||||
|
my $di = 0;
|
||||||
|
|
||||||
|
my %grid;
|
||||||
|
my ($i,$j) = (0,0);
|
||||||
|
for my $r( <> ) {
|
||||||
|
$j = 0;
|
||||||
|
chomp $r;
|
||||||
|
for ( split '', $r ) {
|
||||||
|
$grid{$i}{$j++} = $_ eq '#' ? 2 : 0;
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
use DDP;
|
||||||
|
p %grid;
|
||||||
|
|
||||||
|
my $coord = V( ( 12 ) x 2);
|
||||||
|
|
||||||
|
my @id = ( 3, 0, 1, 2 );
|
||||||
|
|
||||||
|
my $sum;
|
||||||
|
for(1..10000000){
|
||||||
|
my $infected = $grid{$coord->[0]}{$coord->[1]};
|
||||||
|
$di += $id[$infected];
|
||||||
|
$di %= 4;
|
||||||
|
$grid{$coord->[0]}{$coord->[1]} = ($infected +1)%4;
|
||||||
|
$sum++ if $infected == 1;
|
||||||
|
$coord += $d[$di];
|
||||||
|
# my %p = ( 0 => '.', 1 => 'W', 2 => 'I', 3 => 'F' );
|
||||||
|
# for my $x ( -3..3 ) {
|
||||||
|
# for my $y ( -3..3 ) {
|
||||||
|
# print $p{ $grid{$x}{$y} };
|
||||||
|
# }
|
||||||
|
# print "\n";
|
||||||
|
# }
|
||||||
|
}
|
||||||
|
|
||||||
|
say $sum;
|
||||||
|
|
25
22/input.txt
Normal file
25
22/input.txt
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
###.######..##.##..#..#.#
|
||||||
|
#.#.#.##.##.#####..##..#.
|
||||||
|
##...#.....#.#.#..##.#.##
|
||||||
|
....#####.#.#.#..###.###.
|
||||||
|
###.#.......#..#.#...#..#
|
||||||
|
.#.######.##.#.....#...##
|
||||||
|
##.#...#..#..#....##.#.#.
|
||||||
|
#.##..#..##.##..###...#.#
|
||||||
|
.#.......#.#..####.#.#.##
|
||||||
|
.#...###...##..#...#.#..#
|
||||||
|
...##......#.##.....#..#.
|
||||||
|
######....##...##.....#.#
|
||||||
|
.####..##..##.#.##.##..#.
|
||||||
|
.#.#...###.#....#.##.####
|
||||||
|
..####..#.#..#.#.#......#
|
||||||
|
#.#..##..#####.#.#....##.
|
||||||
|
.....#..########....#.##.
|
||||||
|
##.###....#..###..#.....#
|
||||||
|
.#.##...#.#...###.##...#.
|
||||||
|
..#.##..#..####.##..###.#
|
||||||
|
.#..#.##..#.##...#####.#.
|
||||||
|
#..##............#..#....
|
||||||
|
###.....#.##.#####...#.##
|
||||||
|
##.##..#.....##..........
|
||||||
|
#.#..##.#.#..#....##..#.#
|
Loading…
Reference in New Issue
Block a user