Skip to content

Instantly share code, notes, and snippets.

@nagat01
Last active August 29, 2015 14:14
Show Gist options
  • Select an option

  • Save nagat01/3d31136c53368a4cf983 to your computer and use it in GitHub Desktop.

Select an option

Save nagat01/3d31136c53368a4cf983 to your computer and use it in GitHub Desktop.
open MathNet.Numerics
type BigRational with
member __.s =
let n, d = __.Numerator, __.Denominator
sprintf "%Aと%A/%A" (n / d) (n % d) d
type Human = Y | M
type Point = A | B | C | D
type br = BigRational
type Runner(human:Human, point:Point) as __ =
let mat a b c d = match __.point with A -> a | B -> b | C -> c | D -> d
member val human = human with get, set
member val point = point with get, set
member val position = 0N with get, set
member val time = 0N with get, set
member __.velocity =
match __.human with
| Y -> mat 84N 100N 105N 100N
| M -> mat 100N 126N 100N 90N
member __.length =
match __.human with
| Y -> mat 120N 100N 180N 200N
| M -> mat 200N 120N 100N 180N
member __.visit = (__.length - __.position) / __.velocity
member __.progress t =
__.time <- __.time + t
__.position <- __.position + t * __.velocity
member __.nextPoint =
__.time <- __.time + __.visit
__.point <-
match __.human with
| Y -> mat B C D A
| M -> mat D A B C
__.position <- 0N
member __.sPoint = mat "A" "B" "C" "D"
member __.sHuman = match __.human with Y -> "ゆう君" | M -> "まさひろ君"
let sVisit (v:Runner) (o:Runner) =
sprintf "%s%s地点に到達,%s%s地点から%sメートル進む,%s分経過"
v.sHuman v.sPoint o.sHuman o.sPoint o.position.s v.time.s
let simulator = seq {
let y = Runner(Y, A)
let m = Runner(M, D)
while true do
match y.point, m.point with
| A, B | B, C | C, D | D, A ->
let position = y.position + m.position
let velocity = y.velocity + m.velocity
let time = (y.length - position) / velocity
y.progress time
m.progress time
yield sprintf "%sと%sが%s地点の間ですれ違いました。%sは%s地点から%sメートル進んでいました。%s分経過しました。"
y.sHuman m.sHuman (y.sPoint + m.sPoint) y.sHuman y.sPoint y.position.s y.time.s
| _ -> ()
let yVisit = y.visit
let mVisit = m.visit
if yVisit < mVisit then
y.nextPoint
m.progress yVisit
yield sVisit y m
else
m.nextPoint
y.progress mVisit
yield sVisit m y }
simulator |> Seq.take 100 |> Seq.iter (printfn "%s")
System.Console.ReadKey() |> ignore
/*
ゆう君B地点に到達,まさひろ君D地点から128と4/7メートル進む,1と3/7分経過
まさひろ君C地点に到達,ゆう君B地点から57と1/7メートル進む,2と0/1分経過
ゆう君とまさひろ君がBC地点の間ですれ違いました。ゆう君はB地点から78と4/7メートル進んでいました。2と3/14分経過しました。
ゆう君C地点に到達,まさひろ君C地点から42と6/7メートル進む,2と3/7分経過
まさひろ君B地点に到達,ゆう君C地点から60と0/1メートル進む,3と0/1分経過
まさひろ君A地点に到達,ゆう君C地点から160と0/1メートル進む,3と20/21分経過
ゆう君D地点に到達,まさひろ君A地点から19と1/21メートル進む,4と1/7分経過
ゆう君とまさひろ君がDA地点の間ですれ違いました。ゆう君はD地点から90と10/21メートル進んでいました。5と1/21分経過しました。
まさひろ君D地点に到達,ゆう君D地点から180と20/21メートル進む,5と20/21分経過
ゆう君A地点に到達,まさひろ君D地点から17と1/7メートル進む,6と1/7分経過
ゆう君B地点に到達,まさひろ君D地点から145と5/7メートル進む,7と4/7分経過
まさひろ君C地点に到達,ゆう君B地点から38と2/21メートル進む,7と20/21分経過
ゆう君とまさひろ君がBC地点の間ですれ違いました。ゆう君はB地点から69と1/21メートル進んでいました。8と11/42分経過しました。
ゆう君C地点に到達,まさひろ君C地点から61と19/21メートル進む,8と4/7分経過
まさひろ君B地点に到達,ゆう君C地点から40と0/1メートル進む,8と20/21分経過
まさひろ君A地点に到達,ゆう君C地点から140と0/1メートル進む,9と19/21分経過
ゆう君D地点に到達,まさひろ君A地点から38と2/21メートル進む,10と2/7分経過
ゆう君とまさひろ君がDA地点の間ですれ違いました。ゆう君はD地点から80と20/21メートル進んでいました。11と2/21分経過しました。
まさひろ君D地点に到達,ゆう君D地点から161と19/21メートル進む,11と19/21分経過
ゆう君A地点に到達,まさひろ君D地点から34と2/7メートル進む,12と2/7分経過
ゆう君B地点に到達,まさひろ君D地点から162と6/7メートル進む,13と5/7分経過
まさひろ君C地点に到達,ゆう君B地点から19と1/21メートル進む,13と19/21分経過
ゆう君とまさひろ君がBC地点の間ですれ違いました。ゆう君はB地点から59と11/21メートル進んでいました。14と13/42分経過しました。
ゆう君C地点に到達,まさひろ君C地点から80と20/21メートル進む,14と5/7分経過
まさひろ君B地点に到達,ゆう君C地点から20と0/1メートル進む,14と19/21分経過
まさひろ君A地点に到達,ゆう君C地点から120と0/1メートル進む,15と6/7分経過
ゆう君D地点に到達,まさひろ君A地点から57と1/7メートル進む,16と3/7分経過
ゆう君とまさひろ君がDA地点の間ですれ違いました。ゆう君はD地点から71と3/7メートル進んでいました。17と1/7分経過しました。
まさひろ君D地点に到達,ゆう君D地点から142と6/7メートル進む,17と6/7分経過
ゆう君A地点に到達,まさひろ君D地点から51と3/7メートル進む,18と3/7分経過
まさひろ君C地点に到達,ゆう君A地点から120と0/1メートル進む,19と6/7分経過
ゆう君B地点に到達,まさひろ君C地点から0と0/1メートル進む,19と6/7分経過
ゆう君とまさひろ君がBC地点の間ですれ違いました。ゆう君はB地点から50と0/1メートル進んでいました。20と5/14分経過しました。
まさひろ君B地点に到達,ゆう君B地点から100と0/1メートル進む,20と6/7分経過
ゆう君C地点に到達,まさひろ君B地点から0と0/1メートル進む,20と6/7分経過
まさひろ君A地点に到達,ゆう君C地点から100と0/1メートル進む,21と17/21分経過
ゆう君D地点に到達,まさひろ君A地点から76と4/21メートル進む,22と4/7分経過
ゆう君とまさひろ君がDA地点の間ですれ違いました。ゆう君はD地点から61と19/21メートル進んでいました。23と4/21分経過しました。
まさひろ君D地点に到達,ゆう君D地点から123と17/21メートル進む,23と17/21分経過
ゆう君A地点に到達,まさひろ君D地点から68と4/7メートル進む,24と4/7分経過
まさひろ君C地点に到達,ゆう君A地点から104と0/1メートル進む,25と17/21分経過
ゆう君B地点に到達,まさひろ君C地点から19と1/21メートル進む,26と0/1分経過
ゆう君とまさひろ君がBC地点の間ですれ違いました。ゆう君はB地点から40と10/21メートル進んでいました。26と17/42分経過しました。
まさひろ君B地点に到達,ゆう君B地点から80と20/21メートル進む,26と17/21分経過
ゆう君C地点に到達,まさひろ君B地点から24と0/1メートル進む,27と0/1分経過
まさひろ君A地点に到達,ゆう君C地点から80と0/1メートル進む,27と16/21分経過
ゆう君D地点に到達,まさひろ君A地点から95と5/21メートル進む,28と5/7分経過
ゆう君とまさひろ君がDA地点の間ですれ違いました。ゆう君はD地点から52と8/21メートル進んでいました。29と5/21分経過しました。
まさひろ君D地点に到達,ゆう君D地点から104と16/21メートル進む,29と16/21分経過
ゆう君A地点に到達,まさひろ君D地点から85と5/7メートル進む,30と5/7分経過
まさひろ君C地点に到達,ゆう君A地点から88と0/1メートル進む,31と16/21分経過
ゆう君B地点に到達,まさひろ君C地点から38と2/21メートル進む,32と1/7分経過
ゆう君とまさひろ君がBC地点の間ですれ違いました。ゆう君はB地点から30と20/21メートル進んでいました。32と19/42分経過しました。
まさひろ君B地点に到達,ゆう君B地点から61と19/21メートル進む,32と16/21分経過
ゆう君C地点に到達,まさひろ君B地点から48と0/1メートル進む,33と1/7分経過
まさひろ君A地点に到達,ゆう君C地点から60と0/1メートル進む,33と5/7分経過
ゆう君D地点に到達,まさひろ君A地点から114と2/7メートル進む,34と6/7分経過
ゆう君とまさひろ君がDA地点の間ですれ違いました。ゆう君はD地点から42と6/7メートル進んでいました。35と2/7分経過しました。
まさひろ君D地点に到達,ゆう君D地点から85と5/7メートル進む,35と5/7分経過
ゆう君A地点に到達,まさひろ君D地点から102と6/7メートル進む,36と6/7分経過
まさひろ君C地点に到達,ゆう君A地点から72と0/1メートル進む,37と5/7分経過
ゆう君B地点に到達,まさひろ君C地点から57と1/7メートル進む,38と2/7分経過
ゆう君とまさひろ君がBC地点の間ですれ違いました。ゆう君はB地点から21と3/7メートル進んでいました。38と1/2分経過しました。
まさひろ君B地点に到達,ゆう君B地点から42と6/7メートル進む,38と5/7分経過
ゆう君C地点に到達,まさひろ君B地点から72と0/1メートル進む,39と2/7分経過
まさひろ君A地点に到達,ゆう君C地点から40と0/1メートル進む,39と2/3分経過
ゆう君D地点に到達,まさひろ君A地点から133と1/3メートル進む,41と0/1分経過
ゆう君とまさひろ君がDA地点の間ですれ違いました。ゆう君はD地点から33と1/3メートル進んでいました。41と1/3分経過しました。
まさひろ君D地点に到達,ゆう君D地点から66と2/3メートル進む,41と2/3分経過
ゆう君A地点に到達,まさひろ君D地点から120と0/1メートル進む,43と0/1分経過
まさひろ君C地点に到達,ゆう君A地点から56と0/1メートル進む,43と2/3分経過
ゆう君B地点に到達,まさひろ君C地点から76と4/21メートル進む,44と3/7分経過
ゆう君とまさひろ君がBC地点の間ですれ違いました。ゆう君はB地点から11と19/21メートル進んでいました。44と23/42分経過しました。
まさひろ君B地点に到達,ゆう君B地点から23と17/21メートル進む,44と2/3分経過
ゆう君C地点に到達,まさひろ君B地点から96と0/1メートル進む,45と3/7分経過
まさひろ君A地点に到達,ゆう君C地点から20と0/1メートル進む,45と13/21分経過
ゆう君D地点に到達,まさひろ君A地点から152と8/21メートル進む,47と1/7分経過
ゆう君とまさひろ君がDA地点の間ですれ違いました。ゆう君はD地点から23と17/21メートル進んでいました。47と8/21分経過しました。
まさひろ君D地点に到達,ゆう君D地点から47と13/21メートル進む,47と13/21分経過
ゆう君A地点に到達,まさひろ君D地点から137と1/7メートル進む,49と1/7分経過
まさひろ君C地点に到達,ゆう君A地点から40と0/1メートル進む,49と13/21分経過
ゆう君B地点に到達,まさひろ君C地点から95と5/21メートル進む,50と4/7分経過
ゆう君とまさひろ君がBC地点の間ですれ違いました。ゆう君はB地点から2と8/21メートル進んでいました。50と25/42分経過しました。
まさひろ君B地点に到達,ゆう君B地点から4と16/21メートル進む,50と13/21分経過
まさひろ君A地点に到達,ゆう君B地点から100と0/1メートル進む,51と4/7分経過
ゆう君C地点に到達,まさひろ君A地点から0と0/1メートル進む,51と4/7分経過
ゆう君D地点に到達,まさひろ君A地点から171と3/7メートル進む,53と2/7分経過
ゆう君とまさひろ君がDA地点の間ですれ違いました。ゆう君はD地点から14と2/7メートル進んでいました。53と3/7分経過しました。
まさひろ君D地点に到達,ゆう君D地点から28と4/7メートル進む,53と4/7分経過
ゆう君A地点に到達,まさひろ君D地点から154と2/7メートル進む,55と2/7分経過
まさひろ君C地点に到達,ゆう君A地点から24と0/1メートル進む,55と4/7分経過
まさひろ君B地点に到達,ゆう君A地点から108と0/1メートル進む,56と4/7分経過
ゆう君とまさひろ君がAB地点の間ですれ違いました。ゆう君はA地点から112と4/5メートル進んでいました。56と22/35分経過しました。
ゆう君B地点に到達,まさひろ君B地点から18と0/1メートル進む,56と5/7分経過
まさひろ君A地点に到達,ゆう君B地点から80と20/21メートル進む,57と11/21分経過
ゆう君C地点に到達,まさひろ君A地点から19と1/21メートル進む,57と5/7分経過
ゆう君D地点に到達,まさひろ君A地点から190と10/21メートル進む,59と3/7分経過
ゆう君とまさひろ君がDA地点の間ですれ違いました。ゆう君はD地点から4と16/21メートル進んでいました。59と10/21分経過しました。
まさひろ君D地点に到達,ゆう君D地点から9と11/21メートル進む,59と11/21分経過
ゆう君A地点に到達,まさひろ君D地点から171と3/7メートル進む,61と3/7分経過
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment