Skip to content

Instantly share code, notes, and snippets.

@joelmcdaniel
Last active April 11, 2025 22:37
Show Gist options
  • Save joelmcdaniel/b4cb29be8cf6c1bf064e9a29209424e0 to your computer and use it in GitHub Desktop.
Save joelmcdaniel/b4cb29be8cf6c1bf064e9a29209424e0 to your computer and use it in GitHub Desktop.
F# - Pizza Exercise
#I @".\packages\FSharp.Data.2.4.2\lib\net45\"
#r "FSharp.Data.dll"
open FSharp.Data
open System
type PizzasJson = JsonProvider<"http://files.olo.com/pizzas.json">
type Pizza = {
mutable toppings: string[]
}
let top20 =
let data = PizzasJson.GetSamples()
let pizzas = Array.init<Pizza> (Array.length data) (fun _i -> { toppings = [||] })
for i in 0 .. pizzas.Length - 1 do
pizzas.[i].toppings <- Array.sort(data.[i].Toppings)
pizzas
|> Array.countBy(fun p -> p.toppings)
|> Array.sortByDescending(fun (_t, o) -> o)
|> Array.take(20)
|> Array.iteri(fun i (t, o) ->
printfn "Pizza Toppings: %A; Rank: %i; Number of Orders: %i" (String.Join(",", t)) (i+1) o)
|> ignore
@joelmcdaniel
Copy link
Author

joelmcdaniel commented Nov 6, 2017

Download FSharp.Data nuget package to solution folder, run in F# interactive (Alt + Enter).

Output:

Pizza Toppings: "pepperoni"; Rank: 1; Number of Orders: 4616
Pizza Toppings: "mozzarella cheese"; Rank: 2; Number of Orders: 1014
Pizza Toppings: "four cheese"; Rank: 3; Number of Orders: 956
Pizza Toppings: "bacon"; Rank: 4; Number of Orders: 732
Pizza Toppings: "beef"; Rank: 5; Number of Orders: 623
Pizza Toppings: "sausage"; Rank: 6; Number of Orders: 402
Pizza Toppings: "italian sausage"; Rank: 7; Number of Orders: 361
Pizza Toppings: "chicken"; Rank: 8; Number of Orders: 229
Pizza Toppings: "four cheese,pepperoni"; Rank: 9; Number of Orders: 203
Pizza Toppings: "ham"; Rank: 10; Number of Orders: 165
Pizza Toppings: "mushrooms"; Rank: 11; Number of Orders: 159
Pizza Toppings: "mozzarella cheese,pepperoni"; Rank: 12; Number of Orders: 155
Pizza Toppings: "beef,pepperoni"; Rank: 13; Number of Orders: 122
Pizza Toppings: "bacon,pepperoni"; Rank: 14; Number of Orders: 121
Pizza Toppings: "black olives"; Rank: 15; Number of Orders: 117
Pizza Toppings: "alredo sauce"; Rank: 16; Number of Orders: 101
Pizza Toppings: "pepperoni,sausage"; Rank: 17; Number of Orders: 96
Pizza Toppings: "cheddar cheese"; Rank: 18; Number of Orders: 95
Pizza Toppings: "italian sausage,pepperoni"; Rank: 19; Number of Orders: 85
Pizza Toppings: "pineapple"; Rank: 20; Number of Orders: 79

@joelmcdaniel
Copy link
Author

joelmcdaniel commented Feb 4, 2021

I banged out this free coding solution for an interview exercise one Saturday afternoon in F#. I think F# is pretty great even if there are very few F# jobs. I really wanted to work in F# at one point and still have all my F# books but there just wasn't enough demand for F# in the marketplace.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment