刘谦春晚魔术 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] 好运留下来烦恼丢出去

原理

相关推荐
doiito4 小时前
【Agent Harness】Gliding Horse 高级认知优化:让 Agent 的“大脑”和“免疫系统”真正协同
ai·rust·架构设计·系统设计·ai agent
程序员爱钓鱼18 小时前
Rust String 与 &str 详解:字符串所有权、借用与转换
前端·后端·rust
段一凡-华北理工大学1 天前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
大卫小东(Sheldon)1 天前
小鹤音形词典:一个用 Rust 写的离线编码查询桌面工具
ai·rust
就业发动机2 天前
我用 Tauri 做了一个约 1.5 MB 的开源屏幕标注工具:MarkerOn
vue.js·rust
2601_954526752 天前
【硬核架构】打破 IT 与 OT 的数据孤岛!基于 Rust 异步协程的工业 IoT 网关重构,兼谈顶级自动化智能仪表厂家选型指南
物联网·架构·rust
white_ant2 天前
17- 文本统计/处理工具使用指南
rust·个人开发·tauri
独孤留白2 天前
Rust 类型转换全景指南 —— 从引用转换到序列化
rust
独孤留白2 天前
从C到Rust:Trait TryFrom TryInto 可能失败的类型转换
rust
雨师@2 天前
python通过rust编写组件扩展自己的能力
python·rust