aoc2015

Advent of Code 2015 solutions in Perl.
git clone git://git.samirparikh.com/aoc2015
Log | Files | Refs | README

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;