Программы на Rust компилируются на сервере с помощью Rust 1.75.0 x64. Компилятор запускается со следующими опциями:
rustc -O --edition 2021 %1
Вы можете скачать компилятор на официальном сайте.
Примеры решения задач
Пример решения задачи 1000. A + B problem на Rust:
use std::io;
fn main() {
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.unwrap();
let mut s = input.trim().split(' ');
let a_str = s.next().unwrap();
let a: i32 = a_str.parse().unwrap();
let b_str = s.next().unwrap();
let b: i32 = b_str.parse().unwrap();
println!("{}", a + b);
}
Более продвинутое и эффективное решение этой же задачи:
use std::io;
fn main() {
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("correct input");
let res = input.trim()
.split(' ')
.map(|a| a.parse::<i32>())
.map(|a| a.expect("parsed integer"))
.fold(0i32, |sum, a| sum + a);
println!("{}", res);
}
Пример решения задачи 1001. Обратный корень на Rust:
use std::io;
use std::io::prelude::*;
fn main() {
let mut v: Vec<i64> = Vec::new();
let stdin = io::stdin();
for t in stdin.lock().lines() {
let cur_line = t.unwrap();
for u in cur_line.split(' ') {
let cur_txt = u.trim();
if cur_txt.len() > 0 {
let cur_num: i64 = cur_txt.parse().unwrap();
v.push(cur_num);
}
}
}
let mut i = v.len();
while i > 0 {
i -= 1;
let f_num = v[i] as f64;
println!("{:.*}", 4, f_num.sqrt());
}
}
Более продвинутое и эффективное решение этой же задачи:
use std::io::{self, BufReader};
use std::io::prelude::*;
fn solve(input: &mut Read, output: &mut Write) {
let reader = BufReader::new(input);
let mut v: Vec<i64> = Vec::new();
for t in reader.lines()
.map(|a| a.expect("correct input")) {
for u in t.split(' ')
.map(|a| a.trim())
.filter(|a| a.len() > 0)
.map(|a| a.parse::<i64>().expect("parsed integer")) {
v.push(u);
}
}
for u in v.into_iter().rev().map(|a| a as f64) {
writeln!(output, "{:.*}", 4, u.sqrt()).expect("valid output");
}
}
fn main() {
solve(&mut io::stdin(), &mut io::stdout());
}
Tests
Rust имеет встроенную систему модульного тестирования. Тестовая секция определяется специальным атрибутом #[test]
. Она будет скомпилирована только если задана специальная опция:
rustc --test main.rs
Пример чтения тестовых данных из файла (для решения задачи 1001 выше):
fn solve(input: &mut Read, output: &mut Write) {
...
}
fn main() {
solve(&mut io::stdin(), &mut io::stdout());
}
#[cfg(test)]
mod tests {
use std::fs::File;
use solve;
#[test]
fn basic_test() {
let mut f = File::open("test1.txt").expect("correct test");
let mut buf: Vec<u8> = Vec::new();
solve(&mut f, &mut buf);
let res = String::from_utf8(buf).expect("valid string");
assert_eq!(res,
"2297.0716
936297014.1164
0.0000
37.7757
");
}
}
Прежние компиляторы
- Компилятор Rust 1.9.0 x86 использовался до 12 апреля 2018 года.
- Компилятор Rust 1.25.0 x86 использовался до 1 сентября 2020 года.
- Компилятор Rust 1.45.0 x64 использовался до 22 января 2022 года.
- Компилятор Rust 1.58.1 x64 использовался до 22 января 2024 года.