66 lines
1.5 KiB
Scala
66 lines
1.5 KiB
Scala
package day7
|
|
|
|
import scala.collection.mutable
|
|
|
|
class Hand2(var cards: Array[Int], val bid: Int) {
|
|
|
|
def getType(): Int = {
|
|
val cardsMap: mutable.Map[Int, Int] = new mutable.HashMap()
|
|
val jokers: Int = cards.count(c => c == 0)
|
|
for (card: Int <- cards) {
|
|
if (card != 0) {
|
|
if (!cardsMap.contains(card)) {
|
|
cardsMap(card) = 0
|
|
}
|
|
cardsMap(card) += 1
|
|
}
|
|
}
|
|
|
|
val keys: Array[Int] = cardsMap.keys.toArray
|
|
val values: Array[Int] = cardsMap.values.toArray
|
|
|
|
if (jokers == 5) return 6
|
|
|
|
// Five of a kind
|
|
for (value: Int <- values) {
|
|
if (value + jokers == 5) return 6
|
|
}
|
|
|
|
// Four of a kind
|
|
for (value: Int <- values) {
|
|
if (value + jokers == 4) return 5
|
|
}
|
|
|
|
// Full house
|
|
val sortedValues: Array[Int] = values.sorted(Ordering.Int.reverse)
|
|
if (sortedValues(0) + sortedValues(1) + jokers >= 5) return 4
|
|
|
|
// Three of a kind
|
|
if (sortedValues(0) + jokers >= 3) return 3
|
|
|
|
// Two pairs
|
|
if (sortedValues(0) + sortedValues(1) + jokers >= 4) return 2
|
|
|
|
// One pair
|
|
if (sortedValues(0) + jokers >= 2) return 1
|
|
|
|
return 0
|
|
}
|
|
|
|
def isBetter(hand: Hand2): Boolean = {
|
|
val t1: Int = getType()
|
|
val t2: Int = hand.getType()
|
|
if (t1 > t2) return true
|
|
if (t1 < t2) return false
|
|
|
|
for ((c1: Int, c2: Int) <- cards.zip(hand.cards)) {
|
|
if (c1 != c2) {
|
|
return c1 > c2
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
override def toString: String = s"Hand(${cards.mkString}, $bid, ${getType()})"
|
|
}
|