Welcome! Are you ready to dive into the world of array manipulations? Today, we’ll explore an engaging problem that combines logic, simulation, and programming skills. Imagine a small town with houses, balloons, and a unique sharing game.
Let’s uncover the solution step by step!
In a small town, houses are numbered sequentially from 1 to n, each initially holding a specific number of balloons. During a town festival, the houses participate in a game where they share balloons according to these rules:
- At each step, each house sends half of its balloons to the next house. For the last house, the next house is the first one, creating a circular pattern.
- The number of balloons shared is always rounded down (e.g., if a house has 5 balloons, it sends 2).
- The game ends when the number of balloons at each house stops changing between steps.
Your task is to implement a Ruby function simulate_balloon_game(balloons) that simulates this game and returns the number of steps it takes for the balloon distribution to stabilize.
Example:
If balloons = [4, 1, 2], the output should be 3. Here’s why:
- After step 1:
[3, 3, 1] - After step 2:
[2, 3, 2] - After step 3:
[2, 3, 2](no change from the previous step)
Thus, it takes 3 steps for the game to stabilize.
This task requires understanding cyclic arrays, where the last index wraps around to the first. For example, house n sends balloons to house 1. This cyclical behavior makes it essential to handle array indices carefully. Using modular arithmetic (%) helps manage this wrapping behavior efficiently.
We’ll start by setting up a loop to simulate each step of the game. The loop will terminate when the balloon distribution stops changing.
Here's the foundation of our solution:
This snippet tracks the number of steps and ensures that we terminate the loop once the balloon distribution stabilizes.
