Kolakoski sequence: Difference between revisions

Added Perl example
(Added Perl example)
Line 36:
...
 
'''Note''' that the RLE of <code>1, 2, 2, 1, 1, ...</code> begins <code>1, 2, 2</code> whiuchwhich is the beginning of the original sequence. The generation algorithm ensures that this will always be the case.
 
;Task:
Line 753:
 
</pre>
 
=={{header|Perl}}==
{{trans|Perl 6}}
<lang perl>sub kolakoski {
my($terms,@seed) = @_;
my @k;
my $k = $seed[0] == 1 ? 1 : 0;
if ($k == 1) { @k = (1, split //, (($seed[1]) x $seed[1])) }
else { @k = ($seed[0]) x $seed[0] }
do {
$k++;
push @k, ($seed[$k % @seed]) x $k[$k];
} until $terms <= @k;
@k[0..$terms-1]
}
 
sub rle {
(my $string = join '', @_) =~ s/((.)\2*)/length $1/eg;
split '', $string
}
 
for ([20,1,2], [20,2,1], [30,1,3,1,2], [30,1,3,2,1]) {
$terms = shift @$_;
print "\n$terms members of the series generated from [@$_] is:\n";
print join(' ', @kolakoski = kolakoski($terms, @$_)) . "\n";
$status = join('', @rle = rle(@kolakoski)) eq join('', @kolakoski[0..$#rle]) ? 'True' : 'False';
print "Looks like a Kolakoski sequence?: $status\n";
}</lang>
{{out}}
<pre>20 members of the series generated from [1 2] is:
1 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1
Looks like a Kolakoski sequence?: True
 
20 members of the series generated from [2 1] is:
2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1 2
Looks like a Kolakoski sequence?: True
 
30 members of the series generated from [1 3 1 2] is:
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
Looks like a Kolakoski sequence?: True
 
30 members of the series generated from [1 3 2 1] is:
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
Looks like a Kolakoski sequence?: False</pre>
 
=={{header|Perl 6}}==
2,392

edits