刘谦春晚魔术 rust 代码演示

代码

rust 复制代码
use rand::{thread_rng, Rng};

fn main() {
    let mut vec = vec![1, 2, 3, 4, 1, 2, 3, 4];
    let mut rng = thread_rng();
    println!("{:?} 初始状态", vec);

    swap(&mut vec, rng.gen_range(2..=7));
    println!("{:?} 拿走头名字长度(2-7)插入尾部 (怎么变n+4都会相同)", vec);

    let tmp: Vec<_> = vec.drain(..3).collect();
    let index = rng.gen_range(1..vec.len() - 1);
    vec.splice(index..index, tmp);
    println!("{vec:?} 拿走头3张插入中间 (插到4-8之间刚好首尾一样)");

    let target = vec.remove(0);
    println!("{vec:?} 拿走首牌 {target} (尾不变)");

    let tmp: Vec<_> = vec.drain(..rng.gen_range(1..=3)).collect();
    let index = rng.gen_range(1..vec.len() - 1);
    vec.splice(index..index, tmp);
    println!("{vec:?} 南1 北2 不清楚3 插入中间 (尾不变)");

    vec.drain(..rng.gen_range(1..=2));
    println!("{vec:?} 男1 女2 删除 (尾不变)");

    swap(&mut vec, 7);
    println!("{vec:?} 见证奇迹的时刻 (尾牌: 男倒2 女倒3)");

    while vec.len() > 1 {
        let tmp = vec.remove(0);
        vec.push(tmp);
        vec.remove(0);
        println!("{vec:?} 好运留下来烦恼丢出去")
    }
    assert_eq!(target, vec.remove(0))
}
fn swap<T>(vec: &mut Vec<T>, n: usize) {
    for _ in 0..n {
        let val = vec.remove(0);
        vec.push(val)
    }
}

结果

scss 复制代码
[1, 2, 3, 4, 1, 2, 3, 4] 初始状态
[3, 4, 1, 2, 3, 4, 1, 2] 拿走头名字长度(2-7)插入尾部 (怎么变n+4都会相同)
[2, 3, 4, 1, 3, 4, 1, 2] 拿走头3张插入中间 (插到4-8之间刚好首尾一样)
[3, 4, 1, 3, 4, 1, 2] 拿走首牌 2 (尾不变)
[3, 4, 3, 4, 1, 1, 2] 南1 北2 不清楚3 插入中间 (尾不变)
[4, 3, 4, 1, 1, 2] 男1 女2 删除 (尾不变)
[3, 4, 1, 1, 2, 4] 见证奇迹的时刻 (尾牌: 男倒2 女倒3)
[1, 1, 2, 4, 3] 好运留下来烦恼丢出去
[2, 4, 3, 1] 好运留下来烦恼丢出去
[3, 1, 2] 好运留下来烦恼丢出去
[2, 3] 好运留下来烦恼丢出去
[2] 好运留下来烦恼丢出去

原理

相关推荐
k4m7v2pz1 天前
Rust 长跑守护进程日志治理:切分、时区与结构化
开发语言·后端·rust·日志系统·日志轮转·ndjson
k4m7v2pz1 天前
Rust 高并发 WebSocket 连接管理:从线程地狱到 tokio 异步架构
websocket·架构·rust·并发编程·tokio
k4m7v2pz1 天前
Rust 规则热重载实战:用 serde_json + notify 告别重启
开发语言·rust·json·规则引擎·notify·热重载
rustfs1 天前
GitLab 如何与 RustFS 集成?
分布式·rust·gitlab
龙智DevSecOps解决方案1 天前
Perforce QAC + Klocwork 视频教程:Rust 与 C/C++ 混合项目静态分析演示
rust·静态分析·perforce·klocwork·qac·代码合规
程序员爱钓鱼1 天前
Rust 生命周期常见错误详解:看懂编译器报错并正确修复
前端·后端·rust
特立独行的猫a1 天前
Windows安装Rust环境 Clang替代GCC MinGW环境LLVM工具链(详细教程)
开发语言·windows·rust·mingw·环境搭建·llvm
红尘散仙2 天前
浏览器不能监听端口、没有文件系统,凭什么能点对点传文件?
rust·webrtc·webassembly
nnerddboy2 天前
Rust教程06:ESP32-rust环境搭建
开发语言·后端·rust
nnerddboy2 天前
Rust教程03:函数,控制流与所有权
开发语言·后端·rust