fix : FOR logic is working
This commit is contained in:
parent
2dbee40fd2
commit
c8bc66d214
@ -1,3 +1,4 @@
|
|||||||
|
// ✅ Final SelectionService.ts with strict FOR logic, split from QUI
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { BehaviorSubject } from 'rxjs';
|
import { BehaviorSubject } from 'rxjs';
|
||||||
|
|
||||||
@ -43,19 +44,51 @@ export class SelectionService {
|
|||||||
updated.total = numbers.length * value * 10;
|
updated.total = numbers.length * value * 10;
|
||||||
break;
|
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': {
|
case 'QUI': {
|
||||||
const dashIndex = updated.numbers.indexOf('-');
|
const dashIndex = updated.numbers.indexOf('-');
|
||||||
const group1 = updated.numbers.slice(0, dashIndex).filter(n => typeof n === 'number') as number[];
|
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[];
|
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) {
|
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.total = combinations * value * 10;
|
||||||
updated.numbers = [...group1, '-', ...group2];
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,17 +113,16 @@ export class SelectionService {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'TRE': // TBP: 3 legs
|
case 'TRE':
|
||||||
case 'MJP': // MJP: 4 legs
|
case 'MJP':
|
||||||
case 'JKP': { // JPP: 5 legs
|
case 'JKP': {
|
||||||
const legs = this.splitToLegs(updated.numbers, this.getLegCount(label));
|
const legs = this.splitToLegs(updated.numbers, this.getLegCount(label));
|
||||||
const requiredLegs = 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;
|
const filledLegs = legs.filter(leg => leg.length > 0).length;
|
||||||
if (filledLegs >= requiredLegs - 1) {
|
if (filledLegs >= requiredLegs - 1) {
|
||||||
// Assume remaining legs have at least 1 horse
|
|
||||||
const combinations = legs.reduce((acc, leg) => acc * (leg.length || 1), 1);
|
const combinations = legs.reduce((acc, leg) => acc * (leg.length || 1), 1);
|
||||||
updated.total = combinations * value * 10; // fUBA = 10
|
updated.total = combinations * value * 10;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -122,11 +154,11 @@ export class SelectionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private calculateCombinations(n: number): number {
|
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 {
|
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[][] {
|
private splitToLegs(numbers: (number | string)[], legCount: number): number[][] {
|
||||||
@ -162,9 +194,9 @@ export class SelectionService {
|
|||||||
|
|
||||||
private getLegCount(label: string): number {
|
private getLegCount(label: string): number {
|
||||||
switch (label) {
|
switch (label) {
|
||||||
case 'TRE': return 3; // TBP
|
case 'TRE': return 3;
|
||||||
case 'MJP': return 4; // MJP
|
case 'MJP': return 4;
|
||||||
case 'JKP': return 5; // JPP
|
case 'JKP': return 5;
|
||||||
default: return 3;
|
default: return 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,7 +33,7 @@ export class TouchPadMenuComponent implements OnInit {
|
|||||||
calcDisplay = '';
|
calcDisplay = '';
|
||||||
maxRowsReached: boolean = false;
|
maxRowsReached: boolean = false;
|
||||||
|
|
||||||
disabledLabels: string[] = ['SHW', 'SJP'];
|
disabledLabels: string[] = ['SHW', 'SJP', '.'];
|
||||||
|
|
||||||
// ✅ Original TAN logic
|
// ✅ Original TAN logic
|
||||||
tanGroupStage = 0;
|
tanGroupStage = 0;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user