把出的数据记录下来,推算当前组合下历史记录中下一个石头,剪刀,布的出再概率,加上适当随机数控制哈。暂时遍历1~5位的组合过程,不过加权数随便折腾了一个值,马马虎虎凑合一下。
低码如下:
代码: 全选
#!/usr/bin/perl -w
use strict;
print "\"s\"=石头,\"j\"=剪子,\"b\"=布,\"exit\"退出!\n";
my %hash_z=("0"=>"j","1"=>"s","2"=>"b");
my %hash_r=reverse %hash_z;
my %hash_txt=("j"=>"剪刀","s"=>"石头","b"=>"布");
my $in_list="j";
my ($win,$eq,$lost)=(0,0,0);
while ((my $in=<STDIN>) ne "exit\n") {
chomp $in;
if (($in ne "s") && ($in ne "j") && ($in ne "b")) {
print "Error Input!\n";
next;
}
my $guess;
my ($count_J,$count_S,$count_B)=(0,0,0);
for (my $i=1;$i<6;$i++) {
my $rul="\\w" x $i;
if ($in_list=~/($rul)$/) {
my $tmp=$1;
my $j=()=$in_list=~/($tmp)j/g;$count_J+=$j*(1+$i*.25);
my $s=()=$in_list=~/($tmp)s/g;$count_S+=$s*(1+$i*.25);
my $b=()=$in_list=~/($tmp)b/g;$count_B+=$b*(1+$i*.25);
}
}
if (($count_J + rand(4) - 2) >$count_S) {
$guess=(($count_J + rand(4) - 2)>$count_B) ? "j" : "b";
} else {
$guess=(($count_S + rand(4) - 2)>$count_B) ? "s" : "b";
}
my $out=$hash_z{($hash_r{$guess} + 1) % 3};
my $flag = ($hash_r{$out} + 3 - $hash_r{$in}) % 3;
my $flag_txt;
if ($flag == 0) {
$eq++; $flag_txt="平局";
} elsif ($flag == 1) {
$lost++; $flag_txt="你输了";
} else { $win++; $flag_txt="你赢了"; }
print "$hash_txt{$in} PK $hash_txt{$out} ****$flag_txt 赢了$win 次,输了$lost 次,平了$eq 次。\n";
$in_list .=$in;
};