1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use super::num::Rand;

pub trait Chaos {
    fn chaos(&mut self);
}

impl<T> Chaos for Vec<T> 
where T: Copy + Clone {
    fn chaos(&mut self) {
        let mut result: Vec<T> = Vec::new();
        let mut order: Vec<usize> = Vec::new();
        for i in 0..self.len() {
            order.push(i);
        }
        for _ in 0..self.len() {
            let index = usize::rand() % order.len();
            let value = self[order[index]];
            result.push(value);
            for i in index..order.len()-1 {
                order[i] = order[i+1];
            }
            order.pop();
        }       
        *self = result;
    }
}