%I #16 Apr 23 2021 20:53:14
%S 1,1,2,2,3,2,3,4,3,3,4,5,3,4,4,5,6,4,4,5,5,6,7,11,5,5,6,6,7,8,5,13,6,
%T 6,7,7,8,9,6,6,16,7,7,8,8,9,10,17,7,7,10,8,8,9,9,10,11,8,10,8,8,11,9,
%U 9,10,10,11,12,8,9,11,9,9,12,10,10,11,11,12,13
%N Cycle lengths arising from interpreting sequence prefixes as graph node offsets.
%H Rémy Sigrist, <a href="/A338643/b338643.txt">Table of n, a(n) for n = 1..50000</a>
%H Rémy Sigrist, <a href="/A338643/a338643.txt">C program for A338643</a>
%e Start with a(1) = 1. Treat a(1) = 1 as a node pointing 1 space ahead which, wrapping around the end of the length-1 prefix, points to itself. This graph has a cycle length of 1, so a(2) = 1.
%e Now a(1..2) = [1, 1]. a(1) = 1 points 1 space ahead to a(2) and a(2) = 1 points 1 space ahead and wraps around to a(1), completing a cycle of length 2 so a(3) = 2.
%e Skipping ahead a bit, a(1..5) = [1, 1, 2, 2, 3]. In this prefix, a(1) = 1 points to a(2) = 1, which points to a(3) = 2, which points to a(5) = 3, which wraps around and points to a(3), for a cycle length of 2, so a(6) = 2.
%o (Kotlin)
%o fun graph_sequence(terms: Int): List<Int> {
%o val a = mutableListOf(1)
%o repeat(terms-1) { a += a.loopLength() }
%o return a
%o }
%o fun List<Int>.loopLength(): Int {
%o val visitedIndices = mutableMapOf<Int,Int>()
%o var idx = 0
%o var counter = 0
%o while (idx !in visitedIndices) {
%o visitedIndices[idx] = counter++
%o idx = (idx + this[idx]) % this.size
%o }
%o return counter - (visitedIndices[idx] ?: 0)
%o }
%o (C) See Links section.
%K nonn
%O 1,3
%A _Matthew Malone_, Apr 21 2021