Skip to content

Instantly share code, notes, and snippets.

@diakopter
Created January 27, 2011 17:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save diakopter/798895 to your computer and use it in GitHub Desktop.
Save diakopter/798895 to your computer and use it in GitHub Desktop.
my $answers = List[int].new();
$answers.Add(1);
$answers.Add(0);
$answers.Add(-2);
$answers.Add(0);
$answers.Add(1);
$answers.Add(0);
$answers.Add(1);
$answers.Add(-1);
$answers.Add(-10);
$answers.Add(-30);
$answers.Add(-67);
$answers.Add(-138);
$answers.Add(-291);
$answers.Add(-642);
$answers.Add(-1446);
$answers.Add(-3250);
#$answers.Add(-7244);
#$answers.Add(-16065);
#$answers.Add(-35601);
#$answers.Add(-78985);
#$answers.Add(-175416);
#$answers.Add(-389695);
#$answers.Add(-865609);
#$answers.Add(-1922362);
#$answers.Add(-4268854);
#$answers.Add(-9479595);
my $test_depth = $answers.Count - 1;
say("1.." ~ $test_depth);
sub r_int(-->int) { }
sub A(int $k, r_int $x1, r_int $x2, r_int $x3, r_int $x4, r_int $x5 --> int) {
my r_int &B = sub (--> int) { $k = $k - 1; return A($k, &B, $x1, $x2, $x3, $x4) };
if ($k <= 0) { return $x4() + $x5() }
return &B()
}
sub K(int $n --> r_int) { return sub (--> int) { return $n } }
loop (my $i = 1; $i <= $test_depth ; $i = $i + 1 ) {
my $result = A($i, K(1), K(-1), K(-1), K(1), K(0) );
my $expected = $answers[$i];
if ($result != $expected) { say("not ok # got " ~ $result ~ " but expected " ~ $expected) }
else { say("ok " ~ $i ~ " # Knuth's man_or_boy test at starting value " ~ $i ~ " got " ~ $result) }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment