2021-04-19 05:02:46 +02:00
|
|
|
|
use std::{
|
|
|
|
|
fs::File,
|
|
|
|
|
io::{Read, Write},
|
2021-11-19 12:19:52 +01:00
|
|
|
|
os::unix::io::FromRawFd,
|
2021-04-19 05:02:46 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
fn fib(n: u64) -> u64 {
|
|
|
|
|
let mut y = 0;
|
|
|
|
|
let mut y1 = 1;
|
|
|
|
|
let mut y2 = 0;
|
|
|
|
|
|
2021-11-19 12:19:52 +01:00
|
|
|
|
for _ in 0..n {
|
2021-04-19 05:02:46 +02:00
|
|
|
|
y = y1 + y2;
|
|
|
|
|
y2 = y1;
|
|
|
|
|
y1 = y;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
y
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
|
nested::magic_header();
|
|
|
|
|
|
|
|
|
|
eprintln!(" Fibonacci Sequence");
|
|
|
|
|
|
|
|
|
|
nested::magic_header();
|
|
|
|
|
|
2021-11-19 12:19:52 +01:00
|
|
|
|
eprintln!(
|
|
|
|
|
"
|
|
|
|
|
interface (Sequence ℕ) 0 1"
|
|
|
|
|
);
|
2021-04-19 05:02:46 +02:00
|
|
|
|
|
|
|
|
|
let mut f0 = unsafe { File::from_raw_fd(0) };
|
2021-11-19 12:19:52 +01:00
|
|
|
|
eprintln!(
|
|
|
|
|
"
|
2021-05-13 16:22:30 +02:00
|
|
|
|
>0: n
|
2021-04-19 05:02:46 +02:00
|
|
|
|
( ℕ )
|
|
|
|
|
( MachineInt )
|
|
|
|
|
( MachineWord )
|
2021-05-13 16:22:30 +02:00
|
|
|
|
( Stream MachineSyllab )
|
2021-11-19 12:19:52 +01:00
|
|
|
|
"
|
|
|
|
|
);
|
2021-04-19 05:02:46 +02:00
|
|
|
|
|
|
|
|
|
let mut f1 = unsafe { File::from_raw_fd(1) };
|
2021-11-19 12:19:52 +01:00
|
|
|
|
eprintln!(
|
|
|
|
|
"
|
2021-05-13 16:22:30 +02:00
|
|
|
|
<1: n'th fibonacci number
|
2021-04-19 05:02:46 +02:00
|
|
|
|
( ℕ )
|
|
|
|
|
( MachineInt )
|
|
|
|
|
( MachineWord )
|
2021-05-13 16:22:30 +02:00
|
|
|
|
( Stream MachineSyllab )
|
2021-11-19 12:19:52 +01:00
|
|
|
|
"
|
|
|
|
|
);
|
2021-04-19 05:02:46 +02:00
|
|
|
|
|
|
|
|
|
nested::magic_header();
|
|
|
|
|
|
|
|
|
|
let mut bytes = [0 as u8; 8];
|
2021-05-13 16:22:30 +02:00
|
|
|
|
f0.read_exact(&mut bytes).expect("");
|
2021-04-19 05:02:46 +02:00
|
|
|
|
let n = u64::from_le_bytes(bytes);
|
|
|
|
|
bytes = fib(n).to_le_bytes();
|
2021-05-13 16:22:30 +02:00
|
|
|
|
f1.write(&bytes).expect("");
|
2021-04-19 05:02:46 +02:00
|
|
|
|
}
|