#!/usr/bin/env perl use Mojolicious::Lite; sub makeChange { my $line = shift; my @available = split /[,:]/,$line; my $changeNeeded = pop @available; @available = sort { $b <=> $a } @available; my %coins; while ($changeNeeded > 0 && @available > 0 ) { my $denom = shift @available; if ($denom <= $changeNeeded) { $changeNeeded -= $denom; $coins{$denom}++; #unshift @available,$denom; #Multiple larger coins? } } warn "Could not make change correctly: $line" if ($changeNeeded != 0); return %coins; } get '/' => sub { my $c = shift; $c->render(template => 'index'); }; post '/make/change' => sub { my $c = shift; my $changeToMake = $c->param('data'); my @lines = split /\r?\n/, $changeToMake; my @answer = map { { makeChange($_) } } @lines; my @formattedAnswers; for my $coin (sort { $b <=> $a } @answer) { my @formatted; for (sort { $b <=> $a } keys %{$coin}) { push @formatted, "$_". 'x' . "$coin->{$_}"; } unshift @formattedAnswers, [ @formatted ]; } $c->render( answer => \@answer, formatted=>\@formattedAnswers, template => 'makeChange' ); }; app->start; __DATA__ @@ index.html.ep % layout 'default'; % title 'Welcome';

Question 2 Data Input

@@ makeChange.html.ep

Question 2 Results

% for my $answer (@{$formatted}) { %== join ',',@{$answer}
% } @@ layouts/default.html.ep <%= title %> <%= content %>