Skip to content

Instantly share code, notes, and snippets.

@mathias-brandewinder
Last active November 9, 2015 01:49
Show Gist options
  • Save mathias-brandewinder/3f8ab7fcda99e73ad38a to your computer and use it in GitHub Desktop.
Save mathias-brandewinder/3f8ab7fcda99e73ad38a to your computer and use it in GitHub Desktop.
Wonderland katas
(def suits [:spade :club :diamond :heart])
(def ranks [2 3 4 5 6 7 8 9 10 :jack :queen :king :ace])
type Suit =
| Spade
| Club
| Diamond
| Heart
type Rank =
| Value of int
| Jack
| Queen
| King
| Ace
type Card = Suit * Rank
(def start-pos [[[:fox :goose :corn :you] [:boat] []]])
type Location =
| LeftBank
| RightBank
| Boat
type Positions = {
Fox: Location
Goose: Location
Corn: Location
You: Location }
let encode key message = "encodeme"
encode "scones" "meetmebythetree" = "egsgqwtahuiljgs"
val encode : key:Keyword -> message:Message -> Message
Test failed:
encode "vigilance" "meetmeontuesdayeveningatseven" = "hmkbxebpxpmyllyrxiiqtoltfgzzv"
"encodeme" = "hmkbxebpxpmyllyrxiiqtoltfgzzv"
false
Test failed:
encode "scones" "meetmebythetree" = "egsgqwtahuiljgs"
"encodeme" = "egsgqwtahuiljgs"
false
#r @"../packages/Unquote/lib/net45/Unquote.dll"
open Swensen.Unquote
let tests () =
// verify encoding
test <@ encode "vigilance" "meetmeontuesdayeveningatseven" = "hmkbxebpxpmyllyrxiiqtoltfgzzv" @>
test <@ encode "scones" "meetmebythetree" = "egsgqwtahuiljgs" @>
// run the tests
tests ()
let gooseIsSafe positions =
(positions.Goose <> positions.Fox)
|| (positions.Goose = positions.You)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment