Някой цъка ли АоС 2020 ?
0 1
Някой цъка ли АоС 2020 ?
Силно съм разочарован от вас ::(
Дори не съм чувал за това. Ако почувствам желание да се състезавам с някого, ще се регистрирам да бягам маратон. :)
П.П. На leaderboard-a ли си? :)
Да, 8⭐ вече.. но до тук нещата са като за първи клас :)
хаха, не , там са някакви откачалки и сами доста над нивото.
Примерно за ден 1 има някакъв с решение направено за 35 секунди, аз за толкова не мога да прочета решението лол, а той го е прочел, взел е входните данни, написал е решение, ръннал го е и е събмитнал резултата :Д Та конкуренцията за leaderboard-a e брутална
Имаше някакви графики за колко време са предадени първите 100 решения през годините. По-натам ще се появят и по-сложни. Мен ме кефи, че от всички ръст решения които пробвах, мойто ръннва най-бързо :Д
А и е чудесен вариант да научиш нещо ново :) Примерно да се запознаеш с нов език, библиотека, етц. Примерно част 2 можеше да се направи на yacc/bizon/antlr вместо регулярни изрази. Аз например си написах парсър с една библиотечка за писане на парсъри - от много време исках да я разъкам, но нямаше върху какво :)
the one and only но би ми било интересно да разцъкам и lalrpop> nom
Днешната задача беше по-лесна :(
the one and only
> nomно би ми било интересно да разцъкам и lalrpop
Изглеждат интересни, тенкс
После аз съм имал много свободно време...
После аз съм имал много свободно време...
За сега са лесни и се правят много бързо. Днешната задачка, даже беше по-лесна от вчерашната
Е хубаво де ама нали целта не е да решаваш лесните, а когато стигнеш до трудните ще ти трябва много време.
Днешната беше доста лесна, но се появиха и много гениални решения, примерно ако някой може да ми обясни как работи;
use std::time::Instant;
fn main() { let input = include_bytes!("../../input.txt");
let start = Instant::now();
let mut seat = 0; let (mut min_seat, mut max_seat) = (usize::max_value(), usize::min_value()); let mut checksum = 0;
for &opcode in input.iter() { match opcode { b'\n' => { seat = seat >> 1; shr because of the last, unnecessary shl min_seat = min_seat.min(seat); max_seat = max_seat.max(seat); checksum ^= seat; seat = 0; }
b'B' => { seat |= 1; }
b'R' => { seat |= 1; }
_ => { noop } }
seat = seat << 1; }
for x in 0..min_seat { checksum ^= x; }
for x in max_seat + 1..1024 { checksum ^= x; }
let duration = start.elapsed();
println!("Elapsed: {} us", duration.as_micros()); println!("Result: {}", checksum); }
Това с XOR-a е ясно, но другата магия за изчисляване на ИДто как става :Д
Днешната беше доста лесна, но се появиха и много гениални решения, примерно ако някой може да ми обясни как работи;
use std::time::Instant;
fn main() {
let input = include_bytes!("../../input.txt");
let start = Instant::now();
let mut seat = 0;
let (mut min_seat, mut max_seat) = (usize::max_value(), usize::min_value());
let mut checksum = 0;
for &opcode in input.iter() {
match opcode {
b'\n' => {
seat = seat >> 1; //shr because of the last, unnecessary shl
min_seat = min_seat.min(seat);
max_seat = max_seat.max(seat);
checksum ^= seat;
seat = 0;
}
b'B' => {
seat |= 1;
}
b'R' => {
seat |= 1;
}
_ => {
//noop
}
}
seat = seat << 1;
}
for x in 0..min_seat {
checksum ^= x;
}
for x in max_seat + 1..1024 {
checksum ^= x;
}
let duration = start.elapsed();
println!("Elapsed: {} us", duration.as_micros());
println!("Result: {}", checksum);
}
Това с XOR-a е ясно, но другата магия за изчисляване на ИДто как става :Д
ПП: нещо се насра форматирането
Чувствам се тъм - един е написал като логика същото решение като моето, но ползва итератори вместо цикъл и неговото е 50 пъти по-бързо от моето . Rustc is magic
вероятно рунтиме чекове или нещо такова, итератора сигурно няма
вероятно рунтиме чекове или нещо такова, итератора сигурно няма
Хванах си го - имах един debug prinltn :) като го махнах почна да минава за 30 микросекунди срещо 90 за итераторите:)
Днешното беше гадно, мразя да се занимавам с графи (графове ?) :(
0 1