#!/usr/bin/perl -wl
use strict;
my @numbers = qw(16 2 10 2 9 17 5 8 15 14 20 19 19 11 10 11 9 13 7 13);
my $shiftscore = checkscore("shift");
@numbers = qw(16 2 10 2 9 17 5 8 15 14 20 19 19 11 10 11 9 13 7 13);
my $popscore = checkscore("pop");
my $bestscore = $popscore > $shiftscore
? $popscore
: $shiftscore;
print "POP:$popscore:SHIFT:$shiftscore";
print "Best Score:$bestscore";
sub checkscore {
my $first_turn = shift;
my ($player, $opponent);
$player = $first_turn eq "pop"
? pop(@numbers)
: shift(@numbers);
while (@numbers) {
$opponent += $numbers[0] > $numbers[-1]
? shift(@numbers)
: pop(@numbers);
last if !@numbers;
$player += $numbers[0] > $numbers[-1]
? shift(@numbers)
: pop(@numbers);
}
return ($player - $opponent);
}
####
POP:4:SHIFT:10
Best Score:10
##
##
use List::Util qw(shuffle);
my @numbers = shuffle(1 .. 1000);
print join(" ", @numbers);
my @copy = @numbers;
my $shiftscore = checkscore("shift");
@numbers = @copy;
my $popscore = checkscore("pop");
##
##
POP:4354:SHIFT:7452
Best Score:7452
real 0m0.049s
user 0m0.030s
sys 0m0.000s