Here's my feeble entry:
use strict;
use warnings;
my @valid_candidates = ( 'Alice', 'Bob', 'Charlotte', 'David', 'Eve' )
+;
my %tally_for = map { lc($_) => [0] } @valid_candidates;
print "Welcome to the Die Bold 691549 Electrified Election Estimator\n
+";
print "Your candidates are:\n";
print map { "$_\n" } sort @valid_candidates;
print "Enter one name per line, end with EOF.\n";
while ( defined( my $candid_date = <> ) ) {
chomp $candid_date;
my $candidate;
foreach ( @valid_candidates ) {
last if lc $candid_date eq ( $candidate = lc $_ );
}
if ( exists $tally_for{ $candidate } ) {
$tally_for{ $candidate }->[0]++;
}
else {
warn "Write-in for $candid_date\n";
$tally_for{ lc $candid_date }->[0]++;
}
}
my @winner_first = reverse
sort { $tally_for{$a}->[0] <=> $tally_for{$b}->[0]
+}
keys %tally_for;
foreach my $who ( @winner_first ) {
printf "%10s : %d\n", $who, $tally_for{$who}->[0];
}
What's hard about this is that a correct solution is so simple. Here's one that works:
use strict;
use warnings;
my @valid_candidates = ( 'Alice', 'Bob', 'Charlotte', 'David', 'Eve' )
+;
my %tally_for = map { lc($_) => 0 } @valid_candidates;
print "Welcome to the Die Bold 691549 Electrified Voter Motor\n";
print "Your candidates are:\n";
print map { "$_\n" } sort @valid_candidates;
print "Enter one name per line, end with EOF.\n";
while ( my $candid_date = lc <> ) {
chomp $candid_date;
if ( exists $tally_for{ $candid_date } ) {
$tally_for{ $candid_date }++;
}
else {
warn "Write-in for $candid_date\n";
$tally_for{ $candid_date }++;
}
}
my @winner_first = reverse
sort { $tally_for{$a} <=> $tally_for{$b} }
keys %tally_for;
foreach my $who ( @winner_first ) {
printf "%10s : %d\n", $who, $tally_for{$who};
}
Vote counting and reporting take all of 15 lines with no golfing. Practically any deviation from a simple "stash in a hash" implementation is going to be suspicious. I think the best bet for really sneaking something in is to write a lot of bad code that mostly works. Another strategy might be to exploit a bug in some software that the machine uses (e.g., a MySQL bug) rather than have a bug in the machine itself.
Anyway, it's an interesting "problem" but having skulked about the Monastery for a while, I can't imagine I'd get anything past the monks.
Update: I should spoiler out an explanation. So, here's what my entry does "wrong":
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.