47 lines
937 B
Plaintext
47 lines
937 B
Plaintext
func recamans_generator() {
|
|
|
|
var term = 0
|
|
var prev = 0
|
|
var seen = Hash()
|
|
|
|
{
|
|
var this = (prev - term)
|
|
|
|
if ((this <= 0) || seen{this}) {
|
|
this = (prev + term)
|
|
}
|
|
|
|
prev = this
|
|
seen{this} = true
|
|
term++
|
|
this
|
|
}
|
|
}
|
|
|
|
with (recamans_generator()) { |r|
|
|
say ("First 15 terms of the Recaman's sequence: ", 15.of { r.run }.join(', '))
|
|
}
|
|
|
|
with (recamans_generator()) {|r|
|
|
var seen = Hash()
|
|
Inf.times {|i|
|
|
var n = r.run
|
|
if (seen{n}) {
|
|
say "First duplicate term in the series is a(#{i}) = #{n}"
|
|
break
|
|
}
|
|
seen{n} = true
|
|
}
|
|
}
|
|
|
|
with (recamans_generator()) {|r|
|
|
var seen = Hash()
|
|
Inf.times {|i|
|
|
var n = r.run
|
|
if ((n <= 1000) && (seen{n} := true) && (seen.len == 1001)) {
|
|
say "Terms up to a(#{i}) are needed to generate 0 to 1000"
|
|
break
|
|
}
|
|
}
|
|
}
|