История изменений
Исправление 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