From c8bc66d21437fc78365b87185335dc99c3ae5ab6 Mon Sep 17 00:00:00 2001 From: karthik Date: Mon, 28 Jul 2025 12:46:53 +0530 Subject: [PATCH] fix : FOR logic is working --- .../selection.service/selection.service.ts | 62 ++++++++++++++----- .../touch-pad-menu.component.ts | 2 +- 2 files changed, 48 insertions(+), 16 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 f8ccd5a..264fd45 100644 --- a/btc-UI/src/app/components/selection.service/selection.service.ts +++ b/btc-UI/src/app/components/selection.service/selection.service.ts @@ -1,3 +1,4 @@ +// ✅ Final SelectionService.ts with strict FOR logic, split from QUI import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; @@ -43,19 +44,51 @@ export class SelectionService { updated.total = numbers.length * value * 10; break; - case 'FOR': + case 'FOR': { + const dashIndex = updated.numbers.indexOf('-'); + const group1 = updated.numbers.slice(0, dashIndex).filter(n => typeof n === 'number') as number[]; + const group2 = updated.numbers.slice(dashIndex + 1).filter(n => typeof n === 'number') as number[]; + + let combinations = 0; + + if (isBoxed) { + const uniq = Array.from(new Set([...group1, ...group2])); + combinations = this.calculatePermutations(uniq.length); // nP2 + updated.numbers = [...uniq, '-', ...uniq]; + } else { + for (const a of group1) { + for (const b of group2) { + if (a !== b) combinations++; + } + } + updated.numbers = [...group1, '-', ...group2]; + } + + updated.total = combinations * value * 10; + break; + } + case 'QUI': { const dashIndex = updated.numbers.indexOf('-'); const group1 = updated.numbers.slice(0, dashIndex).filter(n => typeof n === 'number') as number[]; const group2 = updated.numbers.slice(dashIndex + 1).filter(n => typeof n === 'number') as number[]; - let combinations = group1.length * group2.length; + let combinations = 0; + if (isBoxed) { - combinations = this.calculatePermutations(group1.length + group2.length); + const uniq = Array.from(new Set([...group1, ...group2])); + combinations = this.calculateCombinations(uniq.length); // nC2 + updated.numbers = [...uniq, '-', ...uniq]; + } else { + for (const a of group1) { + for (const b of group2) { + combinations++; + } + } + updated.numbers = [...group1, '-', ...group2]; } updated.total = combinations * value * 10; - updated.numbers = [...group1, '-', ...group2]; break; } @@ -80,17 +113,16 @@ export class SelectionService { break; } - case 'TRE': // TBP: 3 legs - case 'MJP': // MJP: 4 legs - case 'JKP': { // JPP: 5 legs + case 'TRE': + case 'MJP': + case 'JKP': { const legs = this.splitToLegs(updated.numbers, this.getLegCount(label)); const requiredLegs = this.getLegCount(label); - // Calculate partial total if at least second-to-last leg has numbers + const filledLegs = legs.filter(leg => leg.length > 0).length; if (filledLegs >= requiredLegs - 1) { - // Assume remaining legs have at least 1 horse const combinations = legs.reduce((acc, leg) => acc * (leg.length || 1), 1); - updated.total = combinations * value * 10; // fUBA = 10 + updated.total = combinations * value * 10; } break; } @@ -122,11 +154,11 @@ export class SelectionService { } private calculateCombinations(n: number): number { - return n >= 2 ? (n * (n - 1)) / 2 : 0; // nC2 + return n >= 2 ? (n * (n - 1)) / 2 : 0; } private calculatePermutations(n: number): number { - return n >= 2 ? n * (n - 1) : 0; // nP2 + return n >= 2 ? n * (n - 1) : 0; } private splitToLegs(numbers: (number | string)[], legCount: number): number[][] { @@ -162,9 +194,9 @@ export class SelectionService { private getLegCount(label: string): number { switch (label) { - case 'TRE': return 3; // TBP - case 'MJP': return 4; // MJP - case 'JKP': return 5; // JPP + case 'TRE': return 3; + case 'MJP': return 4; + case 'JKP': return 5; default: return 3; } } diff --git a/btc-UI/src/app/components/touch-pad-menu/touch-pad-menu.component.ts b/btc-UI/src/app/components/touch-pad-menu/touch-pad-menu.component.ts index d385704..faf3750 100755 --- a/btc-UI/src/app/components/touch-pad-menu/touch-pad-menu.component.ts +++ b/btc-UI/src/app/components/touch-pad-menu/touch-pad-menu.component.ts @@ -33,7 +33,7 @@ export class TouchPadMenuComponent implements OnInit { calcDisplay = ''; maxRowsReached: boolean = false; - disabledLabels: string[] = ['SHW', 'SJP']; + disabledLabels: string[] = ['SHW', 'SJP', '.']; // ✅ Original TAN logic tanGroupStage = 0;