|
User since: |
Dec 30, 1999 at 08:39 UTC
(25 years ago) |
Last here: |
Oct 31, 2017 at 21:33 UTC
(7 years ago) |
Experience: |
3503
|
Level: | Curate (13) |
Writeups: |
165
|
Location: | Clearview Twp, ON, CDN | Best Girl: | Laurie | Gene Pool Count: | 7 | URL | Made in the Dark |
User's localtime: |
Oct 06, 2024 at 06:00 -04
|
Scratchpad: |
View
|
For this user: | Search nodes |
|
These guys were really nice to me until I told them they weren't at Hooters.
Old fart coder, John MacDonald
handed me the the Pink Camel book in 1991, bought my own
have had a hump every since.
AI Competition -- 'The Learning Machine
Challenge'
Sample Player
#!/usr/bin/perl -w
# rnd_player.pl - a random, game independent, challenge player
#
# This player can be used as an example for a rather generalized playe
+r.
# The player's logic is quite simple: it response to a request to play
+,
# it emits a single symbol which is picked in random from the alphabet
# received from the game organizer (judge). The player logic ignores
# the score it receives during the game and contains with generating
# random moved until it is told by the organizer that the game is over
# The program also ignores any symbols it receives, which might be rel
+ated
# to the moves of other game participants.
#
# usage: invoke though a judge/game program. for debug, simple invoke
+with
# command line arguments
#
## MitD 08/10/2001 - ported from tcl -> perl
#
use strict;
use Carp;
my $Version = "1.0";
my $Me = "MitD";
#
## we keep our game symbols in a global
#
my $DEBUG = 0;en
my @symbols = ();
my $score = 0;
$|++;
println ('@command info MitDRnd');
println( '# Made in the Dark');
println( '# Artificial Intelligence NV Challenge');
println ('# Player');
println( '# Copyright Peter G. Marshall');
println( '# This is free software; you can redistribute it');
println ('# and/or modify it under the same terms as Perl itself.');
while (<STDIN>) {
chomp;
process_line($_);
}
#
## input channel processor
#
sub chan_input {
my $sym = shift;
}
#
## score channel processor
#
sub chan_score {
my $arg = shift;
$score += $arg;
}
#
## command channel processor
#
sub chan_command {
my ($verb, $args) = split(/ /,$_[0]);
if (defined($args)) {
eval "command_$verb(\"$args\")";
croak "chan_command with args eval failed: $@\n" if ($@);
} else {
eval "command_$verb()";
croak "process no args \@ eval failed: $@\n" if ($@);
}
}
#
## process exit command
#
sub command_exit {
exit;
}
#
## process symbol command
#
sub command_symbol {
my $sym = shift;
push(@symbols, $sym);
debug ( "SYM: " . join(' ',@symbols) . "\n");
}
#
## process new game command
#
sub command_new {
debug ("command new done");
@symbols = ();
}
#
## process play command
#
sub command_play {
my $sym = $symbols[rand scalar(@symbols)];
println ("\@output $sym");
}
sub process_line {
my $line = shift;
debug ("PL: $line");
# ignore empty lines or lines that begin with # (commennts);
return if ( length($line) == 0 or ($line =~ /^#/) );
if ( index($line,'@') == -1) {
eval "chan_input(\"$line\")";
croak "process no \@ eval failed: $@\n" if ($@);
} else {
$line = substr($line,1);
my ($channel, $args) = split(/ /,$line,2);
eval "&chan_$channel(\"$args\")";
croak "process with \@ eval failed: $@\n" if ($@);
}
}
sub println {
print shift() . "\n";
}
sub debug {
print STDERR $_[0],"\n" if $DEBUG;
}
|