RosettaCodeData/Task/Kolakoski-sequence/Julia/kolakoski-sequence.julia
2023-07-01 13:44:08 -04:00

34 lines
836 B
Text

function kolakoski(vec, len)
seq = Vector{Int}()
k = 0
denom = length(vec)
while length(seq) < len
n = vec[k % denom + 1]
k += 1
seq = vcat(seq, repeat([n], k > length(seq) ? n : seq[k]))
end
seq[1:len]
end
function iskolakoski(seq)
count = 1
rle = Vector{Int}()
for i in 2:length(seq)
if seq[i] == seq[i - 1]
count += 1
else
push!(rle, count)
count = 1
end
end
rle == seq[1:length(rle)]
end
const tests = [[[1, 2], 20],[[2, 1] ,20], [[1, 3, 1, 2], 30], [[1, 3, 2, 1], 30]]
for t in tests
vec, n = t[1], t[2]
seq = kolakoski(vec, n)
println("Kolakoski from $(vec): first $n numbers are $seq.")
println("\t\tDoes this look like a Kolakoski sequence? ", iskolakoski(seq) ? "Yes" : "No")
end