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:
|
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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue