diff --git a/math/fib/Cargo.toml b/math/fib/Cargo.toml new file mode 100644 index 0000000..7f4efbb --- /dev/null +++ b/math/fib/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "fib" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +nested = { path = "../../nested" } diff --git a/math/fib/src/main.rs b/math/fib/src/main.rs new file mode 100644 index 0000000..ac3d1bc --- /dev/null +++ b/math/fib/src/main.rs @@ -0,0 +1,58 @@ + +use std::{ + fs::File, + io::{Read, Write}, + os::unix::io::FromRawFd +}; + +fn fib(n: u64) -> u64 { + let mut y = 0; + let mut y1 = 1; + let mut y2 = 0; + + for _ in 0 .. n { + y = y1 + y2; + y2 = y1; + y1 = y; + } + + y +} + +fn main() { + nested::magic_header(); + + eprintln!(" Fibonacci Sequence"); + + nested::magic_header(); + + eprintln!(" +interface (Sequence ℕ) 0 1"); + + let mut f0 = unsafe { File::from_raw_fd(0) }; + eprintln!(" +> 0: n + ( ℕ ) + ( MachineInt ) + ( MachineWord ) + ( Pipe Shot MachineWord ) +"); + + let mut f1 = unsafe { File::from_raw_fd(1) }; + eprintln!(" +< 1: n'th fibonacci number + ( ℕ ) + ( MachineInt ) + ( MachineWord ) + ( Pipe Shot MachineWord ) +"); + + nested::magic_header(); + + let mut bytes = [0 as u8; 8]; + f0.read_exact(&mut bytes); + let n = u64::from_le_bytes(bytes); + bytes = fib(n).to_le_bytes(); + f1.write(&bytes); +} + diff --git a/math/int2str/Cargo.toml b/math/int2str/Cargo.toml new file mode 100644 index 0000000..cdac039 --- /dev/null +++ b/math/int2str/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "int2str" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +nested = { path = "../../nested" } diff --git a/math/int2str/src/main.rs b/math/int2str/src/main.rs new file mode 100644 index 0000000..db2b19a --- /dev/null +++ b/math/int2str/src/main.rs @@ -0,0 +1,38 @@ + +use std::{ + fs::File, + io::{Read, Write}, + os::unix::io::FromRawFd +}; + +fn main() { + nested::magic_header(); + eprintln!(" Human-readably Print MachineInt"); + nested::magic_header(); + + let mut f0 = unsafe { File::from_raw_fd(0) }; + eprintln!(" +> 0: + ( ℕ ) + ( MachineInt ) + ( MachineWord ) + ( Array 8 MachineSlab ) + ( Pipe Shot (Array 8 MachineSlab) ) +"); + + eprintln!(" +< 1: + ( ℕ ) + ( Sequence (Digit 10) ) + ( Sequence ASCII ) + ( Sequence MachineSlab ) + ( Pipe Shot (Sequence MachineSlab) ) +"); + + nested::magic_header(); + + let mut bytes = [0 as u8; 8]; + f0.read_exact(&mut bytes); + println!("{}", u64::from_le_bytes(bytes)); +} + diff --git a/math/str2int/Cargo.toml b/math/str2int/Cargo.toml new file mode 100644 index 0000000..b85bed6 --- /dev/null +++ b/math/str2int/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "str2int" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +nested = { path = "../../nested" } diff --git a/math/str2int/src/main.rs b/math/str2int/src/main.rs new file mode 100644 index 0000000..596004c --- /dev/null +++ b/math/str2int/src/main.rs @@ -0,0 +1,40 @@ + +use std::{ + fs::File, + io::{Read, Write}, + os::unix::io::FromRawFd +}; + +fn main() { + nested::magic_header(); + eprintln!(" Parse MachineInt from String"); + nested::magic_header(); + + let mut f0 = unsafe { File::from_raw_fd(0) }; + eprintln!(" +> 0: + ( ℕ ) + ( Sequence (Digit 10) ) + ( Sequence ASCII ) + ( Sequence MachineSlab ) + ( Pipe Shot (Sequence MachineSlab) ) +"); + + let mut f1 = unsafe { File::from_raw_fd(1) }; + eprintln!(" +< 1: + ( ℕ ) + ( MachineInt ) + ( MachineWord ) + ( Array 8 MachineSlab ) + ( Pipe Shot (Array 8 MachineSlab) ) +"); + + nested::magic_header(); + + let mut chars = Vec::new(); + f0.read_to_end(&mut chars); + chars.retain(|c| (*c as char).is_numeric()); + f1.write(&u64::from_str_radix(&String::from_utf8_lossy(&chars), 10).unwrap().to_le_bytes()); +} +