Skip to content

Instantly share code, notes, and snippets.

@AnthonyMikh
AnthonyMikh / bin_coeff.rs
Last active April 27, 2018 11:06
Решение задачи №88 от UniLecs
mod bin_coeff {
#![deny(overflowing_literals)]
use ::std::collections::HashMap;
pub type Res = u64;
pub const BOUND: Res = Res::max_value();
const _MIN_OVERFLOWING_LINE: Res = 67;
const FIRST_ALWAYS_OVERFLOWING_POS: Res = 33;
@AnthonyMikh
AnthonyMikh / garden_bed_of_beetroot.rs
Last active May 3, 2018 16:25
Решение задачи №90 от UniLecs
type FieldLen = u32;
#[deny(overflowing_literals)]
//Ограничение на максимальную длину входных данных
const FIELD_BOUND: FieldLen = 5_000 - 1;
#[derive(Debug, PartialEq)]
enum SideDir { //Возможные направления стороны поля
NS, //С севера на юг (north-south)
WE, //С запада на восток (west-east)
@AnthonyMikh
AnthonyMikh / time_to_sell_tickets.rs
Last active May 14, 2018 20:09
Решение задачи №93 от UniLecs
type Duration = u32;
type DurationTriple = (Duration, Duration, Duration);
const TIME_BOUND: Duration = 1_000;
const LEN_BOUND: usize = 1_000;
#[derive(Clone)]
struct SellTimes {
one: Duration,
two: Duration,
@AnthonyMikh
AnthonyMikh / the_cake_is_a_lie.rs
Created May 16, 2018 20:34
Решение задачи №94 от UniLecs
type People = u32;
type Parts = People;
fn min_pie_parts(guests: People, old_friends: People) -> Parts {
fn gcd(a: People, b: People) -> People {
if a < b { gcd(b, a) }
else if b == 0 { a }
else { gcd(b, a % b) }
}
@AnthonyMikh
AnthonyMikh / bitten_inside_cake.rs
Last active May 22, 2018 11:34
Решение задачи №95 от UniLecs (без обработки ошибок)
//Для удобства, чтобы мерить площадь в долях пи, а не напрямую
//в квадратных единицах
#[derive(Debug, PartialEq)]
struct PiFractions(f64);
impl ::std::convert::Into<f64> for PiFractions {
fn into(self) -> f64 {
self.0 * ::std::f64::consts::PI
}
}
@AnthonyMikh
AnthonyMikh / another_one_bites_the_pie.rs
Created May 19, 2018 20:29
Решение задачи №95 от UniLecs с обработкой ошибок
//Вспомогательный тип для удобства измерения площади
//(в единицах [длина ^ 2] / π)
#[derive(Debug, PartialEq)]
struct PiFractions(f64);
//Сконвертировать PiFracions в нормальное число
impl ::std::convert::Into<f64> for PiFractions {
fn into(self) -> f64 {
self.0 * ::std::f64::consts::PI
}
@AnthonyMikh
AnthonyMikh / place_in_lineup.rs
Created May 25, 2018 21:18
Решение задачи №97 от UniLecs (Место в строю)
type Height = u8;
//Ищет индекс lineup, по которому можно разместить person,
//не нарушая упорядочения по убыванию.
//В случае, если в слайсе несколько элементов подряд,
//равных person, возвращается индекс после последнего элемента группы.
//ВНИМАНИЕ: проверка на то, что слайс действительно является
//упорядоченным, не производится
fn index_in_lineup(lineup: &[Height], person: Height) -> usize {
//Ищем person бинарным поиском (учитывая, что
@AnthonyMikh
AnthonyMikh / puzzling_sort.rs
Last active June 2, 2018 20:18
Решение задачи №99 от UniLecs (непростая сортировка)
use std::borrow::Borrow;
use std::cmp::Ordering;
fn num_part_compare(a: &[u8], b: &[u8]) -> Ordering {
let a_b = a.iter().chain(b.iter());
let b_a = b.iter().chain(a.iter());
for (x, y) in a_b.zip(b_a) {
match x.cmp(y) {
Ordering::Equal => (),
@AnthonyMikh
AnthonyMikh / vegetable_slicing.rs
Last active June 10, 2018 11:18
Решение задачи №100 от UniLecs (Овощная нарезка)
extern crate num;
type Input = u32;
mod gcd_memo {
use super::Input;
use std::collections::HashMap;
type GcdAcc = HashMap<(Input, Input), Input>;
pub struct GcdMemo(GcdAcc);
@AnthonyMikh
AnthonyMikh / main.rs
Created June 12, 2018 14:44
Решение задачи №101 от UniLecs (Мажоритарный элемент массива)
fn majority(arr: &[f64]) -> Option<f64> {
use std::collections::HashMap;
let threshold = arr.len() / 2;
let mut occurs = HashMap::new();
for &f in arr {
//f64 не хэшируется, в отличие от
//битового представления u64
let fbits = f.to_bits();