day20
This commit is contained in:
parent
105cb86d44
commit
88422a98ed
38
20/1.pl
Normal file
38
20/1.pl
Normal file
@ -0,0 +1,38 @@
|
||||
use 5.20.0;
|
||||
use List::AllUtils qw/ sum /;
|
||||
use List::UtilsBy qw/ nsort_by /;
|
||||
|
||||
use DDP;
|
||||
|
||||
my $i;
|
||||
my @raw = map { [ map { [ split ',' ] } /[pva]=<(.*?)>/g ] } <>;
|
||||
my @p = map { [ map { manhat(@$_) } @$_ ] } @raw;
|
||||
|
||||
for ( sort {
|
||||
$p[$a][2] <=> $p[$b][2]
|
||||
or
|
||||
$p[$a][1] <=> $p[$b][1]
|
||||
or
|
||||
$p[$a][0] <=> $p[$b][0]
|
||||
} 0..$#p ) {
|
||||
# p $raw[$_];
|
||||
p $p[$_];
|
||||
say $_;
|
||||
exit if $i++ >= 3;
|
||||
}
|
||||
|
||||
|
||||
sub manhat { sum map { abs } @_ }
|
||||
|
||||
p @p;
|
||||
|
||||
my( $min ) = sort {
|
||||
$p[$a][2] <=> $p[$b][2]
|
||||
or
|
||||
$p[$a][1] <=> $p[$b][1]
|
||||
or
|
||||
$p[$a][0] <=> $p[$b][0]
|
||||
} 0..$#p;
|
||||
|
||||
say $min;
|
||||
|
37
20/2.pl
Normal file
37
20/2.pl
Normal file
@ -0,0 +1,37 @@
|
||||
use 5.20.0;
|
||||
use List::AllUtils qw/ sum uniq /;
|
||||
use List::UtilsBy qw/ nsort_by /;
|
||||
|
||||
use experimental qw/ postderef smartmatch /;
|
||||
|
||||
use DDP;
|
||||
|
||||
my $i;
|
||||
my @raw = map { [ map { [ split ',' ] } /[pva]=<(.*?)>/g ] } <>;
|
||||
|
||||
while() {
|
||||
check_collisions();
|
||||
move_particles();
|
||||
say scalar @raw;
|
||||
}
|
||||
|
||||
sub move_particles {
|
||||
for ( @raw ) {
|
||||
for my $i ( 0..2 ) {
|
||||
$_->[1][$i] += $_->[2][$i];
|
||||
$_->[0][$i] += $_->[1][$i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub check_collisions {
|
||||
my %seen;
|
||||
my @to_delete;
|
||||
for ( 0..$#raw ) {
|
||||
my $k = join ':', $raw[$_][0]->@*;
|
||||
push @to_delete, $seen{$k}, $_ if exists $seen{$k};
|
||||
$seen{$k} = $_;
|
||||
}
|
||||
return unless @to_delete;
|
||||
@raw = @raw[ grep { not $_ ~~ @to_delete } 0..$#raw ];
|
||||
}
|
1000
20/input.txt
Normal file
1000
20/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user