diff options
author | Braxton Hall | 2022-10-25 06:14:28 +0000 |
---|---|---|
committer | GitHub | 2022-10-25 06:14:28 +0000 |
commit | 4a1bbcf2af6ff77bdbab0d9744453949e95b6b9b (patch) | |
tree | d3a998399e3a2487f62c5488f0a9303d534b5695 /entries/lilylin/fractran/src/core.rs | |
parent | bd57417ffbfbb4c8cce53465835ddc9bdfa86dc9 (diff) | |
parent | bea8092ecca8f4bf61a4df88c06f4eeb61ab3a56 (diff) |
Merge pull request #37 from rctcwyvrn/lily
Lily's entries
Diffstat (limited to 'entries/lilylin/fractran/src/core.rs')
-rw-r--r-- | entries/lilylin/fractran/src/core.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/entries/lilylin/fractran/src/core.rs b/entries/lilylin/fractran/src/core.rs new file mode 100644 index 0000000..26e1a67 --- /dev/null +++ b/entries/lilylin/fractran/src/core.rs @@ -0,0 +1,44 @@ +use num_traits::Pow; + +pub type FracSize = u16; + +#[derive(Debug)] +pub struct Program { + pub fractions: Vec<(FracSize, FracSize)>, + pub initial: u64, +} + +impl Program { + // http://lomont.org/posts/2017/fractran/ + // A lesser known Conway FRACTRAN program is FIBONACCIGAME: + // `{17/65, 133/34, 17/19, 23/17, 2233/69, 23/29, 31/23, 74/341, 31/37, 41/31, 129/287, 41/43, 13/41, 1/13, 1/3}` + // Starting with `78*5^(n-1)`, it halts on `2^Fn` where Fn is the nth [Fibonacci number] + pub fn fibonacci(i: u32) -> Program { + Program { + fractions: vec![ + (17, 65), + (133, 34), + (17, 19), + (23, 17), + (2233, 69), + (23, 29), + (31, 23), + (74, 341), + (31, 37), + (41, 31), + (129, 287), + (41, 43), + (13, 41), + (1, 13), + (1, 3), + ], + initial: 78 * 5u64.pow(i), + } + } +} + +pub trait FractranEngine<Value>: IntoIterator<Item = Value> +where + Value: From<u64>, +{ +} |