Skip to content

Instantly share code, notes, and snippets.

@oneillci
Created August 12, 2015 08:16
Show Gist options
  • Save oneillci/261eb3c6885a24c37ed6 to your computer and use it in GitHub Desktop.
Save oneillci/261eb3c6885a24c37ed6 to your computer and use it in GitHub Desktop.
module Functional_Kats_Kata =
type PatternType =
| Asterisk
| Question
| None
let findPattern (input:string) (pattern:string) patternType =
match patternType with
| Asterisk ->
let searchString = (pattern.Split [| '*' |]).[0]
input.StartsWith searchString // seems a little imperative
| Question ->
let searchString = (pattern.Split [| '?' |]).[0]
input.StartsWith searchString &&
(input.Length = searchString.Length || input.Length = searchString.Length + 1)
| None -> false
let searchPattern (inputArray:string list) (pattern: string) =
// Good use case for pattern match? Better off using if statement
let patternType =
match pattern.IndexOf "*", pattern.IndexOf '?' with
| -1, -1 -> None
| _, -1 -> Asterisk
| -1, _ -> Question
| _, _ -> None
inputArray
|> Seq.filter (fun input -> findPattern input pattern patternType)
|> Seq.iter (fun i -> printfn "%s" i)
let searchInput = [ "crisis"; "criteria"; "crisantemo"; "crisix"; "crisi" ]
searchPattern searchInput "crisi?"
searchPattern searchInput "crisi"
searchPattern searchInput "cri*"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment