Shorten day 7
This commit is contained in:
parent
44eaf3037e
commit
1d793e8ac3
34
Day7.scala
34
Day7.scala
|
@ -15,25 +15,14 @@ enum DeckKind:
|
|||
|
||||
object DeckKind:
|
||||
def apply(deck: String) =
|
||||
val ranks = deck.sorted.toArray
|
||||
if ranks(0) == ranks(4) then Five
|
||||
else if ranks(0) == ranks(3) || ranks(1) == ranks(4) then Four
|
||||
else if ranks(0) == ranks(2) && ranks(3) == ranks(4) || ranks(0) == ranks(
|
||||
1
|
||||
) && ranks(2) == ranks(4)
|
||||
then House
|
||||
else if ranks(0) == ranks(1) && ranks(2) == ranks(3) || ranks(0) == ranks(
|
||||
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)
|
||||
val counts =
|
||||
deck.iterator.toSeq.groupBy(identity).values.map(_.length).toSeq
|
||||
if counts.contains(5) then Five
|
||||
else if counts.contains(4) then Four
|
||||
else if counts.contains(3) then if counts.contains(2) then House else Three
|
||||
else if counts.count(_ == 2) == 2 then Pairs
|
||||
else if counts.contains(2) then Pair
|
||||
else High
|
||||
|
||||
import DeckKind._
|
||||
|
||||
|
@ -42,11 +31,8 @@ case class Hand(deck: String, bet: Int):
|
|||
val kind = DeckKind(deck)
|
||||
|
||||
lazy val bestKind =
|
||||
deck.iterator
|
||||
.foldLeft(Iterator("")) { (it, chr) =>
|
||||
if chr == 'J' then it.flatMap(s => possibleCards.map(s + _))
|
||||
else it.map(_ + chr)
|
||||
}
|
||||
possibleCards
|
||||
.map(c => deck.replace('J', c))
|
||||
.map(DeckKind(_))
|
||||
.maxBy(_.ordinal)
|
||||
|
||||
|
|
Loading…
Reference in a new issue