Skip to content

Instantly share code, notes, and snippets.

@the-sofi-uwu
Last active February 20, 2021 12:35
Show Gist options
  • Save the-sofi-uwu/41ad09bf33be6284d50ab8d06e0ae6be to your computer and use it in GitHub Desktop.
Save the-sofi-uwu/41ad09bf33be6284d50ab8d06e0ae6be to your computer and use it in GitHub Desktop.
Algoritmo seqqbe do louco do Nosomy com unsafe por causa do maldito bound checking
// 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