LINUX.ORG.RU

История изменений

Исправление zurg, (текущая версия) :

уложится в 25 строк для интерпретируемых и 50 строк для компилируемых

вызов принят )

 fn main() {
    let target = 200;
    let digs: Vec<char> = "9876543210".chars().collect();
    let ops = ["", " +", " -"];
    let mut expr = "".to_string();
    let mut inds = [0; 10];
    for i in 0..3usize.pow(9u32) {
        tern_inds(&mut inds, i);
        for pi in 0..inds.len() {
            expr.push(digs[pi]);
            expr.push_str(ops[inds[pi]]);
        }
        if target == expr.split_whitespace().map(|s| s.parse::<i64>().unwrap()).sum::<i64>() {
            println!("{}={target}", expr.replace(' ', ""));
        }
        expr.clear();
    }
}
fn tern_inds(ps: &mut [usize], iter: usize) {
    let mut q = iter;
    for p in ps { 
        (q, *p) = (q / 3, q % 3);
    }
}
Benchmark 1: ./target/release/lortst
  Time (mean ± σ):       7.6 ms ±   2.9 ms    [User: 6.1 ms, System: 1.3 ms]
  Range (min … max):     3.6 ms …  13.2 ms    500 runs

24 строки, правда язык компилируемый, и в 3 раза медленней чем первый вариант, а тот сишный памятник человеческому упорству что выше по треду - 67 мс на моём компьютере и это с O3 O_O

Исправление zurg, :

уложится в 25 строк для интерпретируемых и 50 строк для компилируемых

вызов принят )

 fn main() {
    let target = 200;
    let digs: Vec<char> = "9876543210".chars().collect();
    let ops = ["", " +", " -"];
    let mut expr = "".to_string();
    let mut inds = [0; 10];
    for i in 0..3usize.pow(9u32) {
        tern_inds(&mut inds, i);
        for pi in 0..inds.len() {
            expr.push(digs[pi]);
            expr.push_str(ops[inds[pi]]);
        }
        if target == expr.split_whitespace().map(|s| s.parse::<i64>().unwrap()).sum::<i64>() {
            println!("{}={target}", expr.replace(' ', ""));
        }
        expr.clear();
    }
}
fn tern_inds(ps: &mut [usize], iter: usize) {
    let mut q = iter;
    for p in ps { 
        (q, *p) = (q / 3, q % 3);
    }
}

Benchmark 1: ./target/release/lortst Time (mean ± σ): 7.6 ms ± 2.9 ms [User: 6.1 ms, System: 1.3 ms] Range (min … max): 3.6 ms … 13.2 ms 500 runs


24 строки, правда язык компилируемый, и в 3 раза медленней чем первый вариант,
а тот  сишный памятник человеческому упорству что выше по треду -  67 мс на моём компьютере и это с O3 O_O

Исправление zurg, :

уложится в 25 строк для интерпретируемых и 50 строк для компилируемых

вызов принят )

 fn main() {
    let target = 200;
    let digs: Vec<char> = "9876543210".chars().collect();
    let ops = ["", " +", " -"];
    let mut expr = "".to_string();
    let mut inds = [0; 10];
    for i in 0..3usize.pow(9u32) {
        tern_inds(&mut inds, i);
        for pi in 0..inds.len() {
            expr.push(digs[pi]);
            expr.push_str(ops[inds[pi]]);
        }
        if target == expr.split_whitespace().map(|s| s.parse::<i64>().unwrap()).sum::<i64>() {
            println!("{}={target}", expr.replace(' ', ""));
        }
        expr.clear();
    }
}
fn tern_inds(ps: &mut [usize], iter: usize) {
    let mut q = iter;
    for p in ps { 
        (q, *p) = (q / 3, q % 3);
    }
}

Benchmark 1: ./target/release/lortst Time (mean ± σ): 7.6 ms ± 2.9 ms [User: 6.1 ms, System: 1.3 ms] Range (min … max): 3.6 ms … 13.2 ms 500 runs


24 строки, правда язык компилируемый, и в 3 раза медленней чем первый вариант,
а тот  сишный памятник человеческому упорству что выше по треду -  67 мс на моём компьютере и это с O3 O_O

Исходная версия zurg, :

уложится в 25 строк для интерпретируемых и 50 строк для компилируемых

вызов принят )

 fn main() {
    let target = 200;
    let digs: Vec<char> = "9876543210".chars().collect();
    let ops = ["", " +", " -"];
    let mut expr = "".to_string();
    let mut inds = [0; 10];
    for i in 0..3usize.pow(9u32) {
        tern_inds(&mut inds, i);
        for pi in 0..inds.len() {
            expr.push(digs[pi]);
            expr.push_str(ops[inds[pi]]);
        }
        if target == expr.split_whitespace().map(|s| s.parse::<i64>().unwrap()).sum::<i64>() {
            println!("{}={target}", expr.replace(' ', ""));
        }
        expr.clear();
    }
}
fn tern_inds(ps: &mut [usize], iter: usize) {
    let mut q = iter;
    for p in ps { 
        (q, *p) = (q / 3, q % 3);
    }
}

Benchmark 1: ./target/release/lortst Time (mean ± σ): 7.6 ms ± 2.9 ms [User: 6.1 ms, System: 1.3 ms] Range (min … max): 3.6 ms … 13.2 ms 500 runs


24 строки, правда язык компилируемый, и в 3 раза медленней чем первый вариант,
а тот  сишный памятник человеческому упорству что выше по треду -  67 мс на моём компьютере и это с O3 O_O