From 4bb6f8d06c0e384f3394012b1d48da58ed28cc5e Mon Sep 17 00:00:00 2001 From: Yigit Sever Date: Sun, 12 Dec 2021 01:24:32 +0300 Subject: 2020, tracking --- 2020/day1/threesum.pl | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 2020/day1/threesum.pl (limited to '2020/day1/threesum.pl') diff --git a/2020/day1/threesum.pl b/2020/day1/threesum.pl new file mode 100644 index 0000000..8f2083a --- /dev/null +++ b/2020/day1/threesum.pl @@ -0,0 +1,44 @@ +use strict; +use warnings; +use DDP; +# use Smart::Comments; + +open my $fh, '<', "input" or die "no input present, $!"; +chomp(my @nums = <$fh>); +close $fh; + +@nums = sort { $a <=> $b } @nums; + +# fix one index, solve two sum problem +my $fixed_idx = 0; +my $l_idx = 1; +my $r_idx = $#nums; + +my $total = $nums[$fixed_idx] + $nums[$l_idx] + $nums[$r_idx]; + +while ($total != 2020) { + + if ($total < 2020) { + $l_idx++; # total too low, increase + } else { + $r_idx--; # total too high, decrease + } + + # fixed index might not be correct + if ($l_idx > $r_idx) { + $fixed_idx++; + $l_idx = $fixed_idx + 1; + $r_idx = $#nums; + } + + $total = $nums[$fixed_idx] + $nums[$l_idx] + $nums[$r_idx]; + ### $total + + ### $fixed_idx + ### $l_idx + ### $r_idx + + # print("fixed: $nums[$fixed_idx]\nleft: $nums[$l_idx]\nright: $nums[$r_idx]\n"); +} + +print $nums[$fixed_idx] * $nums[$l_idx] * $nums[$r_idx]; -- cgit v1.2.3-70-g09d2