Fortune for reverse's current commit: Middle blessing − 中吉master
commit
47df7a1e91
@ -0,0 +1 @@
|
||||
/target
|
@ -0,0 +1,7 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "reverse"
|
||||
version = "0.2.0"
|
@ -0,0 +1,24 @@
|
||||
[package]
|
||||
name = "reverse"
|
||||
version = "0.2.0"
|
||||
authors = ["Avril <flanchan@cumallover.me>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[features]
|
||||
default = ["output-lines"]
|
||||
|
||||
# Output as lines instead of `["2", "1", "0"]`
|
||||
output-lines = []
|
||||
|
||||
# Print each string escaped
|
||||
output-quoted = []
|
||||
|
||||
[profile.release]
|
||||
opt-level = 3
|
||||
lto = "fat"
|
||||
codegen-units = 1
|
||||
strip=true
|
||||
|
||||
[dependencies]
|
@ -0,0 +1,5 @@
|
||||
|
||||
|
||||
reverse:
|
||||
RUSTFLAGS="-C target-cpu=native" cargo build --release
|
||||
strip target/release/$@
|
@ -0,0 +1,44 @@
|
||||
|
||||
//#[inline]
|
||||
fn reverse<T>(slice: &mut [T])
|
||||
{
|
||||
match slice {
|
||||
[ref mut a, ref mut rest @ .., ref mut b] => {
|
||||
std::mem::swap(a, b);
|
||||
reverse(rest)
|
||||
},
|
||||
[] | [_] => (),
|
||||
}
|
||||
}
|
||||
|
||||
/// This actually works! And is so easily parallelisable with something like rayon, or asyncing by spawning/creating the tail-call into a new task, then either waiting them concurrently or in parallen (spawn or created future from just calling the function without awaiting it)
|
||||
#[allow(dead_code)]
|
||||
fn binsearch<'a, V: ?Sized, T: PartialEq<V> + 'a>(slice: &'a [T], find: &V) -> Option<&'a T>
|
||||
{
|
||||
match slice {
|
||||
[ref a, pivot @ .., ref b] => {
|
||||
match (a==find, b==find) {
|
||||
(true, _) => Some(a),
|
||||
(_, true) => Some(b),
|
||||
_ => binsearch(pivot, find),
|
||||
}
|
||||
},
|
||||
[ref a] if a == find => Some(a),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut args: Vec<String> = std::env::args().skip(1).collect();
|
||||
reverse(&mut args[..]);
|
||||
//eprintln!("{:?}", binsearch(&args[..], "1")); // It works!
|
||||
#[cfg(feature="output-lines")]
|
||||
{
|
||||
for x in args.iter() {
|
||||
#[cfg(feature="output-quoted")] println!("{:?}", x);
|
||||
#[cfg(not(feature="output-quoted"))] println!("{}", x);
|
||||
}
|
||||
}
|
||||
#[cfg(not(feature="output-lines"))]
|
||||
println!("{:?}", args);
|
||||
}
|
Loading…
Reference in new issue