Deck Shuffling

Implemented a deck shuffling algorithm. It will iterate over the deck of
cards 1000 times and swap the card it is on with another random card to
mix up the deck.
This commit is contained in:
2026-01-10 20:05:24 -05:00
parent cedef1792f
commit 30c8705485
4 changed files with 160 additions and 1 deletions

141
Cargo.lock generated
View File

@@ -5,3 +5,144 @@ version = 4
[[package]] [[package]]
name = "blackjack" name = "blackjack"
version = "0.1.0" version = "0.1.0"
dependencies = [
"rand",
]
[[package]]
name = "cfg-if"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "getrandom"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
dependencies = [
"cfg-if",
"libc",
"r-efi",
"wasip2",
]
[[package]]
name = "libc"
version = "0.2.180"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc"
[[package]]
name = "ppv-lite86"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
"zerocopy",
]
[[package]]
name = "proc-macro2"
version = "1.0.105"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
dependencies = [
"proc-macro2",
]
[[package]]
name = "r-efi"
version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
name = "rand"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
dependencies = [
"rand_chacha",
"rand_core",
]
[[package]]
name = "rand_chacha"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
dependencies = [
"ppv-lite86",
"rand_core",
]
[[package]]
name = "rand_core"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [
"getrandom",
]
[[package]]
name = "syn"
version = "2.0.114"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
[[package]]
name = "wasip2"
version = "1.0.1+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
dependencies = [
"wit-bindgen",
]
[[package]]
name = "wit-bindgen"
version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
[[package]]
name = "zerocopy"
version = "0.8.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.8.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1"
dependencies = [
"proc-macro2",
"quote",
"syn",
]

View File

@@ -4,3 +4,4 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
rand = "0.9.2"

View File

@@ -1,4 +1,5 @@
use super::card::Card; use super::card::Card;
use rand::random_range;
pub struct Deck { pub struct Deck {
deck_size: u64, deck_size: u64,
@@ -9,7 +10,7 @@ pub struct Deck {
impl Deck { impl Deck {
pub fn new(num_decks: u64) -> Self { pub fn new(num_decks: u64) -> Self {
let deck_size: u64 = num_decks * 52; let deck_size: u64 = num_decks * 52;
let mut cards: Vec<Card> = Vec::new(); let mut cards: Vec<Card> = Vec::with_capacity(deck_size as usize);
for card in 0..deck_size { for card in 0..deck_size {
let value = (card % 13) as u8; let value = (card % 13) as u8;
@@ -38,4 +39,19 @@ impl Deck {
pub fn deck_size(&self) -> usize { pub fn deck_size(&self) -> usize {
self.deck_size as usize self.deck_size as usize
} }
pub fn cur_card(&self) -> u64 {
self.current_card
}
pub fn shuffle(&mut self) {
for _ in 0..1000 {
for card in 0..self.deck_size {
let swap_card = random_range(0..self.deck_size);
let save_card = self.cards[card as usize];
self.cards[card as usize] = self.cards[swap_card as usize];
self.cards[swap_card as usize] = save_card;
}
}
}
} }

View File

@@ -5,6 +5,7 @@ fn check_num_decks() {
let mut num_card: [u64; 52] = [0; 52]; let mut num_card: [u64; 52] = [0; 52];
let num_decks = 8; let num_decks = 8;
let mut deck = Deck::new(num_decks as u64); let mut deck = Deck::new(num_decks as u64);
deck.shuffle();
for _ in 0..deck.deck_size() { for _ in 0..deck.deck_size() {
let next_card = deck.get_next_card(); let next_card = deck.get_next_card();