Created
February 26, 2020 10:03
-
-
Save MattOates/6e3704873d3ba3acf375a903597d4903 to your computer and use it in GitHub Desktop.
Some functions for exploring the Collatz graph
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from typing import Dict | |
import numpy as np | |
collatz_graph: Dict[int, int] = dict() | |
collatz_path_lengths: Dict[int, int] = dict() | |
def collatz(n: int): | |
collatz_path_lengths[n] = collatz_iter(n) | |
return collatz_path(n) | |
def collatz_path(n: int): | |
path_length = collatz_path_lengths[n] | |
path = np.zeros(path_length, dtype=np.int64) | |
n_i = n | |
path[0] = n | |
for i in range(1, path_length): | |
path[i] = collatz_graph[n_i] | |
n_i = collatz_graph[n_i] | |
return path | |
def collatz_iter(n: int): | |
if n == 1: | |
return 1 | |
n_i = collatz_graph.get(n, None) | |
if n_i is None: | |
if n % 2: | |
n_i = (3*n) + 1 | |
collatz_graph[n] = n_i | |
else: | |
n_i = n / 2 | |
collatz_graph[n] = n_i | |
return 1+collatz_iter(n_i) | |
print(collatz_graph) | |
print(collatz(97)) | |
print(collatz_graph) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment