Skip to content

Instantly share code, notes, and snippets.

@AnthonyMikh
AnthonyMikh / modpower2.rs
Last active February 22, 2018 14:15
Решение задачи №72 от UniLecs (вариант с итератором по битам)
//Тип, по которому строится битовый итератор
type BitBase = u64;
//Чтобы избежать случайной модификации,
//выносим итератор в отдельный модуль
mod bit_iter {
//Импортируем тип из вышележащего модуля
use super::BitBase;
//Структура итератора по битам
@AnthonyMikh
AnthonyMikh / noThreeOnes.hs
Created February 23, 2018 17:52
Решение задачи №73 от UniLecs
tribonacci = 0:0:1:zipWith3 (\x y z -> x+y+z) tribonacci (tail tribonacci) (drop 2 tribonacci)
solutions = 0:drop 4 tribonacci
solution = (solutions !!)
main = print . solution $ 4 -- 13
@AnthonyMikh
AnthonyMikh / proper_fractions.rs
Last active February 28, 2018 11:12
Решение задачи №74 от UniLecs
//Тип входных данных
type Base = u32;
//Возвращает НОД аргументов.
//Если один аргумент нулевой, возвращает другой
fn gcd(a: Base, b: Base) -> Base {
if a < b { gcd(b, a) }
else if b == 0 { a }
else { gcd(b, a % b) }
}
@AnthonyMikh
AnthonyMikh / tumblers.rs
Last active March 5, 2018 09:21
Решение задачи №75 от UniLecs
#[derive(Debug, PartialEq)]
enum TumblerError { //Тип ошибки.
StepIsTooLarge, //Номер шага больше MAX_BOUND
ZeroStep, //Номер шага равен нулю (нулевого тумблера нет)
}
type Step = u32;
type FloatBase = f64;
#[deny(overflowing_literals)]
@AnthonyMikh
AnthonyMikh / least_not_in_seq.rs
Created March 6, 2018 12:35
Решение задачи №76 от UniLecs
type Number = u32; //Тип элементов массива
#[deny(overflowing_literals)]
const MAX_BOUND: Number = 10_000; //Ограничение на входные данные
#[derive(Debug, PartialEq)]
enum LeastNotInSeqErr { //Тип ошибок при решении задачи
OutOfBoundAt(usize), //Элемент с указанным индексом больше MAX_BOUND
ContainsZeroAt(usize), //Элемент с указанным индексом равен нулю
}
@AnthonyMikh
AnthonyMikh / tetragon_area.rs
Created March 9, 2018 17:58
Решение задачи №77 от UniLecs
type Float = f64; //Тип значения площади
type Side = u32; //Тип стороны
//Проверяет, удолетворяет ли тройка значений неравенствам треугольника
fn valid_triangle (a: Side, b: Side, c: Side) -> bool {
a + b > c &&
b + c > a &&
c + a > b
}
@AnthonyMikh
AnthonyMikh / digital_root.rs
Last active March 13, 2018 14:40
Решение задачи №78 от UniLecs (Цифровой корень числа)
fn digital_root(n: u32) -> u32 {
if n == 0 { return 0; }
let modulus = n % 9;
if modulus == 0 { 9 } else { modulus }
}
fn main() {
#![deny(overflowing_literals)]
assert_eq!(digital_root(65536), 7);
@AnthonyMikh
AnthonyMikh / max_rect.rs
Last active March 17, 2018 19:20
Решение задачи №79 от UniLecs
type Bar = u32; //Тип столбцов гистограммы
type RectArea = u64; //Тип площади прямоугольников
fn max_rect(bar_chart: &[Bar]) -> RectArea {
use std::collections::BTreeSet;
use std::iter::FromIterator;
//Собираем все высоты, присутствующие в гистограмме
let heights = BTreeSet::from_iter(bar_chart.iter().cloned());
@AnthonyMikh
AnthonyMikh / water_volume.rs
Last active March 20, 2018 14:43
Решение задачи №15 от UniLecs
type Bar = u32; //Тип столбца гистограммы
//Вспомогательная функция -- вывод гистограммы на печать
fn print_bar_chart(chart: &[Bar]) {
//Находим максимальную высоту столбцов
let max_height = chart.iter().map(|&x| x).fold(0, |acc, x| acc.max(x));
//Для каждого значения от максимальной высоты до 1 включительно
for height in (0..max_height).map(|x| x + 1).rev() {
//и каждой колонки гистограммы
@AnthonyMikh
AnthonyMikh / can_be_path_in_bst.rs
Last active March 22, 2018 15:29
Решение задачи №80 от UniLecs
//Включить использование паттернов для слайсов.
//На текущий момент (20 марта 2018) эта фича доступна
//только на ночной версии компилятора
#![feature(slice_patterns)]
//Тип элементов в проверяемом массиве
type Elem = i64;
//Проверяет, находятся ли все элементы arr в одном и том же
//отношении порядка (т. е. все больше, все меньше или все равны)