-
Notifications
You must be signed in to change notification settings - Fork 0
/
part1.pl
54 lines (48 loc) · 1.21 KB
/
part1.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/perl
@velocities = (
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
);
@positions = ();
foreach my $line (<>) {
my ($x, $y, $z) = ($line =~ /<x=(-?\d+), y=(-?\d+), z=(-?\d+)>/);
push(@positions, [$x, $y, $z]);
}
for (my $n = 0; $n < 1000; ++$n) {
for (my $i = 0; $i < 4; ++$i) {
for (my $j = 0; $j < 3; ++$j) {
my $delta = 0;
for (my $k = 0; $k < 4; ++$k) {
if ($positions[$i][$j] < $positions[$k][$j]) {
++$delta;
} elsif ($positions[$i][$j] > $positions[$k][$j]) {
--$delta;
}
}
$velocities[$i][$j] += $delta;
}
}
for (my $i = 0; $i < 4; ++$i) {
for (my $j = 0; $j < 3; ++$j) {
$positions[$i][$j] += $velocities[$i][$j];
}
}
}
$tot = 0;
for (my $i = 0; $i < 4; ++$i) {
my $pot = 0;
for (my $j = 0; $j < 3; ++$j) {
print $positions[$i][$j], " ";
$pot += abs($positions[$i][$j]);
}
my $kin = 0;
for (my $j = 0; $j < 3; ++$j) {
print $velocities[$i][$j], " ";
$kin += abs($velocities[$i][$j]);
}
print "\n";
$tot += $pot * $kin;
}
print "$tot\n"