В директории dataset
находится 100 файлов с игральными картами. Код, который сгенерировал эти карты, представлен в этом же репозитории и доступен для изучения.
Карты представлены как unicode изображение масти и номинала
Например, в dataset/dat0.csv
находятся карты:
♣J,♦7,♣K,♦9,♥7,♥A,♥3,♥Q,♥7,♠6,♣9,♥3,♠Q,♦J
Ваша программа должна создать новый файл results/data0.csv
, в котором содержатся все возможные покерные комбинации, кроме старшей карты1, не учитывая дубликаты:
♣J,♦7,♦9,♠Q,♦J | Pair
♣J,♦7,♥7,♥3,♦J | Two Pairs
♣J,♦7,♥7,♥Q,♦J | Two Pairs
... (пропущено для краткости)
В вашем репозитории должны быть:
- Код, генерирующий комбинации
- Сами комбинации в виде csv файла в директории
results
Покер --- игра из n количества карт, из которых нужно выстроить наиболее сильную комбинацию из 5 карт
В задании используются все покерные комбинации по старшинству от
Пары
Полный список комбинаций (по возрастанию силы):
Название | Описание | Пример |
---|---|---|
Pair | 2 карты одинакового номинала и 3 любые карты | ♣J,♦7,♦9,♠Q,♦J |
Two Pairs | 2 карты одинакового номинала, 2 карты другого одинакового номинала, 1 любая карта | ♣J,♦7,♥7,♥3,♦J |
Three of a Kind | 3 карты одинакового номинала и 2 любые карты | ♣7,♦7,♥7,♥3,♦J |
Straight | 5 карт последовательного номинала | ♣7,♦10,♥9,♥8,♦J |
Flush | 5 карт одинаковой масти | ♣2,♣5,♣A,♣10,♣J |
Full House | 3 карты одинакового номинала и 2 карты другого одинакового номинала (Three of a Kind + Pair) | ♣7,♦7,♥7,♥3,♦3 |
Four of a kind | 4 карты одинакового номинала + любая карта | ♣7,♦7,♥7,♥3,♠7 |
Straight Flush | 5 карт последовательного номинала и одной масти | ♣2,♣3,♣A,♣4,♣5 |
- Туз может стоять до
2
, так и послеA
- A,2,3,4,5 --- является
Straight
- A,K,Q,J,10 --- является
Straight
- A,2,3,4,5 --- является
- Если комбинация "дает" несколько вариантов, всегда берется самый сильный
Обязательные:
- Поиск комбинаций для каждого файла в
dataset
ведется в отдельной горутине (1 горутина на обработку 1 файла) - Дубликаты карт в исходных файлах не учитываются в поиске комбинаций
- Комбинации в выходном файле не должны повторяться
- Имеются ввиду точные дубликаты всех 5 карт
Опциональные:
- Можно выделить еще горутины в процессе поиска всех возможных комбинаций
- Выходной список может быть отсортирован по силе комбинации
- В каждом файле от 10 до 17 карт, с возможными дубликатами
- Получается, что есть от 252 до 6188 комбинаций по 5 карт из исходных
- Deadline: неделя
Не все материалы здесь обязательно нужны, чтобы выполнить задание, но я собрал здесь то, что считаю полезным для ознакомления на практике с горутинами и выполнением этого задания
- Go
- Tour of Go, Goroutines
- Tour of Go, Channels
- Goroutines topic on golangbot
- Channels topic on golangbot
- Частые ошибки в Go | Там вместе и простые вещи и сложные
- Tour of Go, Mutex
- Mutex example in Go
- Доклады
- Покер
- Разное (факультативное)
- Главная цель раздела --- показать, что все языки страдают от этих проблем и похожими способами их решают
Footnotes
-
Старшая карта --- комбинация в отсутствие других комбинаций, когда у вас самая старшая карты выше, чем самая старшая у противника ↩