Mind boggling card trick: Difference between revisions

m (→‎{{header|Haskell}}: mapM -> traverse)
Line 37:
//Be boggled? Nigel Galloway: September 19th., 2018
let N=System.Random()
let fN=List.unfold(function |(0,0)->None |(n,g)->let ng=N.Next (n+g) in Some (if ng>=n then Some("Black",(n,g-1)) else Some("Red",(n-1,g))))(26,26)
let fG n=let (n,n')::(g,g')::_=List.countBy(fun (n::g::_)->if n=g then n else g) n in sprintf "%d %s cards and %d %s cards" n' n g' g
printf "A well shuffled deck -> "; List.iter (printf "%s ") fN; printfn ""
fN |> List.chunkBySize 2 |> List.groupBy (fun n->List.item 0 n)head |> List.iter(fun(n,n')->printfn "The %s pile contains %s" n (fG n'))
</lang>
{{out}}
<pre>
A well shuffled deck -> Black Black Red Black Black BlackRed BlackRed Black Red Black Black Red Red Red Red Red Black Red Black Black Red Red RedBlack Black Red Black Red Red BlackRed Black Black Red Black Red Black Black Red Red Black Red Black Black Black RedBlack Red Red RedBlack RedBlack Red Black Black Red Red RedBlack Red Red Black
The Black pile contains 106 Black cards and 38 Red cards
The Red pile contains 36 BlackRed cards and 106 RedBlack cards
</pre>
 
2,172

edits