use criterion::{criterion_group, criterion_main, Criterion};
use rand::Rng;
use std::{
hint::black_box,
time::{Duration, Instant},
};
fn count_odds(data: &[u8], even: &mut Vec<u8>, odd: &mut Vec<u8>) -> (usize, usize) {
let mut odd_count = 0;
let mut even_count = 0;
for i in data {
if i % 2u8 == 0u8 {
even_count += 1;
even.push(*i);
} else {
odd_count += 1;
odd.push(*i);
}
}
(even_count, odd_count)
}
fn create_test_data(size: usize) -> Vec<u8> {
let mut data = Vec::with_capacity(size);
let mut rng = rand::thread_rng();
for _ in 0..size {
let n: u8 = rng.gen();
data.push(n);
}
data
}
fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("count_odds 1M", |b| {
b.iter_custom(|iters| {
let size = 1_000_000;
let data = create_test_data(size);
let mut total = Duration::default();
for _ in 0..iters {
let mut evens = Vec::with_capacity(size);
let mut odds = Vec::with_capacity(size);
let start = Instant::now();
let _ = count_odds(
black_box(&data[..]),
black_box(&mut evens),
black_box(&mut odds),
);
total += start.elapsed();
}
total
});
});
c.bench_function("count_odds 1K", |b| {
b.iter_custom(|iters| {
let size = 1_000;
let data = create_test_data(size);
let mut total = Duration::default();
for _ in 0..iters {
let mut evens = Vec::with_capacity(size);
let mut odds = Vec::with_capacity(size);
let start = Instant::now();
let _ = count_odds(
black_box(&data[..]),
black_box(&mut evens),
black_box(&mut odds),
);
total += start.elapsed();
}
total
});
});
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);
мне это надо так как в цикле, char переводится в цифры(кодировку)
Ну или например с помощью среды разработки. По типу rfor
Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
String [][] ar = new String [2][];
ar[0] = new String[2];
ar[1] = new String[1];
ar[0][0] = "ar 0 0";
ar[0][1] = "ar 0 1";
ar[1][0] = "ar 1 0";