]> www.fi.muni.cz Git - aoc.git/blob - 2017/39.pl
The rest of Year 2017
[aoc.git] / 2017 / 39.pl
1 #!/usr/bin/perl
2
3 use v5.30;
4 use strict;
5
6 my (@acc, @vel, @pos);
7 while (<>) {
8         my (@l) = /(-?\d+)/g;
9         push @pos, [ splice(@l, 0, 3) ];
10         push @vel, [ splice(@l, 0, 3) ];
11         push @acc, [ splice(@l, 0, 3) ];
12 }
13
14 use List::Util qw(sum);
15 my ($mina, $minv, $minp, $mini);
16 for my $i (0 .. $#acc) {
17         my $a = sum map { abs } @{ $acc[$i] };
18         my $v = sum map { abs } @{ $vel[$i] };
19         my $p = sum map { abs } @{ $pos[$i] };
20         say "$i: $a, $v, $p";
21         if (!defined $mini || $a < $mina) {
22                 $mina = $a;
23                 $minv = $v;
24                 $minp = $p;
25                 $mini = $i;
26         } elsif (defined $mini && $a == $mina && $v < $minv) {
27                 $minv = $v;
28                 $minp = $p;
29                 $mini = $i;
30         } elsif (defined $mini && $a == $mina && $v == $minv && $p < $minp) {
31                 $minp = $p;
32                 $mini = $i;
33         }
34 }
35 say $mini;
36
37 __END__
38 while(1) {
39         my (@nvel, @npos);
40         for my $i (0 .. @acc) {
41                 my @v;
42                 push @v, $vel[$i][$_] + $acc[$i][$_] for 0 .. 2;
43                 push @nvel, \@v;
44                 my @p;
45                 push @p, $pos[$i][$_] + $v[$_] for 0 .. 2;
46                 push @npos, \@p;
47         }
48 }
49         
50                         
51         
52