yellyex писал(а):
Дошёл до создания стритов и встрял. Просто не вижу логики в построении нахождения стрита.
Пока думаю так: если карта1 = карта2 = карта3, то стрит. Но ведь вручную задавать все комбинации стритов - это же безумие. Нужен алгоритм дургой. Например - берём три карты, нахоидм из них самую старшую по рангу и вычитаем по -1 из неё. Если есть карта младше старшей на -1, то что то делаем, не знаю что. Далее из второй также деаем -1, и если есть такая, то опять действие. Далее записываем, что у нас уже стрит. Но как это реализовать ума не приложу. Сейчас сижу думаю.
Уже объяснил в скайпе по этой теме, но могу вкратце ещё раз рассказать алгоритм, кому интересно будет:
Варианта два. С использованием промежуточного массива и без него.
1.
С массивом: Скидываем все нужные карты для определения в массив и делаем сортировку по возрастанию/убыванию. Потом проходимся циклом по массиву от 0 до предпоследнего элемента, проверяя на каждом шаге, чтобы последующий элементы был == текущему значению + 1 (либо аналогично, но -1, если сортировали по убыванию). Если на одном из шагов условие равенства не выполнилось - последовательность нарушена.
2.
Без массива: Бегаем в несколько проходов по всем нужным картам (борд + рука). На каждом проходе выполняем следующие действия (для проверки возрастающей последовательности):
2.1. Находим минимальное число
2.2. Прибавляем единицу и убеждаемся, что оно есть среди проверяемых карт. Параллельно инкрементируем счётчик "подходящих карт" (возрастающих на единицу)
2.3. После того как со всеми картами просчёт закончен (либо нарушено условие и цикл был остановлен) - проверяем наш счётчик. Если он == 5 - значит это стрит.
Недостаток второго метода: множественные проходы по картам, которые уже просчитаны (множественные пустые действия), что не очень хорошо для производительности алгоритма. Но не критично, цикл из 5 проверок, всего лишь, состоит. Думаю это лучшее решение, т.к. в первом решении приходиться выполнять сортировку, что более нагруженно для ЦП, но проще для понимания, т.к. во втором случае прийдётся добавить ещё и промежуточное условие прыжка по колоде. Я бы предпочёл первое решение, как достаточное соотношение прозрачности решения и приемлемой производительности.