The following is a reply regarding Brain Cramps
These brain cramps are positively EVIL.  They're just like Slylock Fox, 
except... they're nicer.  I probably shouldn't hang around too long, I 
might get sucked into another puzzle.  (It was EVIL, the way you put the 
next puzzle above the answer for the previous one!!!!)

Of course none of the puzzles are perfect.  #12 failed to specify each 
farm is square.  Floppy is indeed paying the ermine in #11, because you 
can't pay the weasel without paying the ermine.  Unless she's got a 
seasonal payment plan.... It might be better to say "She paid the weasel 
first, but then she didn't pay the ermine.  Why didn't this bother the 
ermine?"

And regarding #7.  Oooo, I was wondering why I got 25.  5*5, it figures.  
BUT!......... they were swimming in a river.  Rivers flow.  Given the same 
effort, the same person, swimming upstream is going to be slower than 
swimming downstream.

Submitted for your approval is a solution to Brain Cramp #7, with the 
added caveat that the stream is flowing at 2 miles per hour.

--- begin ollieandbob.pl ---
##################################################
#!/usr/bin/env perl

# Ollie and Bob went tubing 10 miles down the river
# Ollie went at 5mph and Bob went 2mph
# When Ollie got home, he swam back to Bob, returned
# home and so on until Bob reached home.

# How far did that crazy otter swim?

# Note: Since we do not know the river current, this problem is impossible.
# Assuming Ollie always swims at 5mph, the solution is easy, but let's
# Assume a current of 2mph...

# This solution posed by Starling ( http://transform.to/~starling/ ) 
# June, 2002

use POSIX;

##########################################################
#Subprograms

# There's rint in C, why not Perl?  :(
sub rint {
	my $num = shift;
	return floor($num) if $num - floor($num) < 0.5;

	return ceil($num);
}

# Return a bar indicating position
sub positionbar {
	my $num = rint(shift);
	my $ret = "";

	while($num-- > 0)
	{
		$ret = "$ret=";
	}
	return $ret;
}

##########################################################

# Printing this will clear the screen!
$clear_string = `clear`;

##########################################################
# The smallest increment of time (in hours)

# On my 1.3 Ghz Linux machine, this is about the limit
# $dt = 0.000001;

# This one works for prettiness
$dt = 0.0001;

##########################################################
# Velocities
# How fast are people going?  Upstream, the direction home,
# is considered positive.  Rates are in mph.

# Note that going upstream, Ollie is at 5mph, Bob is at 2mph.
# I assume these are not the speeds measured in still water.

$streamrate = -2;
$ollierate = 7;
$bobrate = 4;

##########################################################
# Positions
# Current position of water rat and hippo
$ollie = 0;
$bob = 0;

#Total distance ollie traveled.  integral(speed), not integral(velocity)
$olliedistance = 0;

##########################################################


while($bob <= 10)
{

	#After one increment of time, they've moved this much:
	$bob += ($bobrate + $streamrate) * $dt;
	$ollie += ($ollierate + $streamrate) * $dt;
	$olliedistance += abs(($ollierate + $streamrate) * $dt);
	

	#Uncomment next lines to display their progress prettily
	print $clear_string;
	print "Ollie: ", positionbar($ollie), "\n";
	print "Bob:   ", positionbar($bob), "\n";
	

	#If Ollie reaches home on the way there, he turns around.
	$ollierate = -$ollierate if $ollierate > 0 && $ollie >= 10;


	#if Ollie reaches his friend on the way back, he turns around.
	$ollierate = -$ollierate if $ollierate < 0 && $ollie <= $bob;
}

print "Bob has swum $bob miles.\n";
print "Ollie has swum $olliedistance miles.\n";

#And the answer is....
To my Website (You know you want to...)
Send me a message!