Shorten day 7

This commit is contained in:
Natsu Kagami 2023-12-07 11:57:37 +01:00
parent 44eaf3037e
commit 1d793e8ac3
Signed by: nki
GPG key ID: 55A032EB38B49ADB

View file

@ -15,25 +15,14 @@ enum DeckKind:
object DeckKind: object DeckKind:
def apply(deck: String) = def apply(deck: String) =
val ranks = deck.sorted.toArray val counts =
if ranks(0) == ranks(4) then Five deck.iterator.toSeq.groupBy(identity).values.map(_.length).toSeq
else if ranks(0) == ranks(3) || ranks(1) == ranks(4) then Four if counts.contains(5) then Five
else if ranks(0) == ranks(2) && ranks(3) == ranks(4) || ranks(0) == ranks( else if counts.contains(4) then Four
1 else if counts.contains(3) then if counts.contains(2) then House else Three
) && ranks(2) == ranks(4) else if counts.count(_ == 2) == 2 then Pairs
then House else if counts.contains(2) then Pair
else if ranks(0) == ranks(1) && ranks(2) == ranks(3) || ranks(0) == ranks( else High
1
) && ranks(3) == ranks(4) || ranks(1) == ranks(2) && ranks(3) == ranks(4)
then Pairs
else
lazy val three = (0 until ranks.length - 2)
.find(i => ranks(i) == ranks(i + 2))
.map(i => Three)
lazy val pair = (0 until ranks.length - 1)
.find(i => ranks(i) == ranks(i + 1))
.map(i => Pair)
three.orElse(pair).getOrElse(High)
import DeckKind._ import DeckKind._
@ -42,11 +31,8 @@ case class Hand(deck: String, bet: Int):
val kind = DeckKind(deck) val kind = DeckKind(deck)
lazy val bestKind = lazy val bestKind =
deck.iterator possibleCards
.foldLeft(Iterator("")) { (it, chr) => .map(c => deck.replace('J', c))
if chr == 'J' then it.flatMap(s => possibleCards.map(s + _))
else it.map(_ + chr)
}
.map(DeckKind(_)) .map(DeckKind(_))
.maxBy(_.ordinal) .maxBy(_.ordinal)