somewhat working algorithm
This commit is contained in:
parent
c812ca066f
commit
8d3641095b
@ -64,11 +64,19 @@ const ChipDistributionSummary = ({
|
|||||||
}, [chipMap]);
|
}, [chipMap]);
|
||||||
|
|
||||||
// Total value of the pot
|
// Total value of the pot
|
||||||
const totalValue = useMemo(
|
const potValue = useMemo(
|
||||||
() => buyInAmount * playerCount,
|
() => buyInAmount * playerCount,
|
||||||
[buyInAmount, playerCount]
|
[buyInAmount, playerCount]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const totalValue = useMemo(() => {
|
||||||
|
let value = 0;
|
||||||
|
for (let i = 0; i < totalChipsCount.length; i++) {
|
||||||
|
value += distributions[i] * denominations[i];
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}, [distributions, denominations]);
|
||||||
|
|
||||||
// Maximum quantity of each chip which may be distributed to a single player before running out
|
// Maximum quantity of each chip which may be distributed to a single player before running out
|
||||||
const maxPossibleDistribution = useMemo(
|
const maxPossibleDistribution = useMemo(
|
||||||
() => totalChipsCount.map((v) => Math.floor(v / playerCount)),
|
() => totalChipsCount.map((v) => Math.floor(v / playerCount)),
|
||||||
@ -99,6 +107,34 @@ const ChipDistributionSummary = ({
|
|||||||
return newDenomination;
|
return newDenomination;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const redenominate2 = (
|
||||||
|
invalidDenomination: validDenomination[],
|
||||||
|
shuffleIndex: number
|
||||||
|
): validDenomination[] => {
|
||||||
|
console.log("Old Denominations ", invalidDenomination);
|
||||||
|
let moved = false;
|
||||||
|
const newDenomination: validDenomination[] = [];
|
||||||
|
for (let i = invalidDenomination.length - 1; i >= 0; i--) {
|
||||||
|
if (i > shuffleIndex) {
|
||||||
|
newDenomination.push(invalidDenomination[i]);
|
||||||
|
} else if (i == shuffleIndex) {
|
||||||
|
newDenomination.push(invalidDenomination[i]);
|
||||||
|
} else if (i < shuffleIndex && !moved) {
|
||||||
|
const nextLowestDenominationIndex = Math.max(
|
||||||
|
validDenominations.indexOf(invalidDenomination[i]) - 1,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
newDenomination.push(validDenominations[nextLowestDenominationIndex]);
|
||||||
|
moved = true;
|
||||||
|
} else {
|
||||||
|
newDenomination.push(invalidDenomination[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
newDenomination.reverse();
|
||||||
|
console.log("New Denominations ", newDenomination);
|
||||||
|
return newDenomination;
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// const testDistribution: Map<ColorValue, number> = new Map();
|
// const testDistribution: Map<ColorValue, number> = new Map();
|
||||||
let testDenomination: validDenomination[] = [];
|
let testDenomination: validDenomination[] = [];
|
||||||
@ -128,7 +164,6 @@ const ChipDistributionSummary = ({
|
|||||||
|
|
||||||
// DISTRIBUTE
|
// DISTRIBUTE
|
||||||
let remainingValue = buyInAmount;
|
let remainingValue = buyInAmount;
|
||||||
const remainingChips = [...maxPossibleDistribution];
|
|
||||||
// console.log("\ntest Denomination", testDenomination);
|
// console.log("\ntest Denomination", testDenomination);
|
||||||
// console.log("test distribution ", testDistribution);
|
// console.log("test distribution ", testDistribution);
|
||||||
// console.log("remainingChips", remainingChips);
|
// console.log("remainingChips", remainingChips);
|
||||||
@ -153,13 +188,24 @@ const ChipDistributionSummary = ({
|
|||||||
let stop = false;
|
let stop = false;
|
||||||
while (remainingValue > 0 && !stop) {
|
while (remainingValue > 0 && !stop) {
|
||||||
let distributed = false;
|
let distributed = false;
|
||||||
for (let i = numColors - 1; i >= 0; i--) {
|
for (let i = numColors - 1; i >= 0; i = i - 1) {
|
||||||
if (remainingChips[i] > 0 && remainingValue > testDenomination[i]) {
|
console.log("i: ", i);
|
||||||
|
if (testDistribution[i] < maxPossibleDistribution[i]) {
|
||||||
|
if (remainingValue >= testDenomination[i]) {
|
||||||
// console.log("distributing ", testDenomination[i]);
|
// console.log("distributing ", testDenomination[i]);
|
||||||
testDistribution[i] = testDistribution[i] + 1;
|
testDistribution[i] = testDistribution[i] + 1;
|
||||||
remainingChips[i] = remainingChips[i] - 1;
|
|
||||||
remainingValue = remainingValue - testDenomination[i];
|
remainingValue = remainingValue - testDenomination[i];
|
||||||
distributed = true;
|
distributed = true;
|
||||||
|
} else {
|
||||||
|
// console.log(
|
||||||
|
// "Max distribution reached for value",
|
||||||
|
// testDenomination[i],
|
||||||
|
// "remaining value is ",
|
||||||
|
// remainingValue
|
||||||
|
// );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// console.log("no more chips left for ", colors[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (distributed == false) {
|
if (distributed == false) {
|
||||||
@ -168,9 +214,9 @@ const ChipDistributionSummary = ({
|
|||||||
}
|
}
|
||||||
if (remainingValue !== 0) {
|
if (remainingValue !== 0) {
|
||||||
console.log(`\n Failed: ${remainingValue} !== 0 Redenominating `);
|
console.log(`\n Failed: ${remainingValue} !== 0 Redenominating `);
|
||||||
const redenominateIndex = numColors - (failCount % numColors);
|
const redenominateIndex = failCount % numColors;
|
||||||
console.log("Redenominating index ", redenominateIndex);
|
console.log("Redenominating index ", redenominateIndex);
|
||||||
testDenomination = redenominate(testDenomination, redenominateIndex);
|
testDenomination = redenominate2(testDenomination, redenominateIndex);
|
||||||
failCount += 1;
|
failCount += 1;
|
||||||
fail = true;
|
fail = true;
|
||||||
} else {
|
} else {
|
||||||
@ -199,9 +245,7 @@ const ChipDistributionSummary = ({
|
|||||||
</View>
|
</View>
|
||||||
))}
|
))}
|
||||||
<Text style={styles.chipText}>
|
<Text style={styles.chipText}>
|
||||||
Total Value:{" "}
|
Total Value:{totalValue} Pot Value: {potValue}
|
||||||
{distributions?.length > 0 &&
|
|
||||||
distributions.reduce((p, c, i) => p + c * denominations[i])}
|
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user