Допустим, у меня есть колода карт, представленная в виде массива, подобного следующему:
$cards = [
"AS" => ["sort" => 14, "suite" => "S", "value" => 11],
"AC" => ["sort" => 14, "suite" => "C", "value" => 11],
"AD" => ["sort" => 14, "suite" => "D", "value" => 11],
"AH" => ["sort" => 14, "suite" => "H", "value" => 11],
"KS" => ["sort" => 13, "suite" => "S", "value" => 10],
"KC" => ["sort" => 13, "suite" => "C", "value" => 10],
"KD" => ["sort" => 13, "suite" => "D", "value" => 10],
"KH" => ["sort" => 13, "suite" => "H", "value" => 10],
"QS" => ["sort" => 12, "suite" => "S", "value" => 10],
"QC" => ["sort" => 12, "suite" => "C", "value" => 10],
"QD" => ["sort" => 12, "suite" => "D", "value" => 10],
"QH" => ["sort" => 12, "suite" => "H", "value" => 10],
"JS" => ["sort" => 11, "suite" => "S", "value" => 10],
"JC" => ["sort" => 11, "suite" => "C", "value" => 10],
"JD" => ["sort" => 11, "suite" => "D", "value" => 10],
"JH" => ["sort" => 11, "suite" => "H", "value" => 10],
"10S" => ["sort" => 10, "suite" => "S", "value" => 10],
"10C" => ["sort" => 10, "suite" => "C", "value" => 10],
"10D" => ["sort" => 10, "suite" => "D", "value" => 10],
"10H" => ["sort" => 10, "suite" => "H", "value" => 10],
"9S" => ["sort" => 9, "suite" => "S", "value" => 9],
"9C" => ["sort" => 9, "suite" => "C", "value" => 9],
"9D" => ["sort" => 9, "suite" => "D", "value" => 9],
"9H" => ["sort" => 9, "suite" => "H", "value" => 9],
"8S" => ["sort" => 8, "suite" => "S", "value" => 8],
"8C" => ["sort" => 8, "suite" => "C", "value" => 8],
"8D" => ["sort" => 8, "suite" => "D", "value" => 8],
"8H" => ["sort" => 8, "suite" => "H", "value" => 8],
"7S" => ["sort" => 7, "suite" => "S", "value" => 7],
"7C" => ["sort" => 7, "suite" => "C", "value" => 7],
"7D" => ["sort" => 7, "suite" => "D", "value" => 7],
"7H" => ["sort" => 7, "suite" => "H", "value" => 7],
"6S" => ["sort" => 6, "suite" => "S", "value" => 6],
"6C" => ["sort" => 6, "suite" => "C", "value" => 6],
"6D" => ["sort" => 6, "suite" => "D", "value" => 6],
"6H" => ["sort" => 6, "suite" => "H", "value" => 6],
"5S" => ["sort" => 5, "suite" => "S", "value" => 5],
"5C" => ["sort" => 5, "suite" => "C", "value" => 5],
"5D" => ["sort" => 5, "suite" => "D", "value" => 5],
"5H" => ["sort" => 5, "suite" => "H", "value" => 5],
"4S" => ["sort" => 4, "suite" => "S", "value" => 4],
"4C" => ["sort" => 4, "suite" => "C", "value" => 4],
"4D" => ["sort" => 4, "suite" => "D", "value" => 4],
"4H" => ["sort" => 4, "suite" => "H", "value" => 4],
"3S" => ["sort" => 3, "suite" => "S", "value" => 3],
"3C" => ["sort" => 3, "suite" => "C", "value" => 3],
"3D" => ["sort" => 3, "suite" => "D", "value" => 3],
"3H" => ["sort" => 3, "suite" => "H", "value" => 3],
"2S" => ["sort" => 2, "suite" => "S", "value" => 2],
"2C" => ["sort" => 2, "suite" => "C", "value" => 2],
"2D" => ["sort" => 2, "suite" => "D", "value" => 2],
"2H" => ["sort" => 2, "suite" => "H", "value" => 2],
];
Я хочу иметь возможность сортировать любое произвольное количество карт таким образом, чтобы найти выигрышный стрит на основе порядок сортировки. Я попытался использовать такую функцию.
function sortCardsBySortOrder(Array $cards, $reverse = false): Array {
uasort($cards, function($a, $b) use($reverse) {
$result = $a['sort'] <=> $b['sort'];
if (!$reverse) {
$result *= -1;
}
if ($result == 0) {
$result = $a['suite'] <=> $b['suite'];
}
return $result;
});
return $cards;
}
Оттуда я могу легко определить, являются ли карты последовательными и, таким образом, составляют стрит в покере.
Однако проблема заключается в Туз как бы может быть как высоким, так и низким. Как я смогу обнаружить прямую без изменения поля sort
в массиве? Или если бы мне нужно было полностью изменить его, как бы я сделал это, не влияя на тот факт, что карты все еще должны быть отсортированы как высокие Ace, когда я переупорядочиваю всю колоду?
Например, в покерной руке A, 2, 3, 4, 5
это считается прямой, поскольку Ace может быть как 1, так и 11 в зависимости от того, где он лучше всего подходит. Итак, в руке A, K, Q, J, 10
туз высок. Они оба прямые, но влияют на поле сортировки для туза. Как лучше всего решить проблему такого типа?