Реализация случайного блуждания в Rust: несколько методов с примерами кода

Вот несколько методов реализации случайного блуждания в 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.