# Runs of Ones (What Fun!) [tag:code-golf] [tag:sequence] Suppose you have an array with some known set of values (e.g. a string of \$0\$ and \$1\$) and you want to get all the locations of \$1\$s. Instead of storing a list of all the indices, if the \$1\$s come in "clumps" you can sometimes save space by storing starting and ending indices of "runs" of values -- i.e. substrings which contain just a bunch of \$1\$s in a row. For example, take the following list: ``` i = 0 1 2 3 4 5 6 7 8 9 a = [1 0 0 1 1 1 0 0 1 1] ✓ ✓ ✓ ✓ ✓ ✓ i = 0 3 4 5 8 9 ``` So we output \$[(0,0), (3,5), (8,9)]\$. More formally: Given an array \$[a_1, ...a_n]\$ consisting of two distinct values \$x\$ and \$y\$, output all tuples of indices \$(i,j)\$ where the values in the subsequence \$[a_i,...,a_j]\$ are all \$y\$. You must return as few tuples as necessary to cover all \$y\$ in the array -- e.g. in the above example you should not return \$[(0,0), (3,4), (5,5), (8,9)]\$ . You may use any two distinct values for the input list, and your indices may start from 0 or 1. [Here's a program to generate test cases.](https://onecompiler.com/python/3yauvh45y) Standard loopholes are forbidden. Since this is [tag:code-golf], the shortest program wins. ## Sandbox Questions This is a simplification of the previous question I proposed, which I decided to make a new post in order to get fresh eyes on it. The title is a bit iffy, but I don't know how much that matters. I could also make the challenge harder by instead having the input be a list with an arbitrary number of fixed symbols along with symbol `x`, and ask for all start and end indices of all instances of `x` in list -- e.g. `f([c,a,b,c,c],c)` returns the indices of runs of `c`. However, I think the problem as described above gives more opportunity for cleverness in solutions.