Kolakoski sequence: Difference between revisions

Content added Content deleted
(Add Rust implementation)
(Added Arturo implementation)
Line 103: Line 103:
Possibly kolakoski? 0B
Possibly kolakoski? 0B
</pre>
</pre>

=={{header|Arturo}}==

<lang rebol>kolakoski: function [a, length][
result: array.of: length 0
i: new 0
k: new 0

loop.forever a 'x [
result\[i]: x
if result\[k] > 1 [
loop 1..dec result\[k] 'j [
inc 'i
if i = length -> return result
result\[i]: result\[i-1]
]
]
inc 'i
if i = length -> return result
inc 'k
]
return result
]

possibleKolakoski?: function [seq][
prev: seq\0
count: new 1
rle: new []

loop 1..dec size seq 'i [
if? seq\[i] = prev -> inc 'count
else [
'rle ++ count
count: new 1
prev: seq\[i]
]
]

loop.with:'i rle 'val [
if val <> seq\[i] -> return false
]
return true
]

Seqs: [[1 2] [2 1] [1 3 1 2] [1 3 2 1]]
Lens: [20 20 30 30]

loop combine Seqs Lens 'c [
generated: kolakoski c\0 c\1
print ["First" c\1 "members of the sequence generated by" c\0 ":"]
print generated
print ["Possible Kolakoski sequence?" possibleKolakoski? generated]
print ""
]</lang>

{{out}}

<pre>First 20 members of the sequence generated by [1 2] :
1 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1
Possible Kolakoski sequence? true

First 20 members of the sequence generated by [2 1] :
2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1 2
Possible Kolakoski sequence? true

First 30 members of the sequence generated by [1 3 1 2] :
1 3 3 3 1 1 1 2 2 2 1 3 1 2 2 1 1 3 3 1 2 2 2 1 3 3 1 1 2 1
Possible Kolakoski sequence? true

First 30 members of the sequence generated by [1 3 2 1] :
1 3 3 3 2 2 2 1 1 1 1 1 3 3 2 2 1 1 3 2 1 1 1 1 3 3 3 2 2 1
Possible Kolakoski sequence? false</pre>


=={{header|C}}==
=={{header|C}}==