Given a list of non-negative integers the function \$f\$ replaces every integer with the number of identical integers preceding it (not necessarily contiguously). So
f [1,1,2,2,1,3,3] = [1,2,1,2,3,1,2]
We will say that a list, \$X\$, is in a loop if there is some positive integer \$n\$ such that \$f^n X = X\$. That is you can apply the function to \$X\$ some number of times to arrive at \$X\$.
Your task is to take a list as input and determine if that list is in a loop. You should output one of two consistent values, one if it is in a loop and the other if it is not.
This is code-golf. The goal is to minimize the size of your source code as measured in bytes.
A note: There are other ways to formulate this condition.
Test cases
[2,2] -> False
[1,1] -> True
[1,2] -> True
[1,1,2,2,3,3] -> True
[1,2,3,1,4,2,5,3] -> True
[1,2,1,3,1,2] -> True
[1,2,1,3,1,3,4,6] -> False
[1,2,2,3] -> False
[1, 1, 2, 2, 3, 3]
. Perhaps an example with the numbers not being grouped would help. \$\endgroup\$f
is stackable, so if the initial list is not, we're never looping back to it. And if it's stackable, the loop length is 2, except for the input[1]
or[]
it's 1. \$\endgroup\$