33 lines
738 B
Text
33 lines
738 B
Text
let hailstone = fn(n_) {
|
|
var n = n_
|
|
let steps = [n]
|
|
loop {
|
|
if n < 2 { break steps }
|
|
n := (if n % 2 == 0 { n / 2 } else { n * 3 + 1 })
|
|
steps.push(n)
|
|
}
|
|
}
|
|
|
|
let twentySeven = hailstone(27)
|
|
print("The Hailstone sequence for 27 starts with:")
|
|
print(twentySeven.slice(0, 4))
|
|
print("and ends with:")
|
|
print(twentySeven.slice(-4))
|
|
print("and its length is:")
|
|
print(twentySeven.len())
|
|
|
|
print("Checking sequences up to 100,000")
|
|
var longest = 0
|
|
var longestLen = 0
|
|
for i in range(100000) {
|
|
let len = hailstone(i).len()
|
|
if len > longestLen {
|
|
longest := i
|
|
longestLen := len
|
|
}
|
|
if i % 10000 == 0 {print(i)}
|
|
}
|
|
print("The longest sequence under 100,000 is for:")
|
|
print(longest)
|
|
print("and has length:")
|
|
print(longestLen)
|