pub fn debug_map(map: Dict(#(Int, Int), MapTile)) -> List(String)
    
    
   
  
  
    
    pub fn direction_to_string(direction: Direction) -> String
    
    
   
  
  
    
    pub fn get_boxes_to_move(
  path: List(#(#(Int, Int), MapTile)),
) -> List(#(#(Int, Int), MapTile))
    
    
   
  
  
    
    pub fn get_new_position(
  position: #(Int, Int),
  direction: Direction,
) -> #(Int, Int)
    
    
   
  
  
    
    pub fn get_robot_col(
  map: Dict(#(Int, Int), MapTile),
) -> List(#(#(Int, Int), MapTile))
    
    
   
  
  
    
    pub fn get_robot_path(
  line: List(#(#(Int, Int), MapTile)),
) -> List(#(#(Int, Int), MapTile))
    
    
   
  
  
    
    pub fn get_robot_position(
  map: Dict(#(Int, Int), MapTile),
) -> #(Int, Int)
    
    
   
  
  
    
    pub fn get_robot_row(
  map: Dict(#(Int, Int), MapTile),
) -> List(#(#(Int, Int), MapTile))
    
    
   
  
  
    
    pub fn get_score(map: Dict(#(Int, Int), MapTile)) -> List(Int)
    
    
   
  
  
    
    pub fn is_next_space_empty(
  path: List(#(#(Int, Int), MapTile)),
) -> Bool
    
    
   
  
  
  
  
    
    pub fn move_boxes(
  map: Dict(#(Int, Int), MapTile),
  direction: Direction,
  boxes: List(#(#(Int, Int), MapTile)),
) -> Dict(#(Int, Int), MapTile)
    
    
   
  
  
    
    pub fn move_robot(
  map: Dict(#(Int, Int), MapTile),
  direction: Direction,
) -> Dict(#(Int, Int), MapTile)
    
    
   
  
  
    
    pub fn parse_direction(input: String) -> Direction
    
    
   
  
  
    
    pub fn parse_input(
  input: List(String),
) -> #(Dict(#(Int, Int), MapTile), List(Direction))
    
    
   
  
  
    
    pub fn parse_tile(input: String) -> MapTile
    
    
   
  
  
    
    pub fn to_string(tile: MapTile) -> String
    
    
   
  
  
    
    pub fn try_direction(
  map: Dict(#(Int, Int), MapTile),
  direction: Direction,
) -> Dict(#(Int, Int), MapTile)
    
    
   
  
  
    
    pub fn update_map(
  map: Dict(#(Int, Int), MapTile),
  directions: List(Direction),
) -> Dict(#(Int, Int), MapTile)