Last active
April 11, 2025 22:37
-
-
Save joelmcdaniel/b4cb29be8cf6c1bf064e9a29209424e0 to your computer and use it in GitHub Desktop.
F# - Pizza Exercise
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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 |
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
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