27 lines
676 B
Text
27 lines
676 B
Text
import Init.Data.BinomialHeap
|
|
|
|
abbrev Heap := BinomialHeap Nat (fun a b => a < b)
|
|
|
|
def mkHeap (n m : Nat) : Heap :=
|
|
let hs : List Heap := n.fold (fun i hs =>
|
|
let h : Heap := BinomialHeap.empty;
|
|
let h : Heap := m.fold (fun j h =>
|
|
let v := n*m - j*n - i;
|
|
h.insert v) h;
|
|
h :: hs)
|
|
[];
|
|
hs.foldl (fun h₁ h₂ => h₁.merge h₂) BinomialHeap.empty
|
|
|
|
partial def display : Nat → Heap → IO Unit
|
|
| prev, h =>
|
|
if h.isEmpty then pure ()
|
|
else do
|
|
let m := h.head;
|
|
unless (prev < m) (IO.println ("failed " ++ toString prev ++ " " ++ toString m));
|
|
display m h.tail
|
|
|
|
def main : IO Unit :=
|
|
do
|
|
let h := mkHeap 20 20;
|
|
display 0 h;
|
|
IO.println h.toList.length
|