Sha256: ee2de454b25dad5c0ce387994d74a816fda029ff7bdde4db8fa9197b81c838fd

Contents?: true

Size: 1.67 KB

Versions: 280

Compression:

Stored size: 1.67 KB

Contents

module TwelveDaysSong

let numberToStr = 
    function
    | 0  -> "a"
    | 1  -> "and a"
    | 2  -> "two"
    | 3  -> "three"
    | 4  -> "four"
    | 5  -> "five"
    | 6  -> "six"
    | 7  -> "seven"
    | 8  -> "eight"
    | 9  -> "nine"
    | 10 -> "ten"
    | 11 -> "eleven"
    | 12 -> "twelve"
    | _  -> failwith "Invalid day"

let countToStr = 
    function
    | 1  -> "first"
    | 2  -> "second"
    | 3  -> "third"
    | 4  -> "fourth"
    | 5  -> "fifth"
    | 6  -> "sixth"
    | 7  -> "seventh"
    | 8  -> "eighth"
    | 9  -> "ninth"
    | 10  -> "tenth"
    | 11 -> "eleventh"
    | 12 -> "twelfth"
    | _  -> failwith "Invalid count"

let subject = 
    function
    | 0  -> "Partridge in a Pear Tree";
    | 1  -> "Partridge in a Pear Tree";
    | 2  -> "Turtle Doves"; 
    | 3  -> "French Hens"; 
    | 4  -> "Calling Birds"; 
    | 5  -> "Gold Rings"; 
    | 6  -> "Geese-a-Laying"; 
    | 7  -> "Swans-a-Swimming";
    | 8  -> "Maids-a-Milking";
    | 9  -> "Ladies Dancing"; 
    | 10 -> "Lords-a-Leaping"; 
    | 11 -> "Pipers Piping";
    | 12 -> "Drummers Drumming"
    | _  -> failwith "Invalid subject"

let subjectToStr number = sprintf "%s %s" (numberToStr number) (subject number)

let verseBegin number = sprintf "On the %s day of Christmas my true love gave to me, " (countToStr number)

let verseEnd = 
    function
    | 1 -> 
        subjectToStr 0
    | number -> 
        [number .. -1 .. 1] 
        |> List.map subjectToStr 
        |> List.reduce (fun x y -> x + ", " + y)

let verse number = sprintf "%s%s.\n" (verseBegin number) (verseEnd number)
let verses start stop = List.fold (fun acc x -> acc + verse x + "\n") "" [start..stop]
let song = verses 1 12

Version data entries

280 entries across 280 versions & 1 rubygems

Version Path
trackler-2.2.1.62 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.61 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.60 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.59 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.58 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.57 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.56 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.55 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.54 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.53 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.52 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.51 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.50 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.49 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.48 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.47 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.46 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.45 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.44 tracks/fsharp/exercises/twelve-days/Example.fs
trackler-2.2.1.43 tracks/fsharp/exercises/twelve-days/Example.fs