Horse racing: Difference between revisions

m
No edit summary
 
(4 intermediate revisions by 4 users not shown)
Line 80:
Other things being equal (which they seldom are in actual horse racing!) what would you '''''expect''''' the '''full result''' of Race 4 to be including the '''time''' of the winner?
<br><br>
 
=={{header|FreeBASIC}}==
{{trans|Nim}}
<syntaxhighlight lang="vbnet">' Ratings on past form, assuming a rating of 100 for horse A.
Dim As Double a = 100.0
Dim As Double b = a - 8 - 2 * 2 ' carried 8 lbs less, finished 2 lengths behind.
Dim As Double c = a + 4 - 2 * 3.5
Dim As Double d = a - 4 - 10 * 0.4 ' based on relative weight and time.
Dim As Double e = d + 7 - 2 * 1
Dim As Double f = d + 11 - 2 * (4 - 2)
Dim As Double g = a - 10 + 10 * 0.2
Dim As Double h = g + 6 - 2 * 1.5
Dim As Double i = g + 15 - 2 * 2
 
' Adjustments to ratings for current race.
b += 4
c -= 4
h += 3
Dim As Double j = a - 3 + 10 * 0.2
 
' Filly's allowance to give weight adjusted weighting.
b += 3
d += 3
i += 3
j += 3
 
' Create table mapping horse to its weight adjusted rating and whether colt.
Type Pair
key As String*1
rating As Double
colt As Boolean
End Type
 
Dim As Pair list(9)
list(0).key = "A": list(0).rating = a: list(0).colt = True
list(1).key = "B": list(1).rating = b: list(1).colt = False
list(2).key = "C": list(2).rating = c: list(2).colt = True
list(3).key = "D": list(3).rating = d: list(3).colt = False
list(4).key = "E": list(4).rating = e: list(4).colt = True
list(5).key = "F": list(5).rating = f: list(5).colt = True
list(6).key = "G": list(6).rating = g: list(6).colt = True
list(7).key = "H": list(7).rating = h: list(7).colt = True
list(8).key = "I": list(8).rating = i: list(8).colt = False
list(9).key = "J": list(9).rating = j: list(9).colt = False
 
' Sort in descending order of rating.
Dim As Integer n = Ubound(list)
For x As Integer = 0 To n - 1
For y As Integer = 0 To n - x - 1
If list(y).rating < list(y + 1).rating Then Swap list(y), list(y + 1)
Next y
Next x
 
' Show expected result of race.
Print !"Race 4\n"
Print "Pos Horse Weight Dist Sex"
Dim As String posic = ""
For x As Integer = Lbound(list) To Ubound(list)
Dim As Double wt = Iif(list(x).colt, 9.00, 8.11)
Dim As Double dist = 0.0
If x > 0 Then dist = (list(x-1).rating - list(x).rating) * 0.5
posic = Iif(x = 0 Or dist > 0, Str(x + 1), Iif(Right(posic, 1) <> "=", Str(x) & "=", posic))
Dim As String sx = Iif(list(x).colt, "colt", "filly")
Print Using "\\ ! ##.## #.# \ \"; posic; list(x).key; wt; dist; sx
Next x
 
' Weight adjusted rating of winner.
Dim As Double wr = list(0).rating
 
' Expected time of winner (relative to A's time in Race 1).
Dim As Double t = 96 - (wr - 100) / 10
Dim As Integer min = Int(t / 60)
Dim As Integer sec = t Mod 60
Print
Print Using "Time ## minute ##.# seconds"; min; sec
 
Sleep</syntaxhighlight>
{{out}}
<pre>Race 4
 
Pos Horse Weight Dist Sex
1 I 8.11 0.0 filly
2 J 8.11 2.0 filly
3 A 9.00 1.0 colt
4 F 9.00 0.5 colt
5 H 9.00 0.5 colt
6 E 9.00 0.5 colt
7 B 8.11 1.0 filly
7= D 8.11 0.0 filly
9 C 9.00 1.0 colt
10 G 9.00 0.5 colt
 
Time 1 minute 35.0 seconds</pre>
 
=={{header|Go}}==
{{trans|Wren}}
<langsyntaxhighlight lang="go">package main
 
import (
Line 177 ⟶ 271:
sec := t - float64(min)*60
fmt.Printf("\nTime %d minute %3.1f seconds\n", min, sec)
}</langsyntaxhighlight>
 
{{out}}
Line 200 ⟶ 294:
=={{header|Julia}}==
{{trans|Go}}
<langsyntaxhighlight lang="julia">function main()
# ratings on past form, assuming a rating of 100 for horse A
a = 100
Line 262 ⟶ 356:
 
main()
</langsyntaxhighlight>{{out}}
<pre>
Race 4
Line 283 ⟶ 377:
=={{header|Nim}}==
{{trans|Wren}}
<langsyntaxhighlight Nimlang="nim">import algorithm, math, strformat, strutils
 
# Ratings on past form, assuming a rating of 100 for horse A.
Line 341 ⟶ 435:
var min = int(t / 60)
var sec = t mod 60
echo &"\nTime {min} minute {sec:.1f} seconds"</langsyntaxhighlight>
 
{{out}}
Line 362 ⟶ 456:
=={{header|Perl}}==
{{trans|Raku}}
<langsyntaxhighlight lang="perl">use strict;
use warnings;
 
Line 402 ⟶ 496:
}
 
print for sort @predictions;</langsyntaxhighlight>
{{out}}
<pre> 1 i Iphigenia in Brooklyn 8.11 0.0 filly 1:35.4
Line 418 ⟶ 512:
Disclaimer: I know nothing about horse racing, all calculations were reverse-engineered from those in the Go entry.<br>
Made table-based so you can plug in different races and adjustments, but any horse appearing in more than one race input would too in the output.
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #7060A8;">requires</span> <span style="color: #0000FF;">(</span><span style="color: #008000;">"1.0.1"</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">// [else sort_columns() needs a deep_copy()]</span>
Line 482 ⟶ 576:
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">elapsed</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">remainder</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">60</span><span style="color: #0000FF;">))</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nTime %s %s\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">m</span><span style="color: #0000FF;">,</span><span style="color: #000000;">s</span><span style="color: #0000FF;">})</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 504 ⟶ 598:
=={{header|Raku}}==
I know nothing about horse racing and/or handicapping. This is mostly a straightforward translation of the logic from Go though I did take certain liberties with formatting and layout.
<syntaxhighlight lang="raku" perl6line>my %card;
%card<a> = { name => 'Alberta Clipper', :sex<M>, rating => 100 };
%card<b> = { name => 'Beetlebaum', :sex<F>, rating => %card<a><rating> - 8 - 2*2 };
Line 540 ⟶ 634:
printf "%2d %s %-22s %.2f %.1f %-6s %s\n", $position, .key, .value<name>, .value<weight>,
.value<back>, .value<sex> eq 'M' ?? 'colt' !! 'filly', .value.<time>.polymod(60 xx*).reverse.join: ':';
}</langsyntaxhighlight>
{{out}}
<pre>Pos Horse Name Weight Back Sex Time
Line 554 ⟶ 648:
9 g Grindstone 9.00 7.0 colt 1:36.8</pre>
 
=={{header|V (Vlang)}}==
{{trans|go}}
<syntaxhighlight lang="v (vlang)">struct Kv {
key string
value []f64
Line 651 ⟶ 745:
sec := t - f64(min)*60
println("\nTime $min minute ${sec:3.1f} seconds")
}</langsyntaxhighlight>
{{out}}
<pre>Same as go entry</pre>
Line 657 ⟶ 751:
=={{header|Wren}}==
{{libheader|Wren-fmt}}
<langsyntaxhighlight ecmascriptlang="wren">import "./fmt" for Fmt
 
// ratings on past form, assuming a rating of 100 for horse A
Line 721 ⟶ 815:
var min = (t/60).floor
var sec = t % 60
System.print("\nTime %(min) minute %(sec) seconds")</langsyntaxhighlight>
 
{{out}}
2,169

edits