lots of days
This commit is contained in:
parent
f5996b47cd
commit
2b88e2660e
57
2015/18/1.pl
Normal file
57
2015/18/1.pl
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
use 5.20.0;
|
||||||
|
|
||||||
|
use List::AllUtils qw/ min sum /;
|
||||||
|
|
||||||
|
my @grid = map { [ split '' ] } map { chomp; $_ } <>;
|
||||||
|
|
||||||
|
use DDP;
|
||||||
|
|
||||||
|
@grid = iteration(@grid) for 1..100;
|
||||||
|
|
||||||
|
say sum map { $_ eq '#' } map { @$_ } @grid;
|
||||||
|
|
||||||
|
sub iteration {
|
||||||
|
my @grid = @_;
|
||||||
|
|
||||||
|
#say join ' ', @$_ for @grid;
|
||||||
|
#say;
|
||||||
|
|
||||||
|
|
||||||
|
my $size = @grid-1;
|
||||||
|
|
||||||
|
my @new_grid;
|
||||||
|
|
||||||
|
for my $x ( 0..$size ) {
|
||||||
|
for my $y ( 0..$size ) {
|
||||||
|
my $neig = neighbors(\@grid,$x,$y);
|
||||||
|
|
||||||
|
if( $grid[$x][$y] eq '#' ) {
|
||||||
|
$new_grid[$x][$y] = $neig ~~ [ 2,3] ? '#' : '.';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$new_grid[$x][$y] = $neig == 3 ? '#' : '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return @new_grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sub neighbors {
|
||||||
|
my( $grid, $x, $y ) = @_;
|
||||||
|
|
||||||
|
my $sum;
|
||||||
|
for my $i ( -1..1 ) {
|
||||||
|
for my $j ( -1..1 ) {
|
||||||
|
next if !$i and !$j;
|
||||||
|
my($m,$n) = ($x+$i,$y+$j);
|
||||||
|
next if 0 > min $m, $n;
|
||||||
|
$sum += $grid->[$m][$n] eq '#';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $sum;
|
||||||
|
}
|
||||||
|
|
57
2015/18/2.pl
Normal file
57
2015/18/2.pl
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
use 5.20.0;
|
||||||
|
|
||||||
|
use List::AllUtils qw/ min sum /;
|
||||||
|
|
||||||
|
my @grid = map { [ split '' ] } map { chomp; $_ } <>;
|
||||||
|
|
||||||
|
use DDP;
|
||||||
|
|
||||||
|
@grid = iteration(@grid) for 1..100;
|
||||||
|
|
||||||
|
say sum map { $_ eq '#' } map { @$_ } @grid;
|
||||||
|
|
||||||
|
sub iteration {
|
||||||
|
my @grid = @_;
|
||||||
|
|
||||||
|
#say join ' ', @$_ for @grid;
|
||||||
|
#say;
|
||||||
|
|
||||||
|
my $size = @grid-1;
|
||||||
|
|
||||||
|
my @new_grid;
|
||||||
|
|
||||||
|
for my $x ( 0..$size ) {
|
||||||
|
for my $y ( 0..$size ) {
|
||||||
|
my $neig = neighbors(\@grid,$x,$y);
|
||||||
|
|
||||||
|
if( $grid[$x][$y] eq '#' ) {
|
||||||
|
$new_grid[$x][$y] = $neig ~~ [ 2,3] ? '#' : '.';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$new_grid[$x][$y] = $neig == 3 ? '#' : '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$new_grid[0][0] = $new_grid[$size][0] = $new_grid[0][$size] = $new_grid[$size][$size] = '#';
|
||||||
|
return @new_grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sub neighbors {
|
||||||
|
my( $grid, $x, $y ) = @_;
|
||||||
|
|
||||||
|
my $sum;
|
||||||
|
for my $i ( -1..1 ) {
|
||||||
|
for my $j ( -1..1 ) {
|
||||||
|
next if !$i and !$j;
|
||||||
|
my($m,$n) = ($x+$i,$y+$j);
|
||||||
|
next if 0 > min $m, $n;
|
||||||
|
$sum += $grid->[$m][$n] eq '#';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $sum;
|
||||||
|
}
|
||||||
|
|
100
2015/18/input.txt
Normal file
100
2015/18/input.txt
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
#..####.##..#...#..#...#...###.#.#.#..#....#.##..#...##...#..#.....##..#####....#.##..##....##.#....
|
||||||
|
.#..#..#..#.###...##..#.##.....#...#..##....#####.##............####.#..######..#.#.##.#...#..#...##
|
||||||
|
#.....##.##.##.#..##.#..###...#.#.#..##..###.####.####.#.####.#...##.#..###.........#.###...#....###
|
||||||
|
#.###..#######..##..#.....##.#.#.###.#.##..#.##..##.##.#.##...###.#...#.#####.#.##..#.#####..#.#####
|
||||||
|
#.##.##.###.##..###.#.##.##...##.#.#..##..###.########.#.####..####...#####...#..#...##....##.##.##.
|
||||||
|
..#.#.#.#..#.#.###....###...#...#.##..####.###.....#.####.###.###.#......#.#.###..#..#.#....#.#####.
|
||||||
|
...#.###.#....#.###...#.#.#...#...#.#####....#....#...#####..#..#.#..######..#.##.#.##.#..###.#...##
|
||||||
|
.###...#...#.#..#.#.####.#...#.....##...###.#....#..##.###....#.##....###..#.#####...###.#.##.####..
|
||||||
|
#.#....##.#.....#####.#.##..#######.#.####..###.##.#####.##.#...###...#.#...###..#...#.#.###.###.###
|
||||||
|
...##.##.....##..#.##...#.#...#...#.#####.#...#.#.#.#####.##.#...#.#..##.##..#...#....####..###.###.
|
||||||
|
#..#....######...#...###.#....#####....#.#.#....#....#.#######.#####..#....#....#.##..#.##.###..#...
|
||||||
|
#####.#.######.#.#####.#..##..##..####..#....#...#######....##..##.#..###..###.###..###...#...######
|
||||||
|
#...##..##...###....##..##.##..#.#.#.#....##.#.......###..###..###...###..##.##.##.#.#.#..#.#..#..#.
|
||||||
|
..###....##.###..#.#..########...###...##..#######....##..###..#####.##.#....###..##.##.##.#...##.#.
|
||||||
|
###..#.#..#.#.##.##...##.....#..###.#..##.##.#....##.#.######..##..#.#.##.###...#..####...#.#..#.###
|
||||||
|
.######....#..##..#.####.##..#.#..#.#..#....#..##.#..#.#...####..#....#.####.#.###.#...####.#...#.#.
|
||||||
|
#.######.##..###.###..#..###.#...#..#...#...###.##....#.#......#...#.##.#.###..#.#####.#.#..###..#.#
|
||||||
|
...#..#...####..###.########.....###.###.#..##.##....######..#..#.....#.##.##.#..##..#..##...#..#..#
|
||||||
|
#..#..##..#.#.########.##.#.####..#.#####.#.###.##....###..##..#.#.###..#.##..##.##.####...######.##
|
||||||
|
.######.###....#...##...#..#....##..#.#...###.######.##...#....##.##.#.#.##..#...###.###.#....#..##.
|
||||||
|
####.#.##..##.##.###...#.###.##..##....###..####.##..#.#.##..###.#..##...####...#..####.#.#..##...#.
|
||||||
|
.#.#..#.....##...#..#...#.#...#.#.##..#....#..#......#####.#######....#.#..#..###..##.#.########..##
|
||||||
|
.##.#..#..##..#..####.#...####...#...#..##.#..###.#..######..#.#...###.##...#..#####..##.#..##.#.##.
|
||||||
|
.###..##.##.##....###.###..#.#...##.#.#...#.#######.####..#..###.#######.#...#.#...#.##...#..####..#
|
||||||
|
##.########..#..#....#.###..##.##.#.##.#..#......####..##.##.#..####..#####..#.....#####.###..#.#.#.
|
||||||
|
.#..####..##.#.#..#####.##..#..#.#....#.#####.#####...######........##.##..##.#.#.###..#.#.#.#..##.#
|
||||||
|
.##..##..#.######..###....#.#.###.#........#..###..#.########.....#.##...#.....#..#...##...#..#.###.
|
||||||
|
##.##.#..####....####.#######.....#.#.#...#.######.#.....####.####...###..####.##.##....###..#..#...
|
||||||
|
#.#..####...#......#...###...##....##.#######..#.###.#...###.##.##...####..#.####..#......##..#####.
|
||||||
|
.#.#...##...#....#.####.##.....#....#.#.#######..###.#.....#.....####...##...#.#.##.####..##.###.#.#
|
||||||
|
####.#.#.####...#...####.#.....#.#######.#.......####......###..###.#...######..#.##.#.##..#..##..##
|
||||||
|
..##.###..#..####..####.......######.##..#.....##.##...##.##......#.###..###...#.##.#####.#.######.#
|
||||||
|
.###..####.###..#..#.......#.##...##...##.######.....#..####.#......#.#...#...#...###...#.#.##..####
|
||||||
|
.####....##.##.#.....##.###.####.#.......#.......#.#..#.#.#.....###.#.#####.#..#.#.#####.#####.###.#
|
||||||
|
.##.#.###.#####..#..#....###.#.#.#..#..###..##..####..##.###....#..####.####.#..###.#..######.######
|
||||||
|
####.#.....##..###....#.....#.##.#.##..##..########.#####..###.####....##.....######.#.#.##.......#.
|
||||||
|
#.#.##.....#.....##.###.#..#.##.##....#..##....##.#.###.##.#..#..##.##.###.#..##.###...##..###.#####
|
||||||
|
#.###.#.#.#.#.#.#.#...#..#.###..####.##...#..####.###....#..#..##.#....####..##.##....#.#.##.##....#
|
||||||
|
...######....#..####...#.#..#.#.#..#.##.#.#.......#..#......##..#...#..#..##...##.#...#.#.#...##.##.
|
||||||
|
.#####..#...####....#..###..##....#####..###.#.#...###..###.###..##...#......#...#...#.#.#...#.##..#
|
||||||
|
......#####.#...#.#.#.##..#.###..##..#.#...###..###....##..#####..#######.#..#.###....###...##.#..#.
|
||||||
|
..##.########.##..#....##.#...##.##.#.#..#.##..#.#.#.##....#.#.#.#.##....##....#....#####.##..#.##.#
|
||||||
|
####...#....##.#.###......##.##.#..##...#..#####..#.#....##..#####...#.#.##...#.####.####..##.######
|
||||||
|
.##.###.##.#...#.#....###.#######...##...##..#..##.###.#.####..#..###......#.#.##.#.#....#..##...#..
|
||||||
|
.#.###.#.###.###.#.##.#..#......####.##...#..##.#..####.....#...#.###.##.##.#..#.##..#.###......#..#
|
||||||
|
...##.####......#.#.#..###..#....###....#.##.#####..#..#..#...#.#.###...#.#.#.##....###.####..###.#.
|
||||||
|
##..#.#.#.#....####...#.##.###..####....#..#####.######..#.##.##..#####.#.....#.#...##.#.##.##.#.#..
|
||||||
|
#..##.#.#.#.###.#.#.###...#.#...##..#..#.#.#.##..###...#..##.#..#.#.#..#.....#.######.#.###..###.#..
|
||||||
|
....#.#.##.###.##...#.##.#....#..##.#..##...#...#.##.####...##..####.#.........#..##..#...#...##.#..
|
||||||
|
.##.......##...###.##.#.##.###.##.#..#..#..####...#...#....#####...###..##..#..#..##...#....#..#####
|
||||||
|
..####..#...#...#..###....##.#.#####..#..#.....#......#...#.......##....####...##....##.##.#.#####.#
|
||||||
|
##.#.#.#..##..##..#.####.##.##.###.#...###.#....#.....#.###...#######..###.####.###.####.##...##.#..
|
||||||
|
..#.#...##.#....#..#..##.####.....#.#.#...#..#..###.#..###.#####.#.#####.#.#.#.#.###.##.###..#....##
|
||||||
|
.###.#...#....###..#...####....####..#.##..#..##.###..#.#.#.#..#...###.#.#...#......#...#.##.##.#...
|
||||||
|
..####.####.##.#.##....#...##....#..#....#..###..#...#..###.#####.....#####..##.#.#.#.#.#.##.####...
|
||||||
|
...##.#.##.####..##.###..#.#.#.#.#.#.#..###...#.##..#.####.##...#.#.##......###..#...###....#.#.###.
|
||||||
|
##...##..#.#.##..#.#.#....#.####.......#.#.#######.#..#....#.###.#...###.##....###.#.#..#.#.##.####.
|
||||||
|
...##.......######.....##....#...#..#.##.###.#..#.##.###.#.###.#.#.#...#.#...##.##.##..#.##########.
|
||||||
|
###..#....#.#.....#....###.#...##.......##.#.#..#.#...########......###..##.#..#..####.##..####...#.
|
||||||
|
......##.###.#.###.....#..#...#.#......##....#....#........#..#...##.##.....#...##.##.........##....
|
||||||
|
.##.##.#.#...#....######..##....##..##.#.#.##.#.##..##...#..###......##......#.#....#.#.#.......###.
|
||||||
|
.......#.##..##.#...#.##..#..#####.#..#.######.........###.#####.####.#...##...........##...##..####
|
||||||
|
#......#.#..#...#...##..#.#.###.##.##.#.#..#.###.##.#..###..#.###..#...###.##..###..#...#..###...#..
|
||||||
|
####.##..#####..####.#...#..#..###..##.#.#...#...#...#.##.####.##.###....###...#.#.#..####.######.##
|
||||||
|
.....#..####...#.#.#.####..####..##.###......#.....########.#...#.#..#..#...#.###..##.#####..###.###
|
||||||
|
.#######.#.##..###.#...###.#####............##.###...#.##.#.##..##.#.#..#.######..######..#..#..####
|
||||||
|
...##..#.####...#..#.#.##.#....#.####..#..###.###..#.#...#....##.##.#......##..##..#.#.#.###..#..#..
|
||||||
|
........#...#.##.#.#..#....####....#.##...###..####...###.#.#..######..###..##.#####.###.###.#.#...#
|
||||||
|
##......##.#..###.####.##.#.###.#.......#.##..####..#.###.##..##..##...##...#.###...#.#..#..#.#####.
|
||||||
|
##..#.#.....##.####.#..##.#.##.#.#...#...#.#...####.#.#.##...##....##.###..###.####.#...#.###..#####
|
||||||
|
.#####.####.####.####.#.##.##......###....###.####...###...#...#..#.##.#.#####.###..##.#..###...##..
|
||||||
|
.#...#..##...##...#....#.#.#..##..#.##..#.###.#.###..###.#.#.###.#....#######.####.##..#..#...####..
|
||||||
|
..##.##..#.##..#.#.###..#.##.########...####.#.###.##..#..###.###...##..##.#..#.######.##.#....###.#
|
||||||
|
##.#####.###.##.#.##.##.##.###..##..##..#.#.#.#.####..#......#.#.#.#.#.#.##...#####.####...#.#...#.#
|
||||||
|
.#..###..##.#####.#.##.#..##...##..##...#####.#.####..#...##.....######.#.#...##.#..#######.###.###.
|
||||||
|
#.#..##.#.#####.#.#.....###.###.#..##.#####....#.###.##.##.#.#..##..#.#....#######.###.#.#.....#.###
|
||||||
|
....###...#.###.####....###.....##....#####.##.###.###.##.##.##.#..###..######...####.#.#..####..#..
|
||||||
|
###.....#..####..#.####..#..#...##.##..##.######.####.....#...##....#..#.##.#####..###.##.#.####...#
|
||||||
|
.##.##.#...#..####...##.##.###...#...#..#.#.#####.....####...#.#.#..#.####...####.#...###.#......###
|
||||||
|
###.##....#.#.#...#.###....####..##...##.##.##.#..#...####..#..#..##...#####.####.####...##.#..###.#
|
||||||
|
..####.....##..###.#.#.###.########..#...#.##..#.#.#.......#.##.#..#...####.##.#..#.######..#.#...#.
|
||||||
|
#.#.##.#.#.##.#....##......##......#######.#..#.##...##..#.#.###...#.#..#..###...#..###.....##.....#
|
||||||
|
..#.##.#.##.#.##..##.....#.#..#.#..#...##..#..#.#....###.#####....####.####..#####.##.###...#..###.#
|
||||||
|
#....#.###..#..########.###..#.#.#.##...##.#..##.###..#..#..#.#.##..###...###.#.##..#.##.#..#.#.####
|
||||||
|
#.......#######......#...#...##.##...###.#....##.#..#....####.#.##.###...#.#####...##.###........##.
|
||||||
|
.##.####.....###.##......####.###.########..#.####..#.##.#.####.....#...#.##....#######.##..#......#
|
||||||
|
#.#.##.##....##..##.#.###..#.##.#..#..#.#..##.....###..###.##.##.####.##.#.#.##...####..#.#..##.#.#.
|
||||||
|
...##.#.#.#...###.#.......#.#.....#.#...##....##.##.##.####...#.#..#..#..#.#.##.#..#.#.#....###..#.#
|
||||||
|
....#.#.###.#####.##..###..##..#...#.##.#......##.####.#..####.#.##..####.#.#...##..#####..##.#.#...
|
||||||
|
..###.#.##..#....#..#.#.....##.#####..##....#.#...#.##..##.#.#..#...##.##..##..##....#...#..#..#..##
|
||||||
|
##.#.##.#...#.###.##.##.##.##..##.##...#..##.#..#######.#..#...#.#.##..#....##.#..####.###........#.
|
||||||
|
.##.#..#.....#####..##.#.#.#.#..###.#######.###.###....##....#.#.#.###....###.#..#.#....#.#..###...#
|
||||||
|
...###.#.#.###..#...#..###.######..##.#.#..#...####.#####.##..#..###...#..#..#..###..##.#.#...#.###.
|
||||||
|
#......#.#..#..##.##.#.##.#.###.#.##.#.#..#....#.##..#..##..##.#.#.#....##.###.###.####.#.#####...##
|
||||||
|
...#.##..#.######.......#.#.###.....#####....##.#.#.###........#.#.###.#.#########.##.##.#..##..#...
|
||||||
|
##..###..###....####.##.##..##.###....####..##...####.####..####..###.####..##.#...###.#####.##.##.#
|
||||||
|
###...##.#.#.#####..#..#####...##.#...#.#.###.#..##..###.##.#.#.....####.##.#..##.###.#...##.##...##
|
||||||
|
...#.#.##.##..##....#..#.#####.##.###..#.#.#........####.###.##....##....####..#.#....#.#.#.###..#.#
|
||||||
|
..#.#.#.#.###...#....##..######.##....#.#.##..###..#.#.###..#.##..#.#.###......#..#..#.####..#...##.
|
||||||
|
.....####.#.....###.#.##.#..##.#..###.#####.#..##...###.#..###..#..##....###.#..##.#..#.##.#..#...##
|
6
2015/18/test
Normal file
6
2015/18/test
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
.#.#.#
|
||||||
|
...##.
|
||||||
|
#....#
|
||||||
|
..#...
|
||||||
|
#.#..#
|
||||||
|
####..
|
22
2015/19/1.pl
Normal file
22
2015/19/1.pl
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
use 5.20.0;
|
||||||
|
|
||||||
|
my @lines = <>;
|
||||||
|
chomp for @lines;
|
||||||
|
|
||||||
|
my $sequence = pop @lines;
|
||||||
|
pop @lines;
|
||||||
|
|
||||||
|
my %molecules;
|
||||||
|
|
||||||
|
for my $s ( @lines ) {
|
||||||
|
my( $from, $to ) = split ' => ', $s;
|
||||||
|
while( $sequence =~ /\G(.*?)($from)/g ) {
|
||||||
|
$molecules{
|
||||||
|
$` . $1 . $to . $'
|
||||||
|
} = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
say scalar keys %molecules;
|
||||||
|
|
||||||
|
|
53
2015/19/2.pl
Normal file
53
2015/19/2.pl
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
use 5.20.0;
|
||||||
|
use List::AllUtils qw/ uniq /;
|
||||||
|
|
||||||
|
my @lines = <>;
|
||||||
|
chomp for @lines;
|
||||||
|
|
||||||
|
my $sequence = pop @lines;
|
||||||
|
pop @lines;
|
||||||
|
|
||||||
|
my %mutation = reverse map { split ' => ' } @lines;
|
||||||
|
|
||||||
|
my $steps = 0;
|
||||||
|
my @possible = ( $sequence );
|
||||||
|
my %s = ( $sequence => 0 );
|
||||||
|
|
||||||
|
while( not $s{e} ) {
|
||||||
|
use DDP;
|
||||||
|
warn scalar @possible;
|
||||||
|
|
||||||
|
my $n = shift @possible;
|
||||||
|
|
||||||
|
warn $n;
|
||||||
|
my @new = mutate($n);
|
||||||
|
|
||||||
|
for(@new) {
|
||||||
|
next if exists $s{$_};
|
||||||
|
$s{$_} = $s{$n}+1;
|
||||||
|
push @possible, $_;
|
||||||
|
}
|
||||||
|
|
||||||
|
@possible = sort { length $a <=> length $b } @possible;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
say $s{e};
|
||||||
|
|
||||||
|
use experimental 'signatures';
|
||||||
|
|
||||||
|
sub mutate($sequence) {
|
||||||
|
my @molecules;
|
||||||
|
|
||||||
|
while( my( $from, $to ) = each %mutation ) {
|
||||||
|
# warn $from;
|
||||||
|
while( $sequence =~ /\G(.*?)($from)/g ) {
|
||||||
|
push @molecules, $` . $1 . $to . $'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return @molecules;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
45
2015/19/input.txt
Normal file
45
2015/19/input.txt
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
Al => ThF
|
||||||
|
Al => ThRnFAr
|
||||||
|
B => BCa
|
||||||
|
B => TiB
|
||||||
|
B => TiRnFAr
|
||||||
|
Ca => CaCa
|
||||||
|
Ca => PB
|
||||||
|
Ca => PRnFAr
|
||||||
|
Ca => SiRnFYFAr
|
||||||
|
Ca => SiRnMgAr
|
||||||
|
Ca => SiTh
|
||||||
|
F => CaF
|
||||||
|
F => PMg
|
||||||
|
F => SiAl
|
||||||
|
H => CRnAlAr
|
||||||
|
H => CRnFYFYFAr
|
||||||
|
H => CRnFYMgAr
|
||||||
|
H => CRnMgYFAr
|
||||||
|
H => HCa
|
||||||
|
H => NRnFYFAr
|
||||||
|
H => NRnMgAr
|
||||||
|
H => NTh
|
||||||
|
H => OB
|
||||||
|
H => ORnFAr
|
||||||
|
Mg => BF
|
||||||
|
Mg => TiMg
|
||||||
|
N => CRnFAr
|
||||||
|
N => HSi
|
||||||
|
O => CRnFYFAr
|
||||||
|
O => CRnMgAr
|
||||||
|
O => HP
|
||||||
|
O => NRnFAr
|
||||||
|
O => OTi
|
||||||
|
P => CaP
|
||||||
|
P => PTi
|
||||||
|
P => SiRnFAr
|
||||||
|
Si => CaSi
|
||||||
|
Th => ThCa
|
||||||
|
Ti => BP
|
||||||
|
Ti => TiTi
|
||||||
|
e => HF
|
||||||
|
e => NAl
|
||||||
|
e => OMg
|
||||||
|
|
||||||
|
ORnPBPMgArCaCaCaSiThCaCaSiThCaCaPBSiRnFArRnFArCaCaSiThCaCaSiThCaCaCaCaCaCaSiRnFYFArSiRnMgArCaSiRnPTiTiBFYPBFArSiRnCaSiRnTiRnFArSiAlArPTiBPTiRnCaSiAlArCaPTiTiBPMgYFArPTiRnFArSiRnCaCaFArRnCaFArCaSiRnSiRnMgArFYCaSiRnMgArCaCaSiThPRnFArPBCaSiRnMgArCaCaSiThCaSiRnTiMgArFArSiThSiThCaCaSiRnMgArCaCaSiRnFArTiBPTiRnCaSiAlArCaPTiRnFArPBPBCaCaSiThCaPBSiThPRnFArSiThCaSiThCaSiThCaPTiBSiRnFYFArCaCaPRnFArPBCaCaPBSiRnTiRnFArCaPRnFArSiRnCaCaCaSiThCaRnCaFArYCaSiRnFArBCaCaCaSiThFArPBFArCaSiRnFArRnCaCaCaFArSiRnFArTiRnPMgArF
|
18
2015/20/1.pl
Normal file
18
2015/20/1.pl
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
use 5.20.0;
|
||||||
|
|
||||||
|
use List::AllUtils qw/ sum /;
|
||||||
|
use Math::Prime::Util ':all';
|
||||||
|
|
||||||
|
my $x = 3400000;
|
||||||
|
|
||||||
|
my $house = 1;
|
||||||
|
|
||||||
|
$house++ while( nbr_gifts($house) < $x );
|
||||||
|
|
||||||
|
say $house;
|
||||||
|
|
||||||
|
sub nbr_gifts {
|
||||||
|
my $n = shift;
|
||||||
|
|
||||||
|
sum divisors($n);
|
||||||
|
}
|
18
2015/20/2.pl
Normal file
18
2015/20/2.pl
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
use 5.20.0;
|
||||||
|
|
||||||
|
use List::AllUtils qw/ sum /;
|
||||||
|
use Math::Prime::Util ':all';
|
||||||
|
|
||||||
|
my $x = 34000000;
|
||||||
|
|
||||||
|
my $house = 1;
|
||||||
|
|
||||||
|
$house++ while( nbr_gifts($house) < $x );
|
||||||
|
|
||||||
|
say $house;
|
||||||
|
|
||||||
|
sub nbr_gifts {
|
||||||
|
my $n = shift;
|
||||||
|
|
||||||
|
11 * sum grep { 50 * $_ >= $n } divisors($n);
|
||||||
|
}
|
72
2015/21/1.pl
Normal file
72
2015/21/1.pl
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
use 5.20.0;
|
||||||
|
use Path::Tiny;
|
||||||
|
|
||||||
|
use Algorithm::Combinatorics qw/ combinations /;
|
||||||
|
use List::AllUtils qw/ sum max /;
|
||||||
|
|
||||||
|
use 5.20.0;
|
||||||
|
|
||||||
|
use experimental 'postderef';
|
||||||
|
|
||||||
|
my @weapons = (
|
||||||
|
#Weapons: Cost Damage Armor
|
||||||
|
[ qw/ Dagger 8 4 0 / ],
|
||||||
|
[ qw/ Shortsword 10 5 0/ ],
|
||||||
|
[ qw/ Warhammer 25 6 0/ ],
|
||||||
|
[ qw/ Longsword 40 7 0/ ],
|
||||||
|
[ qw/ Greataxe 74 8 0/ ],
|
||||||
|
);
|
||||||
|
|
||||||
|
my @armors = (
|
||||||
|
#Armor: Cost Damage Armor
|
||||||
|
[ qw/ Leather 13 0 1/ ],
|
||||||
|
[ qw/ Chainmail 31 0 2/ ],
|
||||||
|
[ qw/ Splintmail 53 0 3/ ],
|
||||||
|
[ qw/ Bandedmail 75 0 4/ ],
|
||||||
|
[ qw/ Platemail 102 0 5/ ],
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
my @rings = (
|
||||||
|
#Rings: Cost Damage Armor
|
||||||
|
[ qw/ Damage+1 25 1 0/ ],
|
||||||
|
[ qw/ Damage+2 50 2 0/ ],
|
||||||
|
[ qw/ Damage+3 100 3 0/ ],
|
||||||
|
[ qw/ Defense+1 20 0 1/ ],
|
||||||
|
[ qw/ Defense+2 40 0 2/ ],
|
||||||
|
[ qw/ Defense+3 80 0 3/ ],
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
my @boss = map { /(\d+)/ } path('input.txt')->lines;
|
||||||
|
|
||||||
|
use DDP;
|
||||||
|
p @boss;
|
||||||
|
|
||||||
|
my $min_price = 1E9;
|
||||||
|
for my $weapon ( @weapons ) {
|
||||||
|
for my $armor ( [], @armors ) {
|
||||||
|
for my $rings( [[]], ( map { [ $_ ] } @rings ), combinations( \@rings, 2 ) ) {
|
||||||
|
my $price = sum map { $_->[1] } $weapon, $armor,
|
||||||
|
$rings->@*;
|
||||||
|
next if $price > $min_price;
|
||||||
|
|
||||||
|
my @stats = ( 100, map { my $i = $_; sum map { $_->[$i] } $weapon, $armor, $rings->@* } 2,3 );
|
||||||
|
|
||||||
|
|
||||||
|
$min_price = $price if win_fight( \@stats, [ @boss ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
say $min_price;
|
||||||
|
|
||||||
|
use experimental 'signatures';
|
||||||
|
sub win_fight( $me, $opponent ) {
|
||||||
|
p @_;
|
||||||
|
my $damage = max 1, $me->[1] - $opponent->[2];
|
||||||
|
$opponent->[0] -= $damage;
|
||||||
|
return 1 if $opponent->[0] <= 0;
|
||||||
|
return not win_fight( reverse @_ );
|
||||||
|
}
|
||||||
|
|
72
2015/21/2.pl
Normal file
72
2015/21/2.pl
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
use 5.20.0;
|
||||||
|
use Path::Tiny;
|
||||||
|
|
||||||
|
use Algorithm::Combinatorics qw/ combinations /;
|
||||||
|
use List::AllUtils qw/ sum max min /;
|
||||||
|
|
||||||
|
use 5.20.0;
|
||||||
|
|
||||||
|
use experimental 'postderef';
|
||||||
|
|
||||||
|
my @weapons = (
|
||||||
|
#Weapons: Cost Damage Armor
|
||||||
|
[ qw/ Dagger 8 4 0 / ],
|
||||||
|
[ qw/ Shortsword 10 5 0/ ],
|
||||||
|
[ qw/ Warhammer 25 6 0/ ],
|
||||||
|
[ qw/ Longsword 40 7 0/ ],
|
||||||
|
[ qw/ Greataxe 74 8 0/ ],
|
||||||
|
);
|
||||||
|
|
||||||
|
my @armors = (
|
||||||
|
#Armor: Cost Damage Armor
|
||||||
|
[ qw/ Leather 13 0 1/ ],
|
||||||
|
[ qw/ Chainmail 31 0 2/ ],
|
||||||
|
[ qw/ Splintmail 53 0 3/ ],
|
||||||
|
[ qw/ Bandedmail 75 0 4/ ],
|
||||||
|
[ qw/ Platemail 102 0 5/ ],
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
my @rings = (
|
||||||
|
#Rings: Cost Damage Armor
|
||||||
|
[ qw/ Damage+1 25 1 0/ ],
|
||||||
|
[ qw/ Damage+2 50 2 0/ ],
|
||||||
|
[ qw/ Damage+3 100 3 0/ ],
|
||||||
|
[ qw/ Defense+1 20 0 1/ ],
|
||||||
|
[ qw/ Defense+2 40 0 2/ ],
|
||||||
|
[ qw/ Defense+3 80 0 3/ ],
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
my @boss = map { /(\d+)/ } path('input.txt')->lines;
|
||||||
|
|
||||||
|
use DDP;
|
||||||
|
p @boss;
|
||||||
|
|
||||||
|
my $max_price = 0;
|
||||||
|
for my $weapon ( @weapons ) {
|
||||||
|
for my $armor ( [], @armors ) {
|
||||||
|
for my $rings( [[]], ( map { [ $_ ] } @rings ), combinations( \@rings, 2 ) ) {
|
||||||
|
my $price = sum map { $_->[1] } $weapon, $armor,
|
||||||
|
$rings->@*;
|
||||||
|
next if $price < $max_price;
|
||||||
|
|
||||||
|
my @stats = ( 100, map { my $i = $_; sum map { $_->[$i] } $weapon, $armor, $rings->@* } 2,3 );
|
||||||
|
|
||||||
|
|
||||||
|
$max_price = $price unless win_fight( \@stats, [ @boss ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
say $max_price;
|
||||||
|
|
||||||
|
use experimental 'signatures';
|
||||||
|
sub win_fight( $me, $opponent ) {
|
||||||
|
p @_;
|
||||||
|
my $damage = max 1, $me->[1] - $opponent->[2];
|
||||||
|
$opponent->[0] -= $damage;
|
||||||
|
return 1 if $opponent->[0] <= 0;
|
||||||
|
return not win_fight( reverse @_ );
|
||||||
|
}
|
||||||
|
|
3
2015/21/input.txt
Normal file
3
2015/21/input.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Hit Points: 109
|
||||||
|
Damage: 8
|
||||||
|
Armor: 2
|
Loading…
Reference in New Issue
Block a user