--- id: 69c5f3d787b1725d5f00c8bd title: "Challenge 259: FizzBuzz Explosion" challengeType: 29 dashedName: challenge-259 --- # --description-- Given an integer, return the number of steps it takes to turn the word `"fizzbuzz"` into a string with at least the given number of `"z"`'s using the following rules: - Start with the string `"fizzbuzz"`. - Each step, apply the standard FizzBuzz rules using the letter position in the string (the first `"f"` is position 1). - If the letter position is divisible by 3, replace the letter with `"fizz"` - If it's divisible by 5, replace the letter with `"buzz"` - If it's divisible by 3 and 5, replace the letter with `"fizzbuzz"` So after 1 step, `"fizzbuzz"` turns into `"fifizzzbuzzfizzzz"`, which has 9 `"z"`'s. # --hints-- `explode_fizzbuzz(9)` should return `1`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(explode_fizzbuzz(9), 1)`) }}) ``` `explode_fizzbuzz(15)` should return `2`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(explode_fizzbuzz(15), 2)`) }}) ``` `explode_fizzbuzz(51)` should return `3`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(explode_fizzbuzz(51), 3)`) }}) ``` `explode_fizzbuzz(52)` should return `4`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(explode_fizzbuzz(52), 4)`) }}) ``` `explode_fizzbuzz(359)` should return `5`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(explode_fizzbuzz(359), 5)`) }}) ``` `explode_fizzbuzz(789)` should return `6`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(explode_fizzbuzz(789), 6)`) }}) ``` `explode_fizzbuzz(54482)` should return `11`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(explode_fizzbuzz(54482), 11)`) }}) ``` `explode_fizzbuzz(1000000)` should return `14`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(explode_fizzbuzz(1000000), 14)`) }}) ``` # --seed-- ## --seed-contents-- ```py def explode_fizzbuzz(target_z_count): return target_z_count ``` # --solutions-- ```py def explode_fizzbuzz(target_z_count): s = "fizzbuzz" steps = 0 while s.count('z') < target_z_count: next_s = "" for i, c in enumerate(s): pos = i + 1 if pos % 15 == 0: next_s += "fizzbuzz" elif pos % 3 == 0: next_s += "fizz" elif pos % 5 == 0: next_s += "buzz" else: next_s += c s = next_s steps += 1 return steps ```