Skip to content

Instantly share code, notes, and snippets.

@saulr7
Created January 12, 2023 23:30
Show Gist options
  • Select an option

  • Save saulr7/f06ffd9715f8074b68d4505038d6f712 to your computer and use it in GitHub Desktop.

Select an option

Save saulr7/f06ffd9715f8074b68d4505038d6f712 to your computer and use it in GitHub Desktop.
/* eslint-disable no-console */
const seedrandom = require('seedrandom');
const { generateDeck } = require('./utils/hilo-utils');
const { Hilo } = require('../constants');
const { DECK } = Hilo;
const { Suits, Values } = DECK;
const KING = 'K';
const ACE = 'A';
const getRamdonCard = () => {
const rng = seedrandom();
const randomSuit = Math.floor(rng() * Suits.length);
const randomValue = Math.floor(rng() * Values.length);
const suit = Suits[randomSuit];
const value = Values[randomValue];
return { value, suit };
};
const isSameCard = (c1 = {}, c2 = {}) => c1.suit === c2.suit && c1.value === c2.value;
const reduceCards = (deck = [], baseDeck = []) => {
return baseDeck.reduce((t = [], card) => {
const alreadyPlayed = deck.find((c) => isSameCard(c, card));
if (alreadyPlayed) {
return t;
}
return [...t, card];
}, []);
};
const getBaseDeck = () => {
const deck = [];
Suits.forEach((suit) => Values.forEach((value) => deck.push({ suit, value })));
return deck;
};
const getOdds = (card = [], leftCards = []) => {
const value = card.value;
const cardIndex = Values.findIndex((c) => c === value);
const cardsGreaterOrEqual = [];
const cardsLowerOrEqual = [];
leftCards.forEach((leftCard) => {
const index = Values.findIndex((value) => value === leftCard.value);
if (index === cardIndex && value === ACE) {
cardsLowerOrEqual.push(leftCard);
} else if (index === cardIndex && value === KING) {
cardsGreaterOrEqual.push(leftCard);
} else if (index === cardIndex) {
cardsGreaterOrEqual.push(leftCard);
} else if (index > cardIndex) {
cardsGreaterOrEqual.push(leftCard);
} else if (index < cardIndex) {
cardsLowerOrEqual.push(leftCard);
}
});
const leftCardLength = leftCards.length;
const greaterOrEqual = parseFloat((cardsGreaterOrEqual.length / leftCardLength) * 100 || 0).toFixed(2);
const lowerOrEqual = parseFloat((cardsLowerOrEqual.length / leftCardLength) * 100 || 0).toFixed(2);
return { greaterOrEqual, lowerOrEqual };
};
const runGame = () => {
const clicks = [];
const cardsAndOdds = [];
const startCard = getRamdonCard();
const baseDeck = getBaseDeck();
for (let i = 0; i < 52; i++) {
const deck = generateDeck('abhash1', startCard, clicks);
const currentCard = deck[deck.length - 1];
const leftCards = reduceCards(deck, baseDeck);
const odds = getOdds(currentCard, leftCards);
cardsAndOdds.push({ i: i + 1, card: currentCard.value, ...odds });
clicks.push(i);
}
return cardsAndOdds;
};
console.log(runGame());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment