day09.pl (833B) - raw
1 #!/usr/local/bin/perl 2 # day 2015-09 3 4 use strict; 5 use warnings; 6 use v5.32; 7 use Algorithm::Permute; 8 use List::Util qw( min max ); 9 10 @ARGV = "input" unless @ARGV; 11 chomp( my $input = do { local $/; <> } ); 12 13 my %distances; # between cities 14 my %cities; 15 my @route_distances; 16 17 foreach ( split /\n/, $input ) { 18 my ( $from, $to, $distance ) = m/(\w+) to (\w+) = (\d+)/; 19 $distances{ $from, $to } = $distance; 20 $distances{ $to, $from } = $distance; 21 $cities{ $from } += 1; 22 $cities{ $to } += 1; 23 } 24 25 my @cities = keys %cities; 26 27 Algorithm::Permute::permute { 28 my $distance = 0; 29 foreach ( 0 .. ( scalar @cities ) - 2 ) { 30 $distance += $distances{ $cities[ $_ ], $cities[ $_ + 1 ] }; 31 } 32 push @route_distances => $distance; 33 } @cities; 34 35 say "part 1: ", min @route_distances; 36 say "part 2: ", max @route_distances;