Last active
February 20, 2021 12:35
-
-
Save algebraic-dev/41ad09bf33be6284d50ab8d06e0ae6be to your computer and use it in GitHub Desktop.
Algoritmo seqqbe do louco do Nosomy com unsafe por causa do maldito bound checking
This file contains hidden or 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
// Nosomy's SEQQBE Algorithm implemented in rust by Chiyoku | |
use std::env; | |
use std::io::{self, Write}; | |
use std::io::BufWriter; | |
fn out_vector(vector: &mut Vec<u8>,size: usize,stream: &mut std::io::BufWriter<std::io::StdoutLock>) -> u8{ | |
let mut counter: u8 = 0xFF; | |
for pos in 0..size{ | |
let y = unsafe { vector.get_unchecked_mut(pos) }; | |
counter = counter & *y; | |
stream.write(&[*y]); | |
} | |
return counter; | |
} | |
fn calc(size: usize){ | |
let stdout = io::stdout(); | |
let mut stdoute: std::io::StdoutLock = stdout.lock(); | |
let mut stream = BufWriter::new(stdoute); | |
let mut pos: usize = size-1; | |
let mut vector: Vec<u8> = vec![0;size]; | |
let mut inc: usize = 0; | |
let mut end: u8 = out_vector(&mut vector,size,&mut stream); | |
while end != 255 { | |
if inc == 0 { | |
let x = unsafe { vector.get_unchecked_mut(pos) }; | |
*x += 1; | |
end = out_vector(&mut vector,size,&mut stream); | |
pos = size-1; | |
let mut y = unsafe { vector.get_unchecked_mut(pos-inc) }; | |
while *y == 0xFF { | |
*y = 0; | |
inc += 1; | |
if inc > pos { break; } | |
y = unsafe { vector.get_unchecked_mut(pos-inc) }; | |
} | |
} else { | |
pos -= inc; | |
inc ^= inc; | |
} | |
} | |
stream.flush().unwrap(); | |
} | |
fn main() { | |
let args: Vec<String> = env::args().collect(); | |
if args.len() > 1 { | |
let size = args[1].parse::<usize>(); | |
match size { | |
Ok(x) => { | |
calc(x); | |
}, | |
Err(_) => { | |
println!("Insira um numero valido!"); | |
} | |
} | |
} else{ | |
println!("Insert a value for n ( It will generate N*256^N Bytes ) "); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment