В захватывающем мире карточных игр одна общая цель — собрать комбинацию из стритов, в которой набор карт расположен в последовательном порядке. В этой статье блога мы рассмотрим различные методы в Scala для идентификации и группировки карт в последовательном порядке, что позволит вам с легкостью улучшить свои проекты карточных игр. Итак, давайте погрузимся и овладеем искусством создания прямых!
Метод 1: сортировка и итерация
Один из подходов к определению стритов — отсортировать карты, а затем перебирать отсортированный список, чтобы сгруппировать их. Вот пример реализации:
def identifyStraights(cards: List[Int]): List[List[Int]] = {
val sortedCards = cards.sorted
var straights: List[List[Int]] = List(List(sortedCards.head))
sortedCards.tail.foreach { card =>
if (card - straights.last.last == 1) {
straights = straights.init :+ (straights.last :+ card)
} else {
straights = straights :+ List(card)
}
}
straights.filter(_.length >= 3) // Optional: Filter out straights with less than three cards
}
Метод 2: скользящее окно
Другой метод предполагает использование скользящего окна для проверки последовательных карточек. Вот пример реализации:
def identifyStraights(cards: List[Int]): List[List[Int]] = {
val straights = cards.sorted.sliding(3).collect {
case a :: b :: c :: _ if b - a == 1 && c - b == 1 => List(a, b, c)
}.toList
straights
}
Метод 3: Рекурсия
Для определения стрэйтов также можно использовать рекурсивный подход. Этот метод работает путем рекурсивной проверки, может ли текущая карта расширить существующий стрейт. Вот пример реализации:
def identifyStraights(cards: List[Int]): List[List[Int]] = {
def extendStraight(straights: List[List[Int]], card: Int): List[List[Int]] = {
straights.flatMap { straight =>
if (card - straight.last == 1)
List(straight :+ card)
else
List(straight, List(card))
}
}
val straights = cards.sorted.foldLeft(List(List.empty[Int])) { (acc, card) =>
extendStraight(acc, card)
}
straights.filter(_.length >= 3) // Optional: Filter out straights with less than three cards
}
Используя возможности Scala, у вас теперь есть несколько методов для идентификации и группировки карт в последовательном порядке, чтобы сформировать комбинацию из стритов. Независимо от того, предпочитаете ли вы сортировку и итерацию, использование скользящего окна или рекурсивный подход, эти методы дадут вам возможность создавать увлекательные карточные игры. Итак, внедряйте эти методы в свои проекты Scala, и игра начнется!