1
0
Fork 0
This commit is contained in:
Lars Martens 2025-12-06 13:39:17 +01:00
parent ab29172d43
commit 53e172f9c6
Signed by: haselkern
GPG key ID: B5CF1F363C179AD4
2 changed files with 133 additions and 0 deletions

View file

@ -127,3 +127,30 @@ pub const DIRECTIONS8: [IVec2; 8] = [
IVec2::new(0, -1),
IVec2::new(1, -1),
];
/// Transposes a Vec of Vecs.
///
/// ```rust
/// # use aoc::transpose;
/// let input = vec![vec![1, 2, 3], vec![4, 5, 6]];
/// let expected = vec![vec![1, 4], vec![2, 5], vec![3, 6]];
/// assert_eq!(transpose(input), expected);
/// ```
///
/// https://stackoverflow.com/a/64499219
pub fn transpose<T>(v: Vec<Vec<T>>) -> Vec<Vec<T>> {
if v.is_empty() {
return v;
}
let len = v[0].len();
let mut iters: Vec<_> = v.into_iter().map(|n| n.into_iter()).collect();
(0..len)
.map(|_| {
iters
.iter_mut()
.map(|n| n.next().unwrap())
.collect::<Vec<T>>()
})
.collect()
}