fix : TAN logic is done (normal,field and BOX)

This commit is contained in:
karthik 2025-07-29 23:17:09 +05:30
parent 563e208a64
commit 37e066d0fb

View File

@ -111,7 +111,7 @@ export class SelectionService {
const nonFieldNumbers = (group1_is_field ? group2 : group1).filter(n => typeof n === 'number') as number[];
const pairSet = new Set<string>();
const fieldNumbers = fieldSide.length > 0 ? fieldSide : Array.from({ length: 12 }, (_, i) => i + 1);
for (let j of nonFieldNumbers) {
for (let j of nonFieldNumbers) {
for (let i of fieldNumbers) {
if (i !== j) {
let min = Math.min(i, j);
@ -148,9 +148,6 @@ export class SelectionService {
const group1 = dashIndices.length > 0 ? numbers.slice(0, dashIndices[0]) : numbers;
const group2 = dashIndices.length > 0 ? numbers.slice(dashIndices[0] + 1, dashIndices[1] || numbers.length) : [];
const group3 = dashIndices.length > 1 ? numbers.slice(dashIndices[1] + 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 group3Count = group3.includes('F') ? 12 : group3.filter(n => typeof n === 'number').length;
let combinations = 0;
@ -162,56 +159,19 @@ export class SelectionService {
combinations = allNums.length >= 3 ? this.calculatePermutationsN(allNums.length, 3) : 0;
}
} else {
if (group1.includes('F') && group2.includes('F') && group3.includes('F')) {
combinations = 12 * 11 * 10; // nP3
} else if (group1.includes('F') || group2.includes('F') || group3.includes('F')) {
const counts = [group1Count, group2Count, group3Count];
combinations = counts.reduce((acc, count) => acc * count, 1);
if (group1.includes('F') && !group2.includes('F') && !group3.includes('F')) {
const numGroup2 = group2.filter(n => typeof n === 'number') as number[];
const numGroup3 = group3.filter(n => typeof n === 'number') as number[];
combinations = 0;
for (let i = 1; i <= 12; i++) {
for (const j of numGroup2) {
for (const k of numGroup3) {
if (i !== j && i !== k && j !== k) combinations++;
}
}
}
} else if (group2.includes('F') && !group1.includes('F') && !group3.includes('F')) {
const numGroup1 = group1.filter(n => typeof n === 'number') as number[];
const numGroup3 = group3.filter(n => typeof n === 'number') as number[];
combinations = 0;
for (const i of numGroup1) {
for (let j = 1; j <= 12; j++) {
for (const k of numGroup3) {
if (i !== j && i !== k && j !== k) combinations++;
}
}
}
} else if (group3.includes('F') && !group1.includes('F') && !group2.includes('F')) {
const numGroup1 = group1.filter(n => typeof n === 'number') as number[];
const numGroup2 = group2.filter(n => typeof n === 'number') as number[];
combinations = 0;
for (const i of numGroup1) {
for (const j of numGroup2) {
for (let k = 1; k <= 12; k++) {
if (i !== j && i !== k && j !== k) combinations++;
}
}
}
}
} else {
const numGroup1 = group1.filter(n => typeof n === 'number') as number[];
const numGroup2 = group2.filter(n => typeof n === 'number') as number[];
const numGroup3 = group3.filter(n => typeof n === 'number') as number[];
for (const a of numGroup1) {
for (const b of numGroup2) {
if (b === a) continue;
for (const c of numGroup3) {
if (c === a || c === b) continue;
combinations++;
}
// Define possible values for each group: 'F' means all runners (1 to 12), else only selected numbers
const runners = Array.from({ length: 12 }, (_, i) => i + 1);
const group1Vals = group1.includes('F') ? runners : group1.filter(n => typeof n === 'number') as number[];
const group2Vals = group2.includes('F') ? runners : group2.filter(n => typeof n === 'number') as number[];
const group3Vals = group3.includes('F') ? runners : group3.filter(n => typeof n === 'number') as number[];
combinations = 0;
for (const i of group1Vals) {
for (const j of group2Vals) {
if (i === j) continue;
for (const k of group3Vals) {
if (i === k || j === k) continue;
combinations++;
}
}
}