Last active
August 29, 2015 14:14
-
-
Save nagat01/3d31136c53368a4cf983 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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