первый вопрос здесь ... Я кодирую простой оценщик покерных рук с 3 картами, и у меня возникают проблемы с поиском / извлечением нескольких «стритов» (последовательных серий значений) из массива значений.
Мне нужно извлечь и вернуть КАЖДЫЙ прямой массив, который, возможно, имеет. Вот пример:
(предполагается, что массив сначала отсортирован по числовому приращению)
myArray = [1h,2h,3c,3h,4c]
Возможные последовательности из трех значений: [1h,2h,3c] [1h,2h,3h] [2h,3c,4c] [2h,3h,4c]
Вот мой исходный код для поиска последовательностей из 3, где массив содержит объекты карт с .value и .suit. Для простоты в этом вопросе я просто поставил здесь «2h» и т. д.:
private var _pokerHand = [1h,2h,3c,3h,4c];
private function getAllStraights(): Array
{
var foundStraights:Array = new Array();
for (var i: int = 0; i < (_handLength - 2); i++)
{
if ((_pokerHand[i].value - _pokerHand[i + 1].value) == 1 && (_pokerHand[i + 1].value - _pokerHand[i + 2].value) == 1)
{
trace("found a straight!");
foundStraights.push(new Array(_pokerHand[i], _pokerHand[i + 1], _pokerHand[i + 2]));
}
}
return foundStraights;
}
но это, конечно, терпит неудачу, когда есть дубликаты значений (например, 3 выше). Я не могу отбрасывать дубликаты, потому что они могут быть разных мастей. Мне нужны все возможные прямые, как в примере выше. Это позволяет мне запускать стриты через функцию «Flush», чтобы найти «стрит-флеш».
Какой метод итерации массива мне не хватает?