Combinations
Pactole.js exposes dedicated classes to represent and manipulate lottery combinations:
EuroMillionsCombinationEuroDreamsCombination
Create combinations
Create combinations from explicit component values.
import { EuroDreamsCombination, EuroMillionsCombination } from 'pactole-js';
const euromillions = new EuroMillionsCombination({ numbers: [3, 15, 22, 28, 44], stars: [2, 9] });
const eurodreams = new EuroDreamsCombination({ numbers: [2, 3, 5, 7, 9, 38], dream: [3] });
You can also pass a flat sequence. Values are split automatically by component size.
import { EuroDreamsCombination, EuroMillionsCombination } from 'pactole-js';
const euromillions = new EuroMillionsCombination([3, 15, 22, 28, 44, 2, 9]);
const eurodreams = new EuroDreamsCombination([2, 3, 5, 7, 9, 38, 3]);
Create combinations from lexicographic rank values (per component).
import { EuroDreamsCombination, EuroMillionsCombination } from 'pactole-js';
const firstEuromillions = new EuroMillionsCombination({ numbers: 0, stars: 0 });
const firstEurodreams = new EuroDreamsCombination({ numbers: 0, dream: 0 });
Read normalized values and metadata
Each combination exposes normalized component values and computed metadata.
import { EuroMillionsCombination } from 'pactole-js';
const combination = new EuroMillionsCombination({ numbers: [44, 3, 28, 22, 15], stars: [9, 2] });
console.log(combination.numbers.values); // [3, 15, 22, 28, 44]
console.log(combination.stars.values); // [2, 9]
console.log(combination.values); // Combined values from all components
console.log(combination.rank); // Global lexicographic rank
console.log(combination.combinations); // Total number of possible combinations
console.log(combination.minWinningRank); // Best rank value
console.log(combination.maxWinningRank); // Worst winning rank value
Generate random combinations
Use generate({ n }) to produce combinations with the same game rules.
import { EuroDreamsCombination } from 'pactole-js';
const template = new EuroDreamsCombination();
const generated = template.generate({ n: 3 });
for (const combination of generated) {
console.log(combination);
}
Compare combinations
The classes provide direct comparison and set-like operations.
import { EuroMillionsCombination } from 'pactole-js';
const reference = new EuroMillionsCombination({ numbers: [3, 15, 22, 28, 44], stars: [2, 9] });
const candidate = new EuroMillionsCombination({ numbers: [3, 15, 22, 30, 45], stars: [2, 10] });
console.log(reference.equals(candidate));
console.log(reference.includes({ components: { numbers: [3, 15, 22], stars: [2] } }));
console.log(reference.intersects({ combination: candidate }));
console.log(reference.intersection({ combination: candidate }).numbers.values);
Compute winning ranks
Evaluate a played combination against a reference draw combination with getWinningRank.
import { EuroMillionsCombination } from 'pactole-js';
const draw = new EuroMillionsCombination({ numbers: [3, 15, 22, 28, 44], stars: [2, 9] });
const ticket = new EuroMillionsCombination({ numbers: [3, 15, 22, 30, 45], stars: [2, 10] });
const rank = draw.getWinningRank({ combination: ticket });
console.log(rank); // number rank value, or null if not winning
Notes
- All APIs are synchronous unless otherwise documented. Random generation uses the library RNG helpers and accepts optional partitioning for rank-based sampling.
- Use the
copy()family when you need to adjuststart,end, orcountwhile preserving other configuration values.