Beitrag von Michael (450 Beiträge) am Dienstag, 28.Februar.2006, 04:05.
Brauche Unterstützung in sachen Perl Syntax und allem
Ich versuche eine art rating rechnung zu erstellen.
mein problem dabei ist das perl.
ich habe schon eine teillösung in java dahingewurschtelt (untere eingabe) womit ich zufrieden wäre wenn ich das geiche mit BP erreichen könnte.
part 1 wäre erstmal nur die rechnung.
part 2 wäre dann das errechnete in diese oder einer weiteren db zu aktualisieren.
Die eigenliche formel wäre wie gefolgt, nur dann müsste ich wissen wer gegen wen ein ergebnis erzielt hätte was die sache nur komplizieren würde.
// all players start with 1000 rating points
//K50 = $games <1; //for new players
//K30 = $games <30; // for players who have played 30 or more games
//K20 = $Rating <2400; // for players that have obtained a raiting of 2400 or higher
//K_Value =0; //depends on calc look up Match_ID
//Rating = 0; //depends on calc look up Match_ID
//Rating_Difference= 60; //depends on calc look up Match_ID
//Probability = 1/(1+10^(- $Rating_Difference/400));
//calc_winner= K_Value * 100% - $Probability;
//calc_looser= K_Value * $Probability;
also habe ich mich für eine abgespeckte variante entschieden das eine rating aus dem win/loss verhältnis zu der startpunktzahl entsteht.
siehe link: http://www.baseportal.de/cgi-bin/baseportal.pl?htx=/kmk_sl/ladder
hier some code:
<html><head>
<title>baseportal Datenbank</title>
</head><body bgcolor=ffffff>
<do action=all>
// Hell Knows?!?!?
// new Player K_Value 50
// player with 30 games or more K_Value 30
// Player with Rating == or above 2400 K_Value 20
<perl>
$Total=$Win+$Loss+$Disc;
$WC=$Total*$Win/100;
if $Total <30 $K_Value=50;
if $Total >30 $K_Value=30;
if $Rating >2400 $K_Value=20;
</perl>
<loop db=ladder code=Perl>
$Total=$Win+$Loss+$Disc;
$WC=100/$Win*$Loss;
out" ID= $_id | Nick = $Nick | Total= $Total | WC= $WC % |<br>";
</loop>
</body></html>
<html>
<head>
<title>Untitled</title>
</head>
<body>
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function calc(form) {
// Player B Rating
RateB=eval(form.RateB.value)
// Player A
WinA=eval(form.WinA.value)
LossA=eval(form.LossA.value)
DiscA=eval(form.DiscA.value)
GamesA=WinA+LossA+DiscA
StartRateA=1000
StartRankA=30
Rated=eval(form.Rated.value)
RateA=Rated
K_ValueA = 50 ;
}
K_ValueA = 30 ;
}
RateCalc1_A=WinA*K_ValueA
RateCalc2_A=LossA*K_ValueA
RateCalc3_A=RateCalc1_A-RateCalc2_A
RateA=StartRateA+RateCalc3_A
K_ValueA = 20 ;
FinalrateA=StartRateA+RateCalc3_A
// Ladder calculations
Diff=FinalrateA-RateB
ProbCalc= 1/(1+10^(- Diff/400))
calc_winnerA= K_ValueA * 100% - ProbCalc
//calc_looserA= K_ValueA * ProbCalc
form.kV.value = eval(K_ValueA);
form.gA.value = eval(GamesA);
form.Rated.value = eval(FinalrateA+GamesA*~calc_winnerA+0,99);
}
</script>
<FORM name="formx">
<table>
<tr>
<td>Rating</td>
<td> <input name="Rated" type="number" value="1000"size=3></td>
<td>Win:</td>
<td><input name="WinA" type="number" value="0"size=2></td>
<td>Loss:</td>
<td><input name="LossA" type="number" value="0"size=2></td>
<td>Discs</td>
<td><input name="DiscA" type="number" value="0"size=2></td>
<td>K_Value</td>
<td><input name="kV" type="number" value="0"size=2></td>
<td>Played Games</td>
<td><input name="gA" type="number" value="0"size=2></td>
</tr>
</table>
<br>
<br>
<input name="RateB" type="hidden" value="1000"size=3>
<input type="button" value=" berechnen " onClick="calc(this.form)"class=form>
</form>
</body>
</html>
Ich würde mich über hilfe sehr freuen und mich auch erkenntlich zeigen auf der einen oder anderen wohlgesinnten art natürlich :-)
thx im voraus
Michael