Skip to content

Commit

Permalink
deck: Implemented Fisher-Yates shuffling algorithm to shuffle the deck
Browse files Browse the repository at this point in the history
Fixes: #2
  • Loading branch information
sethdivyansh authored and kuv2707 committed Jun 2, 2024
1 parent f05595c commit ef2dc47
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 4 deletions.
23 changes: 22 additions & 1 deletion backend/tests/deck.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,28 @@
import { makeCard } from '../uno-game-engine/deck';
import { shuffle, makeCard } from '../uno-game-engine/deck';
describe('testing deck.ts', () => {
test('makeCard', () => {
const card = makeCard('number', 'blue', '3');
expect(card.color).toBe('blue');
});
});
describe('shuffle function', () => {
test('should change order of elements', () => {
// Create a mock deck
const deck = [
makeCard('number', 'red', '1'),
makeCard('number', 'blue', '2'),
makeCard('number', 'red', '1'),
makeCard('number', 'yellow', '1'),
];

// Create a copy of the deck for comparison
const originalDeck = [...deck];
shuffle(deck);

// Check that the order of elements has changed
const orderChanged = deck.some(
(card, index) => card !== originalDeck[index]
);
expect(orderChanged).toBe(true);
});
});
9 changes: 6 additions & 3 deletions backend/uno-game-engine/deck.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,10 @@ export function makeCard(
* This function shuffles the elements of the given array *in place* . The function behaves in a type-agnostic way.
* Time complexity: O(n)
*/
export function shuffle(deck: Array<any>) {
//todo: Implement a generic shuffling algorithm
[deck[0], deck[1]] = [deck[1], deck[0]];
export function shuffle(deck: Array<UNOCard>) {
// Fisher-Yates shuffle algorithm to shuffle card deck
for (let i = deck.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * i);
[deck[i], deck[j]] = [deck[j], deck[i]];
}
}

0 comments on commit ef2dc47

Please sign in to comment.