Подсчет пар в руке Криббиджа - PullRequest
2 голосов
/ 14 июля 2020

Справочная информация

Это вопрос-продолжение моего предыдущего вопроса о поиске стрита в раздаче криббиджа

Цель

Подсчитайте количество пар , затем наберите по 2 балла за каждую пару.

Что я пробовал

В настоящее время у меня есть два разных метода подсчета пар. Я пытался найти что-то потенциально лучшее и пытался работать с ручными массивами (надеюсь, что это правильный термин) ie. {2,3,4}

Рабочие формулы:

=(SUM(--(AGGREGATE(15,6,MOD(B1:F1-1,13)+1,1)=AGGREGATE(15,6,MOD(B1:F1-1,13)+1,{2,3,4,5})))
+SUM(--(AGGREGATE(15,6,MOD(B1:F1-1,13)+1,2)=AGGREGATE(15,6,MOD(B1:F1-1,13)+1,{3,4,5})))
+SUM(--(AGGREGATE(15,6,MOD(B1:F1-1,13)+1,3)=AGGREGATE(15,6,MOD(B1:F1-1,13)+1,{4,5})))
+(AGGREGATE(15,6,MOD(B1:F1-1,13)+1,4)=AGGREGATE(15,6,MOD(B1:F1-1,13)+1,5)))*2

и

=((MOD(B1-1,13)+1=MOD(C1-1,13)+1)
+(MOD(B1-1,13)+1=MOD(D1-1,13)+1)
+(MOD(B1-1,13)+1=MOD(E1-1,13)+1)
+(MOD(B1-1,13)+1=MOD(F1-1,13)+1)
+(MOD(C1-1,13)+1=MOD(D1-1,13)+1)
+(MOD(C1-1,13)+1=MOD(E1-1,13)+1)
+(MOD(C1-1,13)+1=MOD(F1-1,13)+1)
+(MOD(D1-1,13)+1=MOD(E1-1,13)+1)
+(MOD(D1-1,13)+1=MOD(F1-1,13)+1)
+(MOD(E1-1,13)+1=MOD(F1-1,13)+1))*2

Мне понравилась возможность использовать {2,3,4,5 }, чтобы помочь построить все возможные комбинации. Однако AGGREGATE выполняет шаг сортировки, который мне на самом деле не нужен. Я пытался повозиться с INDEX, чтобы обойти этап сортировки, и я подумал, что это одна из тех функций, которые выполняют операции с массивами, не являясь массивом, таким как AGGREGATE или SUMPRODUCT. Однако я не мог заставить его работать. Это то, что я пробовал:

=SUM(--((MOD(INDEX(B1:F1,1)-1,13)+1)=(MOD(INDEX(B1:F1,{2,3,4,5})-1,13)+1)))
=SUM(--((MOD(INDEX(B1:F1,1,1)-1,13)+1)=(MOD(INDEX(B1:F1,1,{2,3,4,5})-1,13)+1)))

Обратите внимание, что это просто доказательство концепции проверки первой карты против остальной руки и карты терна. Я не видел смысла строить остальную часть формулы, если не мог заставить работать первую часть. Я пробовал использовать его как для одномерного, так и для двухмерного эталонов на случай, если это изменит ситуацию ... нет! Я также пробовал использовать SUMPRODUCT вместо SUM, и я также попробовал ввести CSE.

Вопрос

Я ошибаюсь в использовании INDEX? Есть ли лучший способ с помощью формул для проверки всех потенциальных пар?

Пример данных

|  B |  C |  D |  E |  F |   POINTS
+----+----+----+----+----+
|  1 | 14 | 27 | 40 |  2 |  <= 12 (4 of a kind, 6 pairs)
|  1 |  2 | 27 | 28 | 14 |  <= 8  (1 triple and 1 double aka full house in poker, 4 pairs)
|  1 | 14 | 27 | 28 | 52 |  <= 6  (1 triple, 3 pairs)
|  1 |  2 | 27 | 28 | 52 |  <= 4  (2 pairs)
|  1 |  2 | 14 | 51 | 52 |  <= 2  (1 pair)
|  1 |  2 |  3 |  4 | 52 |  <= 0  (no pair)

Версия Excel

Excel 2013

1 Ответ

4 голосов
/ 15 июля 2020

Я думал об этом, что казалось хорошей идеей, последней ночью. Придется посмотреть, хорошо ли он утром:

SUM(--(A1:E1=TRANSPOSE(A1:E1)))-5

введено как формула массива. Это сознательно считает каждую пару дважды, чтобы получить два очка для каждой пары, но тогда вы также получаете пять, потому что всегда есть совпадение на диагонали результирующей матрицы, поэтому необходимо вычесть.

enter image description here

EDIT

Here you go

=SUM(--(MOD(A1:E1-1,13)=MOD(TRANSPOSE(A1:E1)-1,13)))-5

введите описание изображения здесь

...