21 lines
580 B
Raku
21 lines
580 B
Raku
my @recamans = 0, {
|
|
state %seen;
|
|
state $term;
|
|
$term++;
|
|
my $this = $^previous - $term;
|
|
$this = $previous + $term unless ($this > 0) && !%seen{$this};
|
|
%seen{$this} = True;
|
|
$this
|
|
} … *;
|
|
|
|
put "First fifteen terms of Recaman's sequence: ", @recamans[^15];
|
|
|
|
say "First duplicate at term: a[{ @recamans.first({@recamans[^$_].Bag.values.max == 2})-1 }]";
|
|
|
|
my @seen;
|
|
my int $i = 0;
|
|
loop {
|
|
next if (my int $this = @recamans[$i++]) > 1000 or @seen[$this];
|
|
@seen[$this] = 1;
|
|
say "Range 0..1000 covered by terms up to a[{$i - 1}]" and last if ++$ == 1001;
|
|
}
|