[INFO] cloning repository https://github.com/iamorozov/advent2024-Rust [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/iamorozov/advent2024-Rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fiamorozov%2Fadvent2024-Rust", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fiamorozov%2Fadvent2024-Rust'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 92fa0f6bdb0c724f0f8e7f371080498d3b29283f [INFO] linting iamorozov/advent2024-Rust against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fiamorozov%2Fadvent2024-Rust" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'... [INFO] [stderr] done. [INFO] removed /workspace/builds/worker-2-tc1/source/.cargo/config.toml [INFO] started tweaking git repo https://github.com/iamorozov/advent2024-Rust [INFO] finished tweaking git repo https://github.com/iamorozov/advent2024-Rust [INFO] tweaked toml for git repo https://github.com/iamorozov/advent2024-Rust written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/iamorozov/advent2024-Rust on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/iamorozov/advent2024-Rust already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded dhat v0.3.3 [INFO] [stderr] Downloaded const_format_proc_macros v0.2.31 [INFO] [stderr] Downloaded memoize v0.4.2 [INFO] [stderr] Downloaded tinyjson v2.5.1 [INFO] [stderr] Downloaded memoize-inner v0.4.3 [INFO] [stderr] Downloaded sscanf_macro v0.4.2 [INFO] [stderr] Downloaded sscanf v0.4.2 [INFO] [stderr] Downloaded const_format v0.2.31 [INFO] [stderr] Downloaded unicode-width v0.1.12 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 1e4896f6f36d1dbda292c434604f8642dd39c9d556b57920925220705ab666e6 [INFO] running `Command { std: "docker" "start" "-a" "1e4896f6f36d1dbda292c434604f8642dd39c9d556b57920925220705ab666e6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "1e4896f6f36d1dbda292c434604f8642dd39c9d556b57920925220705ab666e6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "1e4896f6f36d1dbda292c434604f8642dd39c9d556b57920925220705ab666e6", kill_on_drop: false }` [INFO] [stdout] 1e4896f6f36d1dbda292c434604f8642dd39c9d556b57920925220705ab666e6 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] c889d42b7ef9b93b99f4e01b97b89025fa54487785886a5eaa6bea558313c895 [INFO] running `Command { std: "docker" "start" "-a" "c889d42b7ef9b93b99f4e01b97b89025fa54487785886a5eaa6bea558313c895", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.70 [INFO] [stderr] Compiling libc v0.2.167 [INFO] [stderr] Checking once_cell v1.19.0 [INFO] [stderr] Compiling unicode-width v0.1.12 [INFO] [stderr] Checking either v1.13.0 [INFO] [stderr] Checking aho-corasick v1.1.3 [INFO] [stderr] Compiling convert_case v0.6.0 [INFO] [stderr] Checking tinyjson v2.5.1 [INFO] [stderr] Checking itertools v0.13.0 [INFO] [stderr] Compiling quote v1.0.33 [INFO] [stderr] Compiling syn v2.0.39 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Checking getrandom v0.2.15 [INFO] [stderr] Compiling const_format_proc_macros v0.2.31 [INFO] [stderr] Checking regex-automata v0.4.9 [INFO] [stderr] Checking ahash v0.7.8 [INFO] [stderr] Checking hashbrown v0.12.3 [INFO] [stderr] Checking lru v0.7.8 [INFO] [stderr] Checking const_format v0.2.31 [INFO] [stderr] Checking regex v1.11.1 [INFO] [stderr] Compiling sscanf_macro v0.4.2 [INFO] [stderr] Compiling memoize-inner v0.4.3 [INFO] [stderr] Checking memoize v0.4.2 [INFO] [stderr] Checking sscanf v0.4.2 [INFO] [stderr] Checking advent_of_code v0.11.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/template/run_multi.rs:173:26 [INFO] [stdout] | [INFO] [stdout] 173 | let str_timing = line [INFO] [stdout] | __________________________^ [INFO] [stdout] 174 | | .split(" samples)") [INFO] [stdout] 175 | | .next()? [INFO] [stdout] 176 | | .split('(') [INFO] [stdout] 177 | | .last()? [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 177 - .last()? [INFO] [stdout] 177 + .next_back()? [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_unstable_by_key` [INFO] [stdout] --> src/template/timings.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 61 | data.sort_unstable_by(|a, b| a.day.cmp(&b.day)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 61 - data.sort_unstable_by(|a, b| a.day.cmp(&b.day)); [INFO] [stdout] 61 + data.sort_unstable_by_key(|a| a.day); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:7:9 [INFO] [stdout] | [INFO] [stdout] 7 | / return input.lines() [INFO] [stdout] 8 | | .map(|line| line.chars().collect_vec()) [INFO] [stdout] 9 | | .collect_vec(); [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 7 ~ input.lines() [INFO] [stdout] 8 + .map(|line| line.chars().collect_vec()) [INFO] [stdout] 9 ~ .collect_vec() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 13 | / return input.lines() [INFO] [stdout] 14 | | .map(|line| line.chars() [INFO] [stdout] 15 | | .map(|ch| ch.to_digit(10).unwrap()) [INFO] [stdout] 16 | | .collect_vec() [INFO] [stdout] 17 | | ) [INFO] [stdout] 18 | | .collect_vec(); [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 13 ~ input.lines() [INFO] [stdout] 14 + .map(|line| line.chars() [INFO] [stdout] 15 + .map(|ch| ch.to_digit(10).unwrap()) [INFO] [stdout] 16 + .collect_vec() [INFO] [stdout] 17 + ) [INFO] [stdout] 18 ~ .collect_vec() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/lib.rs:21:44 [INFO] [stdout] | [INFO] [stdout] 21 | pub fn find_position_in_matrix(matrix: &Vec>, target: char) -> (usize, usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 21 - pub fn find_position_in_matrix(matrix: &Vec>, target: char) -> (usize, usize) { [INFO] [stdout] 21 + pub fn find_position_in_matrix(matrix: &[Vec], target: char) -> (usize, usize) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/template/run_multi.rs:173:26 [INFO] [stdout] | [INFO] [stdout] 173 | let str_timing = line [INFO] [stdout] | __________________________^ [INFO] [stdout] 174 | | .split(" samples)") [INFO] [stdout] 175 | | .next()? [INFO] [stdout] 176 | | .split('(') [INFO] [stdout] 177 | | .last()? [INFO] [stdout] | |___________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 177 - .last()? [INFO] [stdout] 177 + .next_back()? [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: consider using `sort_unstable_by_key` [INFO] [stdout] --> src/template/timings.rs:61:9 [INFO] [stdout] | [INFO] [stdout] 61 | data.sort_unstable_by(|a, b| a.day.cmp(&b.day)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by [INFO] [stdout] = note: `#[warn(clippy::unnecessary_sort_by)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 61 - data.sort_unstable_by(|a, b| a.day.cmp(&b.day)); [INFO] [stdout] 61 + data.sort_unstable_by_key(|a| a.day); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:7:9 [INFO] [stdout] | [INFO] [stdout] 7 | / return input.lines() [INFO] [stdout] 8 | | .map(|line| line.chars().collect_vec()) [INFO] [stdout] 9 | | .collect_vec(); [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 7 ~ input.lines() [INFO] [stdout] 8 + .map(|line| line.chars().collect_vec()) [INFO] [stdout] 9 ~ .collect_vec() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/lib.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 13 | / return input.lines() [INFO] [stdout] 14 | | .map(|line| line.chars() [INFO] [stdout] 15 | | .map(|ch| ch.to_digit(10).unwrap()) [INFO] [stdout] 16 | | .collect_vec() [INFO] [stdout] 17 | | ) [INFO] [stdout] 18 | | .collect_vec(); [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 13 ~ input.lines() [INFO] [stdout] 14 + .map(|line| line.chars() [INFO] [stdout] 15 + .map(|ch| ch.to_digit(10).unwrap()) [INFO] [stdout] 16 + .collect_vec() [INFO] [stdout] 17 + ) [INFO] [stdout] 18 ~ .collect_vec() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/lib.rs:21:44 [INFO] [stdout] | [INFO] [stdout] 21 | pub fn find_position_in_matrix(matrix: &Vec>, target: char) -> (usize, usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 21 - pub fn find_position_in_matrix(matrix: &Vec>, target: char) -> (usize, usize) { [INFO] [stdout] 21 + pub fn find_position_in_matrix(matrix: &[Vec], target: char) -> (usize, usize) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `input` [INFO] [stdout] --> src/bin/25.rs:42:17 [INFO] [stdout] | [INFO] [stdout] 42 | pub fn part_two(input: &str) -> Option { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_input` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `grid` [INFO] [stdout] --> src/bin/25.rs:17:26 [INFO] [stdout] | [INFO] [stdout] 17 | for i in 0..7 { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 17 - for i in 0..7 { [INFO] [stdout] 17 + for in grid.iter().take(7) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `HashSet` [INFO] [stdout] --> src/bin/18.rs:2:61 [INFO] [stdout] | [INFO] [stdout] 2 | use std::{cmp::Ordering, collections::{BinaryHeap, HashMap, HashSet}}; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `cmp::max` and `hash::Hash` [INFO] [stdout] --> src/bin/22.rs:1:11 [INFO] [stdout] | [INFO] [stdout] 1 | use std::{cmp::max, collections::HashMap, hash::Hash}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `result` [INFO] [stdout] --> src/bin/24.rs:1:33 [INFO] [stdout] | [INFO] [stdout] 1 | use std::{collections::HashMap, result}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::result` [INFO] [stdout] --> src/bin/17.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::result; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `result` [INFO] [stdout] --> src/bin/24.rs:1:33 [INFO] [stdout] | [INFO] [stdout] 1 | use std::{collections::HashMap, result}; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `hash::Hash`, `mem`, and `result` [INFO] [stdout] --> src/bin/19.rs:1:43 [INFO] [stdout] | [INFO] [stdout] 1 | use std::{cmp::min, collections::HashSet, hash::Hash, mem, result}; [INFO] [stdout] | ^^^^^^^^^^ ^^^ ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/24.rs:38:9 [INFO] [stdout] | [INFO] [stdout] 38 | let mut gates: HashMap = input.lines().skip(p + 1) [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `wires` [INFO] [stdout] --> src/bin/24.rs:88:10 [INFO] [stdout] | [INFO] [stdout] 88 | let (wires, gates) = get_wires_and_gates(input); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_wires` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `HashSet` [INFO] [stdout] --> src/bin/18.rs:2:61 [INFO] [stdout] | [INFO] [stdout] 2 | use std::{cmp::Ordering, collections::{BinaryHeap, HashMap, HashSet}}; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessarily eager cloning of iterator items [INFO] [stdout] --> src/bin/19.rs:19:18 [INFO] [stdout] | [INFO] [stdout] 19 | let result = designs.iter() [INFO] [stdout] | __________________^ - [INFO] [stdout] | |________________________________| [INFO] [stdout] 20 | || .cloned() [INFO] [stdout] 21 | || .filter(|design| can_build(design.clone(), &towels_set) > 0) [INFO] [stdout] | ||____________________________________________________________________^ help: try: `.filter(|&design| can_build(design.clone(), &towels_set) > 0).cloned()` [INFO] [stdout] | |____________________________________________________________________| [INFO] [stdout] | [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_overeager_cloned [INFO] [stdout] = note: `#[warn(clippy::iter_overeager_cloned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded cloning of iterator items [INFO] [stdout] --> src/bin/19.rs:57:23 [INFO] [stdout] | [INFO] [stdout] 57 | let result: u64 = designs.iter() [INFO] [stdout] | _______________________^ [INFO] [stdout] 58 | | .cloned() [INFO] [stdout] 59 | | .map(|design| can_build(design.clone(), &towels_set)) [INFO] [stdout] | |_____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_iter_cloned [INFO] [stdout] = note: `#[warn(clippy::redundant_iter_cloned)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 57 ~ let result: u64 = designs.iter() [INFO] [stdout] 58 + .map(|design| can_build(design.clone(), &towels_set)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/bin/19.rs:62:10 [INFO] [stdout] | [INFO] [stdout] 62 | Some(result as u64) [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `result` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/02.rs:43:27 [INFO] [stdout] | [INFO] [stdout] 43 | fn is_safe_increase(nums: &Vec) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 43 - fn is_safe_increase(nums: &Vec) -> bool { [INFO] [stdout] 43 + fn is_safe_increase(nums: &[u32]) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/02.rs:47:27 [INFO] [stdout] | [INFO] [stdout] 47 | fn is_safe_decrease(nums: &Vec) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 47 - fn is_safe_decrease(nums: &Vec) -> bool { [INFO] [stdout] 47 + fn is_safe_decrease(nums: &[u32]) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bin/24.rs:108:25 [INFO] [stdout] | [INFO] [stdout] 108 | ...e if !name.starts_with('z') && !(i1.starts_with('x') && i2.starts_with('y') || i1.starts_with('y') && i2.starts_with('x')) && op... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!(name.starts_with('z') || i1.starts_with('x') && i2.starts_with('y') || i1.starts_with('y') && i2.starts_with('x'))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/bin/24.rs:101:9 [INFO] [stdout] | [INFO] [stdout] 101 | / match gate { [INFO] [stdout] 102 | | Gate::Expr { op, i1, i2 } => { [INFO] [stdout] 103 | | if name.starts_with('z') && op != "XOR" && name != "z45" { [INFO] [stdout] 104 | | println!("rule 1: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] ... | [INFO] [stdout] 129 | | _ => {}, [INFO] [stdout] 130 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 101 ~ if let Gate::Expr { op, i1, i2 } = gate { [INFO] [stdout] 102 + if name.starts_with('z') && op != "XOR" && name != "z45" { [INFO] [stdout] 103 + println!("rule 1: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] 104 + result.push(name.clone()); [INFO] [stdout] 105 + } [INFO] [stdout] 106 + [INFO] [stdout] 107 + else if !name.starts_with('z') && !(i1.starts_with('x') && i2.starts_with('y') || i1.starts_with('y') && i2.starts_with('x')) && op == "XOR" { [INFO] [stdout] 108 + println!("rule 2: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] 109 + result.push(name.clone()); [INFO] [stdout] 110 + } [INFO] [stdout] 111 + [INFO] [stdout] 112 + else if op == "XOR" && (i1.starts_with('x') && i2.starts_with('y') || i1.starts_with('y') && i2.starts_with('x')) && (i1 != "x00" && i2 != "y00") { [INFO] [stdout] 113 + [INFO] [stdout] 114 + if find_xor_with_input(&gates, name.clone()).is_none() { [INFO] [stdout] 115 + println!("rule 3: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] 116 + result.push(name.clone()); [INFO] [stdout] 117 + } [INFO] [stdout] 118 + } [INFO] [stdout] 119 + [INFO] [stdout] 120 + else if op == "AND" && (i1 != "x00" && i2 != "y00") { [INFO] [stdout] 121 + [INFO] [stdout] 122 + if find_or_with_input(&gates, name.clone()).is_none() { [INFO] [stdout] 123 + println!("rule 4: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] 124 + result.push(name.clone()); [INFO] [stdout] 125 + } [INFO] [stdout] 126 + } [INFO] [stdout] 127 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/bin/24.rs:121:22 [INFO] [stdout] | [INFO] [stdout] 121 | else if op == "AND" && (i1 != "x00" && i2 != "y00") { [INFO] [stdout] | ______________________^ [INFO] [stdout] 122 | | [INFO] [stdout] 123 | | if find_or_with_input(&gates, name.clone()).is_none() { [INFO] [stdout] 124 | | println!("rule 4: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] ... | [INFO] [stdout] 127 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 121 ~ else if op == "AND" && (i1 != "x00" && i2 != "y00") [INFO] [stdout] 122 | [INFO] [stdout] 123 ~ && find_or_with_input(&gates, name.clone()).is_none() { [INFO] [stdout] 124 | println!("rule 4: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] 125 | result.push(name.clone()); [INFO] [stdout] 126 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/bin/24.rs:142:17 [INFO] [stdout] | [INFO] [stdout] 142 | / if op == "XOR" && (i1 == name || i2 == name) { [INFO] [stdout] 143 | | return Some(n); [INFO] [stdout] 144 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 141 ~ Gate::Expr { op, i1, i2 } [INFO] [stdout] 142 ~ if op == "XOR" && (i1 == name || i2 == name) => { [INFO] [stdout] 143 | return Some(n); [INFO] [stdout] 144 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/bin/24.rs:140:9 [INFO] [stdout] | [INFO] [stdout] 140 | / match gate { [INFO] [stdout] 141 | | Gate::Expr { op, i1, i2 } => { [INFO] [stdout] 142 | | if op == "XOR" && (i1 == name || i2 == name) { [INFO] [stdout] 143 | | return Some(n); [INFO] [stdout] ... | [INFO] [stdout] 146 | | _ => {}, [INFO] [stdout] 147 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 140 ~ if let Gate::Expr { op, i1, i2 } = gate { [INFO] [stdout] 141 + if op == "XOR" && (i1 == name || i2 == name) { [INFO] [stdout] 142 + return Some(n); [INFO] [stdout] 143 + } [INFO] [stdout] 144 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/bin/24.rs:157:17 [INFO] [stdout] | [INFO] [stdout] 157 | / if op == "OR" && (i1 == name || i2 == name) { [INFO] [stdout] 158 | | return Some(n); [INFO] [stdout] 159 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 156 ~ Gate::Expr { op, i1, i2 } [INFO] [stdout] 157 ~ if op == "OR" && (i1 == name || i2 == name) => { [INFO] [stdout] 158 | return Some(n); [INFO] [stdout] 159 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/bin/24.rs:155:9 [INFO] [stdout] | [INFO] [stdout] 155 | / match gate { [INFO] [stdout] 156 | | Gate::Expr { op, i1, i2 } => { [INFO] [stdout] 157 | | if op == "OR" && (i1 == name || i2 == name) { [INFO] [stdout] 158 | | return Some(n); [INFO] [stdout] ... | [INFO] [stdout] 161 | | _ => {}, [INFO] [stdout] 162 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 155 ~ if let Gate::Expr { op, i1, i2 } = gate { [INFO] [stdout] 156 + if op == "OR" && (i1 == name || i2 == name) { [INFO] [stdout] 157 + return Some(n); [INFO] [stdout] 158 + } [INFO] [stdout] 159 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `hash::Hash`, `mem`, and `result` [INFO] [stdout] --> src/bin/19.rs:1:43 [INFO] [stdout] | [INFO] [stdout] 1 | use std::{cmp::min, collections::HashSet, hash::Hash, mem, result}; [INFO] [stdout] | ^^^^^^^^^^ ^^^ ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::result` [INFO] [stdout] --> src/bin/17.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::result; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessarily eager cloning of iterator items [INFO] [stdout] --> src/bin/19.rs:19:18 [INFO] [stdout] | [INFO] [stdout] 19 | let result = designs.iter() [INFO] [stdout] | __________________^ - [INFO] [stdout] | |________________________________| [INFO] [stdout] 20 | || .cloned() [INFO] [stdout] 21 | || .filter(|design| can_build(design.clone(), &towels_set) > 0) [INFO] [stdout] | ||____________________________________________________________________^ help: try: `.filter(|&design| can_build(design.clone(), &towels_set) > 0).cloned()` [INFO] [stdout] | |____________________________________________________________________| [INFO] [stdout] | [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_overeager_cloned [INFO] [stdout] = note: `#[warn(clippy::iter_overeager_cloned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/17.rs:10:9 [INFO] [stdout] | [INFO] [stdout] 10 | let mut A = sscanf::sscanf!(&lines[0], "Register A: {}", i64).unwrap(); [INFO] [stdout] | ----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded cloning of iterator items [INFO] [stdout] --> src/bin/19.rs:57:23 [INFO] [stdout] | [INFO] [stdout] 57 | let result: u64 = designs.iter() [INFO] [stdout] | _______________________^ [INFO] [stdout] 58 | | .cloned() [INFO] [stdout] 59 | | .map(|design| can_build(design.clone(), &towels_set)) [INFO] [stdout] | |_____________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_iter_cloned [INFO] [stdout] = note: `#[warn(clippy::redundant_iter_cloned)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 57 ~ let result: u64 = designs.iter() [INFO] [stdout] 58 + .map(|design| can_build(design.clone(), &towels_set)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/bin/19.rs:62:10 [INFO] [stdout] | [INFO] [stdout] 62 | Some(result as u64) [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `result` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/17.rs:11:9 [INFO] [stdout] | [INFO] [stdout] 11 | let mut B = sscanf::sscanf!(&lines[1], "Register B: {}", i64).unwrap(); [INFO] [stdout] | ----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/17.rs:12:9 [INFO] [stdout] | [INFO] [stdout] 12 | let mut C = sscanf::sscanf!(&lines[2], "Register C: {}", i64).unwrap(); [INFO] [stdout] | ----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/07.rs:20:13 [INFO] [stdout] | [INFO] [stdout] 20 | return 0 [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 20 - return 0 [INFO] [stdout] 20 + 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/07.rs:17:12 [INFO] [stdout] | [INFO] [stdout] 17 | if rem.len() == 0 && cur == goal{ [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rem.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/07.rs:19:19 [INFO] [stdout] | [INFO] [stdout] 19 | } else if rem.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rem.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found call to `str::trim` before `str::split_whitespace` [INFO] [stdout] --> src/bin/07.rs:46:36 [INFO] [stdout] | [INFO] [stdout] 46 | let operands = line[1].trim().split_whitespace() [INFO] [stdout] | ^^^^^^^ help: remove `trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trim_split_whitespace [INFO] [stdout] = note: `#[warn(clippy::trim_split_whitespace)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/07.rs:66:13 [INFO] [stdout] | [INFO] [stdout] 66 | return 0 [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 66 - return 0 [INFO] [stdout] 66 + 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/07.rs:63:12 [INFO] [stdout] | [INFO] [stdout] 63 | if rem.len() == 0 && cur == goal { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rem.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/07.rs:65:19 [INFO] [stdout] | [INFO] [stdout] 65 | } else if rem.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rem.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/06.rs:19:38 [INFO] [stdout] | [INFO] [stdout] 19 | fn out_of_grid(i: i32, j: i32, grid: &Vec>) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 19 - fn out_of_grid(i: i32, j: i32, grid: &Vec>) -> bool { [INFO] [stdout] 19 + fn out_of_grid(i: i32, j: i32, grid: &[Vec]) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/06.rs:66:5 [INFO] [stdout] | [INFO] [stdout] 66 | return (true, new_i, new_j, new_dir.0, new_dir.1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 66 - return (true, new_i, new_j, new_dir.0, new_dir.1); [INFO] [stdout] 66 + (true, new_i, new_j, new_dir.0, new_dir.1) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/06.rs:93:20 [INFO] [stdout] | [INFO] [stdout] 93 | calculate_path(&grid, start) [INFO] [stdout] | ^^^^^ help: change this to: `grid` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/10.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | return Some(result); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 12 - return Some(result); [INFO] [stdout] 12 + Some(result) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/10.rs:25:5 [INFO] [stdout] | [INFO] [stdout] 25 | return trailheads; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 25 - return trailheads; [INFO] [stdout] 25 + trailheads [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/10.rs:15:27 [INFO] [stdout] | [INFO] [stdout] 15 | fn find_traiheads(matrix: &Vec>) -> Vec<(usize, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 15 - fn find_traiheads(matrix: &Vec>) -> Vec<(usize, usize)> { [INFO] [stdout] 15 + fn find_traiheads(matrix: &[Vec]) -> Vec<(usize, usize)> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `matrix` [INFO] [stdout] --> src/bin/10.rs:17:14 [INFO] [stdout] | [INFO] [stdout] 17 | for i in 0..matrix.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 17 - for i in 0..matrix.len() { [INFO] [stdout] 17 + for (i, ) in matrix.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `j` is used to index `matrix` [INFO] [stdout] --> src/bin/10.rs:18:18 [INFO] [stdout] | [INFO] [stdout] 18 | for j in 0..matrix[i].len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 18 - for j in 0..matrix[i].len() { [INFO] [stdout] 18 + for (j, ) in matrix.iter().enumerate().take(matrix[i].len()) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/10.rs:28:62 [INFO] [stdout] | [INFO] [stdout] 28 | fn find_trailheads_score(matrix: &Vec>, trailheads: &Vec<(usize, usize)>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 28 - fn find_trailheads_score(matrix: &Vec>, trailheads: &Vec<(usize, usize)>) -> u32 { [INFO] [stdout] 28 + fn find_trailheads_score(matrix: &Vec>, trailheads: &[(usize, usize)]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/10.rs:30:44 [INFO] [stdout] | [INFO] [stdout] 30 | .map(|(x, y)| find_trailhead_score(&matrix, *x, *y)) [INFO] [stdout] | ^^^^^^^ help: change this to: `matrix` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/10.rs:60:5 [INFO] [stdout] | [INFO] [stdout] 60 | return result.len() as u32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 60 - return result.len() as u32; [INFO] [stdout] 60 + result.len() as u32 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/10.rs:34:33 [INFO] [stdout] | [INFO] [stdout] 34 | fn find_trailhead_score(matrix: &Vec>, x: usize, y: usize) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 34 - fn find_trailhead_score(matrix: &Vec>, x: usize, y: usize) -> u32 { [INFO] [stdout] 34 + fn find_trailhead_score(matrix: &[Vec], x: usize, y: usize) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert` to construct default value [INFO] [stdout] --> src/bin/05.rs:31:29 [INFO] [stdout] | [INFO] [stdout] 31 | rules_pre.entry(n1).or_insert(HashSet::new()).insert(n2); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert` to construct default value [INFO] [stdout] --> src/bin/05.rs:32:30 [INFO] [stdout] | [INFO] [stdout] 32 | rules_post.entry(n2).or_insert(HashSet::new()).insert(n1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/05.rs:59:5 [INFO] [stdout] | [INFO] [stdout] 59 | return (rules, updates); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 59 - return (rules, updates); [INFO] [stdout] 59 + (rules, updates) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/10.rs:68:5 [INFO] [stdout] | [INFO] [stdout] 68 | return Some(result); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 68 - return Some(result); [INFO] [stdout] 68 + Some(result) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/10.rs:71:63 [INFO] [stdout] | [INFO] [stdout] 71 | fn find_trailheads_rating(matrix: &Vec>, trailheads: &Vec<(usize, usize)>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 71 - fn find_trailheads_rating(matrix: &Vec>, trailheads: &Vec<(usize, usize)>) -> u32 { [INFO] [stdout] 71 + fn find_trailheads_rating(matrix: &Vec>, trailheads: &[(usize, usize)]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/10.rs:73:35 [INFO] [stdout] | [INFO] [stdout] 73 | .map(|(x, y)| find_rating(&matrix, *x, *y)) [INFO] [stdout] | ^^^^^^^ help: change this to: `matrix` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/10.rs:102:5 [INFO] [stdout] | [INFO] [stdout] 102 | return result; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 102 - return result; [INFO] [stdout] 102 + result [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/10.rs:77:24 [INFO] [stdout] | [INFO] [stdout] 77 | fn find_rating(matrix: &Vec>, x: usize, y: usize) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 77 - fn find_rating(matrix: &Vec>, x: usize, y: usize) -> u32 { [INFO] [stdout] 77 + fn find_rating(matrix: &[Vec], x: usize, y: usize) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/05.rs:62:111 [INFO] [stdout] | [INFO] [stdout] 62 | fn validate_updates(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &Vec>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 62 - fn validate_updates(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &Vec>) -> u32 { [INFO] [stdout] 62 + fn validate_updates(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &[Vec]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/05.rs:70:108 [INFO] [stdout] | [INFO] [stdout] 70 | fn count_invalid(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &Vec>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 70 - fn count_invalid(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &Vec>) -> u32 { [INFO] [stdout] 70 + fn count_invalid(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &[Vec]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/bin/05.rs:75:35 [INFO] [stdout] | [INFO] [stdout] 75 | let mut copy = update.into_iter().clone().collect_vec(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/05.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 86 | return std::cmp::Ordering::Less; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 86 - return std::cmp::Ordering::Less; [INFO] [stdout] 86 + std::cmp::Ordering::Less [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/05.rs:88:9 [INFO] [stdout] | [INFO] [stdout] 88 | return std::cmp::Ordering::Greater; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 88 - return std::cmp::Ordering::Greater; [INFO] [stdout] 88 + std::cmp::Ordering::Greater [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/05.rs:90:9 [INFO] [stdout] | [INFO] [stdout] 90 | return std::cmp::Ordering::Equal; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 90 - return std::cmp::Ordering::Equal; [INFO] [stdout] 90 + std::cmp::Ordering::Equal [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/05.rs:94:28 [INFO] [stdout] | [INFO] [stdout] 94 | fn is_valid_update(update: &Vec, rules_pre: &HashMap>, rules_post: &HashMap>) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 94 - fn is_valid_update(update: &Vec, rules_pre: &HashMap>, rules_post: &HashMap>) -> bool { [INFO] [stdout] 94 + fn is_valid_update(update: &[u32], rules_pre: &HashMap>, rules_post: &HashMap>) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `slice` [INFO] [stdout] --> src/bin/05.rs:97:49 [INFO] [stdout] | [INFO] [stdout] 97 | let left: &HashSet = &update[0..i].into_iter().copied().collect(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `slice` [INFO] [stdout] --> src/bin/05.rs:98:51 [INFO] [stdout] | [INFO] [stdout] 98 | let right: &HashSet = &update[i+1..].into_iter().copied().collect(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/17.rs:26:18 [INFO] [stdout] | [INFO] [stdout] 26 | fn eval(program: &Vec, mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 26 - fn eval(program: &Vec, mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] 26 + fn eval(program: &[i64], mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `i64` is unnecessary [INFO] [stdout] --> src/bin/17.rs:37:27 [INFO] [stdout] | [INFO] [stdout] 37 | 0 => A = A / ((2 as i64).pow(combo(operand, A, B, C) as u32)), [INFO] [stdout] | ^^^^^^^^^^ help: try: `2_i64` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::collections::hash_set::Intersection<'_, u32, std::hash::RandomState>` [INFO] [stdout] --> src/bin/05.rs:103:39 [INFO] [stdout] | [INFO] [stdout] 103 | let left_post: HashSet = left.intersection(pre).into_iter().copied().collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `left.intersection(pre)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::collections::hash_set::Intersection<'_, u32, std::hash::RandomState>` [INFO] [stdout] --> src/bin/05.rs:104:39 [INFO] [stdout] | [INFO] [stdout] 104 | let right_pre: HashSet = right.intersection(post).into_iter().copied().collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `right.intersection(post)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/05.rs:106:12 [INFO] [stdout] | [INFO] [stdout] 106 | if left_post.len() != 0 || right_pre.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!left_post.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/05.rs:106:36 [INFO] [stdout] | [INFO] [stdout] 106 | if left_post.len() != 0 || right_pre.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!right_pre.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/bin/17.rs:39:18 [INFO] [stdout] | [INFO] [stdout] 39 | 1 => B = B ^ operand, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: replace it with: `B ^= operand` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/bin/17.rs:48:18 [INFO] [stdout] | [INFO] [stdout] 48 | 4 => B = B ^ C, [INFO] [stdout] | ^^^^^^^^^ help: replace it with: `B ^= C` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `i64` is unnecessary [INFO] [stdout] --> src/bin/17.rs:52:27 [INFO] [stdout] | [INFO] [stdout] 52 | 6 => B = A / ((2 as i64).pow(combo(operand, A, B, C) as u32)), [INFO] [stdout] | ^^^^^^^^^^ help: try: `2_i64` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `i64` is unnecessary [INFO] [stdout] --> src/bin/17.rs:54:27 [INFO] [stdout] | [INFO] [stdout] 54 | 7 => C = A / ((2 as i64).pow(combo(operand, A, B, C) as u32)), [INFO] [stdout] | ^^^^^^^^^^ help: try: `2_i64` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the function `shortest_path` doesn't need a mutable reference [INFO] [stdout] --> src/bin/18.rs:16:30 [INFO] [stdout] | [INFO] [stdout] 16 | let path = shortest_path(&mut grid, (0, 0), (70, 70)).unwrap(); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] = note: `#[warn(clippy::unnecessary_mut_passed)]` on by default [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 16 - let path = shortest_path(&mut grid, (0, 0), (70, 70)).unwrap(); [INFO] [stdout] 16 + let path = shortest_path(&grid, (0, 0), (70, 70)).unwrap(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/10.rs:12:5 [INFO] [stdout] | [INFO] [stdout] 12 | return Some(result); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 12 - return Some(result); [INFO] [stdout] 12 + Some(result) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/10.rs:25:5 [INFO] [stdout] | [INFO] [stdout] 25 | return trailheads; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 25 - return trailheads; [INFO] [stdout] 25 + trailheads [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/10.rs:15:27 [INFO] [stdout] | [INFO] [stdout] 15 | fn find_traiheads(matrix: &Vec>) -> Vec<(usize, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 15 - fn find_traiheads(matrix: &Vec>) -> Vec<(usize, usize)> { [INFO] [stdout] 15 + fn find_traiheads(matrix: &[Vec]) -> Vec<(usize, usize)> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is used to index `matrix` [INFO] [stdout] --> src/bin/10.rs:17:14 [INFO] [stdout] | [INFO] [stdout] 17 | for i in 0..matrix.len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 17 - for i in 0..matrix.len() { [INFO] [stdout] 17 + for (i, ) in matrix.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `j` is used to index `matrix` [INFO] [stdout] --> src/bin/10.rs:18:18 [INFO] [stdout] | [INFO] [stdout] 18 | for j in 0..matrix[i].len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 18 - for j in 0..matrix[i].len() { [INFO] [stdout] 18 + for (j, ) in matrix.iter().enumerate().take(matrix[i].len()) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/10.rs:28:62 [INFO] [stdout] | [INFO] [stdout] 28 | fn find_trailheads_score(matrix: &Vec>, trailheads: &Vec<(usize, usize)>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 28 - fn find_trailheads_score(matrix: &Vec>, trailheads: &Vec<(usize, usize)>) -> u32 { [INFO] [stdout] 28 + fn find_trailheads_score(matrix: &Vec>, trailheads: &[(usize, usize)]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/10.rs:30:44 [INFO] [stdout] | [INFO] [stdout] 30 | .map(|(x, y)| find_trailhead_score(&matrix, *x, *y)) [INFO] [stdout] | ^^^^^^^ help: change this to: `matrix` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/10.rs:60:5 [INFO] [stdout] | [INFO] [stdout] 60 | return result.len() as u32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 60 - return result.len() as u32; [INFO] [stdout] 60 + result.len() as u32 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/10.rs:34:33 [INFO] [stdout] | [INFO] [stdout] 34 | fn find_trailhead_score(matrix: &Vec>, x: usize, y: usize) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 34 - fn find_trailhead_score(matrix: &Vec>, x: usize, y: usize) -> u32 { [INFO] [stdout] 34 + fn find_trailhead_score(matrix: &[Vec], x: usize, y: usize) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/10.rs:68:5 [INFO] [stdout] | [INFO] [stdout] 68 | return Some(result); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 68 - return Some(result); [INFO] [stdout] 68 + Some(result) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/10.rs:71:63 [INFO] [stdout] | [INFO] [stdout] 71 | fn find_trailheads_rating(matrix: &Vec>, trailheads: &Vec<(usize, usize)>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 71 - fn find_trailheads_rating(matrix: &Vec>, trailheads: &Vec<(usize, usize)>) -> u32 { [INFO] [stdout] 71 + fn find_trailheads_rating(matrix: &Vec>, trailheads: &[(usize, usize)]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/10.rs:73:35 [INFO] [stdout] | [INFO] [stdout] 73 | .map(|(x, y)| find_rating(&matrix, *x, *y)) [INFO] [stdout] | ^^^^^^^ help: change this to: `matrix` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/10.rs:102:5 [INFO] [stdout] | [INFO] [stdout] 102 | return result; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 102 - return result; [INFO] [stdout] 102 + result [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/10.rs:77:24 [INFO] [stdout] | [INFO] [stdout] 77 | fn find_rating(matrix: &Vec>, x: usize, y: usize) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 77 - fn find_rating(matrix: &Vec>, x: usize, y: usize) -> u32 { [INFO] [stdout] 77 + fn find_rating(matrix: &[Vec], x: usize, y: usize) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `A` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:10:13 [INFO] [stdout] | [INFO] [stdout] 10 | let mut A = sscanf::sscanf!(&lines[0], "Register A: {}", i64).unwrap(); [INFO] [stdout] | ^ help: convert the identifier to snake case: `a` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `B` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:11:13 [INFO] [stdout] | [INFO] [stdout] 11 | let mut B = sscanf::sscanf!(&lines[1], "Register B: {}", i64).unwrap(); [INFO] [stdout] | ^ help: convert the identifier to snake case: `b` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `C` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:12:13 [INFO] [stdout] | [INFO] [stdout] 12 | let mut C = sscanf::sscanf!(&lines[2], "Register C: {}", i64).unwrap(); [INFO] [stdout] | ^ help: convert the identifier to snake case (notice the capitalization): `c` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `A` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:26:33 [INFO] [stdout] | [INFO] [stdout] 26 | fn eval(program: &Vec, mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] | ^ help: convert the identifier to snake case: `a` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `B` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:26:45 [INFO] [stdout] | [INFO] [stdout] 26 | fn eval(program: &Vec, mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] | ^ help: convert the identifier to snake case: `b` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `C` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:26:57 [INFO] [stdout] | [INFO] [stdout] 26 | fn eval(program: &Vec, mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] | ^ help: convert the identifier to snake case (notice the capitalization): `c` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `A` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:63:24 [INFO] [stdout] | [INFO] [stdout] 63 | fn combo(operand: i64, A: i64, B: i64, C: i64) -> i64 { [INFO] [stdout] | ^ help: convert the identifier to snake case: `a` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `B` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:63:32 [INFO] [stdout] | [INFO] [stdout] 63 | fn combo(operand: i64, A: i64, B: i64, C: i64) -> i64 { [INFO] [stdout] | ^ help: convert the identifier to snake case: `b` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `C` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:63:40 [INFO] [stdout] | [INFO] [stdout] 63 | fn combo(operand: i64, A: i64, B: i64, C: i64) -> i64 { [INFO] [stdout] | ^ help: convert the identifier to snake case (notice the capitalization): `c` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `A` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:110:13 [INFO] [stdout] | [INFO] [stdout] 110 | let A: i64 = factors.iter().enumerate().map(|(index, v)| v * 2i64.pow(3 * index as u32)).sum(); [INFO] [stdout] | ^ help: convert the identifier to snake case: `a` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/18.rs:79:25 [INFO] [stdout] | [INFO] [stdout] 79 | fn get_next_tiles(maze: &Vec>, x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 79 - fn get_next_tiles(maze: &Vec>, x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] 79 + fn get_next_tiles(maze: &[Vec], x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/06.rs:19:38 [INFO] [stdout] | [INFO] [stdout] 19 | fn out_of_grid(i: i32, j: i32, grid: &Vec>) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 19 - fn out_of_grid(i: i32, j: i32, grid: &Vec>) -> bool { [INFO] [stdout] 19 + fn out_of_grid(i: i32, j: i32, grid: &[Vec]) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/06.rs:66:5 [INFO] [stdout] | [INFO] [stdout] 66 | return (true, new_i, new_j, new_dir.0, new_dir.1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 66 - return (true, new_i, new_j, new_dir.0, new_dir.1); [INFO] [stdout] 66 + (true, new_i, new_j, new_dir.0, new_dir.1) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the function `shortest_path` doesn't need a mutable reference [INFO] [stdout] --> src/bin/18.rs:109:34 [INFO] [stdout] | [INFO] [stdout] 109 | let path = shortest_path(&mut grid, (0, 0), (70, 70)); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 109 - let path = shortest_path(&mut grid, (0, 0), (70, 70)); [INFO] [stdout] 109 + let path = shortest_path(&grid, (0, 0), (70, 70)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/bin/06.rs:93:20 [INFO] [stdout] | [INFO] [stdout] 93 | calculate_path(&grid, start) [INFO] [stdout] | ^^^^^ help: change this to: `grid` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/16.rs:115:25 [INFO] [stdout] | [INFO] [stdout] 115 | fn shortest_paths_tiles(mut map: Vec>) -> usize { [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `dir` [INFO] [stdout] --> src/bin/16.rs:187:19 [INFO] [stdout] | [INFO] [stdout] 187 | .min_by_key(|(dir, (v, _))| *v) [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_dir` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the function `shortest_path` doesn't need a mutable reference [INFO] [stdout] --> src/bin/16.rs:15:19 [INFO] [stdout] | [INFO] [stdout] 15 | shortest_path(&mut maze, (sx, sy), (ex, ey)) [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] = note: `#[warn(clippy::unnecessary_mut_passed)]` on by default [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 15 - shortest_path(&mut maze, (sx, sy), (ex, ey)) [INFO] [stdout] 15 + shortest_path(&maze, (sx, sy), (ex, ey)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/16.rs:80:25 [INFO] [stdout] | [INFO] [stdout] 80 | fn get_next_tiles(maze: &Vec>, x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 80 - fn get_next_tiles(maze: &Vec>, x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] 80 + fn get_next_tiles(maze: &[Vec], x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/bin/16.rs:120:24 [INFO] [stdout] | [INFO] [stdout] 120 | let mut value_map: HashMap<(Position, Direction), (i64, Vec<(Position, Direction)>)> = [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/bin/16.rs:207:16 [INFO] [stdout] | [INFO] [stdout] 207 | value_map: &mut HashMap<(Position, Direction), (i64, Vec<(Position, Direction)>)>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `row` is used to index `map` [INFO] [stdout] --> src/bin/16.rs:222:16 [INFO] [stdout] | [INFO] [stdout] 222 | for row in 0..map.len() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 222 - for row in 0..map.len() { [INFO] [stdout] 222 + for (row, ) in map.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `column` is used to index `map` [INFO] [stdout] --> src/bin/16.rs:223:23 [INFO] [stdout] | [INFO] [stdout] 223 | for column in 0..map[row].len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 223 - for column in 0..map[row].len() { [INFO] [stdout] 223 + for (column, ) in map.iter().enumerate().take(map[row].len()) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `cmp::max` and `hash::Hash` [INFO] [stdout] --> src/bin/22.rs:1:11 [INFO] [stdout] | [INFO] [stdout] 1 | use std::{cmp::max, collections::HashMap, hash::Hash}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the function `shortest_path` doesn't need a mutable reference [INFO] [stdout] --> src/bin/18.rs:16:30 [INFO] [stdout] | [INFO] [stdout] 16 | let path = shortest_path(&mut grid, (0, 0), (70, 70)).unwrap(); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] = note: `#[warn(clippy::unnecessary_mut_passed)]` on by default [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 16 - let path = shortest_path(&mut grid, (0, 0), (70, 70)).unwrap(); [INFO] [stdout] 16 + let path = shortest_path(&grid, (0, 0), (70, 70)).unwrap(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/17.rs:10:9 [INFO] [stdout] | [INFO] [stdout] 10 | let mut A = sscanf::sscanf!(&lines[0], "Register A: {}", i64).unwrap(); [INFO] [stdout] | ----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/17.rs:11:9 [INFO] [stdout] | [INFO] [stdout] 11 | let mut B = sscanf::sscanf!(&lines[1], "Register B: {}", i64).unwrap(); [INFO] [stdout] | ----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/17.rs:12:9 [INFO] [stdout] | [INFO] [stdout] 12 | let mut C = sscanf::sscanf!(&lines[2], "Register C: {}", i64).unwrap(); [INFO] [stdout] | ----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/18.rs:79:25 [INFO] [stdout] | [INFO] [stdout] 79 | fn get_next_tiles(maze: &Vec>, x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 79 - fn get_next_tiles(maze: &Vec>, x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] 79 + fn get_next_tiles(maze: &[Vec], x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the function `shortest_path` doesn't need a mutable reference [INFO] [stdout] --> src/bin/18.rs:109:34 [INFO] [stdout] | [INFO] [stdout] 109 | let path = shortest_path(&mut grid, (0, 0), (70, 70)); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 109 - let path = shortest_path(&mut grid, (0, 0), (70, 70)); [INFO] [stdout] 109 + let path = shortest_path(&grid, (0, 0), (70, 70)); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to u32 [INFO] [stdout] --> src/bin/01.rs:13:25 [INFO] [stdout] | [INFO] [stdout] 13 | .map(|(n1, n2)| (n1 as i32 - n2 as i32).abs() as u32) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `(n1 as i32 - n2 as i32).unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] = note: `#[warn(clippy::cast_abs_to_unsigned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/01.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | / return input.lines() [INFO] [stdout] 37 | | .map ( |line| line.split_whitespace() [INFO] [stdout] 38 | | .map(|n| n.parse::().unwrap()) [INFO] [stdout] 39 | | .collect_tuple() [INFO] [stdout] ... | [INFO] [stdout] 42 | | .unzip(); [INFO] [stdout] | |________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 36 ~ input.lines() [INFO] [stdout] 37 + .map ( |line| line.split_whitespace() [INFO] [stdout] 38 + .map(|n| n.parse::().unwrap()) [INFO] [stdout] 39 + .collect_tuple() [INFO] [stdout] 40 + .unwrap() [INFO] [stdout] 41 + ) [INFO] [stdout] 42 ~ .unzip() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `itertools::Itertools` [INFO] [stdout] --> src/bin/20.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use itertools::Itertools; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/20.rs:10:9 [INFO] [stdout] | [INFO] [stdout] 10 | let mut maze = get_char_matrix(input); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/20.rs:87:9 [INFO] [stdout] | [INFO] [stdout] 87 | let mut maze = get_char_matrix(input); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/17.rs:26:18 [INFO] [stdout] | [INFO] [stdout] 26 | fn eval(program: &Vec, mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 26 - fn eval(program: &Vec, mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] 26 + fn eval(program: &[i64], mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `i64` is unnecessary [INFO] [stdout] --> src/bin/17.rs:37:27 [INFO] [stdout] | [INFO] [stdout] 37 | 0 => A = A / ((2 as i64).pow(combo(operand, A, B, C) as u32)), [INFO] [stdout] | ^^^^^^^^^^ help: try: `2_i64` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/bin/17.rs:39:18 [INFO] [stdout] | [INFO] [stdout] 39 | 1 => B = B ^ operand, [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: replace it with: `B ^= operand` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] = note: `#[warn(clippy::assign_op_pattern)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of an assign operation [INFO] [stdout] --> src/bin/17.rs:48:18 [INFO] [stdout] | [INFO] [stdout] 48 | 4 => B = B ^ C, [INFO] [stdout] | ^^^^^^^^^ help: replace it with: `B ^= C` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `i64` is unnecessary [INFO] [stdout] --> src/bin/17.rs:52:27 [INFO] [stdout] | [INFO] [stdout] 52 | 6 => B = A / ((2 as i64).pow(combo(operand, A, B, C) as u32)), [INFO] [stdout] | ^^^^^^^^^^ help: try: `2_i64` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `i64` is unnecessary [INFO] [stdout] --> src/bin/17.rs:54:27 [INFO] [stdout] | [INFO] [stdout] 54 | 7 => C = A / ((2 as i64).pow(combo(operand, A, B, C) as u32)), [INFO] [stdout] | ^^^^^^^^^^ help: try: `2_i64` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/bin/20.rs:41:24 [INFO] [stdout] | [INFO] [stdout] 41 | let save = positions[&(px, py)] as i32 - positions[&(*x, *y)] as i32 - d as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `positions[&(px, py)]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/bin/20.rs:41:54 [INFO] [stdout] | [INFO] [stdout] 41 | let save = positions[&(px, py)] as i32 - positions[&(*x, *y)] as i32 - d as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `positions[&(*x, *y)]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/20.rs:59:25 [INFO] [stdout] | [INFO] [stdout] 59 | fn find_in_radius(maze: &Vec>, x: usize, y: usize, radius: usize) -> Vec<(usize, usize, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 59 - fn find_in_radius(maze: &Vec>, x: usize, y: usize, radius: usize) -> Vec<(usize, usize, usize)> { [INFO] [stdout] 59 + fn find_in_radius(maze: &[Vec], x: usize, y: usize, radius: usize) -> Vec<(usize, usize, usize)> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/bin/20.rs:118:24 [INFO] [stdout] | [INFO] [stdout] 118 | let save = positions[&(px, py)] as i32 - positions[&(*x, *y)] as i32 - d as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `positions[&(px, py)]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/bin/20.rs:118:54 [INFO] [stdout] | [INFO] [stdout] 118 | let save = positions[&(px, py)] as i32 - positions[&(*x, *y)] as i32 - d as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `positions[&(*x, *y)]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting integer literal to `u64` is unnecessary [INFO] [stdout] --> src/bin/17.rs:148:22 [INFO] [stdout] | [INFO] [stdout] 148 | print!("{}", 6323144925690 as u64 % 8) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: try: `6323144925690_u64` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `A` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:10:13 [INFO] [stdout] | [INFO] [stdout] 10 | let mut A = sscanf::sscanf!(&lines[0], "Register A: {}", i64).unwrap(); [INFO] [stdout] | ^ help: convert the identifier to snake case: `a` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `B` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:11:13 [INFO] [stdout] | [INFO] [stdout] 11 | let mut B = sscanf::sscanf!(&lines[1], "Register B: {}", i64).unwrap(); [INFO] [stdout] | ^ help: convert the identifier to snake case: `b` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `C` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:12:13 [INFO] [stdout] | [INFO] [stdout] 12 | let mut C = sscanf::sscanf!(&lines[2], "Register C: {}", i64).unwrap(); [INFO] [stdout] | ^ help: convert the identifier to snake case (notice the capitalization): `c` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `A` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:26:33 [INFO] [stdout] | [INFO] [stdout] 26 | fn eval(program: &Vec, mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] | ^ help: convert the identifier to snake case: `a` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `B` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:26:45 [INFO] [stdout] | [INFO] [stdout] 26 | fn eval(program: &Vec, mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] | ^ help: convert the identifier to snake case: `b` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `C` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:26:57 [INFO] [stdout] | [INFO] [stdout] 26 | fn eval(program: &Vec, mut A: i64, mut B: i64, mut C: i64) -> Vec { [INFO] [stdout] | ^ help: convert the identifier to snake case (notice the capitalization): `c` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `A` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:63:24 [INFO] [stdout] | [INFO] [stdout] 63 | fn combo(operand: i64, A: i64, B: i64, C: i64) -> i64 { [INFO] [stdout] | ^ help: convert the identifier to snake case: `a` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `B` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:63:32 [INFO] [stdout] | [INFO] [stdout] 63 | fn combo(operand: i64, A: i64, B: i64, C: i64) -> i64 { [INFO] [stdout] | ^ help: convert the identifier to snake case: `b` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `C` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:63:40 [INFO] [stdout] | [INFO] [stdout] 63 | fn combo(operand: i64, A: i64, B: i64, C: i64) -> i64 { [INFO] [stdout] | ^ help: convert the identifier to snake case (notice the capitalization): `c` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable `A` should have a snake case name [INFO] [stdout] --> src/bin/17.rs:110:13 [INFO] [stdout] | [INFO] [stdout] 110 | let A: i64 = factors.iter().enumerate().map(|(index, v)| v * 2i64.pow(3 * index as u32)).sum(); [INFO] [stdout] | ^ help: convert the identifier to snake case: `a` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/24.rs:38:9 [INFO] [stdout] | [INFO] [stdout] 38 | let mut gates: HashMap = input.lines().skip(p + 1) [INFO] [stdout] | ----^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:92:43 [INFO] [stdout] | [INFO] [stdout] 92 | sequence.push_str(&"^".repeat(dx.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dx.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] = note: `#[warn(clippy::cast_abs_to_unsigned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:95:43 [INFO] [stdout] | [INFO] [stdout] 95 | sequence.push_str(&">".repeat(dy.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dy.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:107:47 [INFO] [stdout] | [INFO] [stdout] 107 | sequence.push_str(&">".repeat(dy.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dy.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:111:47 [INFO] [stdout] | [INFO] [stdout] 111 | sequence.push_str(&"^".repeat(dx.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dx.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:139:43 [INFO] [stdout] | [INFO] [stdout] 139 | sequence.push_str(&">".repeat(dy.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dy.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:140:43 [INFO] [stdout] | [INFO] [stdout] 140 | sequence.push_str(&"^".repeat(dx.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dx.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:151:47 [INFO] [stdout] | [INFO] [stdout] 151 | sequence.push_str(&">".repeat(dy.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dy.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:155:47 [INFO] [stdout] | [INFO] [stdout] 155 | sequence.push_str(&"^".repeat(dx.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dx.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/04.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | return Some(result); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 9 - return Some(result); [INFO] [stdout] 9 + Some(result) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/04.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 16 | return Some(result); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 16 - return Some(result); [INFO] [stdout] 16 + Some(result) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/04.rs:19:22 [INFO] [stdout] | [INFO] [stdout] 19 | fn find_xmas(matrix: &Vec>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 19 - fn find_xmas(matrix: &Vec>) -> u32 { [INFO] [stdout] 19 + fn find_xmas(matrix: &[Vec]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found call to `str::trim` before `str::split_whitespace` [INFO] [stdout] --> src/bin/11.rs:7:24 [INFO] [stdout] | [INFO] [stdout] 7 | let stones = input.trim().split_whitespace().map(|n| n.parse::().unwrap()).collect_vec(); [INFO] [stdout] | ^^^^^^^ help: remove `trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trim_split_whitespace [INFO] [stdout] = note: `#[warn(clippy::trim_split_whitespace)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/11.rs:26:9 [INFO] [stdout] | [INFO] [stdout] 26 | return count_splits(left, blinks - 1) + count_splits(right, blinks - 1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 26 - return count_splits(left, blinks - 1) + count_splits(right, blinks - 1); [INFO] [stdout] 26 + count_splits(left, blinks - 1) + count_splits(right, blinks - 1) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/11.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 28 | return count_splits(stone * 2024, blinks - 1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 28 - return count_splits(stone * 2024, blinks - 1); [INFO] [stdout] 28 + count_splits(stone * 2024, blinks - 1) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/04.rs:62:23 [INFO] [stdout] | [INFO] [stdout] 62 | fn find_x_mas(matrix: &Vec>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 62 - fn find_x_mas(matrix: &Vec>) -> u32 { [INFO] [stdout] 62 + fn find_x_mas(matrix: &[Vec]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/bin/21.rs:245:19 [INFO] [stdout] | [INFO] [stdout] 245 | result += complexity as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `complexity` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/bin/23.rs:20:31 [INFO] [stdout] | [INFO] [stdout] 20 | let new = vec![node, n, i].iter().map(|&node| node.to_string()).sorted().collect_tuple().unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: you can use an array directly: `[node, n, i]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `.is_multiple_of()` [INFO] [stdout] --> src/bin/11.rs:24:8 [INFO] [stdout] | [INFO] [stdout] 24 | if stone.to_string().len() % 2 == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `stone.to_string().len().is_multiple_of(2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_is_multiple_of [INFO] [stdout] = note: `#[warn(clippy::manual_is_multiple_of)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found call to `str::trim` before `str::split_whitespace` [INFO] [stdout] --> src/bin/11.rs:41:24 [INFO] [stdout] | [INFO] [stdout] 41 | let stones = input.trim().split_whitespace().map(|n| n.parse::().unwrap()).collect_vec(); [INFO] [stdout] | ^^^^^^^ help: remove `trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trim_split_whitespace [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `wires` [INFO] [stdout] --> src/bin/24.rs:88:10 [INFO] [stdout] | [INFO] [stdout] 88 | let (wires, gates) = get_wires_and_gates(input); [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_wires` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Lines<'_>` [INFO] [stdout] --> src/bin/14.rs:12:21 [INFO] [stdout] | [INFO] [stdout] 12 | let quadrants = input.lines() [INFO] [stdout] | _____________________^ [INFO] [stdout] 13 | | .into_iter() [INFO] [stdout] | |____________________^ help: consider removing `.into_iter()`: `input.lines()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Lines<'_>` [INFO] [stdout] --> src/bin/14.rs:54:18 [INFO] [stdout] | [INFO] [stdout] 54 | let robots = input.lines() [INFO] [stdout] | __________________^ [INFO] [stdout] 55 | | .into_iter() [INFO] [stdout] | |____________________^ help: consider removing `.into_iter()`: `input.lines()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found call to `str::trim` before `str::split_whitespace` [INFO] [stdout] --> src/bin/11.rs:7:24 [INFO] [stdout] | [INFO] [stdout] 7 | let stones = input.trim().split_whitespace().map(|n| n.parse::().unwrap()).collect_vec(); [INFO] [stdout] | ^^^^^^^ help: remove `trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trim_split_whitespace [INFO] [stdout] = note: `#[warn(clippy::trim_split_whitespace)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/11.rs:26:9 [INFO] [stdout] | [INFO] [stdout] 26 | return count_splits(left, blinks - 1) + count_splits(right, blinks - 1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 26 - return count_splits(left, blinks - 1) + count_splits(right, blinks - 1); [INFO] [stdout] 26 + count_splits(left, blinks - 1) + count_splits(right, blinks - 1) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/11.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 28 | return count_splits(stone * 2024, blinks - 1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 28 - return count_splits(stone * 2024, blinks - 1); [INFO] [stdout] 28 + count_splits(stone * 2024, blinks - 1) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `.is_multiple_of()` [INFO] [stdout] --> src/bin/11.rs:24:8 [INFO] [stdout] | [INFO] [stdout] 24 | if stone.to_string().len() % 2 == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `stone.to_string().len().is_multiple_of(2)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_is_multiple_of [INFO] [stdout] = note: `#[warn(clippy::manual_is_multiple_of)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found call to `str::trim` before `str::split_whitespace` [INFO] [stdout] --> src/bin/11.rs:41:24 [INFO] [stdout] | [INFO] [stdout] 41 | let stones = input.trim().split_whitespace().map(|n| n.parse::().unwrap()).collect_vec(); [INFO] [stdout] | ^^^^^^^ help: remove `trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trim_split_whitespace [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.nth(0)` on a `std::iter::Iterator`, when `.next()` is equivalent [INFO] [stdout] --> src/bin/14.rs:74:33 [INFO] [stdout] | [INFO] [stdout] 74 | ... positions[&(x, y)].to_string().chars().nth(0).unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try calling `.next()` instead of `.nth(0)`: `positions[&(x, y)].to_string().chars().next()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth_zero [INFO] [stdout] = note: `#[warn(clippy::iter_nth_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::cmp::min` [INFO] [stdout] --> src/bin/15.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::cmp::min; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/bin/24.rs:108:25 [INFO] [stdout] | [INFO] [stdout] 108 | ...e if !name.starts_with('z') && !(i1.starts_with('x') && i2.starts_with('y') || i1.starts_with('y') && i2.starts_with('x')) && op... [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `!(name.starts_with('z') || i1.starts_with('x') && i2.starts_with('y') || i1.starts_with('y') && i2.starts_with('x'))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/bin/24.rs:101:9 [INFO] [stdout] | [INFO] [stdout] 101 | / match gate { [INFO] [stdout] 102 | | Gate::Expr { op, i1, i2 } => { [INFO] [stdout] 103 | | if name.starts_with('z') && op != "XOR" && name != "z45" { [INFO] [stdout] 104 | | println!("rule 1: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] ... | [INFO] [stdout] 129 | | _ => {}, [INFO] [stdout] 130 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 101 ~ if let Gate::Expr { op, i1, i2 } = gate { [INFO] [stdout] 102 + if name.starts_with('z') && op != "XOR" && name != "z45" { [INFO] [stdout] 103 + println!("rule 1: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] 104 + result.push(name.clone()); [INFO] [stdout] 105 + } [INFO] [stdout] 106 + [INFO] [stdout] 107 + else if !name.starts_with('z') && !(i1.starts_with('x') && i2.starts_with('y') || i1.starts_with('y') && i2.starts_with('x')) && op == "XOR" { [INFO] [stdout] 108 + println!("rule 2: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] 109 + result.push(name.clone()); [INFO] [stdout] 110 + } [INFO] [stdout] 111 + [INFO] [stdout] 112 + else if op == "XOR" && (i1.starts_with('x') && i2.starts_with('y') || i1.starts_with('y') && i2.starts_with('x')) && (i1 != "x00" && i2 != "y00") { [INFO] [stdout] 113 + [INFO] [stdout] 114 + if find_xor_with_input(&gates, name.clone()).is_none() { [INFO] [stdout] 115 + println!("rule 3: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] 116 + result.push(name.clone()); [INFO] [stdout] 117 + } [INFO] [stdout] 118 + } [INFO] [stdout] 119 + [INFO] [stdout] 120 + else if op == "AND" && (i1 != "x00" && i2 != "y00") { [INFO] [stdout] 121 + [INFO] [stdout] 122 + if find_or_with_input(&gates, name.clone()).is_none() { [INFO] [stdout] 123 + println!("rule 4: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] 124 + result.push(name.clone()); [INFO] [stdout] 125 + } [INFO] [stdout] 126 + } [INFO] [stdout] 127 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/bin/24.rs:121:22 [INFO] [stdout] | [INFO] [stdout] 121 | else if op == "AND" && (i1 != "x00" && i2 != "y00") { [INFO] [stdout] | ______________________^ [INFO] [stdout] 122 | | [INFO] [stdout] 123 | | if find_or_with_input(&gates, name.clone()).is_none() { [INFO] [stdout] 124 | | println!("rule 4: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] ... | [INFO] [stdout] 127 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 121 ~ else if op == "AND" && (i1 != "x00" && i2 != "y00") [INFO] [stdout] 122 | [INFO] [stdout] 123 ~ && find_or_with_input(&gates, name.clone()).is_none() { [INFO] [stdout] 124 | println!("rule 4: Gate({} {} {} -> {})", i1, op, i2, name); [INFO] [stdout] 125 | result.push(name.clone()); [INFO] [stdout] 126 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/bin/24.rs:142:17 [INFO] [stdout] | [INFO] [stdout] 142 | / if op == "XOR" && (i1 == name || i2 == name) { [INFO] [stdout] 143 | | return Some(n); [INFO] [stdout] 144 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 141 ~ Gate::Expr { op, i1, i2 } [INFO] [stdout] 142 ~ if op == "XOR" && (i1 == name || i2 == name) => { [INFO] [stdout] 143 | return Some(n); [INFO] [stdout] 144 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/bin/24.rs:140:9 [INFO] [stdout] | [INFO] [stdout] 140 | / match gate { [INFO] [stdout] 141 | | Gate::Expr { op, i1, i2 } => { [INFO] [stdout] 142 | | if op == "XOR" && (i1 == name || i2 == name) { [INFO] [stdout] 143 | | return Some(n); [INFO] [stdout] ... | [INFO] [stdout] 146 | | _ => {}, [INFO] [stdout] 147 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 140 ~ if let Gate::Expr { op, i1, i2 } = gate { [INFO] [stdout] 141 + if op == "XOR" && (i1 == name || i2 == name) { [INFO] [stdout] 142 + return Some(n); [INFO] [stdout] 143 + } [INFO] [stdout] 144 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/bin/24.rs:157:17 [INFO] [stdout] | [INFO] [stdout] 157 | / if op == "OR" && (i1 == name || i2 == name) { [INFO] [stdout] 158 | | return Some(n); [INFO] [stdout] 159 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 156 ~ Gate::Expr { op, i1, i2 } [INFO] [stdout] 157 ~ if op == "OR" && (i1 == name || i2 == name) => { [INFO] [stdout] 158 | return Some(n); [INFO] [stdout] 159 ~ }, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/bin/24.rs:155:9 [INFO] [stdout] | [INFO] [stdout] 155 | / match gate { [INFO] [stdout] 156 | | Gate::Expr { op, i1, i2 } => { [INFO] [stdout] 157 | | if op == "OR" && (i1 == name || i2 == name) { [INFO] [stdout] 158 | | return Some(n); [INFO] [stdout] ... | [INFO] [stdout] 161 | | _ => {}, [INFO] [stdout] 162 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 155 ~ if let Gate::Expr { op, i1, i2 } = gate { [INFO] [stdout] 156 + if op == "OR" && (i1 == name || i2 == name) { [INFO] [stdout] 157 + return Some(n); [INFO] [stdout] 158 + } [INFO] [stdout] 159 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/15.rs:89:5 [INFO] [stdout] | [INFO] [stdout] 89 | return (map, moves); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 89 - return (map, moves); [INFO] [stdout] 89 + (map, moves) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/15.rs:95:10 [INFO] [stdout] | [INFO] [stdout] 95 | .map(|line| line.trim().chars().collect_vec()) [INFO] [stdout] | __________^ [INFO] [stdout] 96 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|line| line.trim().chars().collect_vec())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/bin/15.rs:151:33 [INFO] [stdout] | [INFO] [stdout] 151 | while by != y as i32 { [INFO] [stdout] | ^^^^^^^^ help: try: `y` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&mut Vec` instead of `&mut [_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/15.rs:222:22 [INFO] [stdout] | [INFO] [stdout] 222 | fn move_box(map: &mut Vec>, bx: i32, by1: i32, by2: i32, dx: i32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 222 - fn move_box(map: &mut Vec>, bx: i32, by1: i32, by2: i32, dx: i32) { [INFO] [stdout] 222 + fn move_box(map: &mut [Vec], bx: i32, by1: i32, by2: i32, dx: i32) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/15.rs:276:5 [INFO] [stdout] | [INFO] [stdout] 276 | return (map, moves); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 276 - return (map, moves); [INFO] [stdout] 276 + (map, moves) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/15.rs:262:14 [INFO] [stdout] | [INFO] [stdout] 262 | .map(|ch| match ch { [INFO] [stdout] | ______________^ [INFO] [stdout] 263 | | '#' => ['#', '#'], [INFO] [stdout] 264 | | 'O' => ['[', ']'], [INFO] [stdout] 265 | | '.' => ['.', '.'], [INFO] [stdout] ... | [INFO] [stdout] 268 | | }) [INFO] [stdout] 269 | | .flatten() [INFO] [stdout] | |______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] help: try replacing `map` with `flat_map` and remove the `.flatten()` [INFO] [stdout] | [INFO] [stdout] 262 ~ .flat_map(|ch| match ch { [INFO] [stdout] 263 + '#' => ['#', '#'], [INFO] [stdout] 264 + 'O' => ['[', ']'], [INFO] [stdout] 265 + '.' => ['.', '.'], [INFO] [stdout] 266 + '@' => ['@', '.'], [INFO] [stdout] 267 + _ => panic!("Invalid character") [INFO] [stdout] 268 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `itertools::Itertools` [INFO] [stdout] --> src/bin/20.rs:7:5 [INFO] [stdout] | [INFO] [stdout] 7 | use itertools::Itertools; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/20.rs:10:9 [INFO] [stdout] | [INFO] [stdout] 10 | let mut maze = get_char_matrix(input); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/20.rs:87:9 [INFO] [stdout] | [INFO] [stdout] 87 | let mut maze = get_char_matrix(input); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/08.rs:14:10 [INFO] [stdout] | [INFO] [stdout] 14 | .map(|idx| get_antinodes(idx, m, n)) [INFO] [stdout] | __________^ [INFO] [stdout] 15 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|idx| get_antinodes(idx, m, n))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/bin/20.rs:41:24 [INFO] [stdout] | [INFO] [stdout] 41 | let save = positions[&(px, py)] as i32 - positions[&(*x, *y)] as i32 - d as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `positions[&(px, py)]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/bin/20.rs:41:54 [INFO] [stdout] | [INFO] [stdout] 41 | let save = positions[&(px, py)] as i32 - positions[&(*x, *y)] as i32 - d as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `positions[&(*x, *y)]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/20.rs:59:25 [INFO] [stdout] | [INFO] [stdout] 59 | fn find_in_radius(maze: &Vec>, x: usize, y: usize, radius: usize) -> Vec<(usize, usize, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 59 - fn find_in_radius(maze: &Vec>, x: usize, y: usize, radius: usize) -> Vec<(usize, usize, usize)> { [INFO] [stdout] 59 + fn find_in_radius(maze: &[Vec], x: usize, y: usize, radius: usize) -> Vec<(usize, usize, usize)> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/bin/20.rs:118:24 [INFO] [stdout] | [INFO] [stdout] 118 | let save = positions[&(px, py)] as i32 - positions[&(*x, *y)] as i32 - d as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `positions[&(px, py)]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/bin/20.rs:118:54 [INFO] [stdout] | [INFO] [stdout] 118 | let save = positions[&(px, py)] as i32 - positions[&(*x, *y)] as i32 - d as i32; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `positions[&(*x, *y)]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/08.rs:26:10 [INFO] [stdout] | [INFO] [stdout] 26 | .map(|(i, line)| line.char_indices() [INFO] [stdout] | __________^ [INFO] [stdout] 27 | | .filter_map(move |(j, ch)| if ch != '.' { Some((ch, (i, j))) } else { None }) [INFO] [stdout] 28 | | .collect_vec() [INFO] [stdout] 29 | | ) [INFO] [stdout] 30 | | .flatten() [INFO] [stdout] | |__________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] help: try replacing `map` with `flat_map` and remove the `.flatten()` [INFO] [stdout] | [INFO] [stdout] 26 ~ .flat_map(|(i, line)| line.char_indices() [INFO] [stdout] 27 + .filter_map(move |(j, ch)| if ch != '.' { Some((ch, (i, j))) } else { None }) [INFO] [stdout] 28 + .collect_vec()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/08.rs:39:10 [INFO] [stdout] | [INFO] [stdout] 39 | .map(|((x1, y1), (x2, y2))| { [INFO] [stdout] | __________^ [INFO] [stdout] 40 | | let (a1, a2) = get_pair_antinodes(*x1, *y1, *x2, *y2); [INFO] [stdout] 41 | | [a1, a2] [INFO] [stdout] 42 | | }) [INFO] [stdout] 43 | | .flatten() [INFO] [stdout] | |__________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] help: try replacing `map` with `flat_map` and remove the `.flatten()` [INFO] [stdout] | [INFO] [stdout] 39 ~ .flat_map(|((x1, y1), (x2, y2))| { [INFO] [stdout] 40 + let (a1, a2) = get_pair_antinodes(*x1, *y1, *x2, *y2); [INFO] [stdout] 41 + [a1, a2] [INFO] [stdout] 42 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/bin/08.rs:37:10 [INFO] [stdout] | [INFO] [stdout] 37 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/08.rs:70:10 [INFO] [stdout] | [INFO] [stdout] 70 | .map(|idx| get_antinodes_2(idx, m, n)) [INFO] [stdout] | __________^ [INFO] [stdout] 71 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|idx| get_antinodes_2(idx, m, n))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/08.rs:82:10 [INFO] [stdout] | [INFO] [stdout] 82 | .map(|((x1, y1), (x2, y2))| get_all_antinodes(*x1, *y1, *x2, *y2)) [INFO] [stdout] | __________^ [INFO] [stdout] 83 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|((x1, y1), (x2, y2))| get_all_antinodes(*x1, *y1, *x2, *y2))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/bin/08.rs:80:10 [INFO] [stdout] | [INFO] [stdout] 80 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to u32 [INFO] [stdout] --> src/bin/01.rs:13:25 [INFO] [stdout] | [INFO] [stdout] 13 | .map(|(n1, n2)| (n1 as i32 - n2 as i32).abs() as u32) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `(n1 as i32 - n2 as i32).unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] = note: `#[warn(clippy::cast_abs_to_unsigned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/01.rs:36:5 [INFO] [stdout] | [INFO] [stdout] 36 | / return input.lines() [INFO] [stdout] 37 | | .map ( |line| line.split_whitespace() [INFO] [stdout] 38 | | .map(|n| n.parse::().unwrap()) [INFO] [stdout] 39 | | .collect_tuple() [INFO] [stdout] ... | [INFO] [stdout] 42 | | .unzip(); [INFO] [stdout] | |________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 36 ~ input.lines() [INFO] [stdout] 37 + .map ( |line| line.split_whitespace() [INFO] [stdout] 38 + .map(|n| n.parse::().unwrap()) [INFO] [stdout] 39 + .collect_tuple() [INFO] [stdout] 40 + .unwrap() [INFO] [stdout] 41 + ) [INFO] [stdout] 42 ~ .unzip() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/12.rs:57:5 [INFO] [stdout] | [INFO] [stdout] 57 | return (perimeter, area, visited); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 57 - return (perimeter, area, visited); [INFO] [stdout] 57 + (perimeter, area, visited) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/12.rs:30:22 [INFO] [stdout] | [INFO] [stdout] 30 | fn find_region(farm: &Vec>, i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 30 - fn find_region(farm: &Vec>, i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] 30 + fn find_region(farm: &[Vec], i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/12.rs:121:5 [INFO] [stdout] | [INFO] [stdout] 121 | return (sides, area, visited); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 121 - return (sides, area, visited); [INFO] [stdout] 121 + (sides, area, visited) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/12.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | fn find_region_with_sides(farm: &Vec>, i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 81 - fn find_region_with_sides(farm: &Vec>, i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] 81 + fn find_region_with_sides(farm: &[Vec], i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/12.rs:140:5 [INFO] [stdout] | [INFO] [stdout] 140 | return result; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 140 - return result; [INFO] [stdout] 140 + result [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to want to iterate on a map's values [INFO] [stdout] --> src/bin/12.rs:126:19 [INFO] [stdout] | [INFO] [stdout] 126 | for (_, v) in sides { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stdout] = note: `#[warn(clippy::for_kv_map)]` on by default [INFO] [stdout] help: use the corresponding method [INFO] [stdout] | [INFO] [stdout] 126 - for (_, v) in sides { [INFO] [stdout] 126 + for v in sides.values() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/bin/16.rs:115:25 [INFO] [stdout] | [INFO] [stdout] 115 | fn shortest_paths_tiles(mut map: Vec>) -> usize { [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `dir` [INFO] [stdout] --> src/bin/16.rs:187:19 [INFO] [stdout] | [INFO] [stdout] 187 | .min_by_key(|(dir, (v, _))| *v) [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_dir` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the function `shortest_path` doesn't need a mutable reference [INFO] [stdout] --> src/bin/16.rs:15:19 [INFO] [stdout] | [INFO] [stdout] 15 | shortest_path(&mut maze, (sx, sy), (ex, ey)) [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed [INFO] [stdout] = note: `#[warn(clippy::unnecessary_mut_passed)]` on by default [INFO] [stdout] help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] 15 - shortest_path(&mut maze, (sx, sy), (ex, ey)) [INFO] [stdout] 15 + shortest_path(&maze, (sx, sy), (ex, ey)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::cmp::min` [INFO] [stdout] --> src/bin/15.rs:1:5 [INFO] [stdout] | [INFO] [stdout] 1 | use std::cmp::min; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `input` [INFO] [stdout] --> src/bin/25.rs:42:17 [INFO] [stdout] | [INFO] [stdout] 42 | pub fn part_two(input: &str) -> Option { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_input` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/16.rs:80:25 [INFO] [stdout] | [INFO] [stdout] 80 | fn get_next_tiles(maze: &Vec>, x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 80 - fn get_next_tiles(maze: &Vec>, x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] 80 + fn get_next_tiles(maze: &[Vec], x: usize, y: usize, direction: Direction, score: usize) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `grid` [INFO] [stdout] --> src/bin/25.rs:17:26 [INFO] [stdout] | [INFO] [stdout] 17 | for i in 0..7 { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 17 - for i in 0..7 { [INFO] [stdout] 17 + for in grid.iter().take(7) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/bin/16.rs:120:24 [INFO] [stdout] | [INFO] [stdout] 120 | let mut value_map: HashMap<(Position, Direction), (i64, Vec<(Position, Direction)>)> = [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:92:43 [INFO] [stdout] | [INFO] [stdout] 92 | sequence.push_str(&"^".repeat(dx.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dx.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] = note: `#[warn(clippy::cast_abs_to_unsigned)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:95:43 [INFO] [stdout] | [INFO] [stdout] 95 | sequence.push_str(&">".repeat(dy.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dy.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:107:47 [INFO] [stdout] | [INFO] [stdout] 107 | sequence.push_str(&">".repeat(dy.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dy.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:111:47 [INFO] [stdout] | [INFO] [stdout] 111 | sequence.push_str(&"^".repeat(dx.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dx.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:139:43 [INFO] [stdout] | [INFO] [stdout] 139 | sequence.push_str(&">".repeat(dy.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dy.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:140:43 [INFO] [stdout] | [INFO] [stdout] 140 | sequence.push_str(&"^".repeat(dx.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dx.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:151:47 [INFO] [stdout] | [INFO] [stdout] 151 | sequence.push_str(&">".repeat(dy.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dy.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting the result of `i32::abs()` to usize [INFO] [stdout] --> src/bin/21.rs:155:47 [INFO] [stdout] | [INFO] [stdout] 155 | sequence.push_str(&"^".repeat(dx.abs() as usize)); [INFO] [stdout] | ^^^^^^^^ help: replace with: `dx.unsigned_abs()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_abs_to_unsigned [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/bin/16.rs:207:16 [INFO] [stdout] | [INFO] [stdout] 207 | value_map: &mut HashMap<(Position, Direction), (i64, Vec<(Position, Direction)>)>, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/bin/21.rs:245:19 [INFO] [stdout] | [INFO] [stdout] 245 | result += complexity as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ help: try: `complexity` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/09.rs:36:46 [INFO] [stdout] | [INFO] [stdout] 36 | fn compact(files: &Vec<(usize, u32)>, space: &Vec, n: usize) -> Vec { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 36 - fn compact(files: &Vec<(usize, u32)>, space: &Vec, n: usize) -> Vec { [INFO] [stdout] 36 + fn compact(files: &Vec<(usize, u32)>, space: &[u32], n: usize) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/09.rs:68:22 [INFO] [stdout] | [INFO] [stdout] 68 | fn file_stack(files: &Vec<(usize, u32)>) -> VecDeque { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 68 - fn file_stack(files: &Vec<(usize, u32)>) -> VecDeque { [INFO] [stdout] 68 + fn file_stack(files: &[(usize, u32)]) -> VecDeque { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/09.rs:70:10 [INFO] [stdout] | [INFO] [stdout] 70 | .map(|(id, len)| vec![*id as u64; *len as usize]) [INFO] [stdout] | __________^ [INFO] [stdout] 71 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|(id, len)| vec![*id as u64; *len as usize])` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/09.rs:90:10 [INFO] [stdout] | [INFO] [stdout] 90 | .map(|(i, len)| if i % 2 == 0 { vec![Some((i / 2) as u64); len as usize] } else { vec![None; len as usize] }) [INFO] [stdout] | __________^ [INFO] [stdout] 91 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|(i, len)| if i % 2 == 0 { vec![Some((i / 2) as u64); len as usize] } else { vec![None; len as usize] })` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/bin/09.rs:162:5 [INFO] [stdout] | [INFO] [stdout] 160 | let r = filesystem.into_iter().map(|m| m.unwrap_or(0)).collect(); [INFO] [stdout] | ----------------------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 161 | [INFO] [stdout] 162 | r [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 160 ~ [INFO] [stdout] 161 | [INFO] [stdout] 162 ~ filesystem.into_iter().map(|m| m.unwrap_or(0)).collect() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/bin/09.rs:136:95 [INFO] [stdout] | [INFO] [stdout] 136 | if i < file_to_copy_i && filesystem[i..].iter().take(*file_size as usize).all(|x| *x == None) { [INFO] [stdout] | ^^^^^^^^^^ help: use `Option::is_none()` instead: `x.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter_mut()` and will not consume the `Vec` [INFO] [stdout] --> src/bin/09.rs:160:24 [INFO] [stdout] | [INFO] [stdout] 160 | let r = filesystem.into_iter().map(|m| m.unwrap_or(0)).collect(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter_mut` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert` to construct default value [INFO] [stdout] --> src/bin/05.rs:31:29 [INFO] [stdout] | [INFO] [stdout] 31 | rules_pre.entry(n1).or_insert(HashSet::new()).insert(n2); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `row` is used to index `map` [INFO] [stdout] --> src/bin/16.rs:222:16 [INFO] [stdout] | [INFO] [stdout] 222 | for row in 0..map.len() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 222 - for row in 0..map.len() { [INFO] [stdout] 222 + for (row, ) in map.iter().enumerate() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `column` is used to index `map` [INFO] [stdout] --> src/bin/16.rs:223:23 [INFO] [stdout] | [INFO] [stdout] 223 | for column in 0..map[row].len() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] help: consider using an iterator and enumerate() [INFO] [stdout] | [INFO] [stdout] 223 - for column in 0..map[row].len() { [INFO] [stdout] 223 + for (column, ) in map.iter().enumerate().take(map[row].len()) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert` to construct default value [INFO] [stdout] --> src/bin/05.rs:32:30 [INFO] [stdout] | [INFO] [stdout] 32 | rules_post.entry(n2).or_insert(HashSet::new()).insert(n1); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/09.rs:36:46 [INFO] [stdout] | [INFO] [stdout] 36 | fn compact(files: &Vec<(usize, u32)>, space: &Vec, n: usize) -> Vec { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 36 - fn compact(files: &Vec<(usize, u32)>, space: &Vec, n: usize) -> Vec { [INFO] [stdout] 36 + fn compact(files: &Vec<(usize, u32)>, space: &[u32], n: usize) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/08.rs:14:10 [INFO] [stdout] | [INFO] [stdout] 14 | .map(|idx| get_antinodes(idx, m, n)) [INFO] [stdout] | __________^ [INFO] [stdout] 15 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|idx| get_antinodes(idx, m, n))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/09.rs:68:22 [INFO] [stdout] | [INFO] [stdout] 68 | fn file_stack(files: &Vec<(usize, u32)>) -> VecDeque { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 68 - fn file_stack(files: &Vec<(usize, u32)>) -> VecDeque { [INFO] [stdout] 68 + fn file_stack(files: &[(usize, u32)]) -> VecDeque { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/09.rs:70:10 [INFO] [stdout] | [INFO] [stdout] 70 | .map(|(id, len)| vec![*id as u64; *len as usize]) [INFO] [stdout] | __________^ [INFO] [stdout] 71 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|(id, len)| vec![*id as u64; *len as usize])` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/05.rs:59:5 [INFO] [stdout] | [INFO] [stdout] 59 | return (rules, updates); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 59 - return (rules, updates); [INFO] [stdout] 59 + (rules, updates) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/09.rs:90:10 [INFO] [stdout] | [INFO] [stdout] 90 | .map(|(i, len)| if i % 2 == 0 { vec![Some((i / 2) as u64); len as usize] } else { vec![None; len as usize] }) [INFO] [stdout] | __________^ [INFO] [stdout] 91 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|(i, len)| if i % 2 == 0 { vec![Some((i / 2) as u64); len as usize] } else { vec![None; len as usize] })` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: returning the result of a `let` binding from a block [INFO] [stdout] --> src/bin/09.rs:162:5 [INFO] [stdout] | [INFO] [stdout] 160 | let r = filesystem.into_iter().map(|m| m.unwrap_or(0)).collect(); [INFO] [stdout] | ----------------------------------------------------------------- unnecessary `let` binding [INFO] [stdout] 161 | [INFO] [stdout] 162 | r [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stdout] = note: `#[warn(clippy::let_and_return)]` on by default [INFO] [stdout] help: return the expression directly [INFO] [stdout] | [INFO] [stdout] 160 ~ [INFO] [stdout] 161 | [INFO] [stdout] 162 ~ filesystem.into_iter().map(|m| m.unwrap_or(0)).collect() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/05.rs:62:111 [INFO] [stdout] | [INFO] [stdout] 62 | fn validate_updates(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &Vec>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 62 - fn validate_updates(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &Vec>) -> u32 { [INFO] [stdout] 62 + fn validate_updates(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &[Vec]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/05.rs:70:108 [INFO] [stdout] | [INFO] [stdout] 70 | fn count_invalid(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &Vec>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 70 - fn count_invalid(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &Vec>) -> u32 { [INFO] [stdout] 70 + fn count_invalid(rules_pre: &HashMap>, rules_post: &HashMap>, updates: &[Vec]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/bin/05.rs:75:35 [INFO] [stdout] | [INFO] [stdout] 75 | let mut copy = update.into_iter().clone().collect_vec(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: binary comparison to literal `Option::None` [INFO] [stdout] --> src/bin/09.rs:136:95 [INFO] [stdout] | [INFO] [stdout] 136 | if i < file_to_copy_i && filesystem[i..].iter().take(*file_size as usize).all(|x| *x == None) { [INFO] [stdout] | ^^^^^^^^^^ help: use `Option::is_none()` instead: `x.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#partialeq_to_none [INFO] [stdout] = note: `#[warn(clippy::partialeq_to_none)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/05.rs:86:9 [INFO] [stdout] | [INFO] [stdout] 86 | return std::cmp::Ordering::Less; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 86 - return std::cmp::Ordering::Less; [INFO] [stdout] 86 + std::cmp::Ordering::Less [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/05.rs:88:9 [INFO] [stdout] | [INFO] [stdout] 88 | return std::cmp::Ordering::Greater; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 88 - return std::cmp::Ordering::Greater; [INFO] [stdout] 88 + std::cmp::Ordering::Greater [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/05.rs:90:9 [INFO] [stdout] | [INFO] [stdout] 90 | return std::cmp::Ordering::Equal; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 90 - return std::cmp::Ordering::Equal; [INFO] [stdout] 90 + std::cmp::Ordering::Equal [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/05.rs:94:28 [INFO] [stdout] | [INFO] [stdout] 94 | fn is_valid_update(update: &Vec, rules_pre: &HashMap>, rules_post: &HashMap>) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 94 - fn is_valid_update(update: &Vec, rules_pre: &HashMap>, rules_post: &HashMap>) -> bool { [INFO] [stdout] 94 + fn is_valid_update(update: &[u32], rules_pre: &HashMap>, rules_post: &HashMap>) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter_mut()` and will not consume the `Vec` [INFO] [stdout] --> src/bin/09.rs:160:24 [INFO] [stdout] | [INFO] [stdout] 160 | let r = filesystem.into_iter().map(|m| m.unwrap_or(0)).collect(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter_mut` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `slice` [INFO] [stdout] --> src/bin/05.rs:97:49 [INFO] [stdout] | [INFO] [stdout] 97 | let left: &HashSet = &update[0..i].into_iter().copied().collect(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/08.rs:26:10 [INFO] [stdout] | [INFO] [stdout] 26 | .map(|(i, line)| line.char_indices() [INFO] [stdout] | __________^ [INFO] [stdout] 27 | | .filter_map(move |(j, ch)| if ch != '.' { Some((ch, (i, j))) } else { None }) [INFO] [stdout] 28 | | .collect_vec() [INFO] [stdout] 29 | | ) [INFO] [stdout] 30 | | .flatten() [INFO] [stdout] | |__________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] help: try replacing `map` with `flat_map` and remove the `.flatten()` [INFO] [stdout] | [INFO] [stdout] 26 ~ .flat_map(|(i, line)| line.char_indices() [INFO] [stdout] 27 + .filter_map(move |(j, ch)| if ch != '.' { Some((ch, (i, j))) } else { None }) [INFO] [stdout] 28 + .collect_vec()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `slice` [INFO] [stdout] --> src/bin/05.rs:98:51 [INFO] [stdout] | [INFO] [stdout] 98 | let right: &HashSet = &update[i+1..].into_iter().copied().collect(); [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/08.rs:39:10 [INFO] [stdout] | [INFO] [stdout] 39 | .map(|((x1, y1), (x2, y2))| { [INFO] [stdout] | __________^ [INFO] [stdout] 40 | | let (a1, a2) = get_pair_antinodes(*x1, *y1, *x2, *y2); [INFO] [stdout] 41 | | [a1, a2] [INFO] [stdout] 42 | | }) [INFO] [stdout] 43 | | .flatten() [INFO] [stdout] | |__________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] help: try replacing `map` with `flat_map` and remove the `.flatten()` [INFO] [stdout] | [INFO] [stdout] 39 ~ .flat_map(|((x1, y1), (x2, y2))| { [INFO] [stdout] 40 + let (a1, a2) = get_pair_antinodes(*x1, *y1, *x2, *y2); [INFO] [stdout] 41 + [a1, a2] [INFO] [stdout] 42 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/bin/08.rs:37:10 [INFO] [stdout] | [INFO] [stdout] 37 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] = note: `#[warn(clippy::into_iter_on_ref)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/08.rs:70:10 [INFO] [stdout] | [INFO] [stdout] 70 | .map(|idx| get_antinodes_2(idx, m, n)) [INFO] [stdout] | __________^ [INFO] [stdout] 71 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|idx| get_antinodes_2(idx, m, n))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/08.rs:82:10 [INFO] [stdout] | [INFO] [stdout] 82 | .map(|((x1, y1), (x2, y2))| get_all_antinodes(*x1, *y1, *x2, *y2)) [INFO] [stdout] | __________^ [INFO] [stdout] 83 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|((x1, y1), (x2, y2))| get_all_antinodes(*x1, *y1, *x2, *y2))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.into_iter()` call is equivalent to `.iter()` and will not consume the `Vec` [INFO] [stdout] --> src/bin/08.rs:80:10 [INFO] [stdout] | [INFO] [stdout] 80 | .into_iter() [INFO] [stdout] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::collections::hash_set::Intersection<'_, u32, std::hash::RandomState>` [INFO] [stdout] --> src/bin/05.rs:103:39 [INFO] [stdout] | [INFO] [stdout] 103 | let left_post: HashSet = left.intersection(pre).into_iter().copied().collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `left.intersection(pre)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::collections::hash_set::Intersection<'_, u32, std::hash::RandomState>` [INFO] [stdout] --> src/bin/05.rs:104:39 [INFO] [stdout] | [INFO] [stdout] 104 | let right_pre: HashSet = right.intersection(post).into_iter().copied().collect(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `right.intersection(post)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/05.rs:106:12 [INFO] [stdout] | [INFO] [stdout] 106 | if left_post.len() != 0 || right_pre.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!left_post.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/05.rs:106:36 [INFO] [stdout] | [INFO] [stdout] 106 | if left_post.len() != 0 || right_pre.len() != 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!right_pre.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/bin/23.rs:20:31 [INFO] [stdout] | [INFO] [stdout] 20 | let new = vec![node, n, i].iter().map(|&node| node.to_string()).sorted().collect_tuple().unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: you can use an array directly: `[node, n, i]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/04.rs:9:5 [INFO] [stdout] | [INFO] [stdout] 9 | return Some(result); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 9 - return Some(result); [INFO] [stdout] 9 + Some(result) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/07.rs:20:13 [INFO] [stdout] | [INFO] [stdout] 20 | return 0 [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 20 - return 0 [INFO] [stdout] 20 + 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/07.rs:17:12 [INFO] [stdout] | [INFO] [stdout] 17 | if rem.len() == 0 && cur == goal{ [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rem.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/07.rs:19:19 [INFO] [stdout] | [INFO] [stdout] 19 | } else if rem.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rem.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/04.rs:16:5 [INFO] [stdout] | [INFO] [stdout] 16 | return Some(result); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 16 - return Some(result); [INFO] [stdout] 16 + Some(result) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: found call to `str::trim` before `str::split_whitespace` [INFO] [stdout] --> src/bin/07.rs:46:36 [INFO] [stdout] | [INFO] [stdout] 46 | let operands = line[1].trim().split_whitespace() [INFO] [stdout] | ^^^^^^^ help: remove `trim()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trim_split_whitespace [INFO] [stdout] = note: `#[warn(clippy::trim_split_whitespace)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/04.rs:19:22 [INFO] [stdout] | [INFO] [stdout] 19 | fn find_xmas(matrix: &Vec>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 19 - fn find_xmas(matrix: &Vec>) -> u32 { [INFO] [stdout] 19 + fn find_xmas(matrix: &[Vec]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/07.rs:66:13 [INFO] [stdout] | [INFO] [stdout] 66 | return 0 [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 66 - return 0 [INFO] [stdout] 66 + 0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/04.rs:62:23 [INFO] [stdout] | [INFO] [stdout] 62 | fn find_x_mas(matrix: &Vec>) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 62 - fn find_x_mas(matrix: &Vec>) -> u32 { [INFO] [stdout] 62 + fn find_x_mas(matrix: &[Vec]) -> u32 { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/07.rs:63:12 [INFO] [stdout] | [INFO] [stdout] 63 | if rem.len() == 0 && cur == goal { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rem.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/bin/07.rs:65:19 [INFO] [stdout] | [INFO] [stdout] 65 | } else if rem.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `rem.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/02.rs:43:27 [INFO] [stdout] | [INFO] [stdout] 43 | fn is_safe_increase(nums: &Vec) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 43 - fn is_safe_increase(nums: &Vec) -> bool { [INFO] [stdout] 43 + fn is_safe_increase(nums: &[u32]) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/02.rs:47:27 [INFO] [stdout] | [INFO] [stdout] 47 | fn is_safe_decrease(nums: &Vec) -> bool { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 47 - fn is_safe_decrease(nums: &Vec) -> bool { [INFO] [stdout] 47 + fn is_safe_decrease(nums: &[u32]) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/12.rs:57:5 [INFO] [stdout] | [INFO] [stdout] 57 | return (perimeter, area, visited); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 57 - return (perimeter, area, visited); [INFO] [stdout] 57 + (perimeter, area, visited) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/12.rs:30:22 [INFO] [stdout] | [INFO] [stdout] 30 | fn find_region(farm: &Vec>, i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 30 - fn find_region(farm: &Vec>, i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] 30 + fn find_region(farm: &[Vec], i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/12.rs:121:5 [INFO] [stdout] | [INFO] [stdout] 121 | return (sides, area, visited); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 121 - return (sides, area, visited); [INFO] [stdout] 121 + (sides, area, visited) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/12.rs:81:33 [INFO] [stdout] | [INFO] [stdout] 81 | fn find_region_with_sides(farm: &Vec>, i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 81 - fn find_region_with_sides(farm: &Vec>, i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] 81 + fn find_region_with_sides(farm: &[Vec], i: usize, j: usize) -> (u32, u32, HashSet<(usize, usize)>) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/12.rs:140:5 [INFO] [stdout] | [INFO] [stdout] 140 | return result; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 140 - return result; [INFO] [stdout] 140 + result [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to want to iterate on a map's values [INFO] [stdout] --> src/bin/12.rs:126:19 [INFO] [stdout] | [INFO] [stdout] 126 | for (_, v) in sides { [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#for_kv_map [INFO] [stdout] = note: `#[warn(clippy::for_kv_map)]` on by default [INFO] [stdout] help: use the corresponding method [INFO] [stdout] | [INFO] [stdout] 126 - for (_, v) in sides { [INFO] [stdout] 126 + for v in sides.values() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/15.rs:89:5 [INFO] [stdout] | [INFO] [stdout] 89 | return (map, moves); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 89 - return (map, moves); [INFO] [stdout] 89 + (map, moves) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/15.rs:95:10 [INFO] [stdout] | [INFO] [stdout] 95 | .map(|line| line.trim().chars().collect_vec()) [INFO] [stdout] | __________^ [INFO] [stdout] 96 | | .flatten() [INFO] [stdout] | |__________________^ help: try replacing `map` with `flat_map` and remove the `.flatten()`: `flat_map(|line| line.trim().chars().collect_vec())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`i32` -> `i32`) [INFO] [stdout] --> src/bin/15.rs:151:33 [INFO] [stdout] | [INFO] [stdout] 151 | while by != y as i32 { [INFO] [stdout] | ^^^^^^^^ help: try: `y` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&mut Vec` instead of `&mut [_]` involves a new object where a slice will do [INFO] [stdout] --> src/bin/15.rs:222:22 [INFO] [stdout] | [INFO] [stdout] 222 | fn move_box(map: &mut Vec>, bx: i32, by1: i32, by2: i32, dx: i32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 222 - fn move_box(map: &mut Vec>, bx: i32, by1: i32, by2: i32, dx: i32) { [INFO] [stdout] 222 + fn move_box(map: &mut [Vec], bx: i32, by1: i32, by2: i32, dx: i32) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/bin/15.rs:276:5 [INFO] [stdout] | [INFO] [stdout] 276 | return (map, moves); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 276 - return (map, moves); [INFO] [stdout] 276 + (map, moves) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Iterator` [INFO] [stdout] --> src/bin/15.rs:262:14 [INFO] [stdout] | [INFO] [stdout] 262 | .map(|ch| match ch { [INFO] [stdout] | ______________^ [INFO] [stdout] 263 | | '#' => ['#', '#'], [INFO] [stdout] 264 | | 'O' => ['[', ']'], [INFO] [stdout] 265 | | '.' => ['.', '.'], [INFO] [stdout] ... | [INFO] [stdout] 268 | | }) [INFO] [stdout] 269 | | .flatten() [INFO] [stdout] | |______________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] help: try replacing `map` with `flat_map` and remove the `.flatten()` [INFO] [stdout] | [INFO] [stdout] 262 ~ .flat_map(|ch| match ch { [INFO] [stdout] 263 + '#' => ['#', '#'], [INFO] [stdout] 264 + 'O' => ['[', ']'], [INFO] [stdout] 265 + '.' => ['.', '.'], [INFO] [stdout] 266 + '@' => ['@', '.'], [INFO] [stdout] 267 + _ => panic!("Invalid character") [INFO] [stdout] 268 + }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Lines<'_>` [INFO] [stdout] --> src/bin/14.rs:12:21 [INFO] [stdout] | [INFO] [stdout] 12 | let quadrants = input.lines() [INFO] [stdout] | _____________________^ [INFO] [stdout] 13 | | .into_iter() [INFO] [stdout] | |____________________^ help: consider removing `.into_iter()`: `input.lines()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Lines<'_>` [INFO] [stdout] --> src/bin/14.rs:54:18 [INFO] [stdout] | [INFO] [stdout] 54 | let robots = input.lines() [INFO] [stdout] | __________________^ [INFO] [stdout] 55 | | .into_iter() [INFO] [stdout] | |____________________^ help: consider removing `.into_iter()`: `input.lines()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `.nth(0)` on a `std::iter::Iterator`, when `.next()` is equivalent [INFO] [stdout] --> src/bin/14.rs:74:33 [INFO] [stdout] | [INFO] [stdout] 74 | ... positions[&(x, y)].to_string().chars().nth(0).unwrap() [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try calling `.next()` instead of `.nth(0)`: `positions[&(x, y)].to_string().chars().next()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_nth_zero [INFO] [stdout] = note: `#[warn(clippy::iter_nth_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 13.45s [INFO] running `Command { std: "docker" "inspect" "c889d42b7ef9b93b99f4e01b97b89025fa54487785886a5eaa6bea558313c895", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c889d42b7ef9b93b99f4e01b97b89025fa54487785886a5eaa6bea558313c895", kill_on_drop: false }` [INFO] [stdout] c889d42b7ef9b93b99f4e01b97b89025fa54487785886a5eaa6bea558313c895