Is it stuck in a counting loop?
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 answer
Pyth, 8 bytes
qu/Red._
A list is in a loop if and only if it is the first list seen twice as f is applied repeatedly.
qu/Red._
u Apply the following function,
until a list is seen twice.
._ Take all prefixes of the list
/R Count the number of appearance of
ed The last element of the prefix
q Check if the first repeated is the input
1 comment thread