Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enum Direction {
- Left,
- Up,
- Right,
- Down
- }
- fn spiral_iter() -> impl Iterator<Item = [i32; 2]> {
- let mut curr = [0, 0];
- let mut dir = Direction::Left;
- let mut len = 1;
- let mut remaining = 1;
- std::iter::from_fn(move || {
- let rv = curr;
- remaining -= 1;
- match dir {
- Direction::Left => {
- curr[0] += 1;
- if remaining == 0 {
- dir = Direction::Up;
- remaining = len;
- }
- }
- Direction::Up => {
- curr[1] -= 1;
- if remaining == 0 {
- dir = Direction::Right;
- len += 1;
- remaining = len;
- }
- }
- Direction::Right => {
- curr[0] -= 1;
- if remaining == 0 {
- dir = Direction::Down;
- remaining = len;
- }
- }
- Direction::Down => {
- curr[1] += 1;
- if remaining == 0 {
- dir = Direction::Left;
- len += 1;
- remaining = len;
- }
- }
- }
- Some(rv)
- })
- }
- fn main() {
- let mult_values: Vec<[i32;2]> = spiral_iter().take(23).collect();
- println!("{:?}", mult_values);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement