Anonymous user
Deal cards for FreeCell: Difference between revisions
→{{header|Rust}}: refactor and switch to use LCG task
(→{{header|Rust}}: refactor and switch to use LCG task) |
|||
Line 2,786:
Based on JavaScript.
<lang rust>// Code available at https://rosettacode.org/wiki/Linear_congruential_generator#Rust
<lang rust>▼
extern crate linear_congruential_generator;
use linear_congruential_generator::{MsLcg, Rng, SeedableRng};
}▼
// We can't use `rand::Rng::shuffle` because it uses the more uniform `rand::Rng::gen_range`
// (`% range` is subject to modulo bias). If an exact match of the old dealer is not needed,
// `rand::Rng::shuffle` should be used.
let len =
}▼
▲ fn shuffle<T>(&mut self, deck: &mut [T]) {
▲ let j = self.max_rand(i+1);
}▼
}
}
fn
const RANKS: [char; 13] = ['A','2','3','4','5','6','7','8','9','T','J','Q','K'];
const SUITS: [char; 4] = ['C', 'D', 'H', 'S'];
let
let (suit, rank) = (card % 4, card / 4);
let mut deck: Vec<_> = (0..4*13).collect();▼
▲ };
▲}
fn deal_ms_fc_board(seed: u32) -> Vec<String> {
randomizer.shuffle(&mut deck);▼
let mut rng = MsLcg::from_seed(seed);
deck.reverse();
▲ for i in 0..52 {
}
fn main() {▼
▲ format!("{}{}", rank_strings[rank], suit_strings[suit])
.and_then(|n| n.parse().ok())
.expect("A 32-bit seed is required");
println!(": {}", row);
}
▲ columns.into_iter().map(render_column).collect::<Vec<_>>().join("")
}
▲fn main() {
▲ print!("{}", deal_ms_fc_board(arg));
=={{header|Seed7}}==
|