
pub fn puzzle(input: &str) -> u32 {
    let initial_world_state = WorldState {
        steps: 0,
        elevator_floor: 0,
    };
    let mut queue = vec![initial_world_state];
    while !queue.is_empty() {
        let world = queue.remove(0);
        if world.in_end_state() {
            return world.steps;
        }

        let mut valid_next_moves = world.next_moves();
        queue.append(&mut valid_next_moves);
    }

    panic!("Exhausted all possible moves without finding end condition!");

}

pub struct WorldState {
    steps: u32,
    elevator_floor: usize,
}

impl WorldState {
    pub fn in_end_state(&self) -> bool {
        true
    }

    pub fn next_moves(&self) -> Vec<WorldState> {
        vec![]
    }
}

#[cfg(test)]
mod test {
    use super::*;

}


pub fn puzzle(input: &str) -> u32 {
    let initial_world_state = WorldState {
        steps: 0,
        elevator_floor: 0,
    };
    let mut queue = vec![initial_world_state];
    while !queue.is_empty() {
        let world = queue.remove(0);
        if world.in_end_state() {
            return world.steps;
        }

    }

    panic!("Exhausted all possible moves without finding end condition!");

}

pub struct WorldState {
    steps: u32,
    elevator_floor: usize,
}

impl WorldState {
    pub fn in_end_state(&self) -> bool {
        true
    }
}

#[cfg(test)]
mod test {
    use super::*;

}

--- 
+++ 
@@ -11,6 +11,8 @@
             return world.steps;
         }
 
+        let mut valid_next_moves = world.next_moves();
+        queue.append(&mut valid_next_moves);
     }
 
     panic!("Exhausted all possible moves without finding end condition!");
@@ -26,6 +28,10 @@
     pub fn in_end_state(&self) -> bool {
         true
     }
+
+    pub fn next_moves(&self) -> Vec<WorldState> {
+        vec![]
+    }
 }
 
 #[cfg(test)]
Add a method skeleton for finding next moves and adding to queue
