Я создаю небольшую игровую программу, в которой есть два типа игр. Single
и Double
. Для каждой игры есть фиксированный набор карт.
Одиночный график
'128', '129', '120', '130', '140', '123', '124', '125', '126', '127',
'137', '138', '139', '149', '159', '150', '160', '134', '135', '136',
'146', '147', '148', '158', '168', '169', '179', '170', '180', '145',
'236', '156', '157', '167', '230', '178', '250', '189', '234', '190',
'245', '237', '238', '239', '249', '240', '269', '260', '270', '235',
'290', '246', '247', '248', '258', '259', '278', '279', '289', '280',
'380', '345', '256', '257', '267', '268', '340', '350', '360', '370',
'470', '390', '346', '347', '348', '358', '359', '369', '379', '389',
'489', '480', '490', '356', '357', '349', '368', '378', '450', '460',
'579', '570', '580', '590', '456', '367', '458', '459', '469', '479',
'560', '589', '670', '680', '690', '457', '467', '468', '478', '569',
'678', '679', '689', '789', '780', '790', '890', '567', '568', '578',
Двойной график
'100', '110', '166', '112', '113', '114', '115', '116', '117', '118',
'119', '200', '229', '220', '122', '277', '133', '224', '144', '226',
'155', '228', '300', '266', '177', '330', '188', '233', '199', '244',
'227', '255', '337', '338', '339', '448', '223', '288', '225', '299',
'335', '336', '355', '400', '366', '466', '377', '440', '388', '334',
'344', '499', '445', '446', '447', '556', '449', '477', '559', '488',
'399', '660', '599', '455', '500', '600', '557', '558', '577', '550',
'588', '688', '779', '699', '799', '880', '566', '800', '667', '668',
'669', '778', '788', '770', '889', '899', '700', '990', '900', '677',
Когда я выбираю Single
и вводим число di git 0123456789 (any sequence(sorted & unsorted), min 4 digits & max 10 digits from 0-9, repeated)
, он возвращает весь набор, связанный с Single Chart
. Для этого случая он возвращает 120
наборов.
Если я выберу double
и введу то же самое di git 0123456789 , он вернет весь набор, относящийся ТОЛЬКО к Double Chart
.
В настоящее время я использую одно решение для Single
игры, которое приведено здесь перестановки-все-возможные-наборы чисел , но в некотором наборе оно возвращается как 001
, но должно быть 100
Также я не могу найти решения для игры Double
. Что я пытаюсь:
<code> public function insertSingleGameData($motorGameData)
{
$chartvalidation = config('chartValidation');
$tempMotorSet = str_split($motorGameData->Playgame->cane);
$motorSet = $this->arrayCombination(3, $tempMotorSet); // Get All Sets
$motorRange = array_unique($motorSet);
foreach($motorRange as $cane)
{
if(in_array($cane, $chartvalidation['single'])){
$tempGameData[] = ([
'playgame_id' => $motorGameData->Playgame->id,
'user_id' => $motorGameData->Playgame->user_id,
'cane' => $cane,
'amount' => $motorGameData->Playgame->amount,
'gamemaster_id' => $motorGameData->Playgame->gamemaster_id,
"created_at" => \Carbon\Carbon::now(),
"updated_at" => \Carbon\Carbon::now(),
]);
}
}
Tempgame::insert($tempGameData);
}
function arrayCombination($le, $set){
$lk = $this->combination_number($le, count($set));
$ret = array_fill(0, $lk, array_fill(0, $le, '') );
$temp = array();
for ($i = 0 ; $i < $le ; $i++)
$temp[$i] = $i;
$ret[0] = $temp;
for ($i = 1 ; $i < $lk ; $i++){
if ($temp[$le-1] != count($set)-1){
$temp[$le-1]++;
} else {
$od = -1;
for ($j = $le-2 ; $j >= 0 ; $j--)
if ($temp[$j]+1 != $temp[$j+1]){
$od = $j;
break;
}
if ($od == -1){
break;
}
$temp[$od]++;
for ($j = $od+1 ; $j < $le ; $j++) {
$temp[$j] = $temp[$od]+$j-$od;
}
}
$ret[$i] = $temp;
}
for ($i = 0 ; $i < $lk ; $i++) {
for ($j = 0 ; $j < $le ; $j++){
$ret[$i][$j] = $set[$ret[$i][$j]];
}
}
$tempSet = array();
foreach ($ret as $key => $value) {
$tempSet[] = implode('', $value);
}
return $tempSet;
//print("<pre>".print_r($ret,true)."
");} Функция комбинация_номер ($ k, $ n) {$ n = intval ($ n); $ k = intval ($ k); if ($ k> $ n) {return 0;} elseif ($ n == $ k) {return 1;} else {if ($ k> = $ n - $ k) {$ l = $ k + 1; для ($ i = $ l + 1; $ i <= $ n; $ i ++) $ l * = $ i; $ m = 1; для ($ i = 2; $ i <= $ n- $ k; $ i ++) $ m * = $ i ;} else {$ l = ($ n- $ k) + 1; для ($ i = $ l + 1; $ i <= $ n; $ i ++) $ l * = $ i; $ m = 1; для ($ i = 2; $ i <= $ k; $ i ++) $ m * = $ i;}} return $ l / $ m;} </code>
Как мне этого добиться Single
а Double
игра в одну функцию?