Вот несколько методов реализации случайного блуждания в Rust, а также примеры кода:
Метод 1. Использование контейнера rand
для генерации случайных чисел.
extern crate rand;
use rand::Rng;
fn random_walk(steps: i32) -> i32 {
let mut position = 0;
let mut rng = rand::thread_rng();
for _ in 0..steps {
let step: i32 = rng.gen_range(-1, 2);
position += step;
}
position
}
fn main() {
let steps = 100;
let final_position = random_walk(steps);
println!("Final position after {} steps: {}", steps, final_position);
}
Метод 2: использование распределения rand::distributions::Standard
.
extern crate rand;
use rand::distributions::Standard;
use rand::Rng;
fn random_walk(steps: i32) -> i32 {
let mut position = 0;
let mut rng = rand::thread_rng();
for _ in 0..steps {
let step: i32 = rng.sample(Standard);
position += step;
}
position
}
fn main() {
let steps = 100;
let final_position = random_walk(steps);
println!("Final position after {} steps: {}", steps, final_position);
}
Метод 3: использование распределения rand::distributions::Uniform
.
extern crate rand;
use rand::distributions::{Distribution, Uniform};
use rand::Rng;
fn random_walk(steps: i32) -> i32 {
let mut position = 0;
let mut rng = rand::thread_rng();
let step_distribution = Uniform::new_inclusive(-1, 1);
for _ in 0..steps {
let step: i32 = rng.sample(&step_distribution);
position += step;
}
position
}
fn main() {
let steps = 100;
let final_position = random_walk(steps);
println!("Final position after {} steps: {}", steps, final_position);
}
Метод 4. Использование rand::seq::SliceRandom
для случайного выбора шагов.
extern crate rand;
use rand::seq::SliceRandom;
use rand::thread_rng;
fn random_walk(steps: i32) -> i32 {
let mut position = 0;
let mut rng = thread_rng();
let step_options = [-1, 0, 1];
for _ in 0..steps {
let step = *step_options.choose(&mut rng).unwrap();
position += step;
}
position
}
fn main() {
let steps = 100;
let final_position = random_walk(steps);
println!("Final position after {} steps: {}", steps, final_position);
}
сохраните в файл Cargo.toml
.