Skip to content

Instantly share code, notes, and snippets.

@vbedegi
Last active October 30, 2015 17:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vbedegi/8d2e2ec03a513f6168b4 to your computer and use it in GitHub Desktop.
Save vbedegi/8d2e2ec03a513f6168b4 to your computer and use it in GitHub Desktop.
open System
open System.IO
let gravity = 9.81
let angleOfReach speed distance = 0.5 * Math.Asin((gravity * distance) / Math.Pow(speed, 2.0))
let distanceTravelled speed angle = Math.Pow(speed, 2.0) * Math.Sin(2.0 * angle) / gravity
let angle x y = Math.Atan(y / x)
type Entity =
{ X : float
Y : float
Speed : float
Distance : float
Name : string }
type Result =
{ DistanceTravelled : double
Hits : bool
ActualAngle : double
RequiredAngle : double }
let calcResult entity =
let actualAngle = angle entity.X entity.Y
let actualDistance = distanceTravelled entity.Speed actualAngle
let requiredAngle = angleOfReach entity.Speed entity.Distance
{ DistanceTravelled = actualDistance
Hits = actualDistance = entity.Distance
ActualAngle = actualAngle
RequiredAngle = requiredAngle }
let GetFile =
Console.Write("Enter the full path to the name of the input file: ")
Console.ReadLine()
[<EntryPoint>]
let main argv =
try
use input =
new StreamReader(match argv.Length with
| 0 -> GetFile
| _ -> argv.[0])
let entities =
[ while not input.EndOfStream do
let raw = input.ReadLine()
let values = raw.Split(',')
yield { X = float values.[0]
Y = float values.[1]
Speed = float values.[2]
Distance = float values.[3]
Name = values.[4] } ]
let tuples =
seq {
for entity in entities ->
(entity, calcResult(entity))
}
Console.WriteLine("The results are: ")
for (entity, result) in tuples do
match result with
| {Hits = true} -> Console.WriteLine("{0} hits", entity.Name)
| _ -> Console.WriteLine("{0} misses, actual angle: {1}, required angle: {2}", entity.Name, result.ActualAngle, result.RequiredAngle)
Console.ReadKey()
0
with
| :? System.IO.FileNotFoundException ->
Console.Write("File Not Found. Press a key to exit")
Console.ReadKey()
-1
| _ ->
Console.Write("Something else happened")
Console.ReadKey()
-1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment