Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::collections::BTreeMap;
- use std::ops::Bound::Included;
- fn main () {
- test();
- }
- fn test() {
- let mut bt: BTreeMap<u128, u128> = BTreeMap::new();
- let mut a: u128 = 0;
- let div: u128 = 8;
- for x in 0..100_u128 {
- for y in 0..100_u128 {
- let zey = zeeify(x*div, y*div);
- a += 1;
- bt.insert(zey, a);
- }
- }
- let xs: u128 = 46;
- let ys: u128 = 46;
- let test: u128 = zeeify(xs, ys);
- let mut min: u128 = 1000000;
- let mut closest: (u128, u128) = (0,0);
- for r in 0..div {
- let yss = (ys-div/2) + r;
- let xss = xs-div/2;
- let minzee = zeeify(xss, yss);
- let maxzee = zeeify(xss+div, yss);
- for v in bt.range( (Included(minzee), Included(maxzee)) ) {
- println!("{:?}", v);
- if min > abs_u128(*v.0, test) {
- min = abs_u128(*v.0, test);
- closest.0 = *v.0;
- closest.1 = *v.1;
- }
- }
- }
- println!("{:?} {:?} {:?}", min, closest, test);
- }
- fn abs_u128(a: u128, b: u128) -> u128 {
- if a > b {a - b} else { b-a }
- }
- fn zee_neighbors(zee: u128, div: u128) -> [u128; 4] {
- let a: u128 = 0b10101010101010101010101010101010;
- let b: u128 = 0b01010101010101010101010101010101;
- let t: u128 = (((zee & a) - div) & a) | (zee & b);
- let b: u128 = (((zee & b) + div) & a) | (zee & b);
- let l: u128 = (((zee & b) - div) & b) | (zee & a);
- let r: u128 = (((zee & a) + div) & b) | (zee & a);
- [t,b,l,r]
- }
- fn zeeify(a: u128, b: u128) -> u128 {
- let mut f: u128 = 0;
- for i in 0..16 {
- f |= ((a & 1<<i) << i) | ((b & 1<<i) << (i+1));
- //println!("{:b} {:b} | {:b} {:b} | {:b}", a, a&1<<i, b, b&1<<i, f);
- }
- f
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement