Last active
December 18, 2015 22:39
-
-
Save kimsk/5856010 to your computer and use it in GitHub Desktop.
Learning F# : AboutTheStockExample
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
module ``about the stock example`` = | |
let stockData = | |
[ "Date,Open,High,Low,Close,Volume,Adj Close"; | |
"2012-03-30,32.40,32.41,32.04,32.26,31749400,32.26"; | |
"2012-03-29,32.06,32.19,31.81,32.12,37038500,32.12"; | |
"2012-03-28,32.52,32.70,32.04,32.19,41344800,32.19"; | |
"2012-03-27,32.65,32.70,32.40,32.52,36274900,32.52"; | |
"2012-03-26,32.19,32.61,32.15,32.59,36758300,32.59"; | |
"2012-03-23,32.10,32.11,31.72,32.01,35912200,32.01"; | |
"2012-03-22,31.81,32.09,31.79,32.00,31749500,32.00"; | |
"2012-03-21,31.96,32.15,31.82,31.91,37928600,31.91"; | |
"2012-03-20,32.10,32.15,31.74,31.99,41566800,31.99"; | |
"2012-03-19,32.54,32.61,32.15,32.20,44789200,32.20"; | |
"2012-03-16,32.91,32.95,32.50,32.60,65626400,32.60"; | |
"2012-03-15,32.79,32.94,32.58,32.85,49068300,32.85"; | |
"2012-03-14,32.53,32.88,32.49,32.77,41986900,32.77"; | |
"2012-03-13,32.24,32.69,32.15,32.67,48951700,32.67"; | |
"2012-03-12,31.97,32.20,31.82,32.04,34073600,32.04"; | |
"2012-03-09,32.10,32.16,31.92,31.99,34628400,31.99"; | |
"2012-03-08,32.04,32.21,31.90,32.01,36747400,32.01"; | |
"2012-03-07,31.67,31.92,31.53,31.84,34340400,31.84"; | |
"2012-03-06,31.54,31.98,31.49,31.56,51932900,31.56"; | |
"2012-03-05,32.01,32.05,31.62,31.80,45240000,31.80"; | |
"2012-03-02,32.31,32.44,32.00,32.08,47314200,32.08"; | |
"2012-03-01,31.93,32.39,31.85,32.29,77344100,32.29"; | |
"2012-02-29,31.89,32.00,31.61,31.74,59323600,31.74"; ] | |
// Feel free to add extra [<Koan>] members here to write | |
// tests for yourself along the way. You can also try | |
// using the F# Interactive window to check your progress. | |
[<Koan>] | |
let YouGotTheAnswerCorrect() = | |
let splitCommas (x:string) = | |
x.Split([|','|]) | |
// get a list of list of string | |
let records = List.tail stockData |> List.map splitCommas |> List.map Array.toList | |
// get a list of open/close diff | |
let diff = records |> List.map (fun x -> string(abs(float x.[4]) - (float x.[1]))) | |
// merge records and diff, so I can use it with maxBy below | |
let list = List.map2 (fun x y -> x :: y) diff records | |
let result = List.maxBy (fun (x:string list) -> float x.Head) list |> (fun (x:string list) -> x.[1]) | |
AssertEquality "2012-03-13" result |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
What if you don't know the column position ahead of time?