From c68db27cad0d7c675425cf3cb917259b3e4d6f55 Mon Sep 17 00:00:00 2001 From: karthik Date: Tue, 29 Jul 2025 15:34:56 +0530 Subject: [PATCH] fix : QUI logic is done (working) --- .../selection.service/selection.service.ts | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/btc-UI/src/app/components/selection.service/selection.service.ts b/btc-UI/src/app/components/selection.service/selection.service.ts index 92a71c2..91e5f10 100644 --- a/btc-UI/src/app/components/selection.service/selection.service.ts +++ b/btc-UI/src/app/components/selection.service/selection.service.ts @@ -93,39 +93,44 @@ export class SelectionService { const dashIndex = numbers.indexOf('-'); const group1 = dashIndex === -1 ? numbers : numbers.slice(0, dashIndex); const group2 = dashIndex === -1 ? [] : numbers.slice(dashIndex + 1); - const group1Count = group1.includes('F') ? 12 : group1.filter(n => typeof n === 'number').length; - const group2Count = group2.includes('F') ? 12 : group2.filter(n => typeof n === 'number').length; + const group1_is_field = group1.includes('F'); + const group2_is_field = group2.includes('F'); + const group1Numbers = group1.filter(n => typeof n === 'number') as number[]; + const group2Numbers = group2.filter(n => typeof n === 'number') as number[]; let combinations = 0; if (isBoxed) { const allNums = [...group1, ...group2].filter(n => typeof n === 'number') as number[]; - const uniqueCount = new Set(allNums).size + (group1.includes('F') || group2.includes('F') ? 12 : 0); + const uniqueCount = new Set(allNums).size + (group1_is_field || group2_is_field ? 12 : 0); combinations = uniqueCount >= 2 ? (uniqueCount * (uniqueCount - 1)) / 2 : 0; - } else { - if (group1.includes('F') && group2.includes('F')) { - combinations = (12 * 11) / 2; // nC2 for 12 runners - } else if (group1.includes('F') || group2.includes('F')) { - const nonFieldGroup = group1.includes('F') ? group2 : group1; - const nonFieldNumbers = nonFieldGroup.filter(n => typeof n === 'number') as number[]; - combinations = (12 * nonFieldNumbers.length) / 2; - if (nonFieldNumbers.length > 0) { - const unique = new Set(nonFieldNumbers); - combinations = unique.size * 11; // Each number pairs with 11 others - } - } else { - const numGroup1 = group1.filter(n => typeof n === 'number') as number[]; - const numGroup2 = group2.filter(n => typeof n === 'number') as number[]; - const pairSet = new Set(); - for (let a of numGroup1) { - for (let b of numGroup2) { - if (a === b) continue; - let key = a < b ? `${a},${b}` : `${b},${a}`; - pairSet.add(key); + } else if (group1_is_field && group2_is_field) { + combinations = (12 * 11) / 2; // C(12,2) + } else if (group1_is_field || group2_is_field) { + const fieldSide = group1_is_field ? group1Numbers : group2Numbers; + const nonFieldNumbers = (group1_is_field ? group2 : group1).filter(n => typeof n === 'number') as number[]; + const pairSet = new Set(); + const fieldNumbers = fieldSide.length > 0 ? fieldSide : Array.from({ length: 12 }, (_, i) => i + 1); + for (let j of nonFieldNumbers) { + for (let i of fieldNumbers) { + if (i !== j) { + let min = Math.min(i, j); + let max = Math.max(i, j); + pairSet.add(`${min},${max}`); } } - combinations = pairSet.size; } + combinations = pairSet.size; + } else { + const pairSet = new Set(); + for (let a of group1Numbers) { + for (let b of group2Numbers) { + if (a === b) continue; + let key = a < b ? `${a},${b}` : `${b},${a}`; + pairSet.add(key); + } + } + combinations = pairSet.size; } updated.numbers = [...group1, '-', ...group2];