From 7b09aeff2f1d2ba7a269659500c0fd3b9ad2177b Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 21:29:45 +0200 Subject: [PATCH 01/13] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D1=88=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D1=87=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw01.rs | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/homework/hw01.rs b/src/homework/hw01.rs index e23702f..3f6f987 100644 --- a/src/homework/hw01.rs +++ b/src/homework/hw01.rs @@ -1,4 +1,30 @@ -#[test] -fn test1() { - assert_eq!(1 + 1, 2); +const W: usize = 40; +const H: usize = 20; + +fn main() { + let mut output = String::new(); + + for y in 0..H { + for x in 0..W { + if y == 0 || y == H - 1 { + // Верхній або нижній край + output.push('*'); + } else if x == 0 || x == W - 1 { + // Лівий або правий край + output.push('*'); + } else if x * H == y * W { + // Діагональ зліва направо + output.push('\\'); + } else if (W - 1 - x) * H == y * W { + // Діагональ справа наліво + output.push('/'); + } else { + output.push(' '); + } + } + output.push('\n'); + } + + print!("{}", output); } + From ec4b436bb585e37104104b373560c2b4cfc0afe1 Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 21:43:21 +0200 Subject: [PATCH 02/13] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D1=88=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D1=87=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw03.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/homework/hw03.rs b/src/homework/hw03.rs index e69de29..3f6f987 100644 --- a/src/homework/hw03.rs +++ b/src/homework/hw03.rs @@ -0,0 +1,30 @@ +const W: usize = 40; +const H: usize = 20; + +fn main() { + let mut output = String::new(); + + for y in 0..H { + for x in 0..W { + if y == 0 || y == H - 1 { + // Верхній або нижній край + output.push('*'); + } else if x == 0 || x == W - 1 { + // Лівий або правий край + output.push('*'); + } else if x * H == y * W { + // Діагональ зліва направо + output.push('\\'); + } else if (W - 1 - x) * H == y * W { + // Діагональ справа наліво + output.push('/'); + } else { + output.push(' '); + } + } + output.push('\n'); + } + + print!("{}", output); +} + From 1c94ce63db1c06a1e448d810cc1b126e1e1ad3e4 Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 21:51:53 +0200 Subject: [PATCH 03/13] =?UTF-8?q?=D0=B4=D1=80=D1=83=D0=B3=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D1=87=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw04.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/homework/hw04.rs b/src/homework/hw04.rs index e69de29..40bb0f8 100644 --- a/src/homework/hw04.rs +++ b/src/homework/hw04.rs @@ -0,0 +1,25 @@ +const W: usize = 30; +const H: usize = 15; + +fn main() { + let mut result = String::new(); + + for y in 0..H { + for x in 0..W { + if y == 0 || y == H - 1 { + result.push('*'); // Верхній або нижній край + } else if x == 0 || x == W - 1 { + result.push('*'); // Лівий або правий край + } else if y * (W - 1) == x * (H - 1) { + result.push('\\'); // Діагональ зліва направо + } else if y * (W - 1) == (W - 1 - x) * (H - 1) { + result.push('/'); // Діагональ справа наліво + } else { + result.push(' '); + } + } + result.push('\n'); + } + + print!("{}", result); +} From 7d6155ac46dea9fcfecffd0c79abebb703f36d64 Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 21:56:49 +0200 Subject: [PATCH 04/13] =?UTF-8?q?=D1=82=D1=80=D0=B5=D1=82=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D1=87=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw05.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/homework/hw05.rs b/src/homework/hw05.rs index e69de29..cc35e29 100644 --- a/src/homework/hw05.rs +++ b/src/homework/hw05.rs @@ -0,0 +1,21 @@ +// hw05.rs + +fn gcd(a: u32, b: u32) -> u32 { + let mut a = a; + let mut b = b; + + while b != 0 { + let temp = b; + b = a % b; + a = temp; + } + + a +} + +fn main() { + let x = 48; + let y = 18; + + println!("GCD of {} and {} is {}", x, y, gcd(x, y)); +} From 57d92b27edec4f52badc717d4c2abe5edbb2534e Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 22:00:57 +0200 Subject: [PATCH 05/13] =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=82=D0=B0=20=D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D1=87=D0=BD?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw06.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/homework/hw06.rs b/src/homework/hw06.rs index e69de29..ba2a6c6 100644 --- a/src/homework/hw06.rs +++ b/src/homework/hw06.rs @@ -0,0 +1,23 @@ +const LEVELS: usize = 4; // Кількість трикутників + +fn main() { + let mut result = String::new(); + + (0..LEVELS).for_each(|level| { + (0..=level + 2).for_each(|i| { + let width = (LEVELS + 2) * 2 - 1; + let stars = 1 + i * 2; + let spaces = (width - stars) / 2; + result += &" ".repeat(spaces); + result += &"*".repeat(stars); + result += "\n"; + }); + }); + + // Стовбур + let trunk_width = 3; + let trunk_height = 2; + let total_width = (LEVELS + 2) * 2 - 1; + let padding = (total_width - trunk_width) / 2; + + (0..trunk_height_ From 59b34f4335e10969c138890ea2de07bd050c8870 Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 22:03:04 +0200 Subject: [PATCH 06/13] =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=82=D0=B0=20=D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D1=87=D0=BD?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw07.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/homework/hw07.rs b/src/homework/hw07.rs index e69de29..e809016 100644 --- a/src/homework/hw07.rs +++ b/src/homework/hw07.rs @@ -0,0 +1,23 @@ +// hw07.rs + +fn swap_case(input: &str) -> String { + input + .chars() + .map(|c| { + if c.is_lowercase() { + c.to_ascii_uppercase() + } else if c.is_uppercase() { + c.to_ascii_lowercase() + } else { + c + } + }) + .collect() +} + +fn main() { + let text = "ПрИвІт, WoRlD!"; + let swapped = swap_case(text); + println!("Original: {}", text); + println!("Swapped: {}", swapped); +} From d58f2a7e05192d941aa083b3fd64b139a0abdf9c Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 22:05:18 +0200 Subject: [PATCH 07/13] =?UTF-8?q?6=20=20=D0=BF=D1=80=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=87=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw08.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/homework/hw08.rs b/src/homework/hw08.rs index e69de29..c85a448 100644 --- a/src/homework/hw08.rs +++ b/src/homework/hw08.rs @@ -0,0 +1,25 @@ +// hw08.rs + +fn is_prime(n: u32) -> bool { + if n <= 1 { + return false; + } + if n == 2 { + return true; + } + if n % 2 == 0 { + return false; + } + let sqrt_n = (n as f64).sqrt() as u32; + for i in (3..=sqrt_n).step_by(2) { + if n % i == 0 { + return false; + } + } + true +} + +fn main() { + let num = 29; + println!("Число {} є простим? -> {}", num, is_prime(num)); +} From 906be76153029fa681d08fda3b7f15f04e36c53f Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 22:08:29 +0200 Subject: [PATCH 08/13] =?UTF-8?q?7=20=20=D0=BF=D1=80=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=87=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw09.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/homework/hw09.rs b/src/homework/hw09.rs index e69de29..4067563 100644 --- a/src/homework/hw09.rs +++ b/src/homework/hw09.rs @@ -0,0 +1,37 @@ +fn rotate(s: String, n: isize) -> String { + let len = s.len(); + if len == 0 { + return s; + } + + let n = ((n % len as isize) + len as isize) % len as isize; + let n = n as usize; + + format!("{}{}", &s[len - n..], &s[..len - n]) +} + +// Можна включити тест прямо тут: +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test() { + let s = "abcdefgh".to_string(); + let shifts = [ + (0, "abcdefgh"), + (8, "abcdefgh"), + (-8, "abcdefgh"), + (1, "habcdefg"), + (2, "ghabcdef"), + (10, "ghabcdef"), + (-1, "bcdefgha"), + (-2, "cdefghab"), + (-10,"cdefghab"), + ]; + + for (n, expected) in shifts.iter() { + assert_eq!(rotate(s.clone(), *n), expected.to_string()); + } + } +} \ No newline at end of file From 27af446ffe858af387aecb9eb2615c2a315b4aba Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 22:10:51 +0200 Subject: [PATCH 09/13] =?UTF-8?q?8=20=20=D0=BF=D1=80=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=87=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw10.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/homework/hw10.rs b/src/homework/hw10.rs index e69de29..df1026a 100644 --- a/src/homework/hw10.rs +++ b/src/homework/hw10.rs @@ -0,0 +1,25 @@ +// hw10.rs + +fn is_palindrome(x: u32) -> bool { + let s = x.to_string(); + s.chars().eq(s.chars().rev()) +} + +// Тести +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test() { + let data = [ + (123, false), + (121, true), + (1221, true), + ]; + + data.iter().for_each(|(n, exp)| { + assert_eq!(is_palindrome(*n), *exp); + }); + } +} From 14397b5a28a80e1bdaddb9e5812b8e703f9a3e46 Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 22:13:30 +0200 Subject: [PATCH 10/13] =?UTF-8?q?8=20=20=D0=BF=D1=80=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=87=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw11.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/homework/hw11.rs b/src/homework/hw11.rs index e69de29..b6dc797 100644 --- a/src/homework/hw11.rs +++ b/src/homework/hw11.rs @@ -0,0 +1,35 @@ +use rand::Rng; + +fn gen_random_vector(n: usize) -> Vec { + let mut rng = rand::thread_rng(); + (0..n).map(|_| rng.gen_range(10..100)).collect() +} + +fn min_adjacent_sum(data: &[i32]) -> (usize, i32) { + data.windows(2) + .enumerate() + .map(|(i, w)| (i, w[0] + w[1])) + .min_by_key(|&(_, sum)| sum) + .unwrap() +} + +fn print_vector_with_highlight(data: &[i32], min_index: usize) { + println!("Згенерований вектор:"); + for (i, &val) in data.iter().enumerate() { + if i == min_index { + print!("[{} ", val); + } else if i == min_index + 1 { + print!("{}] ", val); + } else { + print!("{} ", val); + } + } + println!(); +} + +fn main() { + let vec = gen_random_vector(20); + let (min_index, min_sum) = min_adjacent_sum(&vec); + print_vector_with_highlight(&vec, min_index); + println!("Мінімальна сума пари: {} (позиції {} і {})", min_sum, min_index, min_index + 1); +} From be9427352f7d7971195fbd3ef71637c675b563a5 Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 22:16:49 +0200 Subject: [PATCH 11/13] =?UTF-8?q?10=20=D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8?= =?UTF-8?q?=D1=87=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw12.rs | 45 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/homework/hw12.rs b/src/homework/hw12.rs index e69de29..a07f011 100644 --- a/src/homework/hw12.rs +++ b/src/homework/hw12.rs @@ -0,0 +1,45 @@ +use rand::Rng; + +/// Підрахунок мінімальної кількості перенесень вантажу +fn count_permutation(shipments: &Vec) -> usize { + let total: u32 = shipments.iter().sum(); + let n = shipments.len() as u32; + + if total % n != 0 { + panic!("Неможливо рівномірно розподілити вантаж між кораблями"); + } + + let target = total / n; + let mut moves = 0; + + for &ship in shipments { + if ship > target { + moves += (ship - target) as usize; + } + } + + moves +} + +/// Генерація коректного вектора вантажів, що можуть бути розподілені рівномірно +fn gen_shipments(n: usize) -> Vec { + let mut rng = rand::thread_rng(); + let target = rng.gen_range(10..50); + let mut shipments = vec![target; n]; + + // випадковим чином зменшимо кілька кораблів, а іншим додамо + for i in 0..n / 2 { + let delta = rng.gen_range(0..=target.min(10)); + shipments[i] -= delta; + shipments[n - 1 - i] += delta; + } + + shipments +} + +fn main() { + let shipments = gen_shipments(6); + println!("Грузи по кораблях: {:?}", shipments); + let moves = count_permutation(&shipments); + println!("Мінімальна кількість переміщень: {}", moves); +} From 38be854be09db213601c5cfecc04cb7e82fb7060 Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 22:21:53 +0200 Subject: [PATCH 12/13] =?UTF-8?q?11=20=D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8?= =?UTF-8?q?=D1=87=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw13.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/homework/hw13.rs b/src/homework/hw13.rs index e69de29..f992d8e 100644 --- a/src/homework/hw13.rs +++ b/src/homework/hw13.rs @@ -0,0 +1,16 @@ +/// Функція для обчислення зайнятої площі в двовимірному масиві +fn calculate_occupied_area(grid: &[Vec]) -> usize { + grid.iter().flatten().filter(|&&cell| cell == 1).count() +} + +fn main() { + let grid = vec![ + vec![1, 0, 0, 1], + vec![0, 1, 1, 0], + vec![1, 1, 0, 0], + vec![0, 0, 1, 1], + ]; + + let occupied_area = calculate_occupied_area(&grid); + println!("Зайнята площа: {}", occupied_area); +} From a22cf76542f8283d07b36808facd131285d08c15 Mon Sep 17 00:00:00 2001 From: Varvara00 Date: Tue, 8 Apr 2025 22:24:52 +0200 Subject: [PATCH 13/13] =?UTF-8?q?12=20=D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8?= =?UTF-8?q?=D1=87=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/homework/hw14.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/homework/hw14.rs b/src/homework/hw14.rs index e69de29..c542fad 100644 --- a/src/homework/hw14.rs +++ b/src/homework/hw14.rs @@ -0,0 +1,39 @@ +// hw14.rs + +fn gray(n: u8) -> Vec { + let mut result = vec!["".to_string()]; + + for i in 0..n { + let mut new_codes = Vec::new(); + for code in result.iter().rev() { + new_codes.push(format!("1{}", code)); + } + for code in result.iter() { + new_codes.push(format!("0{}", code)); + } + result = new_codes; + } + + result +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test() { + let test_data = [ + (0, vec!("")), + (1, vec!("0", "1")), + (2, vec!("00", "01", "10", "11")), + (3, vec!("000", "001", "010", "011", "100", "101", "110", "111")), + (4, vec!("0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", + "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111")), + ]; + + test_data.iter().for_each(|(n, out)| { + assert_eq!(gray(*n), *out); + }); + } +}