Skip to main content
Back to problems
#1033
Medium Algorithms

Moving stones until consecutive

Math Brainteaser
52.1% acceptance
Feb 25, 2026
257
658
There are three stones in different positions on the X-axis. You are given three integers a, b, and c, the positions of the stones. In one move, you pick up a stone at an endpoint (i.e., either the lowest or highest position stone), and move it to an unoccupied position between those endpoints. Formally, let's say the stones are currently at positions x, y, and z with x < y < z. You pick up the stone at either position x or position z, and move that stone to an integer position k, with x < k < z and k != y. The game ends when you cannot make any more moves (i.e., the stones are in three consecutive positions). Return an integer array answer of length 2 where: answer[0] is the minimum number of moves you can play, and answer[1] is the maximum number of moves you can play.

Solution

Rust
Time O(n log n)
Space O(n)
LeetCode
solution.rs
impl Solution {
  pub fn num_moves_stones(a: i32, b: i32, c: i32) -> Vec<i32> {
    let mut v = [a, b, c];
    v.sort();
    let (x, y, z) = (v[0], v[1], v[2]);
    if z - x == 2 { return vec![0, 0]; }
    let min_moves = if y - x <= 2 || z - y <= 2 { 1 } else { 2 };
    vec![min_moves, z - x - 2]
  }
}