From c363f2685065cc69ddf39474c678de4f712f0043 Mon Sep 17 00:00:00 2001 From: dxphilo Date: Thu, 12 Feb 2026 13:31:50 +0300 Subject: [PATCH] feat: add challenges files and test cases --- src/challenges/challenge-72.md | 65 +++++++++++ src/challenges/challenge-73.md | 80 ++++++++++++++ src/challenges/challenge-74.md | 60 +++++++++++ src/challenges/challenge-75.md | 42 ++++++++ src/challenges/challenge-76.md | 82 ++++++++++++++ src/challenges/challenge-77.md | 190 +++++++++++++++++++++++++++++++++ 6 files changed, 519 insertions(+) create mode 100644 src/challenges/challenge-72.md create mode 100644 src/challenges/challenge-73.md create mode 100644 src/challenges/challenge-74.md create mode 100644 src/challenges/challenge-75.md create mode 100644 src/challenges/challenge-76.md create mode 100644 src/challenges/challenge-77.md diff --git a/src/challenges/challenge-72.md b/src/challenges/challenge-72.md new file mode 100644 index 0000000..f6702c9 --- /dev/null +++ b/src/challenges/challenge-72.md @@ -0,0 +1,65 @@ +# Challenge 72 + +### Expression Evaluator + +Write a function eval(expr: &str) -> Result that parses and evaluates a mathematical expression string containing integers, +, -, \*, /, and parentheses. + +You should: + +- Respect operator precedence and parentheses +- Handle negative numbers and extra whitespace +- Return Err for invalid expressions instead of panicking + +#### Write your solution below + +```rust + +// Rust Bytes Challenge Issue #90 Expression Evaluator + +pub fn eval(expr: &str) -> Result { +// TODO: implement logic here +unimplemented!() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn basic_ops() { + assert_eq!(eval("3 + 2 * 2").unwrap(), 7); + assert_eq!(eval(" 3 / 2 ").unwrap(), 1); + assert_eq!(eval(" 3 + 5 / 2 ").unwrap(), 5); + } + + #[test] + fn with_parentheses() { + assert_eq!(eval("(1+(4+5+2)-3)+(6+8)").unwrap(), 23); + assert_eq!(eval("2*(5+5*2)/3+(6/2+8)").unwrap(), 21); + } + + #[test] + fn negative_numbers() { + assert_eq!(eval("-2 + 1").unwrap(), -1); + assert_eq!(eval("1 - -1").unwrap(), 2); + } + + #[test] + fn whitespace_chaos() { + assert_eq!(eval(" ( 2 + 3 ) * ( 4 - 1 ) ").unwrap(), 15); + assert_eq!(eval(" 10 / 3 ").unwrap(), 3); + } + + #[test] + fn complex_nested() { + assert_eq!(eval("((2+3)*(4+(5-3*2)))/2").unwrap(), 5); + } + + #[test] + fn invalid_expressions() { + assert!(eval("2++3").is_err()); + assert!(eval("(1+2").is_err()); + assert!(eval("abc").is_err()); + } +} +``` diff --git a/src/challenges/challenge-73.md b/src/challenges/challenge-73.md new file mode 100644 index 0000000..e65ddc4 --- /dev/null +++ b/src/challenges/challenge-73.md @@ -0,0 +1,80 @@ +# Challenge 73 + +### Flatten Nested Lists + +Write a function flatten that flattens arbitrarily nested lists of integers into a single Vec. The nested type is defined as: + +```rust +#[derive(Debug, Clone, PartialEq)] +pub enum Nested { + Int(i64), + List(Vec), +} +``` + +You should handle deeply nested structures, and return an empty vector for empty or fully empty nested lists. + +#### Write your solution below + +```rust +// Rust Bytes Challenge Issue #91 Flatten Nested Lists +#[derive(Debug, Clone, PartialEq)] +pub enum Nested { + Int(i64), + List(Vec), +} + +pub fn flatten(nested: &[Nested]) -> Vec { + // TODO: implement logic here + unimplemented!() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn flat_list() { + let input = vec![Nested::Int(1), Nested::Int(2), Nested::Int(3)]; + assert_eq!(flatten(&input), vec![1, 2, 3]); + } + + #[test] + fn nested_list() { + let input = vec![ + Nested::List(vec![ + Nested::Int(1), + Nested::List(vec![Nested::Int(2), Nested::Int(3)]), + ]), + Nested::Int(4), + ]; + assert_eq!(flatten(&input), vec![1, 2, 3, 4]); + } + + #[test] + fn deeply_nested() { + let input = vec![ + Nested::List(vec![ + Nested::List(vec![Nested::List(vec![Nested::Int(42)])]), + ]), + ]; + assert_eq!(flatten(&input), vec![42]); + } + + #[test] + fn empty_cases() { + assert_eq!(flatten(&[]), vec![]); + assert_eq!(flatten(&[Nested::List(vec![])]), vec![]); + } + + #[test] + fn mixed_empty_and_values() { + let input = vec![ + Nested::List(vec![]), + Nested::Int(7), + Nested::List(vec![Nested::List(vec![]), Nested::Int(8)]), + ]; + assert_eq!(flatten(&input), vec![7, 8]); + } +} +``` diff --git a/src/challenges/challenge-74.md b/src/challenges/challenge-74.md new file mode 100644 index 0000000..c197857 --- /dev/null +++ b/src/challenges/challenge-74.md @@ -0,0 +1,60 @@ +# Challenge 74 + +### Grouped by Frequency + +Given a list of integers, return a vector of vectors where each inner vector contains all numbers that appear the same number of times, grouped by frequency. + +The groups should be ordered by decreasing frequency, and each group’s numbers should be sorted in ascending. + +#### Write your solution below + +```rust + +// Rust Bytes Challenge Issue #92 Grouped by Frequency + +pub fn group_by_frequency(nums: Vec) -> Vec> { +// TODO: implement logic here +unimplemented!() +} + +#[cfg(test)] +mod tests { +use super::\*; + + #[test] + fn mixed_frequencies() { + let input = vec![4, 3, 1, 3, 2, 2, 2, 4, 4]; + let expected = vec![vec![2, 4], vec![3], vec![1]]; + assert_eq!(group_by_frequency(input), expected); + } + + #[test] + fn all_unique() { + let input = vec![5, 4, 3, 2, 1]; + let expected = vec![vec![1, 2, 3, 4, 5]]; + assert_eq!(group_by_frequency(input), expected); + } + + #[test] + fn all_identical() { + let input = vec![7, 7, 7, 7]; + let expected = vec![vec![7]]; + assert_eq!(group_by_frequency(input), expected); + } + + #[test] + fn includes_negatives() { + let input = vec![-1, -1, 2, 2, 3]; + let expected = vec![vec![-1, 2], vec![3]]; + assert_eq!(group_by_frequency(input), expected); + } + + #[test] + fn empty_input() { + let input: Vec = vec![]; + let expected: Vec> = vec![]; + assert_eq!(group_by_frequency(input), expected); + } + +} +``` diff --git a/src/challenges/challenge-75.md b/src/challenges/challenge-75.md new file mode 100644 index 0000000..edaa0af --- /dev/null +++ b/src/challenges/challenge-75.md @@ -0,0 +1,42 @@ +# Challenge 75 + +### Log Analyzer + +You are given a system log file named Mac_2k.log, [located in the src directory](https://github.com/Rust-Bytes/log_analyzer/tree/main/src). +The file contains real macOS-style log entries that follow this general pattern: + +```rust +