Displaying Chip value contribution #6 #33
@ -75,28 +75,33 @@ const ChipDistributionSummary = ({
|
|||||||
[totalChipsCount, playerCount]
|
[totalChipsCount, playerCount]
|
||||||
);
|
);
|
||||||
|
|
||||||
function denominate(min: number, max: number, count: number = 4): number[] {
|
const redenominate = (
|
||||||
if (max - min + 1 < count) {
|
invalidDenomination: validDenomination[],
|
||||||
throw new Error(
|
shuffleIndex: number
|
||||||
"Range is too small to generate the required number of unique values."
|
): validDenomination[] => {
|
||||||
);
|
console.log("Old Denominations ", invalidDenomination);
|
||||||
|
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 {
|
||||||
|
const nextLowestDenominationIndex = Math.max(
|
||||||
|
validDenominations.indexOf(invalidDenomination[i]) - 1,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
newDenomination.push(validDenominations[nextLowestDenominationIndex]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
newDenomination.reverse();
|
||||||
const numbers = new Set<number>();
|
console.log("New Denominations ", newDenomination);
|
||||||
|
return newDenomination;
|
||||||
while (numbers.size < count) {
|
};
|
||||||
const randomNum = Math.floor(Math.random() * (max - min + 1)) + min;
|
|
||||||
numbers.add(randomNum);
|
|
||||||
}
|
|
||||||
|
|
||||||
// const denominations
|
|
||||||
|
|
||||||
return Array.from(numbers);
|
|
||||||
}
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// const testDistribution: Map<ColorValue, number> = new Map();
|
// const testDistribution: Map<ColorValue, number> = new Map();
|
||||||
const testDenomination: validDenomination[] = [];
|
let testDenomination: validDenomination[] = [];
|
||||||
|
|
||||||
const numColors = chipMap.size;
|
const numColors = chipMap.size;
|
||||||
const testDistribution: number[] = [];
|
const testDistribution: number[] = [];
|
||||||
@ -118,44 +123,66 @@ const ChipDistributionSummary = ({
|
|||||||
}
|
}
|
||||||
testDenomination.reverse();
|
testDenomination.reverse();
|
||||||
|
|
||||||
console.log("BUY IN: ", buyInAmount);
|
// console.log("BUY IN: ", buyInAmount);
|
||||||
console.log("PLAYER COUNT ", playerCount);
|
// console.log("PLAYER COUNT ", playerCount);
|
||||||
|
|
||||||
// DISTRIBUTE
|
// DISTRIBUTE
|
||||||
let remainingValue = buyInAmount;
|
let remainingValue = buyInAmount;
|
||||||
const remainingChips = [...maxPossibleDistribution];
|
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);
|
||||||
console.log("remaining value ", remainingValue);
|
// console.log("remaining value ", remainingValue);
|
||||||
|
|
||||||
//First distribute one of each chip to each player
|
//First distribute one of each chip to each player
|
||||||
for (let i = numColors - 1; i >= 0; i--) {
|
// for (let i = numColors - 1; i >= 0; i--) {
|
||||||
testDistribution[i] = testDistribution[i] + 1;
|
// testDistribution[i] = testDistribution[i] + 1;
|
||||||
remainingChips[i] = remainingChips[i] - 1;
|
// remainingChips[i] = remainingChips[i] - 1;
|
||||||
remainingValue = remainingValue - testDenomination[i];
|
// remainingValue = remainingValue - testDenomination[i];
|
||||||
}
|
// }
|
||||||
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);
|
||||||
console.log("remaining value ", remainingValue);
|
// console.log("remaining value ", remainingValue);
|
||||||
|
|
||||||
//Then, greedy approach to distribute remaining chips
|
//Then, greedy approach to distribute remaining chips
|
||||||
|
|
||||||
// while (remainingValue > 0) {
|
let fail = true;
|
||||||
// for (let i = numColors - 1; i >= 0; i--) {
|
let failCount = 0;
|
||||||
// if (remainingChips[i] > 0 && remainingValue > testDenomination[i]) {
|
while (fail && failCount < 10) {
|
||||||
// testDistribution[i] = testDistribution[i] + 1;
|
let stop = false;
|
||||||
// remainingChips[i] = remainingChips[i] - 1;
|
while (remainingValue > 0 && !stop) {
|
||||||
// remainingValue = remainingValue - testDenomination[i];
|
let distributed = false;
|
||||||
// }
|
for (let i = numColors - 1; i >= 0; i--) {
|
||||||
// remainingValue = 0;
|
if (remainingChips[i] > 0 && remainingValue > testDenomination[i]) {
|
||||||
// }
|
// console.log("distributing ", testDenomination[i]);
|
||||||
// }
|
testDistribution[i] = testDistribution[i] + 1;
|
||||||
console.log("\ntest Denomination", testDenomination);
|
remainingChips[i] = remainingChips[i] - 1;
|
||||||
console.log("test distribution ", testDistribution);
|
remainingValue = remainingValue - testDenomination[i];
|
||||||
console.log("remainingChips", remainingChips);
|
distributed = true;
|
||||||
console.log("remaining value ", remainingValue);
|
}
|
||||||
|
}
|
||||||
|
if (distributed == false) {
|
||||||
|
stop = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (remainingValue !== 0) {
|
||||||
|
console.log(`\n Failed: ${remainingValue} !== 0 Redenominating `);
|
||||||
|
const redenominateIndex = numColors - (failCount % numColors);
|
||||||
|
console.log("Redenominating index ", redenominateIndex);
|
||||||
|
testDenomination = redenominate(testDenomination, redenominateIndex);
|
||||||
|
failCount += 1;
|
||||||
|
fail = true;
|
||||||
|
} else {
|
||||||
|
fail = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log("\ntest Denomination", testDenomination);
|
||||||
|
// console.log("test distribution ", testDistribution);
|
||||||
|
// console.log("remainingChips", remainingChips);
|
||||||
|
// console.log("remaining value ", remainingValue);
|
||||||
|
|
||||||
setDenominations(testDenomination);
|
setDenominations(testDenomination);
|
||||||
setDistributions(testDistribution);
|
setDistributions(testDistribution);
|
||||||
}, [chipMap, maxDenomination, buyInAmount, playerCount]);
|
}, [chipMap, maxDenomination, buyInAmount, playerCount]);
|
||||||
@ -165,12 +192,17 @@ const ChipDistributionSummary = ({
|
|||||||
<Text style={styles.title}>Chip Distribution Summary:</Text>
|
<Text style={styles.title}>Chip Distribution Summary:</Text>
|
||||||
{colors.map((color, index) => (
|
{colors.map((color, index) => (
|
||||||
<View style={styles.chipContainer} key={index}>
|
<View style={styles.chipContainer} key={index}>
|
||||||
<Text style={styles.chipText}>
|
<Text style={{ ...styles.chipText, color: color }}>
|
||||||
{String(color).charAt(0).toUpperCase() + String(color).slice(1)}{" "}
|
{String(color).charAt(0).toUpperCase() + String(color).slice(1)}{" "}
|
||||||
chips: {distributions[index]} ( ${denominations[index]} each)
|
chips: {distributions[index]} ( ${denominations[index]} each)
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
))}
|
))}
|
||||||
|
<Text style={styles.chipText}>
|
||||||
|
Total Value:{" "}
|
||||||
|
{distributions?.length > 0 &&
|
||||||
|
distributions.reduce((p, c, i) => p + c * denominations[i])}
|
||||||
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@ -189,10 +221,12 @@ const styles = StyleSheet.create({
|
|||||||
},
|
},
|
||||||
chipContainer: {
|
chipContainer: {
|
||||||
marginTop: 10,
|
marginTop: 10,
|
||||||
|
backgroundColor: "#888",
|
||||||
},
|
},
|
||||||
chipText: {
|
chipText: {
|
||||||
fontSize: 16,
|
fontSize: 20,
|
||||||
marginVertical: 2,
|
marginVertical: 2,
|
||||||
|
fontWeight: "bold",
|
||||||
},
|
},
|
||||||
noDataText: {
|
noDataText: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
|
Loading…
Reference in New Issue
Block a user