Hailstone Sequences

Getting Started

After following the “Get Started + Install” guide;

library(collatz)
# Optionally
library(gmp)

hailstone_sequence

Compute a hailstone sequence, which defaults to the total stopping time;

hailstone_sequence(5)
#> $values
#> $values[[1]]
#> [1] 5
#> 
#> $values[[2]]
#> [1] 16
#> 
#> $values[[3]]
#> [1] 8
#> 
#> $values[[4]]
#> [1] 4
#> 
#> $values[[5]]
#> [1] 2
#> 
#> $values[[6]]
#> [1] 1
#> 
#> 
#> $terminalCondition
#> [1] "TOTAL_STOPPING_TIME"
#> 
#> $terminalStatus
#> [1] 5

Or only compute down to the regular stopping time;

hailstone_sequence(5, total_stopping_time=FALSE)
#> $values
#> $values[[1]]
#> [1] 5
#> 
#> $values[[2]]
#> [1] 16
#> 
#> $values[[3]]
#> [1] 8
#> 
#> $values[[4]]
#> [1] 4
#> 
#> 
#> $terminalCondition
#> [1] "STOPPING_TIME"
#> 
#> $terminalStatus
#> [1] 3

Remove verbose messaging;

hailstone_sequence(5, verbose=FALSE)
#> [[1]]
#> [1] 5
#> 
#> [[2]]
#> [1] 16
#> 
#> [[3]]
#> [1] 8
#> 
#> [[4]]
#> [1] 4
#> 
#> [[5]]
#> [1] 2
#> 
#> [[6]]
#> [1] 1

It will also stop on finding a cycle;

hailstone_sequence(-56)
#> $values
#> $values[[1]]
#> [1] -56
#> 
#> $values[[2]]
#> [1] -28
#> 
#> $values[[3]]
#> [1] -14
#> 
#> $values[[4]]
#> [1] -7
#> 
#> $values[[5]]
#> [1] -20
#> 
#> $values[[6]]
#> [1] -10
#> 
#> $values[[7]]
#> [1] -5
#> 
#> $values[[8]]
#> [1] -14
#> 
#> 
#> $terminalCondition
#> [1] "CYCLE_LENGTH"
#> 
#> $terminalStatus
#> [1] 5

And can be parameterised;

hailstone_sequence(3, -1, 3, 1)
#> $values
#> $values[[1]]
#> [1] 3
#> 
#> $values[[2]]
#> [1] -3
#> 
#> $values[[3]]
#> [1] 3
#> 
#> 
#> $terminalCondition
#> [1] "CYCLE_LENGTH"
#> 
#> $terminalStatus
#> [1] 2