From df0c810650e73915cffb1e6b0cfbbc3220ad6d96 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 10 Feb 2024 08:34:07 +0000 Subject: [PATCH 01/43] asd --- task_01/src/main | Bin 0 -> 32712 bytes task_01/src/main.cpp | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100755 task_01/src/main diff --git a/task_01/src/main b/task_01/src/main new file mode 100755 index 0000000000000000000000000000000000000000..87b292a13927afbdc11a12c9a862b786cf623d32 GIT binary patch literal 32712 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 aKPXUc%e9QG-gxpeh7HH11p) - +// внес изменения int main() { return 0; } From 27fa911821eb92cfa458abd53a38cee3d51dc46e Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Fri, 23 Feb 2024 19:24:29 +0000 Subject: [PATCH 02/43] a2 --- task_01/src/main | Bin 32712 -> 32840 bytes task_01/src/main.cpp | 7 ++++++- task_01/src/test.cpp | 8 -------- task_01/src/topology_sort.cpp | 1 - task_01/src/{topology_sort.hpp => util.hpp} | 0 5 files changed, 6 insertions(+), 10 deletions(-) delete mode 100644 task_01/src/test.cpp delete mode 100644 task_01/src/topology_sort.cpp rename task_01/src/{topology_sort.hpp => util.hpp} (100%) diff --git a/task_01/src/main b/task_01/src/main index 87b292a13927afbdc11a12c9a862b786cf623d32..2f1bb8911a787435863a0322a211a2957ded172d 100755 GIT binary patch delta 11363 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 bf~sDmDI^$F%`#2B;hc_D$ZRLt)cyYev96N9 diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index bcdd45df..d0f6e541 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,3 +1,8 @@ #include // внес изменения -int main() { return 0; } +int main() { + + + + return 0; +} diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp deleted file mode 100644 index ef5a86ae..00000000 --- a/task_01/src/test.cpp +++ /dev/null @@ -1,8 +0,0 @@ - -#include - -#include "topology_sort.hpp" - -TEST(TopologySort, Simple) { - ASSERT_EQ(1, 1); // Stack [] -} diff --git a/task_01/src/topology_sort.cpp b/task_01/src/topology_sort.cpp deleted file mode 100644 index e53f670c..00000000 --- a/task_01/src/topology_sort.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "topology_sort.hpp" diff --git a/task_01/src/topology_sort.hpp b/task_01/src/util.hpp similarity index 100% rename from task_01/src/topology_sort.hpp rename to task_01/src/util.hpp From df82b7fde5cdda037bfa62cf4536261034708253 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 24 Feb 2024 09:43:36 +0000 Subject: [PATCH 03/43] WIP --- task_01/src/main | Bin 32840 -> 61760 bytes task_01/src/main.cpp | 19 ++++++++++++++++--- task_01/src/test.cpp | 19 +++++++++++++++++++ task_01/src/util.hpp | 1 - 4 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 task_01/src/test.cpp delete mode 100644 task_01/src/util.hpp diff --git a/task_01/src/main b/task_01/src/main index 2f1bb8911a787435863a0322a211a2957ded172d..541e3499d6b0aee20225ec9a4d2853ec3a2ad8a1 100755 GIT binary patch literal 61760 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 literal 32840 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 TrFrA=9~m+f?<`;_$g2MZnEHuN diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index d0f6e541..340d36c8 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,8 +1,21 @@ #include -// внес изменения +#include + int main() { - - + int a; + int x; + std::cin >> a; + std::vector b; + while (std::cin >> x) { + b.push_back(x); + } + int i = 0; + int j = b.size() - 1; + while (b[i] + b[j] != a) { + if (b[i] + b[j] < a) i++; + if (b[i] + b[j] > a) j--; + } + std::cout << b[i] << ' ' << b[j] << '\n'; return 0; } diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp new file mode 100644 index 00000000..b2c14390 --- /dev/null +++ b/task_01/src/test.cpp @@ -0,0 +1,19 @@ +#include +#include + + +TEST(main, Simple) { + ASSERT_EQ(Task1(9, std::vector < int > {1, 2, 4, 5, 6, 8, 10, 12}), (std::pair < int, int > {1,8})); + + ASSERT_EQ(Task1(39, std::vector < int > {1, 2, 4, 5, 6, 9, 10, 35}), (std::pair < int, int > {4,35})); + + ASSERT_EQ(Task1(14, std::vector < int > {1, 2, 4, 5, 6, 8, 10, 12}), (std::pair < int, int > {2,12})); + + EXPECT_THROW(Task1(1887, std::vector{1, 2, 4, 6, 8, 10, 12, 15}), std::logic_error); + + EXPECT_THROW(Task1(12, std::vector{0,1,1,2,2}), std::logic_error); + + ASSERT_EQ(Task1(1338, std::vector < int > {10, 20, 40, 50, 60, 87, 100, 1278}), (std::pair < int, int > {60,1278})); + + ASSERT_EQ(Task1(22, std::vector < int > {10, 10, 11, 11, 12, 15}), (std::pair < int, int > {10,12})); +} \ No newline at end of file diff --git a/task_01/src/util.hpp b/task_01/src/util.hpp deleted file mode 100644 index 6f70f09b..00000000 --- a/task_01/src/util.hpp +++ /dev/null @@ -1 +0,0 @@ -#pragma once From 8e1f461f343382d38185c99470541c580bc0149a Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 6 Apr 2024 08:38:01 +0000 Subject: [PATCH 04/43] proverka --- task_01/src/main.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index 340d36c8..f3c5311c 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,6 +1,8 @@ #include #include +// proverka + int main() { int a; int x; From ad669044020eb6241bb9b7e079774a08728fa914 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 20 Apr 2024 07:08:06 +0000 Subject: [PATCH 05/43] proverka 3 --- task_01/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index f3c5311c..5ddd8e34 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,7 +1,7 @@ #include #include -// proverka +// proverka 3 int main() { int a; From 443fe7bf047ee7bf2b30286096263a5322e8f70b Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 14:44:15 +0000 Subject: [PATCH 06/43] new --- task_01/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index 5ddd8e34..542868c5 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,7 +1,7 @@ #include #include -// proverka 3 +// proverka 3 new int main() { int a; From 7059a82a8044b942fc60a64a0f758285390c7369 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 15:04:28 +0000 Subject: [PATCH 07/43] update task_01 --- task_01/src/main.cpp | 22 +--------------------- task_01/src/test.cpp | 4 ++-- task_01/src/utils.cpp | 11 +++++++++++ task_01/src/utils.h | 3 +++ 4 files changed, 17 insertions(+), 23 deletions(-) create mode 100644 task_01/src/utils.cpp create mode 100644 task_01/src/utils.h diff --git a/task_01/src/main.cpp b/task_01/src/main.cpp index 542868c5..0e4393ba 100644 --- a/task_01/src/main.cpp +++ b/task_01/src/main.cpp @@ -1,23 +1,3 @@ #include -#include -// proverka 3 new - -int main() { - int a; - int x; - std::cin >> a; - std::vector b; - while (std::cin >> x) { - b.push_back(x); - } - - int i = 0; - int j = b.size() - 1; - while (b[i] + b[j] != a) { - if (b[i] + b[j] < a) i++; - if (b[i] + b[j] > a) j--; - } - std::cout << b[i] << ' ' << b[j] << '\n'; - return 0; -} +int main() { return 0; } diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp index b2c14390..bf418711 100644 --- a/task_01/src/test.cpp +++ b/task_01/src/test.cpp @@ -1,6 +1,6 @@ #include #include - +#include "utils.h" TEST(main, Simple) { ASSERT_EQ(Task1(9, std::vector < int > {1, 2, 4, 5, 6, 8, 10, 12}), (std::pair < int, int > {1,8})); @@ -11,7 +11,7 @@ TEST(main, Simple) { EXPECT_THROW(Task1(1887, std::vector{1, 2, 4, 6, 8, 10, 12, 15}), std::logic_error); - EXPECT_THROW(Task1(12, std::vector{0,1,1,2,2}), std::logic_error); + EXPECT_THROW(Task1(12, std::vector{0, 1, 1, 2, 2}), std::logic_error); ASSERT_EQ(Task1(1338, std::vector < int > {10, 20, 40, 50, 60, 87, 100, 1278}), (std::pair < int, int > {60,1278})); diff --git a/task_01/src/utils.cpp b/task_01/src/utils.cpp new file mode 100644 index 00000000..942e17ed --- /dev/null +++ b/task_01/src/utils.cpp @@ -0,0 +1,11 @@ +#include "utils.h" + +std::pair Task1(int number, std::vector array_of_numbers) { + int i = 0; + int j = array_of_numbers.size() - 1; + while (array_of_numbers[i] + array_of_numbers[j] != number) { + if (array_of_numbers[i] + array_of_numbers[j] < number) i++; + if (array_of_numbers[i] + array_of_numbers[j] > number) j--; + } + return {array_of_numbers[i], array_of_numbers[j]}; +} \ No newline at end of file diff --git a/task_01/src/utils.h b/task_01/src/utils.h new file mode 100644 index 00000000..78b046d6 --- /dev/null +++ b/task_01/src/utils.h @@ -0,0 +1,3 @@ +#include + +std::pair Task1(int, std::vector); \ No newline at end of file From ec0b265e199e99e3bce1a8da32d9be0b04e61a2c Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 15:09:09 +0000 Subject: [PATCH 08/43] updates test task_01 --- task_01/src/test.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp index bf418711..2115d955 100644 --- a/task_01/src/test.cpp +++ b/task_01/src/test.cpp @@ -9,10 +9,6 @@ TEST(main, Simple) { ASSERT_EQ(Task1(14, std::vector < int > {1, 2, 4, 5, 6, 8, 10, 12}), (std::pair < int, int > {2,12})); - EXPECT_THROW(Task1(1887, std::vector{1, 2, 4, 6, 8, 10, 12, 15}), std::logic_error); - - EXPECT_THROW(Task1(12, std::vector{0, 1, 1, 2, 2}), std::logic_error); - ASSERT_EQ(Task1(1338, std::vector < int > {10, 20, 40, 50, 60, 87, 100, 1278}), (std::pair < int, int > {60,1278})); ASSERT_EQ(Task1(22, std::vector < int > {10, 10, 11, 11, 12, 15}), (std::pair < int, int > {10,12})); From 6fecfd8691346507ee5033cbc9b15731153ae118 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 15:13:25 +0000 Subject: [PATCH 09/43] format --- task_01/src/test.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/task_01/src/test.cpp b/task_01/src/test.cpp index 2115d955..a632bd75 100644 --- a/task_01/src/test.cpp +++ b/task_01/src/test.cpp @@ -1,15 +1,22 @@ #include + #include + #include "utils.h" TEST(main, Simple) { - ASSERT_EQ(Task1(9, std::vector < int > {1, 2, 4, 5, 6, 8, 10, 12}), (std::pair < int, int > {1,8})); + ASSERT_EQ(Task1(9, std::vector{1, 2, 4, 5, 6, 8, 10, 12}), + (std::pair{1, 8})); - ASSERT_EQ(Task1(39, std::vector < int > {1, 2, 4, 5, 6, 9, 10, 35}), (std::pair < int, int > {4,35})); + ASSERT_EQ(Task1(39, std::vector{1, 2, 4, 5, 6, 9, 10, 35}), + (std::pair{4, 35})); - ASSERT_EQ(Task1(14, std::vector < int > {1, 2, 4, 5, 6, 8, 10, 12}), (std::pair < int, int > {2,12})); + ASSERT_EQ(Task1(14, std::vector{1, 2, 4, 5, 6, 8, 10, 12}), + (std::pair{2, 12})); - ASSERT_EQ(Task1(1338, std::vector < int > {10, 20, 40, 50, 60, 87, 100, 1278}), (std::pair < int, int > {60,1278})); + ASSERT_EQ(Task1(1338, std::vector{10, 20, 40, 50, 60, 87, 100, 1278}), + (std::pair{60, 1278})); - ASSERT_EQ(Task1(22, std::vector < int > {10, 10, 11, 11, 12, 15}), (std::pair < int, int > {10,12})); + ASSERT_EQ(Task1(22, std::vector{10, 10, 11, 11, 12, 15}), + (std::pair{10, 12})); } \ No newline at end of file From 98ce20aced5871f084db27dd3555006144c7da0e Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 15:32:42 +0000 Subject: [PATCH 10/43] task_03 --- task_03/src/test.cpp | 17 +++++++++++++++-- task_03/src/topology_sort.cpp | 15 +++++++++++++++ task_03/src/topology_sort.hpp | 3 +++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/task_03/src/test.cpp b/task_03/src/test.cpp index ef5a86ae..624b14bc 100644 --- a/task_03/src/test.cpp +++ b/task_03/src/test.cpp @@ -1,8 +1,21 @@ #include +#include + #include "topology_sort.hpp" -TEST(TopologySort, Simple) { - ASSERT_EQ(1, 1); // Stack [] +TEST(TopologySort, MultipleCases) { + ASSERT_EQ(Task3(std::vector{73, 74, 75, 71, 69, 72, 76, 73}), + (std::vector{1, 1, 4, 2, 1, 1, 0, 0})); + ASSERT_EQ(Task3(std::vector{30, 40, 50, 60}), + (std::vector{1, 1, 1, 0})); + ASSERT_EQ(Task3(std::vector{30, 60, 90, 70, 80, 40, 30}), + (std::vector{1, 1, 0, 1, 0, 0, 0})); + ASSERT_EQ(Task3(std::vector{55, 55, 55, 55, 55}), + (std::vector{0, 0, 0, 0, 0})); + ASSERT_EQ(Task3(std::vector{76, 75, 74, 73, 72, 71, 70}), + (std::vector{0, 0, 0, 0, 0, 0, 0})); + ASSERT_EQ(Task3(std::vector{75, 72, 71, 70, 74, 76}), + (std::vector{4, 3, 2, 1, 1, 0})); } diff --git a/task_03/src/topology_sort.cpp b/task_03/src/topology_sort.cpp index e53f670c..80274b7e 100644 --- a/task_03/src/topology_sort.cpp +++ b/task_03/src/topology_sort.cpp @@ -1 +1,16 @@ #include "topology_sort.hpp" + +std::vector Task3(std::vector temperature) { + std::vector result; + for (int i = 0; i < temperature.size(); ++i) { + int count_day = 0; + for (int j = i; j < temperature.size(); ++j) { + if (temperature[j] <= temperature[i]) + count_day++; + else + break; + } + result.push_back(count_day); + } + return result; +} \ No newline at end of file diff --git a/task_03/src/topology_sort.hpp b/task_03/src/topology_sort.hpp index 6f70f09b..f324f26d 100644 --- a/task_03/src/topology_sort.hpp +++ b/task_03/src/topology_sort.hpp @@ -1 +1,4 @@ #pragma once +#include + +std::vector Task3(std::vector); \ No newline at end of file From a8121d82f21e2e7b696a98f39872ff2b4406fdc5 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 16:08:32 +0000 Subject: [PATCH 11/43] task_04 --- task_04/src/heap.cpp | 83 ++++++++++++++++++++++++++++++++++++++++++++ task_04/src/heap.hpp | 18 ++++++++++ task_04/src/test.cpp | 17 +++++++-- 3 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 task_04/src/heap.cpp create mode 100644 task_04/src/heap.hpp diff --git a/task_04/src/heap.cpp b/task_04/src/heap.cpp new file mode 100644 index 00000000..07634633 --- /dev/null +++ b/task_04/src/heap.cpp @@ -0,0 +1,83 @@ +#include "heap.hpp" + +void Heap::SiftUp(int i) { + while (a[i] < a[i / 2]) { + std::swap(a[i], a[i / 2]); + i /= 2; + } +} + +void Heap::SiftDown(int i) { + while (2 * i < n) { + int j = -1; + if (a[2 * i] < a[i]) { + j = 2 * i; + } + if (2 * i + 1 < n && a[2 * i + 1] < a[i] && + (j == -1 || a[2 * i] > a[2 * i + 1])) { + j = 2 * i + 1; + } + if (j == -1) + break; + else { + std::swap(a[i], a[j]); + i = j; + } + } +} + +int Heap::size() { return a.size(); } + +int Heap::GetMin() { return a[0]; } + +void Heap::Insert(int x) { + a.push_back(x); + n++; + SiftUp(n - 1); +} + +void Heap::extractMin() { + a[0] = a[n]; + a.erase(a.begin() + n - 1); + n--; + SiftDown(0); +} + +std::pair> Heap_exe(int n, int k, std::vector a) { + Heap useful_elements; + std::map indx; + + std::vector ans(n, 0); + + long long i = 0; + long long ans0 = 0; + long long j = 0; + + while (j < n) { + while (j - i < k && j < n) { + if (a[j] < a[i]) { + indx[a[j]] = j; + useful_elements.Insert(a[j]); + break; + } + + if (i != j) { + indx[a[j]] = j; + useful_elements.Insert(a[j]); + } + + ans0 += a[i]; + ans[i]++; + + j++; + } + + if (useful_elements.size() != 0) { + i = indx[useful_elements.GetMin()]; + useful_elements.extractMin(); + } else { + i = j; + } + } + return {ans0, ans}; +} \ No newline at end of file diff --git a/task_04/src/heap.hpp b/task_04/src/heap.hpp new file mode 100644 index 00000000..bd967517 --- /dev/null +++ b/task_04/src/heap.hpp @@ -0,0 +1,18 @@ +#include +#include + +class Heap { + public: + void SiftUp(int i); + void SiftDown(int i); + void Insert(int x); + int GetMin(); + void extractMin(); + int size(); + + private: + std::vector a; + int n = 0; +}; + +std::pair> Heap_exe(int n, int k, std::vector a); \ No newline at end of file diff --git a/task_04/src/test.cpp b/task_04/src/test.cpp index 5e11617e..f527197e 100644 --- a/task_04/src/test.cpp +++ b/task_04/src/test.cpp @@ -1,6 +1,19 @@ #include +#include "heap.hpp" + TEST(TopologySort, Simple) { - ASSERT_EQ(1, 1); // Stack [] -} + Heap a; + ASSERT_EQ(a.size(), 0); + a.Insert(5); + ASSERT_EQ(a.GetMin(), 5); + a.Insert(3); + ASSERT_EQ(a.GetMin(), 3); + a.Insert(1); + a.Insert(7); + a.Insert(-2); + a.extractMin(); + ASSERT_EQ(a.size(), 4); + ASSERT_EQ(a.GetMin(), -2); +} \ No newline at end of file From aee6bc489ee287f395bf4adfc44184d5ba07e46f Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 16:19:13 +0000 Subject: [PATCH 12/43] update task_03 --- task_03/src/topology_sort.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/task_03/src/topology_sort.cpp b/task_03/src/topology_sort.cpp index 80274b7e..a7580127 100644 --- a/task_03/src/topology_sort.cpp +++ b/task_03/src/topology_sort.cpp @@ -4,13 +4,19 @@ std::vector Task3(std::vector temperature) { std::vector result; for (int i = 0; i < temperature.size(); ++i) { int count_day = 0; + bool flag = true; for (int j = i; j < temperature.size(); ++j) { if (temperature[j] <= temperature[i]) count_day++; - else + else { + flag = false; break; + } } - result.push_back(count_day); + if (flag) + count_day = 0; + else + result.push_back(count_day); } return result; } \ No newline at end of file From 004deef7b4c4e7119757c552f5e2d8db9e4bfe33 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 16:20:57 +0000 Subject: [PATCH 13/43] update task_03 --- task_03/src/topology_sort.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/task_03/src/topology_sort.cpp b/task_03/src/topology_sort.cpp index a7580127..e2692af1 100644 --- a/task_03/src/topology_sort.cpp +++ b/task_03/src/topology_sort.cpp @@ -13,10 +13,8 @@ std::vector Task3(std::vector temperature) { break; } } - if (flag) - count_day = 0; - else - result.push_back(count_day); + if (flag) count_day = 0; + result.push_back(count_day); } return result; } \ No newline at end of file From 70cc035cede2d13478606f2a712839116914a592 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 16:31:49 +0000 Subject: [PATCH 14/43] update test in task_03 --- task_03/src/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/task_03/src/test.cpp b/task_03/src/test.cpp index 624b14bc..5fe77337 100644 --- a/task_03/src/test.cpp +++ b/task_03/src/test.cpp @@ -17,5 +17,5 @@ TEST(TopologySort, MultipleCases) { ASSERT_EQ(Task3(std::vector{76, 75, 74, 73, 72, 71, 70}), (std::vector{0, 0, 0, 0, 0, 0, 0})); ASSERT_EQ(Task3(std::vector{75, 72, 71, 70, 74, 76}), - (std::vector{4, 3, 2, 1, 1, 0})); + (std::vector{5, 3, 2, 1, 1, 0})); } From 8c354cc2f039197dbc0e1cbf6a4f62eddcdda09b Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 16:50:08 +0000 Subject: [PATCH 15/43] update task_04 --- task_04/src/heap.cpp | 2 +- task_04/src/test.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/task_04/src/heap.cpp b/task_04/src/heap.cpp index 07634633..7f8e3cdd 100644 --- a/task_04/src/heap.cpp +++ b/task_04/src/heap.cpp @@ -37,7 +37,7 @@ void Heap::Insert(int x) { } void Heap::extractMin() { - a[0] = a[n]; + a[0] = a[n-1]; a.erase(a.begin() + n - 1); n--; SiftDown(0); diff --git a/task_04/src/test.cpp b/task_04/src/test.cpp index f527197e..ad5d7e20 100644 --- a/task_04/src/test.cpp +++ b/task_04/src/test.cpp @@ -1,6 +1,8 @@ #include +#include + #include "heap.hpp" TEST(TopologySort, Simple) { @@ -9,11 +11,10 @@ TEST(TopologySort, Simple) { a.Insert(5); ASSERT_EQ(a.GetMin(), 5); a.Insert(3); - ASSERT_EQ(a.GetMin(), 3); a.Insert(1); a.Insert(7); a.Insert(-2); a.extractMin(); ASSERT_EQ(a.size(), 4); - ASSERT_EQ(a.GetMin(), -2); + ASSERT_EQ(a.GetMin(), 1); } \ No newline at end of file From 92029b3d006fd0f92a232c55fa0d9b8827fd53d2 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 16:54:23 +0000 Subject: [PATCH 16/43] update task_04 --- task_04/src/heap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/task_04/src/heap.cpp b/task_04/src/heap.cpp index 7f8e3cdd..c623c1f7 100644 --- a/task_04/src/heap.cpp +++ b/task_04/src/heap.cpp @@ -37,7 +37,7 @@ void Heap::Insert(int x) { } void Heap::extractMin() { - a[0] = a[n-1]; + a[0] = a[n - 1]; a.erase(a.begin() + n - 1); n--; SiftDown(0); From 253a40c69892b719f5095f7ac57280ce41dfa233 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 18:53:26 +0000 Subject: [PATCH 17/43] task_05 --- task_05/src/sort.hpp | 42 ++++++++++++++++++++++++++++++++++++++++++ task_05/src/test.cpp | 25 +++++++++++++++++++++++-- 2 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 task_05/src/sort.hpp diff --git a/task_05/src/sort.hpp b/task_05/src/sort.hpp new file mode 100644 index 00000000..f52ce9cb --- /dev/null +++ b/task_05/src/sort.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include + +std::vector merge(const std::vector& left, const std::vector& right) { + std::vector result; + int i = 0, j = 0; + + while (i < left.size() && j < right.size()) { + if (left[i] <= right[j]) { + result.push_back(left[i]); + ++i; + } else { + result.push_back(right[j]); + ++j; + } + } + + while (i < left.size()) { + result.push_back(left[i]); + ++i; + } + + while (j < right.size()) { + result.push_back(right[j]); + ++j; + } + + return result; +} + +std::vector mergeSort(std::vector arr) { + if (arr.size() <= 1) { + return arr; + } + + int mid = arr.size() / 2; + std::vector left(arr.begin(), arr.begin() + mid); + std::vector right(arr.begin() + mid, arr.end()); + + return merge(mergeSort(left), mergeSort(right)); +} \ No newline at end of file diff --git a/task_05/src/test.cpp b/task_05/src/test.cpp index 5e11617e..7c29ffa6 100644 --- a/task_05/src/test.cpp +++ b/task_05/src/test.cpp @@ -1,6 +1,27 @@ #include +#include "sort.hpp" -TEST(TopologySort, Simple) { - ASSERT_EQ(1, 1); // Stack [] +TEST(MergeSortTests, Case1) { + ASSERT_EQ(mergeSort(std::vector{73, 74, 75, 71, 69, 72, 76, 73}), (std::vector{69, 71, 72, 73, 73, 74, 75, 76})); } + +TEST(MergeSortTests, Case2) { + ASSERT_EQ(mergeSort(std::vector{30, 40, 50, 60}), (std::vector{30, 40, 50, 60})); +} + +TEST(MergeSortTests, Case3) { + ASSERT_EQ(mergeSort(std::vector{30, 60, 90, 70, 80, 40, 30}), (std::vector{30, 30, 40, 60, 70, 80, 90})); +} + +TEST(MergeSortTests, Case4) { + ASSERT_EQ(mergeSort(std::vector{55, 55, 55, 55, 55}), (std::vector{55, 55, 55, 55, 55})); +} + +TEST(MergeSortTests, Case5) { + ASSERT_EQ(mergeSort(std::vector{76, 75, 74, 73, 72, 71, 70}), (std::vector{70, 71, 72, 73, 74, 75, 76})); +} + +TEST(MergeSortTests, Case6) { + ASSERT_EQ(mergeSort(std::vector{75, 72, 71, 70, 74, 76}), (std::vector{70, 71, 72, 74, 75, 76})); +} \ No newline at end of file From f3b691e5db2fc1604e66af945fdde392b48607f2 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 19:24:31 +0000 Subject: [PATCH 18/43] task_06 --- task_06/src/task_06.hpp | 48 +++++++++++++++++++++++++++++++++++++++++ task_06/src/test.cpp | 19 ++++++++++++++-- 2 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 task_06/src/task_06.hpp diff --git a/task_06/src/task_06.hpp b/task_06/src/task_06.hpp new file mode 100644 index 00000000..97074fd5 --- /dev/null +++ b/task_06/src/task_06.hpp @@ -0,0 +1,48 @@ +#pragma once + +#include + +std::vector merge(const std::vector& left, + const std::vector& right) { + std::vector result; + int i = 0, j = 0; + + while (i < left.size() && j < right.size()) { + if (left[i] <= right[j]) { + result.push_back(left[i]); + ++i; + } else { + result.push_back(right[j]); + ++j; + } + } + + while (i < left.size()) { + result.push_back(left[i]); + ++i; + } + + while (j < right.size()) { + result.push_back(right[j]); + ++j; + } + + return result; +} + +std::vector mergeSort(std::vector arr) { + if (arr.size() <= 1) { + return arr; + } + + int mid = arr.size() / 2; + std::vector left(arr.begin(), arr.begin() + mid); + std::vector right(arr.begin() + mid, arr.end()); + + return merge(mergeSort(left), mergeSort(right)); +} + +int findNthOrder(std::vector arr, int n) { + std::vector ans = mergeSort(arr); + return ans[n - 1]; +} \ No newline at end of file diff --git a/task_06/src/test.cpp b/task_06/src/test.cpp index 5e11617e..32ff5cf4 100644 --- a/task_06/src/test.cpp +++ b/task_06/src/test.cpp @@ -1,6 +1,21 @@ #include -TEST(TopologySort, Simple) { - ASSERT_EQ(1, 1); // Stack [] +#include "task_06.hpp" + +TEST(MergeSortTests, Case1) { + ASSERT_EQ(findNthOrder(std::vector{73, 74, 75, 71, 69, 72, 76, 73}, 2), + 71); +} + +TEST(MergeSortTests, Case2) { + ASSERT_EQ(findNthOrder(std::vector{30, 40, 50, 60}, 1), 30); +} + +TEST(MergeSortTests, Case3) { + ASSERT_EQ(findNthOrder(std::vector{30, 60, 90, 70, 80, 40, 30}, 4), 60); +} + +TEST(MergeSortTests, Case4) { + ASSERT_EQ(findNthOrder(std::vector{55, 55, 55, 55, 55}, 5), 55); } From 230696f03f266cd36b3422206d7a87f75f0cb9ca Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Thu, 23 May 2024 19:25:23 +0000 Subject: [PATCH 19/43] update task_05 --- task_05/src/sort.hpp | 57 ++++++++++++++++++++++---------------------- task_05/src/test.cpp | 19 ++++++++++----- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/task_05/src/sort.hpp b/task_05/src/sort.hpp index f52ce9cb..3f666fd4 100644 --- a/task_05/src/sort.hpp +++ b/task_05/src/sort.hpp @@ -2,41 +2,42 @@ #include -std::vector merge(const std::vector& left, const std::vector& right) { - std::vector result; - int i = 0, j = 0; - - while (i < left.size() && j < right.size()) { - if (left[i] <= right[j]) { - result.push_back(left[i]); - ++i; - } else { - result.push_back(right[j]); - ++j; - } +std::vector merge(const std::vector& left, + const std::vector& right) { + std::vector result; + int i = 0, j = 0; + + while (i < left.size() && j < right.size()) { + if (left[i] <= right[j]) { + result.push_back(left[i]); + ++i; + } else { + result.push_back(right[j]); + ++j; } + } - while (i < left.size()) { - result.push_back(left[i]); - ++i; - } + while (i < left.size()) { + result.push_back(left[i]); + ++i; + } - while (j < right.size()) { - result.push_back(right[j]); - ++j; - } + while (j < right.size()) { + result.push_back(right[j]); + ++j; + } - return result; + return result; } std::vector mergeSort(std::vector arr) { - if (arr.size() <= 1) { - return arr; - } + if (arr.size() <= 1) { + return arr; + } - int mid = arr.size() / 2; - std::vector left(arr.begin(), arr.begin() + mid); - std::vector right(arr.begin() + mid, arr.end()); + int mid = arr.size() / 2; + std::vector left(arr.begin(), arr.begin() + mid); + std::vector right(arr.begin() + mid, arr.end()); - return merge(mergeSort(left), mergeSort(right)); + return merge(mergeSort(left), mergeSort(right)); } \ No newline at end of file diff --git a/task_05/src/test.cpp b/task_05/src/test.cpp index 7c29ffa6..1936ff3b 100644 --- a/task_05/src/test.cpp +++ b/task_05/src/test.cpp @@ -1,27 +1,34 @@ #include + #include "sort.hpp" TEST(MergeSortTests, Case1) { - ASSERT_EQ(mergeSort(std::vector{73, 74, 75, 71, 69, 72, 76, 73}), (std::vector{69, 71, 72, 73, 73, 74, 75, 76})); + ASSERT_EQ(mergeSort(std::vector{73, 74, 75, 71, 69, 72, 76, 73}), + (std::vector{69, 71, 72, 73, 73, 74, 75, 76})); } TEST(MergeSortTests, Case2) { - ASSERT_EQ(mergeSort(std::vector{30, 40, 50, 60}), (std::vector{30, 40, 50, 60})); + ASSERT_EQ(mergeSort(std::vector{30, 40, 50, 60}), + (std::vector{30, 40, 50, 60})); } TEST(MergeSortTests, Case3) { - ASSERT_EQ(mergeSort(std::vector{30, 60, 90, 70, 80, 40, 30}), (std::vector{30, 30, 40, 60, 70, 80, 90})); + ASSERT_EQ(mergeSort(std::vector{30, 60, 90, 70, 80, 40, 30}), + (std::vector{30, 30, 40, 60, 70, 80, 90})); } TEST(MergeSortTests, Case4) { - ASSERT_EQ(mergeSort(std::vector{55, 55, 55, 55, 55}), (std::vector{55, 55, 55, 55, 55})); + ASSERT_EQ(mergeSort(std::vector{55, 55, 55, 55, 55}), + (std::vector{55, 55, 55, 55, 55})); } TEST(MergeSortTests, Case5) { - ASSERT_EQ(mergeSort(std::vector{76, 75, 74, 73, 72, 71, 70}), (std::vector{70, 71, 72, 73, 74, 75, 76})); + ASSERT_EQ(mergeSort(std::vector{76, 75, 74, 73, 72, 71, 70}), + (std::vector{70, 71, 72, 73, 74, 75, 76})); } TEST(MergeSortTests, Case6) { - ASSERT_EQ(mergeSort(std::vector{75, 72, 71, 70, 74, 76}), (std::vector{70, 71, 72, 74, 75, 76})); + ASSERT_EQ(mergeSort(std::vector{75, 72, 71, 70, 74, 76}), + (std::vector{70, 71, 72, 74, 75, 76})); } \ No newline at end of file From fb915bbaa307f05792b998a15051729518741901 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Fri, 7 Jun 2024 07:49:31 +0000 Subject: [PATCH 20/43] update task_06 --- task_06/src/task_06.hpp | 62 +++++++++++++++++------------------------ task_06/src/test.cpp | 8 +++--- 2 files changed, 30 insertions(+), 40 deletions(-) diff --git a/task_06/src/task_06.hpp b/task_06/src/task_06.hpp index 97074fd5..06cc62fa 100644 --- a/task_06/src/task_06.hpp +++ b/task_06/src/task_06.hpp @@ -2,47 +2,37 @@ #include -std::vector merge(const std::vector& left, - const std::vector& right) { - std::vector result; - int i = 0, j = 0; - - while (i < left.size() && j < right.size()) { - if (left[i] <= right[j]) { - result.push_back(left[i]); - ++i; - } else { - result.push_back(right[j]); - ++j; +using namespace std; + +int partition(vector& arr, int left, int right) { + int pivotIndex = left + (right - left) / 2; + int pivotValue = arr[pivotIndex]; + swap(arr[pivotIndex], arr[right]); + int storeIndex = left; + for (int i = left; i < right; ++i) { + if (arr[i] < pivotValue) { + swap(arr[i], arr[storeIndex]); + ++storeIndex; } } - - while (i < left.size()) { - result.push_back(left[i]); - ++i; - } - - while (j < right.size()) { - result.push_back(right[j]); - ++j; - } - - return result; + swap(arr[storeIndex], arr[right]); + return storeIndex; } -std::vector mergeSort(std::vector arr) { - if (arr.size() <= 1) { - return arr; +int quickSelect(vector& arr, int left, int right, int k) { + while (left <= right) { + int pivotIndex = partition(arr, left, right); + if (pivotIndex == k) { + return arr[pivotIndex]; + } else if (pivotIndex < k) { + left = pivotIndex + 1; + } else { + right = pivotIndex - 1; + } } - - int mid = arr.size() / 2; - std::vector left(arr.begin(), arr.begin() + mid); - std::vector right(arr.begin() + mid, arr.end()); - - return merge(mergeSort(left), mergeSort(right)); + return -1; } -int findNthOrder(std::vector arr, int n) { - std::vector ans = mergeSort(arr); - return ans[n - 1]; +int findNthOrder(std::vector arr, int k) { + return quickSelect(arr, 0, arr.size() - 1, k - 1); } \ No newline at end of file diff --git a/task_06/src/test.cpp b/task_06/src/test.cpp index 32ff5cf4..40e124c0 100644 --- a/task_06/src/test.cpp +++ b/task_06/src/test.cpp @@ -3,19 +3,19 @@ #include "task_06.hpp" -TEST(MergeSortTests, Case1) { +TEST(findNthOrder, Case1) { ASSERT_EQ(findNthOrder(std::vector{73, 74, 75, 71, 69, 72, 76, 73}, 2), 71); } -TEST(MergeSortTests, Case2) { +TEST(findNthOrder, Case2) { ASSERT_EQ(findNthOrder(std::vector{30, 40, 50, 60}, 1), 30); } -TEST(MergeSortTests, Case3) { +TEST(findNthOrder, Case3) { ASSERT_EQ(findNthOrder(std::vector{30, 60, 90, 70, 80, 40, 30}, 4), 60); } -TEST(MergeSortTests, Case4) { +TEST(findNthOrder, Case4) { ASSERT_EQ(findNthOrder(std::vector{55, 55, 55, 55, 55}, 5), 55); } From c79105ff9b9d9f2d700033bc9c80c7426579a41c Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Fri, 7 Jun 2024 12:01:48 +0000 Subject: [PATCH 21/43] task_07 --- task_07/src/binary_search_tree.hpp | 135 +++++++++++++++++++++++++++++ task_07/src/test.cpp | 12 ++- 2 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 task_07/src/binary_search_tree.hpp diff --git a/task_07/src/binary_search_tree.hpp b/task_07/src/binary_search_tree.hpp new file mode 100644 index 00000000..5222b2aa --- /dev/null +++ b/task_07/src/binary_search_tree.hpp @@ -0,0 +1,135 @@ +#include +#include +#include +#include + +using namespace std; + +struct Node { + int value; + Node* left; + Node* right; + + Node(int val) : value(val), left(nullptr), right(nullptr) {} +}; + +void insert(Node*& root, int value) { + Node* newNode = new Node(value); + if (root == nullptr) { + root = newNode; + return; + } + Node* current = root; + while (true) { + if (value <= current->value) { + if (current->left == nullptr) { + current->left = newNode; + break; + } + current = current->left; + } else { + if (current->right == nullptr) { + current->right = newNode; + break; + } + current = current->right; + } + } +} + +void build_binary_search_tree(vector& arr, Node*& root) { + for (int i = 0; i < arr.size(); ++i) { + insert(root, arr[i]); + } +} + +string find(Node* current, int value) { + while (true) { + if (value == current->value) { + return "Есть"; + } + + if (value < current->value) { + if (current->left == nullptr) break; + current = current->left; + } + + if (value > current->value) { + if (current->right == nullptr) break; + current = current->right; + } + } + return "Нет"; +} + +Node* findMin(Node* node) { + while (node->left != nullptr) { + node = node->left; + } + return node; +} + +void remove(Node* current, int value) { + while (true) { + Node* next = nullptr; + + if (value < current->value) { + next = current->left; + if (next == nullptr) { + cout << "Такого элемента нет\n"; + } + + if (value == next->value) { + if (next->left == nullptr && next->right == nullptr) { + current->left = nullptr; + delete next; + return; + } + if (next->left != nullptr && next->right == nullptr) { + current->left = next->left; + delete next; + return; + } + if (next->left == nullptr && next->right != nullptr) { + current->left = next->right; + delete next; + return; + } + if (next->left != nullptr && next->right != nullptr) { + Node* min_right = findMin(next->right); + next->value = min_right->value; + value = min_right->value; + } + } + current = next; + } + + if (value > current->value) { + next = current->right; + if (current->right == nullptr) { + cout << "Такого элемента нет\n"; + } + if (value == next->value) { + if (next->left == nullptr && next->right == nullptr) { + current->right = nullptr; + delete next; + } + if (next->left != nullptr && next->right == nullptr) { + current->right = next->left; + delete next; + } + if (next->left == nullptr && next->right != nullptr) { + current->right = next->right; + delete next; + } + if (next->left != nullptr && next->right != nullptr) { + Node* min_right = findMin(next->right); + next->value = min_right->value; + value = min_right->value; + } + return; + } + current = next; + } + } +} \ No newline at end of file diff --git a/task_07/src/test.cpp b/task_07/src/test.cpp index 5e11617e..9b99abe4 100644 --- a/task_07/src/test.cpp +++ b/task_07/src/test.cpp @@ -1,6 +1,14 @@ #include -TEST(TopologySort, Simple) { - ASSERT_EQ(1, 1); // Stack [] +#include "binary_search_tree.hpp" + +TEST(binary_search_tree, 1) { + vector arr = {10, 3, 11, 5, 4, 2, 9}; + Node* root = nullptr; + build_binary_search_tree(arr, root); + ASSERT_EQ(find(root, 2), "Есть"); + ASSERT_EQ(find(root, 8), "Нет"); + remove(root, 2); + ASSERT_EQ(find(root, 2), "Нет"); } From 668a6922ff4ecbd9e7a2d1cba884ff8004c35779 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Fri, 7 Jun 2024 13:28:48 +0000 Subject: [PATCH 22/43] task_09 --- task_09/src/MinCoins.hpp | 20 ++++++++++++++++++++ task_09/src/test.cpp | 8 +++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 task_09/src/MinCoins.hpp diff --git a/task_09/src/MinCoins.hpp b/task_09/src/MinCoins.hpp new file mode 100644 index 00000000..ea430304 --- /dev/null +++ b/task_09/src/MinCoins.hpp @@ -0,0 +1,20 @@ +#include +#include + +int MinCoins(std::vector coins, int amount) { + std::vector dp(amount + 1, amount + 1); + dp[0] = 0; + + for (int i = 1; i <= amount; ++i) { + for (int coin : coins) { + if (i - coin >= 0) { + dp[i] = std::min(dp[i], dp[i - coin] + 1); + } + } + } + + if (dp[amount] == amount + 1) + return -1; + else + return dp[amount]; +} \ No newline at end of file diff --git a/task_09/src/test.cpp b/task_09/src/test.cpp index 869094dd..3484eb49 100644 --- a/task_09/src/test.cpp +++ b/task_09/src/test.cpp @@ -1,4 +1,10 @@ #include -TEST(TopologySort, Simple) { ASSERT_EQ(1, 1); } +#include "MinCoins.hpp" + +TEST(MinCoins, 1) { ASSERT_EQ(MinCoins(std::vector{1, 2, 5, 10}, 14), 3); } + +TEST(MinCoins, 2) { ASSERT_EQ(MinCoins(std::vector{1, 2, 5, 10}, 19), 4); } + +TEST(MinCoins, 3) { ASSERT_EQ(MinCoins(std::vector{2, 4, 6}, 13), -1); } \ No newline at end of file From 63415fb38f4f2fa0a60e753e6b31279374ae4a64 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Fri, 7 Jun 2024 13:33:19 +0000 Subject: [PATCH 23/43] remove using std --- task_06/src/task_06.hpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/task_06/src/task_06.hpp b/task_06/src/task_06.hpp index 06cc62fa..02f4f31e 100644 --- a/task_06/src/task_06.hpp +++ b/task_06/src/task_06.hpp @@ -2,24 +2,22 @@ #include -using namespace std; - -int partition(vector& arr, int left, int right) { +int partition(std::vector& arr, int left, int right) { int pivotIndex = left + (right - left) / 2; int pivotValue = arr[pivotIndex]; - swap(arr[pivotIndex], arr[right]); + std::swap(arr[pivotIndex], arr[right]); int storeIndex = left; for (int i = left; i < right; ++i) { if (arr[i] < pivotValue) { - swap(arr[i], arr[storeIndex]); + std::swap(arr[i], arr[storeIndex]); ++storeIndex; } } - swap(arr[storeIndex], arr[right]); + std::swap(arr[storeIndex], arr[right]); return storeIndex; } -int quickSelect(vector& arr, int left, int right, int k) { +int quickSelect(std::vector& arr, int left, int right, int k) { while (left <= right) { int pivotIndex = partition(arr, left, right); if (pivotIndex == k) { From 5e930f096db37fe8aef28c4d104d05e6cdbc665b Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Fri, 7 Jun 2024 13:35:22 +0000 Subject: [PATCH 24/43] remove excess include --- task_04/src/test.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/task_04/src/test.cpp b/task_04/src/test.cpp index ad5d7e20..7187f2cf 100644 --- a/task_04/src/test.cpp +++ b/task_04/src/test.cpp @@ -1,8 +1,6 @@ #include -#include - #include "heap.hpp" TEST(TopologySort, Simple) { From fc2aaebe266ac08df8be50144191022c68e27f0a Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Fri, 7 Jun 2024 15:36:46 +0000 Subject: [PATCH 25/43] task_08 --- task_08/src/hash_table.hpp | 48 ++++++++++++++++++++++++++++++++++++++ task_08/src/test.cpp | 18 +++++++++++--- 2 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 task_08/src/hash_table.hpp diff --git a/task_08/src/hash_table.hpp b/task_08/src/hash_table.hpp new file mode 100644 index 00000000..0bc89e88 --- /dev/null +++ b/task_08/src/hash_table.hpp @@ -0,0 +1,48 @@ +#include // Для std::hash +#include +#include +#include + +class HashTable { + public: + HashTable(size_t size) : table(size) {} + + // Вставка элемента + void insert(int key, int value) { + auto& list = table[(key * 1363) % table.size()]; + for (auto& pair : list) { + if (pair.first == key) { + pair.second = value; + return; + } + } + list.emplace_back(key, value); + } + + // Удаление элемента + void remove(int key) { + auto& list = table[(key * 1363) % table.size()]; + for (auto it = list.begin(); it != list.end(); ++it) { + if (it->first == key) { + list.erase(it); + return; + } + } + } + + // Поиск элемента + bool find(int key, int& value) { + auto& list = table[(key * 1363) % table.size()]; + for (auto pair : list) { + if (pair.first == key) { + value = pair.second; + return true; + } + } + return false; + } + + private: + std::vector>> table; + const int hash_constant = 1363; +}; \ No newline at end of file diff --git a/task_08/src/test.cpp b/task_08/src/test.cpp index 5e11617e..497f06ca 100644 --- a/task_08/src/test.cpp +++ b/task_08/src/test.cpp @@ -1,6 +1,18 @@ - #include -TEST(TopologySort, Simple) { - ASSERT_EQ(1, 1); // Stack [] +#include "hash_table.hpp" + +TEST(hash_table, 1) { + HashTable hashTable(10); + + hashTable.insert(1, 100); + hashTable.insert(2, 200); + hashTable.insert(3, 300); + + int value; + ASSERT_EQ(hashTable.find(2, value), true); + ASSERT_EQ(value, 200); + + hashTable.remove(2); + ASSERT_EQ(hashTable.find(2, value), false); } From abc65faf96634f66b9b3a3f11ff6811da626eed9 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 08:28:24 +0000 Subject: [PATCH 26/43] update task_03 --- task_03/src/test.cpp | 12 ++++++------ task_03/src/topology_sort.cpp | 26 +++++++++++++------------- task_03/src/topology_sort.hpp | 3 ++- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/task_03/src/test.cpp b/task_03/src/test.cpp index 5fe77337..f600aace 100644 --- a/task_03/src/test.cpp +++ b/task_03/src/test.cpp @@ -6,16 +6,16 @@ #include "topology_sort.hpp" TEST(TopologySort, MultipleCases) { - ASSERT_EQ(Task3(std::vector{73, 74, 75, 71, 69, 72, 76, 73}), + ASSERT_EQ(TopologySort(std::vector{73, 74, 75, 71, 69, 72, 76, 73}), (std::vector{1, 1, 4, 2, 1, 1, 0, 0})); - ASSERT_EQ(Task3(std::vector{30, 40, 50, 60}), + ASSERT_EQ(TopologySort(std::vector{30, 40, 50, 60}), (std::vector{1, 1, 1, 0})); - ASSERT_EQ(Task3(std::vector{30, 60, 90, 70, 80, 40, 30}), + ASSERT_EQ(TopologySort(std::vector{30, 60, 90, 70, 80, 40, 30}), (std::vector{1, 1, 0, 1, 0, 0, 0})); - ASSERT_EQ(Task3(std::vector{55, 55, 55, 55, 55}), + ASSERT_EQ(TopologySort(std::vector{55, 55, 55, 55, 55}), (std::vector{0, 0, 0, 0, 0})); - ASSERT_EQ(Task3(std::vector{76, 75, 74, 73, 72, 71, 70}), + ASSERT_EQ(TopologySort(std::vector{76, 75, 74, 73, 72, 71, 70}), (std::vector{0, 0, 0, 0, 0, 0, 0})); - ASSERT_EQ(Task3(std::vector{75, 72, 71, 70, 74, 76}), + ASSERT_EQ(TopologySort(std::vector{75, 72, 71, 70, 74, 76}), (std::vector{5, 3, 2, 1, 1, 0})); } diff --git a/task_03/src/topology_sort.cpp b/task_03/src/topology_sort.cpp index e2692af1..1bde3975 100644 --- a/task_03/src/topology_sort.cpp +++ b/task_03/src/topology_sort.cpp @@ -1,20 +1,20 @@ #include "topology_sort.hpp" -std::vector Task3(std::vector temperature) { - std::vector result; +std::vector TopologySort(std::vector temperature) { + std::vector result(0, temperature.size()); + std::stack index; + for (int i = 0; i < temperature.size(); ++i) { - int count_day = 0; - bool flag = true; - for (int j = i; j < temperature.size(); ++j) { - if (temperature[j] <= temperature[i]) - count_day++; - else { - flag = false; - break; - } + while (!index.empty() && temperature[index.top()] < temperature[i]) { + int current_index = index.top(); + index.pop(); + result[current_index] = i - current_index; } - if (flag) count_day = 0; - result.push_back(count_day); + index.push(i); + } + for (int i = 0; i +#include -std::vector Task3(std::vector); \ No newline at end of file +std::vector TopologySort(std::vector); \ No newline at end of file From a763ac37ba2a89563e76329d4cf71bd5dc3882c2 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 08:30:02 +0000 Subject: [PATCH 27/43] format --- task_03/src/topology_sort.cpp | 4 ++-- task_03/src/topology_sort.hpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/task_03/src/topology_sort.cpp b/task_03/src/topology_sort.cpp index 1bde3975..09b47c37 100644 --- a/task_03/src/topology_sort.cpp +++ b/task_03/src/topology_sort.cpp @@ -2,7 +2,7 @@ std::vector TopologySort(std::vector temperature) { std::vector result(0, temperature.size()); - std::stack index; + std::stack index; for (int i = 0; i < temperature.size(); ++i) { while (!index.empty() && temperature[index.top()] < temperature[i]) { @@ -12,7 +12,7 @@ std::vector TopologySort(std::vector temperature) { } index.push(i); } - for (int i = 0; i #include +#include std::vector TopologySort(std::vector); \ No newline at end of file From 0619d9d76bfd4ad5ddb686b031e6039a0a9f2ce9 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 09:00:16 +0000 Subject: [PATCH 28/43] final update task_03 --- task_03/src/topology_sort.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/task_03/src/topology_sort.cpp b/task_03/src/topology_sort.cpp index 09b47c37..6361e624 100644 --- a/task_03/src/topology_sort.cpp +++ b/task_03/src/topology_sort.cpp @@ -1,7 +1,7 @@ #include "topology_sort.hpp" std::vector TopologySort(std::vector temperature) { - std::vector result(0, temperature.size()); + std::vector result(temperature.size(), 0); std::stack index; for (int i = 0; i < temperature.size(); ++i) { @@ -12,9 +12,6 @@ std::vector TopologySort(std::vector temperature) { } index.push(i); } - for (int i = 0; i < index.size(); ++i) { - result.push_back(0); - } return result; } \ No newline at end of file From 6888602f4df3c0a91bbbc073186c0f9efd46a869 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 09:35:04 +0000 Subject: [PATCH 29/43] update task_04 --- task_04/src/heap.cpp | 53 +++++++++----------------------------------- task_04/src/heap.hpp | 9 ++++---- task_04/src/test.cpp | 15 ++++++++++--- 3 files changed, 27 insertions(+), 50 deletions(-) diff --git a/task_04/src/heap.cpp b/task_04/src/heap.cpp index c623c1f7..805462ea 100644 --- a/task_04/src/heap.cpp +++ b/task_04/src/heap.cpp @@ -26,9 +26,14 @@ void Heap::SiftDown(int i) { } } -int Heap::size() { return a.size(); } +int Heap::Size() { return a.size(); } -int Heap::GetMin() { return a[0]; } +int Heap::GetMin() { + if (a.size() == 0) { + throw std::out_of_range("Heap is empty"); + } + return a[0]; +} void Heap::Insert(int x) { a.push_back(x); @@ -36,48 +41,12 @@ void Heap::Insert(int x) { SiftUp(n - 1); } -void Heap::extractMin() { +void Heap::ExtractMin() { + if (a.size() == 0) { + throw std::out_of_range("Heap is empty"); + } a[0] = a[n - 1]; a.erase(a.begin() + n - 1); n--; SiftDown(0); } - -std::pair> Heap_exe(int n, int k, std::vector a) { - Heap useful_elements; - std::map indx; - - std::vector ans(n, 0); - - long long i = 0; - long long ans0 = 0; - long long j = 0; - - while (j < n) { - while (j - i < k && j < n) { - if (a[j] < a[i]) { - indx[a[j]] = j; - useful_elements.Insert(a[j]); - break; - } - - if (i != j) { - indx[a[j]] = j; - useful_elements.Insert(a[j]); - } - - ans0 += a[i]; - ans[i]++; - - j++; - } - - if (useful_elements.size() != 0) { - i = indx[useful_elements.GetMin()]; - useful_elements.extractMin(); - } else { - i = j; - } - } - return {ans0, ans}; -} \ No newline at end of file diff --git a/task_04/src/heap.hpp b/task_04/src/heap.hpp index bd967517..b75457c4 100644 --- a/task_04/src/heap.hpp +++ b/task_04/src/heap.hpp @@ -1,5 +1,6 @@ #include #include +#include class Heap { public: @@ -7,12 +8,10 @@ class Heap { void SiftDown(int i); void Insert(int x); int GetMin(); - void extractMin(); - int size(); + void ExtractMin(); + int Size(); private: std::vector a; int n = 0; -}; - -std::pair> Heap_exe(int n, int k, std::vector a); \ No newline at end of file +}; \ No newline at end of file diff --git a/task_04/src/test.cpp b/task_04/src/test.cpp index 7187f2cf..797d5fc1 100644 --- a/task_04/src/test.cpp +++ b/task_04/src/test.cpp @@ -5,14 +5,23 @@ TEST(TopologySort, Simple) { Heap a; - ASSERT_EQ(a.size(), 0); + + EXPECT_THROW(a.ExtractMin(), std::out_of_range); + EXPECT_THROW(a.GetMin(), std::out_of_range); + + a.Insert(-1); + + a.ExtractMin(); + EXPECT_THROW(a.ExtractMin(), std::out_of_range); + + ASSERT_EQ(a.Size(), 0); a.Insert(5); ASSERT_EQ(a.GetMin(), 5); a.Insert(3); a.Insert(1); a.Insert(7); a.Insert(-2); - a.extractMin(); - ASSERT_EQ(a.size(), 4); + a.ExtractMin(); + ASSERT_EQ(a.Size(), 4); ASSERT_EQ(a.GetMin(), 1); } \ No newline at end of file From 69f7a5ff940a3c7e401b6ba3135940f305874976 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 09:44:31 +0000 Subject: [PATCH 30/43] update task_05 --- task_05/src/sort.hpp | 6 +++--- task_05/src/test.cpp | 17 +++++++++++------ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/task_05/src/sort.hpp b/task_05/src/sort.hpp index 3f666fd4..b873c3c0 100644 --- a/task_05/src/sort.hpp +++ b/task_05/src/sort.hpp @@ -2,7 +2,7 @@ #include -std::vector merge(const std::vector& left, +std::vector Merge(const std::vector& left, const std::vector& right) { std::vector result; int i = 0, j = 0; @@ -30,7 +30,7 @@ std::vector merge(const std::vector& left, return result; } -std::vector mergeSort(std::vector arr) { +std::vector MergeSort(std::vector arr) { if (arr.size() <= 1) { return arr; } @@ -39,5 +39,5 @@ std::vector mergeSort(std::vector arr) { std::vector left(arr.begin(), arr.begin() + mid); std::vector right(arr.begin() + mid, arr.end()); - return merge(mergeSort(left), mergeSort(right)); + return Merge(MergeSort(left), MergeSort(right)); } \ No newline at end of file diff --git a/task_05/src/test.cpp b/task_05/src/test.cpp index 1936ff3b..fd717944 100644 --- a/task_05/src/test.cpp +++ b/task_05/src/test.cpp @@ -4,31 +4,36 @@ #include "sort.hpp" TEST(MergeSortTests, Case1) { - ASSERT_EQ(mergeSort(std::vector{73, 74, 75, 71, 69, 72, 76, 73}), + ASSERT_EQ(MergeSort(std::vector{73, 74, 75, 71, 69, 72, 76, 73}), (std::vector{69, 71, 72, 73, 73, 74, 75, 76})); } TEST(MergeSortTests, Case2) { - ASSERT_EQ(mergeSort(std::vector{30, 40, 50, 60}), + ASSERT_EQ(MergeSort(std::vector{30, 40, 50, 60}), (std::vector{30, 40, 50, 60})); } TEST(MergeSortTests, Case3) { - ASSERT_EQ(mergeSort(std::vector{30, 60, 90, 70, 80, 40, 30}), + ASSERT_EQ(MergeSort(std::vector{30, 60, 90, 70, 80, 40, 30}), (std::vector{30, 30, 40, 60, 70, 80, 90})); } TEST(MergeSortTests, Case4) { - ASSERT_EQ(mergeSort(std::vector{55, 55, 55, 55, 55}), + ASSERT_EQ(MergeSort(std::vector{55, 55, 55, 55, 55}), (std::vector{55, 55, 55, 55, 55})); } TEST(MergeSortTests, Case5) { - ASSERT_EQ(mergeSort(std::vector{76, 75, 74, 73, 72, 71, 70}), + ASSERT_EQ(MergeSort(std::vector{76, 75, 74, 73, 72, 71, 70}), (std::vector{70, 71, 72, 73, 74, 75, 76})); } TEST(MergeSortTests, Case6) { - ASSERT_EQ(mergeSort(std::vector{75, 72, 71, 70, 74, 76}), + ASSERT_EQ(MergeSort(std::vector{75, 72, 71, 70, 74, 76}), (std::vector{70, 71, 72, 74, 75, 76})); +} + +TEST(MergeSortTests, Case7) { + ASSERT_EQ(MergeSort(std::vector{}), + (std::vector{})); } \ No newline at end of file From 4fc4760b7164f6f009a10c38f88ecb4a35be5ffa Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 09:47:18 +0000 Subject: [PATCH 31/43] update task_05 --- task_05/src/test.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/task_05/src/test.cpp b/task_05/src/test.cpp index fd717944..25b06088 100644 --- a/task_05/src/test.cpp +++ b/task_05/src/test.cpp @@ -34,6 +34,5 @@ TEST(MergeSortTests, Case6) { } TEST(MergeSortTests, Case7) { - ASSERT_EQ(MergeSort(std::vector{}), - (std::vector{})); + ASSERT_EQ(MergeSort(std::vector{}), (std::vector{})); } \ No newline at end of file From c7063ba6e8d454d214b3e8bde86381ca07525c82 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 11:44:20 +0000 Subject: [PATCH 32/43] task_02 --- task_02/src/stack.cpp | 44 +++++++++++++++++++++++++++++++++-------- task_02/src/stack.hpp | 9 +++++++-- task_02/src/test.cpp | 46 +++++++++++++++++-------------------------- 3 files changed, 61 insertions(+), 38 deletions(-) diff --git a/task_02/src/stack.cpp b/task_02/src/stack.cpp index 8ca89902..7ae5f572 100644 --- a/task_02/src/stack.cpp +++ b/task_02/src/stack.cpp @@ -2,20 +2,48 @@ #include -void Stack::Push(int value) { data_.push(value); } +void Stack::Push(int value) { elements_.push_back(value); } int Stack::Pop() { - auto result = data_.top(); - data_.pop(); + if (elements_.size() == 0) { + throw std::out_of_range("Stack is empty"); + } + int result = elements_.back(); + elements_.pop_back(); return result; } -void MinStack::Push(int value) { data_.push_back(value); } +int Stack::Size() { return elements_.size(); } + +int Stack::Top() { + if (elements_.size() == 0) { + throw std::out_of_range("Stack is empty"); + } + return elements_.back(); +} + +/////////////////// + +void MinStack::Push(int value) { + main_stack_.Push(value); + if (min_stack_.Size() && min_stack_.Top() > value) { + min_stack_.Push(value); + } + if (min_stack_.Size() == 0) { + min_stack_.Push(value); + } +} int MinStack::Pop() { - auto result = data_.back(); - data_.pop_back(); - return result; + if (main_stack_.Size() && min_stack_.Size() && + main_stack_.Top() == min_stack_.Top()) { + min_stack_.Pop(); + } + return main_stack_.Pop(); } -int MinStack::GetMin() { return *std::min_element(data_.begin(), data_.end()); } \ No newline at end of file +int MinStack::GetMin() { return min_stack_.Top(); } + +int MinStack::Top() { return main_stack_.Top(); } + +int MinStack::Size() { return main_stack_.Size(); } \ No newline at end of file diff --git a/task_02/src/stack.hpp b/task_02/src/stack.hpp index 138ec40f..de84460c 100644 --- a/task_02/src/stack.hpp +++ b/task_02/src/stack.hpp @@ -7,17 +7,22 @@ class Stack { public: void Push(int value); int Pop(); + int Top(); + int Size(); private: - std::stack data_; + std::vector elements_; }; class MinStack { public: void Push(int value); int Pop(); + int Top(); int GetMin(); + int Size(); private: - std::vector data_; + Stack main_stack_; + Stack min_stack_; }; diff --git a/task_02/src/test.cpp b/task_02/src/test.cpp index 54e7ce90..9e1fdb1c 100644 --- a/task_02/src/test.cpp +++ b/task_02/src/test.cpp @@ -7,36 +7,26 @@ TEST(StackTest, Simple) { Stack stack; - stack.Push(1); // Stack [1] - ASSERT_EQ(stack.Pop(), 1); // Stack [] - stack.Push(1); // Stack [1] - stack.Push(2); // Stack [1, 2] - ASSERT_EQ(stack.Pop(), 2); // Stack [1] - ASSERT_EQ(stack.Pop(), 1); // Stack [] - stack.Push(1); // Stack [1] - stack.Push(2); // Stack [1, 2] - ASSERT_EQ(stack.Pop(), 2); // Stack [1] - stack.Push(3); // Stack [1, 3] - ASSERT_EQ(stack.Pop(), 3); // Stack [1] - ASSERT_EQ(stack.Pop(), 1); // Stack [] + stack.Push(1); + ASSERT_EQ(stack.Pop(), 1); + ASSERT_EQ(stack.Size(), 0); + EXPECT_THROW(stack.Top(), std::out_of_range); + EXPECT_THROW(stack.Pop(), std::out_of_range); + stack.Push(3); + stack.Push(-1); + ASSERT_EQ(stack.Top(), -1); } TEST(MinStackTest, Simple) { MinStack stack; - stack.Push(1); // Stack [1] - ASSERT_EQ(stack.GetMin(), 1); - ASSERT_EQ(stack.Pop(), 1); // Stack [] - stack.Push(1); // Stack [1] - stack.Push(2); // Stack [1, 2] - ASSERT_EQ(stack.GetMin(), 1); - ASSERT_EQ(stack.Pop(), 2); // Stack [1] - ASSERT_EQ(stack.Pop(), 1); // Stack [] - stack.Push(1); // Stack [1] - stack.Push(2); // Stack [1, 2] - ASSERT_EQ(stack.GetMin(), 1); - ASSERT_EQ(stack.Pop(), 2); // Stack [1] - stack.Push(3); // Stack [1, 3] - ASSERT_EQ(stack.GetMin(), 1); - ASSERT_EQ(stack.Pop(), 3); // Stack [1] - ASSERT_EQ(stack.Pop(), 1); // Stack [] + stack.Push(1); + ASSERT_EQ(stack.Pop(), 1); + ASSERT_EQ(stack.Size(), 0); + EXPECT_THROW(stack.Top(), std::out_of_range); + EXPECT_THROW(stack.Pop(), std::out_of_range); + EXPECT_THROW(stack.GetMin(), std::out_of_range); + stack.Push(-2); + stack.Push(5); + ASSERT_EQ(stack.Top(), 5); + ASSERT_EQ(stack.GetMin(), -2); } \ No newline at end of file From 858f42fdd83233eb273f09f49893041e801ce643 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 11:48:10 +0000 Subject: [PATCH 33/43] format --- task_04/src/heap.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/task_04/src/heap.hpp b/task_04/src/heap.hpp index b75457c4..ffccc3a2 100644 --- a/task_04/src/heap.hpp +++ b/task_04/src/heap.hpp @@ -1,6 +1,5 @@ -#include -#include #include +#include class Heap { public: From ee315c5db11e1c79811ad2aaf59a164b348c9c20 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 11:54:29 +0000 Subject: [PATCH 34/43] delete main in task_01 --- task_01/src/main | Bin 61760 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 task_01/src/main diff --git a/task_01/src/main b/task_01/src/main deleted file mode 100755 index 541e3499d6b0aee20225ec9a4d2853ec3a2ad8a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61760 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 From 65a5f13d69838b8f1d30291fdda71bfc09979b91 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 12:30:39 +0000 Subject: [PATCH 35/43] update task_06 --- task_06/src/task_06.hpp | 3 +++ task_06/src/test.cpp | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/task_06/src/task_06.hpp b/task_06/src/task_06.hpp index 02f4f31e..c2f95caf 100644 --- a/task_06/src/task_06.hpp +++ b/task_06/src/task_06.hpp @@ -32,5 +32,8 @@ int quickSelect(std::vector& arr, int left, int right, int k) { } int findNthOrder(std::vector arr, int k) { + if (arr.size() == 0) { + throw std::invalid_argument("vector must be not empty"); + } return quickSelect(arr, 0, arr.size() - 1, k - 1); } \ No newline at end of file diff --git a/task_06/src/test.cpp b/task_06/src/test.cpp index 40e124c0..8242855c 100644 --- a/task_06/src/test.cpp +++ b/task_06/src/test.cpp @@ -19,3 +19,7 @@ TEST(findNthOrder, Case3) { TEST(findNthOrder, Case4) { ASSERT_EQ(findNthOrder(std::vector{55, 55, 55, 55, 55}, 5), 55); } + +TEST(findNthOrder, Case5) { + EXPECT_THROW(findNthOrder(std::vector{}, 5), std::invalid_argument); +} From 47f20294236eed136ab5e3d834b7c6c65a53b2b3 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 17:20:53 +0000 Subject: [PATCH 36/43] update task_07: --- task_07/src/binary_search_tree.hpp | 196 +++++++++++++---------------- task_07/src/test.cpp | 14 ++- 2 files changed, 94 insertions(+), 116 deletions(-) diff --git a/task_07/src/binary_search_tree.hpp b/task_07/src/binary_search_tree.hpp index 5222b2aa..6b4eb158 100644 --- a/task_07/src/binary_search_tree.hpp +++ b/task_07/src/binary_search_tree.hpp @@ -1,135 +1,111 @@ -#include -#include -#include #include -using namespace std; - struct Node { int value; + int Height; Node* left; Node* right; - Node(int val) : value(val), left(nullptr), right(nullptr) {} + Node(int k) { + value = k; + left = right = 0; + Height = 1; + } }; -void insert(Node*& root, int value) { - Node* newNode = new Node(value); - if (root == nullptr) { - root = newNode; - return; - } - Node* current = root; - while (true) { - if (value <= current->value) { - if (current->left == nullptr) { - current->left = newNode; - break; - } - current = current->left; - } else { - if (current->right == nullptr) { - current->right = newNode; - break; - } - current = current->right; - } - } -} +int Height(Node* p) { return p ? p->Height : 0; } -void build_binary_search_tree(vector& arr, Node*& root) { - for (int i = 0; i < arr.size(); ++i) { - insert(root, arr[i]); - } +int Bfactor(Node* p) { return Height(p->right) - Height(p->left); } + +void FixHeight(Node* p) { + int hl = Height(p->left); + int hr = Height(p->right); + p->Height = (hl > hr ? hl : hr) + 1; } -string find(Node* current, int value) { - while (true) { - if (value == current->value) { - return "Есть"; - } +Node* Rotateright(Node* p) { + Node* q = p->left; + p->left = q->right; + q->right = p; + FixHeight(p); + FixHeight(q); + return q; +} - if (value < current->value) { - if (current->left == nullptr) break; - current = current->left; - } +Node* Rotateleft(Node* q) { + Node* p = q->right; + q->right = p->left; + p->left = q; + FixHeight(q); + FixHeight(p); + return p; +} - if (value > current->value) { - if (current->right == nullptr) break; - current = current->right; - } +Node* Balance(Node* p) { + FixHeight(p); + if (Bfactor(p) == 2) { + if (Bfactor(p->right) < 0) p->right = Rotateright(p->right); + return Rotateleft(p); } - return "Нет"; + if (Bfactor(p) == -2) { + if (Bfactor(p->left) > 0) p->left = Rotateleft(p->left); + return Rotateright(p); + } + return p; +} + +Node* Insert(Node* p, int k) { + if (!p) return new Node(k); + if (k < p->value) + p->left = Insert(p->left, k); + else + p->right = Insert(p->right, k); + return Balance(p); } -Node* findMin(Node* node) { - while (node->left != nullptr) { - node = node->left; +Node* Find(Node* root, int value) { + if (root == nullptr) { + return nullptr; + } + + if (value < root->value) { + return Find(root->left, value); + } else if (value > root->value) { + return Find(root->right, value); + } else { + return root; } - return node; } -void remove(Node* current, int value) { - while (true) { - Node* next = nullptr; +Node* FindMin(Node* p) { return p->left ? FindMin(p->left) : p; } - if (value < current->value) { - next = current->left; - if (next == nullptr) { - cout << "Такого элемента нет\n"; - } +Node* Removemin(Node* p) { + if (p->left == 0) return p->right; + p->left = Removemin(p->left); + return Balance(p); +} - if (value == next->value) { - if (next->left == nullptr && next->right == nullptr) { - current->left = nullptr; - delete next; - return; - } - if (next->left != nullptr && next->right == nullptr) { - current->left = next->left; - delete next; - return; - } - if (next->left == nullptr && next->right != nullptr) { - current->left = next->right; - delete next; - return; - } - if (next->left != nullptr && next->right != nullptr) { - Node* min_right = findMin(next->right); - next->value = min_right->value; - value = min_right->value; - } - } - current = next; - } +Node* Remove(Node* p, int k) { + if (!p) return 0; + if (k < p->value) + p->left = Remove(p->left, k); + else if (k > p->value) + p->right = Remove(p->right, k); + else { + Node* q = p->left; + Node* r = p->right; + delete p; + if (!r) return q; + Node* min = FindMin(r); + min->right = Removemin(r); + min->left = q; + return Balance(min); + } + return Balance(p); +} - if (value > current->value) { - next = current->right; - if (current->right == nullptr) { - cout << "Такого элемента нет\n"; - } - if (value == next->value) { - if (next->left == nullptr && next->right == nullptr) { - current->right = nullptr; - delete next; - } - if (next->left != nullptr && next->right == nullptr) { - current->right = next->left; - delete next; - } - if (next->left == nullptr && next->right != nullptr) { - current->right = next->right; - delete next; - } - if (next->left != nullptr && next->right != nullptr) { - Node* min_right = findMin(next->right); - next->value = min_right->value; - value = min_right->value; - } - return; - } - current = next; - } +void BuildBinarySearchTree(std::vector& arr, Node*& root) { + for (int i = 0; i < arr.size(); ++i) { + root = Insert(root, arr[i]); } } \ No newline at end of file diff --git a/task_07/src/test.cpp b/task_07/src/test.cpp index 9b99abe4..801293e6 100644 --- a/task_07/src/test.cpp +++ b/task_07/src/test.cpp @@ -4,11 +4,13 @@ #include "binary_search_tree.hpp" TEST(binary_search_tree, 1) { - vector arr = {10, 3, 11, 5, 4, 2, 9}; + std::vector arr = {10, 3, 11, 5, 4, 2, 9}; Node* root = nullptr; - build_binary_search_tree(arr, root); - ASSERT_EQ(find(root, 2), "Есть"); - ASSERT_EQ(find(root, 8), "Нет"); - remove(root, 2); - ASSERT_EQ(find(root, 2), "Нет"); + BuildBinarySearchTree(arr, root); + ASSERT_EQ(Find(root, 3)->value, 3); + ASSERT_EQ(Find(root, 8), nullptr); + ASSERT_EQ(FindMin(root)->value, 2); + root = Remove(root, 2); + ASSERT_EQ(Find(root, 2), nullptr); + root = Remove(root, 1); } From 2b81cba5d434c8415ae8c5eb277581e74f67ad64 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 17:37:09 +0000 Subject: [PATCH 37/43] update task_08 --- task_08/src/hash_table.hpp | 10 +++++----- task_08/src/test.cpp | 7 +++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/task_08/src/hash_table.hpp b/task_08/src/hash_table.hpp index 0bc89e88..14979b32 100644 --- a/task_08/src/hash_table.hpp +++ b/task_08/src/hash_table.hpp @@ -1,4 +1,3 @@ -#include // Для std::hash #include #include #include @@ -9,7 +8,7 @@ class HashTable { // Вставка элемента void insert(int key, int value) { - auto& list = table[(key * 1363) % table.size()]; + auto& list = table[hashFunction(key, table.size())]; for (auto& pair : list) { if (pair.first == key) { pair.second = value; @@ -21,7 +20,7 @@ class HashTable { // Удаление элемента void remove(int key) { - auto& list = table[(key * 1363) % table.size()]; + auto& list = table[hashFunction(key, table.size())]; for (auto it = list.begin(); it != list.end(); ++it) { if (it->first == key) { list.erase(it); @@ -32,7 +31,7 @@ class HashTable { // Поиск элемента bool find(int key, int& value) { - auto& list = table[(key * 1363) % table.size()]; + auto& list = table[hashFunction(key, table.size())]; for (auto pair : list) { if (pair.first == key) { value = pair.second; @@ -44,5 +43,6 @@ class HashTable { private: std::vector>> table; - const int hash_constant = 1363; + std::function hashFunction = + [](int key, size_t mod) -> size_t { return (key * 1363) % mod; }; }; \ No newline at end of file diff --git a/task_08/src/test.cpp b/task_08/src/test.cpp index 497f06ca..6ddaf8c4 100644 --- a/task_08/src/test.cpp +++ b/task_08/src/test.cpp @@ -15,4 +15,11 @@ TEST(hash_table, 1) { hashTable.remove(2); ASSERT_EQ(hashTable.find(2, value), false); + + hashTable.remove(2); + ASSERT_EQ(hashTable.find(2, value), false); + + hashTable.insert(-1, -10); + ASSERT_EQ(hashTable.find(-1, value), true); + ASSERT_EQ(value, -10); } From d592237547667cd3637bd30df54f1214e73045e8 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sat, 15 Jun 2024 17:43:02 +0000 Subject: [PATCH 38/43] add new test in task_09 --- task_09/src/test.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/task_09/src/test.cpp b/task_09/src/test.cpp index 3484eb49..cf297ede 100644 --- a/task_09/src/test.cpp +++ b/task_09/src/test.cpp @@ -7,4 +7,6 @@ TEST(MinCoins, 1) { ASSERT_EQ(MinCoins(std::vector{1, 2, 5, 10}, 14), 3); } TEST(MinCoins, 2) { ASSERT_EQ(MinCoins(std::vector{1, 2, 5, 10}, 19), 4); } -TEST(MinCoins, 3) { ASSERT_EQ(MinCoins(std::vector{2, 4, 6}, 13), -1); } \ No newline at end of file +TEST(MinCoins, 3) { ASSERT_EQ(MinCoins(std::vector{2, 4, 6}, 13), -1); } + +TEST(MinCoins, 4) { ASSERT_EQ(MinCoins(std::vector{3, 4, 5, 10}, 17), 3); } \ No newline at end of file From e3f27367a705e4682cc43c3f5fa881f5bfd69462 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sun, 16 Jun 2024 08:34:16 +0000 Subject: [PATCH 39/43] rename task_03 --- task_03/src/test.cpp | 14 +++++++------- task_03/src/topology_sort.cpp | 2 +- task_03/src/topology_sort.hpp | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/task_03/src/test.cpp b/task_03/src/test.cpp index f600aace..7cc321be 100644 --- a/task_03/src/test.cpp +++ b/task_03/src/test.cpp @@ -5,17 +5,17 @@ #include "topology_sort.hpp" -TEST(TopologySort, MultipleCases) { - ASSERT_EQ(TopologySort(std::vector{73, 74, 75, 71, 69, 72, 76, 73}), +TEST(DaysUntilWarmer, MultipleCases) { + ASSERT_EQ(DaysUntilWarmer(std::vector{73, 74, 75, 71, 69, 72, 76, 73}), (std::vector{1, 1, 4, 2, 1, 1, 0, 0})); - ASSERT_EQ(TopologySort(std::vector{30, 40, 50, 60}), + ASSERT_EQ(DaysUntilWarmer(std::vector{30, 40, 50, 60}), (std::vector{1, 1, 1, 0})); - ASSERT_EQ(TopologySort(std::vector{30, 60, 90, 70, 80, 40, 30}), + ASSERT_EQ(DaysUntilWarmer(std::vector{30, 60, 90, 70, 80, 40, 30}), (std::vector{1, 1, 0, 1, 0, 0, 0})); - ASSERT_EQ(TopologySort(std::vector{55, 55, 55, 55, 55}), + ASSERT_EQ(DaysUntilWarmer(std::vector{55, 55, 55, 55, 55}), (std::vector{0, 0, 0, 0, 0})); - ASSERT_EQ(TopologySort(std::vector{76, 75, 74, 73, 72, 71, 70}), + ASSERT_EQ(DaysUntilWarmer(std::vector{76, 75, 74, 73, 72, 71, 70}), (std::vector{0, 0, 0, 0, 0, 0, 0})); - ASSERT_EQ(TopologySort(std::vector{75, 72, 71, 70, 74, 76}), + ASSERT_EQ(DaysUntilWarmer(std::vector{75, 72, 71, 70, 74, 76}), (std::vector{5, 3, 2, 1, 1, 0})); } diff --git a/task_03/src/topology_sort.cpp b/task_03/src/topology_sort.cpp index 6361e624..8b898315 100644 --- a/task_03/src/topology_sort.cpp +++ b/task_03/src/topology_sort.cpp @@ -1,6 +1,6 @@ #include "topology_sort.hpp" -std::vector TopologySort(std::vector temperature) { +std::vector DaysUntilWarmer(std::vector temperature) { std::vector result(temperature.size(), 0); std::stack index; diff --git a/task_03/src/topology_sort.hpp b/task_03/src/topology_sort.hpp index 6aa1f9c5..99b18616 100644 --- a/task_03/src/topology_sort.hpp +++ b/task_03/src/topology_sort.hpp @@ -2,4 +2,4 @@ #include #include -std::vector TopologySort(std::vector); \ No newline at end of file +std::vector DaysUntilWarmer(std::vector); \ No newline at end of file From 02e51504f56ae15fa6df04dac571d331f7e40785 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sun, 16 Jun 2024 08:51:38 +0000 Subject: [PATCH 40/43] rename and add new variable in task_04 --- task_04/src/heap.cpp | 39 ++++++++++++++++++++++----------------- task_04/src/heap.hpp | 2 +- task_04/src/test.cpp | 32 ++++++++++++++++---------------- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/task_04/src/heap.cpp b/task_04/src/heap.cpp index 805462ea..4320ebc5 100644 --- a/task_04/src/heap.cpp +++ b/task_04/src/heap.cpp @@ -1,52 +1,57 @@ #include "heap.hpp" void Heap::SiftUp(int i) { - while (a[i] < a[i / 2]) { - std::swap(a[i], a[i / 2]); + int half_i = i/2; + while (elements[i] < elements[half_i]) { + std::swap(elements[i], elements[half_i]); i /= 2; + half_i /= 2; } } void Heap::SiftDown(int i) { - while (2 * i < n) { + int leftChildIndex = 2 * i; + int rightChildIndex = 2 * i + 1; + while (leftChildIndex < n) { int j = -1; - if (a[2 * i] < a[i]) { - j = 2 * i; + if (elements[leftChildIndex] < elements[i]) { + j = leftChildIndex; } - if (2 * i + 1 < n && a[2 * i + 1] < a[i] && - (j == -1 || a[2 * i] > a[2 * i + 1])) { - j = 2 * i + 1; + if (rightChildIndex < n && elements[rightChildIndex] < elements[i] && + (j == -1 || elements[leftChildIndex] > elements[rightChildIndex])) { + j = rightChildIndex; } if (j == -1) break; else { - std::swap(a[i], a[j]); - i = j; + std::swap(elements[i], elements[j]); + leftChildIndex = 2 * j; + rightChildIndex = 2 * j + 1; } } } -int Heap::Size() { return a.size(); } +int Heap::Size() { return elements.size(); } int Heap::GetMin() { - if (a.size() == 0) { + if (elements.size() == 0) { throw std::out_of_range("Heap is empty"); } - return a[0]; + return elements[0]; } void Heap::Insert(int x) { - a.push_back(x); + elements.push_back(x); n++; SiftUp(n - 1); } void Heap::ExtractMin() { - if (a.size() == 0) { + if (elements.size() == 0) { throw std::out_of_range("Heap is empty"); } - a[0] = a[n - 1]; - a.erase(a.begin() + n - 1); + elements[0] = elements[n - 1]; + elements.erase(elements.begin() + n - 1); n--; SiftDown(0); } diff --git a/task_04/src/heap.hpp b/task_04/src/heap.hpp index ffccc3a2..07a371d5 100644 --- a/task_04/src/heap.hpp +++ b/task_04/src/heap.hpp @@ -11,6 +11,6 @@ class Heap { int Size(); private: - std::vector a; + std::vector elements; int n = 0; }; \ No newline at end of file diff --git a/task_04/src/test.cpp b/task_04/src/test.cpp index 797d5fc1..6d867dc7 100644 --- a/task_04/src/test.cpp +++ b/task_04/src/test.cpp @@ -4,24 +4,24 @@ #include "heap.hpp" TEST(TopologySort, Simple) { - Heap a; + Heap heap; - EXPECT_THROW(a.ExtractMin(), std::out_of_range); - EXPECT_THROW(a.GetMin(), std::out_of_range); + EXPECT_THROW(heap.ExtractMin(), std::out_of_range); + EXPECT_THROW(heap.GetMin(), std::out_of_range); - a.Insert(-1); + heap.Insert(-1); - a.ExtractMin(); - EXPECT_THROW(a.ExtractMin(), std::out_of_range); + heap.ExtractMin(); + EXPECT_THROW(heap.ExtractMin(), std::out_of_range); - ASSERT_EQ(a.Size(), 0); - a.Insert(5); - ASSERT_EQ(a.GetMin(), 5); - a.Insert(3); - a.Insert(1); - a.Insert(7); - a.Insert(-2); - a.ExtractMin(); - ASSERT_EQ(a.Size(), 4); - ASSERT_EQ(a.GetMin(), 1); + ASSERT_EQ(heap.Size(), 0); + heap.Insert(5); + ASSERT_EQ(heap.GetMin(), 5); + heap.Insert(3); + heap.Insert(1); + heap.Insert(7); + heap.Insert(-2); + heap.ExtractMin(); + ASSERT_EQ(heap.Size(), 4); + ASSERT_EQ(heap.GetMin(), 1); } \ No newline at end of file From 2cd7fd805fd8a7b178b7f21d80d5a6c2d76f18cc Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sun, 16 Jun 2024 08:52:14 +0000 Subject: [PATCH 41/43] reformat --- task_04/src/heap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/task_04/src/heap.cpp b/task_04/src/heap.cpp index 4320ebc5..f79f072c 100644 --- a/task_04/src/heap.cpp +++ b/task_04/src/heap.cpp @@ -1,7 +1,7 @@ #include "heap.hpp" void Heap::SiftUp(int i) { - int half_i = i/2; + int half_i = i / 2; while (elements[i] < elements[half_i]) { std::swap(elements[i], elements[half_i]); i /= 2; From a0dfea2c7b618fa43073f8451ec3fcbc6c2ae846 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sun, 16 Jun 2024 08:59:44 +0000 Subject: [PATCH 42/43] rename in task_06 --- task_06/src/task_06.hpp | 38 +++++++++++++++++++------------------- task_06/src/test.cpp | 12 ++++++------ 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/task_06/src/task_06.hpp b/task_06/src/task_06.hpp index c2f95caf..de49294c 100644 --- a/task_06/src/task_06.hpp +++ b/task_06/src/task_06.hpp @@ -2,38 +2,38 @@ #include -int partition(std::vector& arr, int left, int right) { - int pivotIndex = left + (right - left) / 2; - int pivotValue = arr[pivotIndex]; - std::swap(arr[pivotIndex], arr[right]); - int storeIndex = left; +int Partition(std::vector& arr, int left, int right) { + int pivot_index = left + (right - left) / 2; + int pivot_value = arr[pivot_index]; + std::swap(arr[pivot_index], arr[right]); + int store_index = left; for (int i = left; i < right; ++i) { - if (arr[i] < pivotValue) { - std::swap(arr[i], arr[storeIndex]); - ++storeIndex; + if (arr[i] < pivot_value) { + std::swap(arr[i], arr[store_index]); + ++store_index; } } - std::swap(arr[storeIndex], arr[right]); - return storeIndex; + std::swap(arr[store_index], arr[right]); + return store_index; } -int quickSelect(std::vector& arr, int left, int right, int k) { +int QuickSelect(std::vector& arr, int left, int right, int k) { while (left <= right) { - int pivotIndex = partition(arr, left, right); - if (pivotIndex == k) { - return arr[pivotIndex]; - } else if (pivotIndex < k) { - left = pivotIndex + 1; + int pivot_index = Partition(arr, left, right); + if (pivot_index == k) { + return arr[pivot_index]; + } else if (pivot_index < k) { + left = pivot_index + 1; } else { - right = pivotIndex - 1; + right = pivot_index - 1; } } return -1; } -int findNthOrder(std::vector arr, int k) { +int FindNthOrder(std::vector arr, int k) { if (arr.size() == 0) { throw std::invalid_argument("vector must be not empty"); } - return quickSelect(arr, 0, arr.size() - 1, k - 1); + return QuickSelect(arr, 0, arr.size() - 1, k - 1); } \ No newline at end of file diff --git a/task_06/src/test.cpp b/task_06/src/test.cpp index 8242855c..13c56ff2 100644 --- a/task_06/src/test.cpp +++ b/task_06/src/test.cpp @@ -3,23 +3,23 @@ #include "task_06.hpp" -TEST(findNthOrder, Case1) { - ASSERT_EQ(findNthOrder(std::vector{73, 74, 75, 71, 69, 72, 76, 73}, 2), +TEST(FindNthOrder, Case1) { + ASSERT_EQ(FindNthOrder(std::vector{73, 74, 75, 71, 69, 72, 76, 73}, 2), 71); } TEST(findNthOrder, Case2) { - ASSERT_EQ(findNthOrder(std::vector{30, 40, 50, 60}, 1), 30); + ASSERT_EQ(FindNthOrder(std::vector{30, 40, 50, 60}, 1), 30); } TEST(findNthOrder, Case3) { - ASSERT_EQ(findNthOrder(std::vector{30, 60, 90, 70, 80, 40, 30}, 4), 60); + ASSERT_EQ(FindNthOrder(std::vector{30, 60, 90, 70, 80, 40, 30}, 4), 60); } TEST(findNthOrder, Case4) { - ASSERT_EQ(findNthOrder(std::vector{55, 55, 55, 55, 55}, 5), 55); + ASSERT_EQ(FindNthOrder(std::vector{55, 55, 55, 55, 55}, 5), 55); } TEST(findNthOrder, Case5) { - EXPECT_THROW(findNthOrder(std::vector{}, 5), std::invalid_argument); + EXPECT_THROW(FindNthOrder(std::vector{}, 5), std::invalid_argument); } From c8c9ceac861c76b89df68cc74a19a1f3cfcc35f1 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Sun, 16 Jun 2024 09:04:59 +0000 Subject: [PATCH 43/43] rename in task_07 and task_08 --- task_07/src/binary_search_tree.hpp | 18 +++++++++--------- task_08/src/hash_table.hpp | 6 +++--- task_08/src/test.cpp | 20 ++++++++++---------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/task_07/src/binary_search_tree.hpp b/task_07/src/binary_search_tree.hpp index 6b4eb158..fdcf8737 100644 --- a/task_07/src/binary_search_tree.hpp +++ b/task_07/src/binary_search_tree.hpp @@ -23,7 +23,7 @@ void FixHeight(Node* p) { p->Height = (hl > hr ? hl : hr) + 1; } -Node* Rotateright(Node* p) { +Node* RotateRight(Node* p) { Node* q = p->left; p->left = q->right; q->right = p; @@ -32,7 +32,7 @@ Node* Rotateright(Node* p) { return q; } -Node* Rotateleft(Node* q) { +Node* RotateLeft(Node* q) { Node* p = q->right; q->right = p->left; p->left = q; @@ -44,12 +44,12 @@ Node* Rotateleft(Node* q) { Node* Balance(Node* p) { FixHeight(p); if (Bfactor(p) == 2) { - if (Bfactor(p->right) < 0) p->right = Rotateright(p->right); - return Rotateleft(p); + if (Bfactor(p->right) < 0) p->right = RotateRight(p->right); + return RotateLeft(p); } if (Bfactor(p) == -2) { - if (Bfactor(p->left) > 0) p->left = Rotateleft(p->left); - return Rotateright(p); + if (Bfactor(p->left) > 0) p->left = RotateLeft(p->left); + return RotateRight(p); } return p; } @@ -79,9 +79,9 @@ Node* Find(Node* root, int value) { Node* FindMin(Node* p) { return p->left ? FindMin(p->left) : p; } -Node* Removemin(Node* p) { +Node* RemoveMin(Node* p) { if (p->left == 0) return p->right; - p->left = Removemin(p->left); + p->left = RemoveMin(p->left); return Balance(p); } @@ -97,7 +97,7 @@ Node* Remove(Node* p, int k) { delete p; if (!r) return q; Node* min = FindMin(r); - min->right = Removemin(r); + min->right = RemoveMin(r); min->left = q; return Balance(min); } diff --git a/task_08/src/hash_table.hpp b/task_08/src/hash_table.hpp index 14979b32..8e038c3b 100644 --- a/task_08/src/hash_table.hpp +++ b/task_08/src/hash_table.hpp @@ -7,7 +7,7 @@ class HashTable { HashTable(size_t size) : table(size) {} // Вставка элемента - void insert(int key, int value) { + void Insert(int key, int value) { auto& list = table[hashFunction(key, table.size())]; for (auto& pair : list) { if (pair.first == key) { @@ -19,7 +19,7 @@ class HashTable { } // Удаление элемента - void remove(int key) { + void Remove(int key) { auto& list = table[hashFunction(key, table.size())]; for (auto it = list.begin(); it != list.end(); ++it) { if (it->first == key) { @@ -30,7 +30,7 @@ class HashTable { } // Поиск элемента - bool find(int key, int& value) { + bool Find(int key, int& value) { auto& list = table[hashFunction(key, table.size())]; for (auto pair : list) { if (pair.first == key) { diff --git a/task_08/src/test.cpp b/task_08/src/test.cpp index 6ddaf8c4..8815ba3b 100644 --- a/task_08/src/test.cpp +++ b/task_08/src/test.cpp @@ -5,21 +5,21 @@ TEST(hash_table, 1) { HashTable hashTable(10); - hashTable.insert(1, 100); - hashTable.insert(2, 200); - hashTable.insert(3, 300); + hashTable.Insert(1, 100); + hashTable.Insert(2, 200); + hashTable.Insert(3, 300); int value; - ASSERT_EQ(hashTable.find(2, value), true); + ASSERT_EQ(hashTable.Find(2, value), true); ASSERT_EQ(value, 200); - hashTable.remove(2); - ASSERT_EQ(hashTable.find(2, value), false); + hashTable.Remove(2); + ASSERT_EQ(hashTable.Find(2, value), false); - hashTable.remove(2); - ASSERT_EQ(hashTable.find(2, value), false); + hashTable.Remove(2); + ASSERT_EQ(hashTable.Find(2, value), false); - hashTable.insert(-1, -10); - ASSERT_EQ(hashTable.find(-1, value), true); + hashTable.Insert(-1, -10); + ASSERT_EQ(hashTable.Find(-1, value), true); ASSERT_EQ(value, -10); }