#!/usr/local/bin/perl # day 2015-09 use strict; use warnings; use v5.32; use Algorithm::Permute; use List::Util qw( min max ); @ARGV = "input" unless @ARGV; chomp( my $input = do { local $/; <> } ); my %distances; # between cities my %cities; my @route_distances; foreach ( split /\n/, $input ) { my ( $from, $to, $distance ) = m/(\w+) to (\w+) = (\d+)/; $distances{ $from, $to } = $distance; $distances{ $to, $from } = $distance; $cities{ $from } += 1; $cities{ $to } += 1; } my @cities = keys %cities; Algorithm::Permute::permute { my $distance = 0; foreach ( 0 .. ( scalar @cities ) - 2 ) { $distance += $distances{ $cities[ $_ ], $cities[ $_ + 1 ] }; } push @route_distances => $distance; } @cities; say "part 1: ", min @route_distances; say "part 2: ", max @route_distances;