Skip to content

Instantly share code, notes, and snippets.

@AnthonyMikh
AnthonyMikh / three_solves.rs
Created June 17, 2018 17:55
Три возможных решения для задачи №102 от UniLecs
#![deny(overflowing_literals)]
#![allow(dead_code)]
fn count_steps(target: u64) -> usize {
use std::cmp::Ordering;
if target == 0 || target == 1 {
return 0;
}
@AnthonyMikh
AnthonyMikh / mimimal_operations_count.rs
Created June 17, 2018 18:26
Решение задачи №102 от UniLecs (Минимальное количество операций)
#![deny(overflowing_literals)]
type Input = u32;
const BOUND: Input = 1_000_000;
const _ENSURE_NO_OVERFLOW: Input = BOUND * 3;
#[derive(Debug, PartialEq, Eq)]
enum CountStepsError {
Zero,
@AnthonyMikh
AnthonyMikh / cross_count.rs
Created June 20, 2018 14:14
Решение задачи №103 от UniLecs (Количество пересечений)
//Превратить в ошибку компиляции переполнение литералов
//и ошибки при вычислении констант
#![deny(overflowing_literals, const_err)]
type Points = u64;
const BOUND: Points = 1_000;
#[derive(Debug, PartialEq, Eq)]
enum Argument {
First,
@AnthonyMikh
AnthonyMikh / cats_n_rats.rs
Last active June 25, 2018 21:36
Решение задачи №104 от UniLecs (Кошки-мышки)
use std::cmp;
use std::collections::{BTreeSet, HashMap, HashSet};
type Float = f64;
// Тип вероятности -- newtype вокруг f64.
// (https://github.com/rust-unofficial/patterns/blob/master/patterns/newtype.md)
// В отличие от f64, имеет полный порядок
#[derive(Debug, Clone, Copy)]
struct Probability(Float);
@AnthonyMikh
AnthonyMikh / quarterly_estimates.rs
Created June 27, 2018 20:50
Решение задачи №105 от UniLecs (Квартальные оценки)
#![deny(overflowing_literals, const_err)]
// Возвращает Some(C(n, k))
// или None, если k > n
fn bin_coeff(n: u64, k: u64) -> Option<u64> {
let k = n.checked_sub(k)?.min(k);
let answer = (1..=n).rev()
.zip(1..=k)
.fold(1, |acc, (num, denum)| acc * num / denum);
@AnthonyMikh
AnthonyMikh / toms_and_jerry.rs
Created July 1, 2018 19:12
Решение задачи №104 от UniLecs (кошки-мышки) с пониженным содержанием шаблонного кода
extern crate petgraph;
type Float = f64;
#[derive(Debug, PartialEq, PartialOrd, Clone, Copy)]
struct Probability(Float);
#[derive(Debug, PartialEq, Eq)]
enum ProbabilityError {
Malformed,
@AnthonyMikh
AnthonyMikh / graph_check.rs
Created July 9, 2018 16:38
Решение задачи №107 от UniLecs (основы графов)
#[derive(Debug, PartialEq, Eq)]
enum GraphCheckError { /// Тип возможных ошибок при проверке графа
/// Ряд с указанным номером имеет длину, не совпадающую с количеством рядов
InvalidRow(usize),
}
fn check_if_simple_graph(adj: &[&[usize]]) -> Result<bool, GraphCheckError> {
let vertices = adj.len();
// Убеждаемся, что матрица смежности квадратная
@AnthonyMikh
AnthonyMikh / power_set.rs
Last active July 13, 2018 16:49
Решение задачи №108 от UniLecs (Теория множеств)
#![deny(overflowing_literals, exceeding_bitshifts, const_err)]
/// Булеан (множество всех подмножеств) конечного
/// множества натуральных чисел.
/// Вместо множества множеств хранит размер
/// изначального множества, по которому булеан
/// легко строится.
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
struct IntPowerSet(usize);
@AnthonyMikh
AnthonyMikh / power_set.py
Created July 13, 2018 20:00
Решение задачи №108 от UniLecs на python (Теория множеств)
import pytest
def power_set(size):
if size == 0:
raise ValueError("Size can't be zero")
if size > 10:
raise ValueError("Size is too big")
sets = [""]
@AnthonyMikh
AnthonyMikh / mid_and_avg.rs
Last active July 19, 2018 09:07
Решение задачи №109 от UniLecs (Медиана и среднее арифметическое)
#![deny(overflowing_literals, const_err)]
type Num = i32;
const LOW: Num = 1;
const HIGH: Num = 1_000_000;
#[derive(Debug, PartialEq, Eq)]
enum Argument {
First,