HR F#: Filter Array

The next HackerRank functional problem is Filter Array.

Filter a given array of integers and output only those values that are less than a specified value X.

The idea is to create a filtering function, not using the one from the standard library. With what is already known from solving previous problem[1], following the recommended method signature should not be difficult.

The recommended signature is upper limit and list, returns list.

Instead of lists, let's use the sequence:

let f x s =
  seq { for v in s do if v < x then yield v }

readItemsFromInput was introduced in the solution for the problem "List Replication".

The solution:

open System

let f x s =
  seq { for v in s do if v < x then yield v }

let rec readItemsFromInput () = seq {
    let line = Console.ReadLine ()
    match line with
    | null -> ()
    | _ -> yield line |> int
           yield! readItemsFromInput ()         
}

[<EntryPoint>]
let main argv = 
    let x = Console.ReadLine () |> int
    let items = readItemsFromInput ()
    items
    |> f x
    |> Seq.iter (fun v -> printfn "%A" v)
    0 // return an integer exit code

  1. HR F#: List Replication, https://alexatnet.com/hr-f-list-replication/ ↩︎