diff --git a/week1/week1.hoon b/101/week1/week1.hoon similarity index 100% rename from week1/week1.hoon rename to 101/week1/week1.hoon diff --git a/week2/week2.hoon b/101/week2/week2.hoon similarity index 100% rename from week2/week2.hoon rename to 101/week2/week2.hoon diff --git a/week3/assignment_3a.hoon b/101/week3/assignment_3a.hoon similarity index 100% rename from week3/assignment_3a.hoon rename to 101/week3/assignment_3a.hoon diff --git a/week3/week3.hoon b/101/week3/week3.hoon similarity index 100% rename from week3/week3.hoon rename to 101/week3/week3.hoon diff --git a/week3/week3.txt b/101/week3/week3.txt similarity index 100% rename from week3/week3.txt rename to 101/week3/week3.txt diff --git a/week4/week4.hoon b/101/week4/week4.hoon similarity index 100% rename from week4/week4.hoon rename to 101/week4/week4.hoon diff --git a/week5/goldman.hoon b/101/week5/goldman.hoon similarity index 100% rename from week5/goldman.hoon rename to 101/week5/goldman.hoon diff --git a/week5/morse.hoon b/101/week5/morse.hoon similarity index 100% rename from week5/morse.hoon rename to 101/week5/morse.hoon diff --git a/week6/cards.hoon b/101/week6/cards.hoon similarity index 100% rename from week6/cards.hoon rename to 101/week6/cards.hoon diff --git a/201/week1/poker.hoon b/201/week1/poker.hoon new file mode 100644 index 0000000..4c01e5b --- /dev/null +++ b/201/week1/poker.hoon @@ -0,0 +1,258 @@ +:: Hoon 201 - Week 1 +:: ~bannum-magtus || s@p7.co.nz +:: +:: im very sorry i messed up all my faces and i also dont know +:: how to make gates that make gates so this is messy code :( +:: dont leave your assignments until the last minute kids. +:: +/+ playing-cards +:- %say +|= [[* eny=@uv *] *] +:- %noun +=< +%- rank-hands +%- score-hands +%- sort-hands +%- draw-hands +[%pregame 4] +!: +|% ++$ title + $% %royal-flush + %straight-flush + %four-of-a-kind + %full-house + %flush + %straight + %three-of-a-kind + %two-pair + %pair + %high-card + == ++$ card darc:playing-cards ++$ suit suit:playing-cards ++$ deck deck:playing-cards ++$ grouped (list (list card)) ++$ unsorted (list card) ++$ sorted (list card) ++$ hands [g=grouped s=sorted u=unsorted] ++$ tiebreaker (list [v=@ s=@]) ++$ draw-phase-state [h=(list unsorted) d=deck] ++$ sort-phase-state [h=(list hands) d=deck] ++$ score-phase-state [s=(list [r=@ t=title h=hands b=tiebreaker]) d=deck] ++$ rank-phase-state (list [r=@ t=title h=unsorted]) +++ rank-hands + |= [%score st=score-phase-state] + ^- [%ranking rank-phase-state] + =. s.st (sort s.st rank-sort) + [%ranking (flop (rank-display s.st))] +++ rank-display + |= i=(list [* t=title h=hands *]) + ^- (list [r=@ t=title h=unsorted]) + =/ c=@ 1 + =| l=(list [r=@ t=title h=unsorted]) + |- + ?~ i l + =/ s [c t.i.i u.h.i.i] + %= $ + c .+(c) + l :-(s l) + i t.i + == +++ rank-sort + |= [a=[r=@ * * b=tiebreaker] b=[r=@ * * b=tiebreaker]] + ^- ? + ?. =(r.a r.b) + (gth r.a r.b) + (tb-comp b.a b.b) +++ tb-comp + |= [a=tiebreaker b=tiebreaker] + ^- ? + ?. =((lent a) (lent b)) + !! + |- + ?~ a %.y + ?~ b %.n + ?. =(v.i.a v.i.b) + (gth v.i.a v.i.b) + $(a t.a, b t.b) +++ draw-hands + |= [%pregame n=@] + =/ d=deck init-deck + =| h=(list unsorted) + ^- [%draw draw-phase-state] + |- + ?~ n [%draw [h d]] + =/ i (draw:playing-cards 5 d) + $(h :-(hand.i h), d rest.i, n (dec n)) +++ sort-hands + |= [%draw st=draw-phase-state] + ^- [%sort sort-phase-state] + [%sort [(turn h.st zip-sorted) d.st]] +++ card-sort + |= [a=card b=card] + ^- ? + (gth val.a val.b) +++ sort-hand + |= u=unsorted + ^- sorted + (sort u card-sort) +++ tuples + |= h=sorted + ^- grouped + =| c=(list card) + =| l=(list (list card)) + |- + ?~ h :-(c l) + ?~ c + %= $ + c [i.h ~] + h t.h + == + ?: =(val.i.c val.i.h) + %= $ + c :-(i.h c) + h t.h + == + %= $ + c ~ + l :-(c l) + == +++ zip-sorted + |= u=unsorted + ^- hands + =/ sh (sort-hand u) + =/ gh (tuples sh) + [gh sh u] +++ score-hands + |= [%sort st=sort-phase-state] + ^- [%score score-phase-state] + [%score (turn h.st con-tb) d.st] +++ init-deck + (shuffle-deck:playing-cards make-deck:playing-cards eny) +++ suit-to-num + |= c=darc:playing-cards + ^- @ + ?- sut.c + %spades 4 + %hearts 3 + %diamonds 2 + %clubs 1 + == +++ get-title + |= h=hands + ^- [t=title r=@] + ?: (is-royal-flush h) [%royal-flush 9] + ?: (is-straight-flush h) [%straight-flush 8] + ?: (is-four-of-a-kind h) [%four-of-a-kind 7] + ?: (is-full-house h) [%full-house 6] + ?: (is-flush h) [%flush 5] + ?: (is-straight h) [%straight 4] + ?: (is-three-of-a-kind h) [%three-of-a-kind 3] + ?: (is-two-pair h) [%two-pair 2] + ?: (is-pair h) [%pair 1] + [%high-card 0] +++ is-flush + |= [* h=sorted *] + ^- ? + =| s=?(~ suit) + |- + ?~ h %.y + ?~ s + $(h t.h, s sut.i.h) + ?. =(s sut.i.h) + %.n + $(h t.h) +++ is-straight + |= [* h=sorted *] + ^- ? + =| l=?(~ @) + |- + ?~ h %.y + ?~ l + $(h t.h, l val.i.h) + ?. =(.+(l) val.i.h) + %.n + $(l val.i.h, h t.h) +++ high-card + |= [* h=sorted *] + ^- card + ?~ h !! + i.h +++ is-royal-flush + |= i=[* h=sorted *] + ^- ? + ?& (is-straight-flush i) + =(13 val:(high-card i)) + == +++ is-straight-flush + |= i=[* h=sorted *] + ^- ? + ?& (is-straight i) + (is-flush i) + == +++ one-of + |= [n=@ [g=grouped * *]] + ^- @ + =| t=@ + |- + ?~ g t + ?: =(n (lent i.g)) + $(g t.g, t .+(t)) + $(g t.g) +++ is-four-of-a-kind + |= i=[g=grouped * *] + ^- ? + =(1 (one-of 4 i)) +++ is-full-house + |= i=[g=grouped * *] + ^- ? + ?& =(1 (one-of 3 i)) + =(1 (one-of 2 i)) + == +++ is-three-of-a-kind + |= i=[g=grouped * *] + ^- ? + =(1 (one-of 3 i)) +++ is-two-pair + |= i=[g=grouped * *] + ^- ? + =(2 (one-of 2 i)) +++ is-pair + |= i=[g=grouped * *] + ^- ? + =(1 (one-of 2 i)) +++ con-tb + |= fh=hands + =/ o=[t=title r=@] (get-title fh) + [r.o t.o fh (get-tiebreaker fh)] +++ get-tiebreaker + |= [g=grouped * *] + ^- tiebreaker + =. g (sort g tuple-sort) + (turn g tuple-tb) +++ tuple-tb + |= l=(list card) + ^- [v=@ s=@] + =| sv=@ + =| vv=@ + |- + ?~ l [vv sv] + =. vv val.i.l + ?. (gth (suit-to-num i.l) sv) + $(l t.l) + $(l t.l, sv (suit-to-num i.l)) +++ tuple-sort + |= [a=(list card) b=(list card)] + ^- ? + =/ la (lent a) + =/ lb (lent b) + ?. =(la lb) + (gth la lb) + ?~ a !! + ?~ b !! + ?: =(val.i.a val.i.b) + (gth (suit-to-num i.a) (suit-to-num i.b)) + (gth val.i.a val.i.b) +-- + diff --git a/201/week2/dfs.hoon b/201/week2/dfs.hoon new file mode 100644 index 0000000..31a7971 --- /dev/null +++ b/201/week2/dfs.hoon @@ -0,0 +1,42 @@ +:: Hoon 201 - Week 2 +:: ~bannum-magtus || s@p7.co.nz +:: +:: i could not figure out how to +:: cast the output of a wet gate +:: to a list of the same type :( +:: +:- %say +|= [* [t=(tree @) x=@ ~] *] +:- %noun +^- [? (list @)] +=< +:- (dfs-search t x) (dfs t) +|% +++ dfs + |= t=(tree @) + ^- (list @) + ?~ t + ~ + %+ weld + (dfs l.t) + %+ weld + (dfs r.t) + [n.t ~] +++ dfs-search + |= [t=(tree @) x=@] + ^- ? + ?~ t + %.n + ?| (dfs-search l.t x) + (dfs-search r.t x) + =(n.t x) + == + :: i assume ?| will stop as + :: soon as it sees a true, + :: otherwise below is better + :: + ::?: (dfs-search l.t x) %.y + ::?: (dfs-search r.t x) %.y + ::=(x n.t) +-- + diff --git a/README.md b/README.md index b6b9ec8..d15dbd3 100644 --- a/README.md +++ b/README.md @@ -25,3 +25,13 @@ My assignments for each week of Hoon 101. ## Week 6 > Produce x hands of y cards from a deck of 52 distinct cards + +# Hoon 201 + +## Week 1 + +deal two poker hands and rank them + +## Week 2 + +Depth first search a tree