From fc7c1710785c283fb881df416cf090c30c3299ae Mon Sep 17 00:00:00 2001 From: Ivan Khokhlov Date: Sat, 10 Feb 2024 12:39:15 +0300 Subject: [PATCH 1/8] Update README.md --- task_01/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/task_01/README.md b/task_01/README.md index 3e7840c5..8ceb5d4e 100644 --- a/task_01/README.md +++ b/task_01/README.md @@ -1,3 +1,3 @@ # Задача 1 -Дано целое число и массив целых чисел, нужно найти 2 числа из массива которые в сумме дадут заданное число \ No newline at end of file +Дано целое число и отсортированый массив целых чисел, нужно найти 2 числа из массива которые в сумме дадут заданное число From 26ccd6034dfaf858028412f931eee181138f6ab3 Mon Sep 17 00:00:00 2001 From: Ivan Khokhlov Date: Sat, 24 Feb 2024 10:47:10 +0000 Subject: [PATCH 2/8] add test to gh actions --- .github/workflows/tests.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index d259f9f8..aaeaa9d2 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -25,3 +25,7 @@ jobs: - name: make working-directory: ${{github.workspace}}/build run: make + + - name: Test task 01 + working-directory: ${{github.workspace}}/build + run: ./task_01/task_01_tests \ No newline at end of file From 944bb0b93102ecceb39bccecad230770d5eed2e9 Mon Sep 17 00:00:00 2001 From: Ivan Khokhlov Date: Sat, 24 Feb 2024 10:52:27 +0000 Subject: [PATCH 3/8] add tests to gh actions --- .github/workflows/tests.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index aaeaa9d2..2d060ffc 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -28,4 +28,8 @@ jobs: - name: Test task 01 working-directory: ${{github.workspace}}/build - run: ./task_01/task_01_tests \ No newline at end of file + run: ./task_01/task_01_tests + + - name: Test task 02 + working-directory: ${{github.workspace}}/build + run: ./task_01/task_02_tests \ No newline at end of file From 50f12a4927dc0d5b941bb180d38a3235d591969f Mon Sep 17 00:00:00 2001 From: Ivan Khokhlov Date: Sat, 16 Mar 2024 07:36:52 +0000 Subject: [PATCH 4/8] add tsaks and ci tests --- .github/workflows/tests.yaml | 26 +++++++++++++++++++++++- task_04/CMakeLists.txt | 39 ++++++++++++++++++++++++++++++++++++ task_04/README.md | 3 +++ task_04/src/main.cpp | 3 +++ task_04/src/test.cpp | 6 ++++++ task_05/CMakeLists.txt | 39 ++++++++++++++++++++++++++++++++++++ task_05/README.md | 7 +++++++ task_05/src/main.cpp | 3 +++ task_05/src/test.cpp | 6 ++++++ task_06/CMakeLists.txt | 39 ++++++++++++++++++++++++++++++++++++ task_06/README.md | 3 +++ task_06/src/main.cpp | 3 +++ task_06/src/test.cpp | 6 ++++++ task_07/CMakeLists.txt | 39 ++++++++++++++++++++++++++++++++++++ task_07/README.md | 3 +++ task_07/src/main.cpp | 3 +++ task_07/src/test.cpp | 6 ++++++ task_08/CMakeLists.txt | 39 ++++++++++++++++++++++++++++++++++++ task_08/README.md | 3 +++ task_08/src/main.cpp | 3 +++ task_08/src/test.cpp | 6 ++++++ 21 files changed, 284 insertions(+), 1 deletion(-) create mode 100644 task_04/CMakeLists.txt create mode 100644 task_04/README.md create mode 100644 task_04/src/main.cpp create mode 100644 task_04/src/test.cpp create mode 100644 task_05/CMakeLists.txt create mode 100644 task_05/README.md create mode 100644 task_05/src/main.cpp create mode 100644 task_05/src/test.cpp create mode 100644 task_06/CMakeLists.txt create mode 100644 task_06/README.md create mode 100644 task_06/src/main.cpp create mode 100644 task_06/src/test.cpp create mode 100644 task_07/CMakeLists.txt create mode 100644 task_07/README.md create mode 100644 task_07/src/main.cpp create mode 100644 task_07/src/test.cpp create mode 100644 task_08/CMakeLists.txt create mode 100644 task_08/README.md create mode 100644 task_08/src/main.cpp create mode 100644 task_08/src/test.cpp diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 2d060ffc..5bdc8abb 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -32,4 +32,28 @@ jobs: - name: Test task 02 working-directory: ${{github.workspace}}/build - run: ./task_01/task_02_tests \ No newline at end of file + run: ./task_02/task_02_tests + + - name: Test task 03 + working-directory: ${{github.workspace}}/build + run: ./task_03/task_03_tests + + - name: Test task 04 + working-directory: ${{github.workspace}}/build + run: ./task_04/task_04_tests + + - name: Test task 05 + working-directory: ${{github.workspace}}/build + run: ./task_05/task_05_tests + + - name: Test task 06 + working-directory: ${{github.workspace}}/build + run: ./task_06/task_06_tests + + - name: Test task 07 + working-directory: ${{github.workspace}}/build + run: ./task_07/task_07_tests + + - name: Test task 08 + working-directory: ${{github.workspace}}/build + run: ./task_03/task_08_tests \ No newline at end of file diff --git a/task_04/CMakeLists.txt b/task_04/CMakeLists.txt new file mode 100644 index 00000000..0e239848 --- /dev/null +++ b/task_04/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.10) + +get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) +string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) +project(${PROJECT_NAME} C CXX) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") +file(GLOB_RECURSE lib_source_list "../lib/src/*.cpp" "../lib/src/*.hpp") +file(GLOB_RECURSE main_source_list "src/main.cpp") +file(GLOB_RECURSE test_source_list "src/*.cpp") +file(GLOB_RECURSE test_list "src/*test.cpp") + +list(REMOVE_ITEM test_source_list ${main_source_list}) +list(REMOVE_ITEM source_list ${test_list}) + +include_directories(${PROJECT_NAME} PUBLIC src) +include_directories(${PROJECT_NAME} PUBLIC ../lib/src) + +add_executable(${PROJECT_NAME} ${source_list}) +target_link_libraries(${PROJECT_NAME} PUBLIC Utils) + +# Locate GTest +enable_testing() +find_package(GTest REQUIRED) +include_directories(${GTEST_INCLUDE_DIRS}) + +# Link runTests with what we want to test and the GTest and pthread library +add_executable(${PROJECT_NAME}_tests ${test_source_list}) +target_link_libraries( + ${PROJECT_NAME}_tests + GTest::gtest_main + Utils +) + +include(GoogleTest) +gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_04/README.md b/task_04/README.md new file mode 100644 index 00000000..eca10891 --- /dev/null +++ b/task_04/README.md @@ -0,0 +1,3 @@ +# Задача на кучу + +В данной задаче необходимо реализовать [кучу](https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%BA%D1%83%D1%87%D0%B0), можно пользоваться std::vector \ No newline at end of file diff --git a/task_04/src/main.cpp b/task_04/src/main.cpp new file mode 100644 index 00000000..0e4393ba --- /dev/null +++ b/task_04/src/main.cpp @@ -0,0 +1,3 @@ +#include + +int main() { return 0; } diff --git a/task_04/src/test.cpp b/task_04/src/test.cpp new file mode 100644 index 00000000..5e11617e --- /dev/null +++ b/task_04/src/test.cpp @@ -0,0 +1,6 @@ + +#include + +TEST(TopologySort, Simple) { + ASSERT_EQ(1, 1); // Stack [] +} diff --git a/task_05/CMakeLists.txt b/task_05/CMakeLists.txt new file mode 100644 index 00000000..0e239848 --- /dev/null +++ b/task_05/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.10) + +get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) +string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) +project(${PROJECT_NAME} C CXX) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") +file(GLOB_RECURSE lib_source_list "../lib/src/*.cpp" "../lib/src/*.hpp") +file(GLOB_RECURSE main_source_list "src/main.cpp") +file(GLOB_RECURSE test_source_list "src/*.cpp") +file(GLOB_RECURSE test_list "src/*test.cpp") + +list(REMOVE_ITEM test_source_list ${main_source_list}) +list(REMOVE_ITEM source_list ${test_list}) + +include_directories(${PROJECT_NAME} PUBLIC src) +include_directories(${PROJECT_NAME} PUBLIC ../lib/src) + +add_executable(${PROJECT_NAME} ${source_list}) +target_link_libraries(${PROJECT_NAME} PUBLIC Utils) + +# Locate GTest +enable_testing() +find_package(GTest REQUIRED) +include_directories(${GTEST_INCLUDE_DIRS}) + +# Link runTests with what we want to test and the GTest and pthread library +add_executable(${PROJECT_NAME}_tests ${test_source_list}) +target_link_libraries( + ${PROJECT_NAME}_tests + GTest::gtest_main + Utils +) + +include(GoogleTest) +gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_05/README.md b/task_05/README.md new file mode 100644 index 00000000..4329c406 --- /dev/null +++ b/task_05/README.md @@ -0,0 +1,7 @@ +# Задача на сортировку + +В данной задаче необходимо реализовать сортировку одним из эфективных алгоритмов + +* Merge sort +* Quick sort +* Heap sort \ No newline at end of file diff --git a/task_05/src/main.cpp b/task_05/src/main.cpp new file mode 100644 index 00000000..0e4393ba --- /dev/null +++ b/task_05/src/main.cpp @@ -0,0 +1,3 @@ +#include + +int main() { return 0; } diff --git a/task_05/src/test.cpp b/task_05/src/test.cpp new file mode 100644 index 00000000..5e11617e --- /dev/null +++ b/task_05/src/test.cpp @@ -0,0 +1,6 @@ + +#include + +TEST(TopologySort, Simple) { + ASSERT_EQ(1, 1); // Stack [] +} diff --git a/task_06/CMakeLists.txt b/task_06/CMakeLists.txt new file mode 100644 index 00000000..0e239848 --- /dev/null +++ b/task_06/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.10) + +get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) +string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) +project(${PROJECT_NAME} C CXX) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") +file(GLOB_RECURSE lib_source_list "../lib/src/*.cpp" "../lib/src/*.hpp") +file(GLOB_RECURSE main_source_list "src/main.cpp") +file(GLOB_RECURSE test_source_list "src/*.cpp") +file(GLOB_RECURSE test_list "src/*test.cpp") + +list(REMOVE_ITEM test_source_list ${main_source_list}) +list(REMOVE_ITEM source_list ${test_list}) + +include_directories(${PROJECT_NAME} PUBLIC src) +include_directories(${PROJECT_NAME} PUBLIC ../lib/src) + +add_executable(${PROJECT_NAME} ${source_list}) +target_link_libraries(${PROJECT_NAME} PUBLIC Utils) + +# Locate GTest +enable_testing() +find_package(GTest REQUIRED) +include_directories(${GTEST_INCLUDE_DIRS}) + +# Link runTests with what we want to test and the GTest and pthread library +add_executable(${PROJECT_NAME}_tests ${test_source_list}) +target_link_libraries( + ${PROJECT_NAME}_tests + GTest::gtest_main + Utils +) + +include(GoogleTest) +gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_06/README.md b/task_06/README.md new file mode 100644 index 00000000..c8658bc9 --- /dev/null +++ b/task_06/README.md @@ -0,0 +1,3 @@ +# Задача на порядковые статистики + +В данной задаче необходимо реализовать поиск n-ой порядковой статистики \ No newline at end of file diff --git a/task_06/src/main.cpp b/task_06/src/main.cpp new file mode 100644 index 00000000..0e4393ba --- /dev/null +++ b/task_06/src/main.cpp @@ -0,0 +1,3 @@ +#include + +int main() { return 0; } diff --git a/task_06/src/test.cpp b/task_06/src/test.cpp new file mode 100644 index 00000000..5e11617e --- /dev/null +++ b/task_06/src/test.cpp @@ -0,0 +1,6 @@ + +#include + +TEST(TopologySort, Simple) { + ASSERT_EQ(1, 1); // Stack [] +} diff --git a/task_07/CMakeLists.txt b/task_07/CMakeLists.txt new file mode 100644 index 00000000..0e239848 --- /dev/null +++ b/task_07/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.10) + +get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) +string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) +project(${PROJECT_NAME} C CXX) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") +file(GLOB_RECURSE lib_source_list "../lib/src/*.cpp" "../lib/src/*.hpp") +file(GLOB_RECURSE main_source_list "src/main.cpp") +file(GLOB_RECURSE test_source_list "src/*.cpp") +file(GLOB_RECURSE test_list "src/*test.cpp") + +list(REMOVE_ITEM test_source_list ${main_source_list}) +list(REMOVE_ITEM source_list ${test_list}) + +include_directories(${PROJECT_NAME} PUBLIC src) +include_directories(${PROJECT_NAME} PUBLIC ../lib/src) + +add_executable(${PROJECT_NAME} ${source_list}) +target_link_libraries(${PROJECT_NAME} PUBLIC Utils) + +# Locate GTest +enable_testing() +find_package(GTest REQUIRED) +include_directories(${GTEST_INCLUDE_DIRS}) + +# Link runTests with what we want to test and the GTest and pthread library +add_executable(${PROJECT_NAME}_tests ${test_source_list}) +target_link_libraries( + ${PROJECT_NAME}_tests + GTest::gtest_main + Utils +) + +include(GoogleTest) +gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_07/README.md b/task_07/README.md new file mode 100644 index 00000000..b216be5a --- /dev/null +++ b/task_07/README.md @@ -0,0 +1,3 @@ +# Задача на дерево поиска + +В данной задаче необходимо реализовать дерево поиска \ No newline at end of file diff --git a/task_07/src/main.cpp b/task_07/src/main.cpp new file mode 100644 index 00000000..0e4393ba --- /dev/null +++ b/task_07/src/main.cpp @@ -0,0 +1,3 @@ +#include + +int main() { return 0; } diff --git a/task_07/src/test.cpp b/task_07/src/test.cpp new file mode 100644 index 00000000..5e11617e --- /dev/null +++ b/task_07/src/test.cpp @@ -0,0 +1,6 @@ + +#include + +TEST(TopologySort, Simple) { + ASSERT_EQ(1, 1); // Stack [] +} diff --git a/task_08/CMakeLists.txt b/task_08/CMakeLists.txt new file mode 100644 index 00000000..0e239848 --- /dev/null +++ b/task_08/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.10) + +get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) +string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) +project(${PROJECT_NAME} C CXX) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") +file(GLOB_RECURSE lib_source_list "../lib/src/*.cpp" "../lib/src/*.hpp") +file(GLOB_RECURSE main_source_list "src/main.cpp") +file(GLOB_RECURSE test_source_list "src/*.cpp") +file(GLOB_RECURSE test_list "src/*test.cpp") + +list(REMOVE_ITEM test_source_list ${main_source_list}) +list(REMOVE_ITEM source_list ${test_list}) + +include_directories(${PROJECT_NAME} PUBLIC src) +include_directories(${PROJECT_NAME} PUBLIC ../lib/src) + +add_executable(${PROJECT_NAME} ${source_list}) +target_link_libraries(${PROJECT_NAME} PUBLIC Utils) + +# Locate GTest +enable_testing() +find_package(GTest REQUIRED) +include_directories(${GTEST_INCLUDE_DIRS}) + +# Link runTests with what we want to test and the GTest and pthread library +add_executable(${PROJECT_NAME}_tests ${test_source_list}) +target_link_libraries( + ${PROJECT_NAME}_tests + GTest::gtest_main + Utils +) + +include(GoogleTest) +gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_08/README.md b/task_08/README.md new file mode 100644 index 00000000..621d8834 --- /dev/null +++ b/task_08/README.md @@ -0,0 +1,3 @@ +# Задача на хэш таблицу + +В данной задаче необходимо реализовать хэш таблицу \ No newline at end of file diff --git a/task_08/src/main.cpp b/task_08/src/main.cpp new file mode 100644 index 00000000..0e4393ba --- /dev/null +++ b/task_08/src/main.cpp @@ -0,0 +1,3 @@ +#include + +int main() { return 0; } diff --git a/task_08/src/test.cpp b/task_08/src/test.cpp new file mode 100644 index 00000000..5e11617e --- /dev/null +++ b/task_08/src/test.cpp @@ -0,0 +1,6 @@ + +#include + +TEST(TopologySort, Simple) { + ASSERT_EQ(1, 1); // Stack [] +} From 954bae8d65096db12884828c20fbe12748c44d83 Mon Sep 17 00:00:00 2001 From: Ivan Khokhlov Date: Sat, 16 Mar 2024 07:38:24 +0000 Subject: [PATCH 5/8] fix --- .github/workflows/tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 5bdc8abb..2dfeb4d9 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -56,4 +56,4 @@ jobs: - name: Test task 08 working-directory: ${{github.workspace}}/build - run: ./task_03/task_08_tests \ No newline at end of file + run: ./task_08/task_08_tests \ No newline at end of file From 0cb458df6fc0fac242a8e9f1285995ebe4f91374 Mon Sep 17 00:00:00 2001 From: Ivan Khokhlov Date: Sat, 13 Apr 2024 08:13:16 +0000 Subject: [PATCH 6/8] add dinamic programming task --- .github/workflows/tests.yaml | 6 +++++- task_09/CMakeLists.txt | 39 ++++++++++++++++++++++++++++++++++++ task_09/README.md | 7 +++++++ task_09/src/main.cpp | 3 +++ task_09/src/test.cpp | 4 ++++ 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 task_09/CMakeLists.txt create mode 100644 task_09/README.md create mode 100644 task_09/src/main.cpp create mode 100644 task_09/src/test.cpp diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 2dfeb4d9..267b2ec0 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -56,4 +56,8 @@ jobs: - name: Test task 08 working-directory: ${{github.workspace}}/build - run: ./task_08/task_08_tests \ No newline at end of file + run: ./task_08/task_08_tests + + - name: Test task 09 + working-directory: ${{github.workspace}}/build + run: ./task_09/task_09_tests \ No newline at end of file diff --git a/task_09/CMakeLists.txt b/task_09/CMakeLists.txt new file mode 100644 index 00000000..0e239848 --- /dev/null +++ b/task_09/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.10) + +get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) +string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) +project(${PROJECT_NAME} C CXX) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") +file(GLOB_RECURSE lib_source_list "../lib/src/*.cpp" "../lib/src/*.hpp") +file(GLOB_RECURSE main_source_list "src/main.cpp") +file(GLOB_RECURSE test_source_list "src/*.cpp") +file(GLOB_RECURSE test_list "src/*test.cpp") + +list(REMOVE_ITEM test_source_list ${main_source_list}) +list(REMOVE_ITEM source_list ${test_list}) + +include_directories(${PROJECT_NAME} PUBLIC src) +include_directories(${PROJECT_NAME} PUBLIC ../lib/src) + +add_executable(${PROJECT_NAME} ${source_list}) +target_link_libraries(${PROJECT_NAME} PUBLIC Utils) + +# Locate GTest +enable_testing() +find_package(GTest REQUIRED) +include_directories(${GTEST_INCLUDE_DIRS}) + +# Link runTests with what we want to test and the GTest and pthread library +add_executable(${PROJECT_NAME}_tests ${test_source_list}) +target_link_libraries( + ${PROJECT_NAME}_tests + GTest::gtest_main + Utils +) + +include(GoogleTest) +gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/task_09/README.md b/task_09/README.md new file mode 100644 index 00000000..ed0b93bd --- /dev/null +++ b/task_09/README.md @@ -0,0 +1,7 @@ +# Задача о размене монет + +Данно число и вектор с номиналами монет, нужно вернуть минимальное количество монет которое можно набрать данными номиналами. + +Примеры: +1) Данно число 14, и номиналы [1, 2, 5, 10], мы должны вернуть число 3 (10 * 1 + 2 * 2) +2) Данно число 19, и номиналы [1, 2, 5, 10], мы должны вернуть число 4 (10 * 1 + 5 * 1 + 2 * 2) \ No newline at end of file diff --git a/task_09/src/main.cpp b/task_09/src/main.cpp new file mode 100644 index 00000000..0e4393ba --- /dev/null +++ b/task_09/src/main.cpp @@ -0,0 +1,3 @@ +#include + +int main() { return 0; } diff --git a/task_09/src/test.cpp b/task_09/src/test.cpp new file mode 100644 index 00000000..869094dd --- /dev/null +++ b/task_09/src/test.cpp @@ -0,0 +1,4 @@ + +#include + +TEST(TopologySort, Simple) { ASSERT_EQ(1, 1); } From f40644398d7fb385f25cf32d8e0ecaef493e3330 Mon Sep 17 00:00:00 2001 From: Ivan Khokhlov Date: Sat, 13 Apr 2024 12:28:51 +0300 Subject: [PATCH 7/8] Update README.md --- task_07/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/task_07/README.md b/task_07/README.md index b216be5a..ce955c7f 100644 --- a/task_07/README.md +++ b/task_07/README.md @@ -1,3 +1,3 @@ # Задача на дерево поиска -В данной задаче необходимо реализовать дерево поиска \ No newline at end of file +В данной задаче необходимо реализовать дерево поиска со сложностью O(log(n)) From 6f9ae9e014666642349a7ffc5cae15ec8b14a8e9 Mon Sep 17 00:00:00 2001 From: Mathew131 <97729815+Mathew131@users.noreply.github.com> Date: Tue, 7 May 2024 14:48:58 +0300 Subject: [PATCH 8/8] Mathew additional task (heap) (#31) --- additional_tasks/heap_exe/CMakeLists.txt | 39 +++++++++++ additional_tasks/heap_exe/README.md | 12 ++++ additional_tasks/heap_exe/src/heap.cpp | 83 ++++++++++++++++++++++++ additional_tasks/heap_exe/src/heap.hpp | 18 +++++ additional_tasks/heap_exe/src/main.cpp | 1 + additional_tasks/heap_exe/src/test.cpp | 21 ++++++ 6 files changed, 174 insertions(+) create mode 100644 additional_tasks/heap_exe/CMakeLists.txt create mode 100644 additional_tasks/heap_exe/README.md create mode 100644 additional_tasks/heap_exe/src/heap.cpp create mode 100644 additional_tasks/heap_exe/src/heap.hpp create mode 100644 additional_tasks/heap_exe/src/main.cpp create mode 100644 additional_tasks/heap_exe/src/test.cpp diff --git a/additional_tasks/heap_exe/CMakeLists.txt b/additional_tasks/heap_exe/CMakeLists.txt new file mode 100644 index 00000000..0e239848 --- /dev/null +++ b/additional_tasks/heap_exe/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.10) + +get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) +string(REPLACE " " "_" PROJECT_NAME ${PROJECT_NAME}) +project(${PROJECT_NAME} C CXX) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +file(GLOB_RECURSE source_list "src/*.cpp" "src/*.hpp") +file(GLOB_RECURSE lib_source_list "../lib/src/*.cpp" "../lib/src/*.hpp") +file(GLOB_RECURSE main_source_list "src/main.cpp") +file(GLOB_RECURSE test_source_list "src/*.cpp") +file(GLOB_RECURSE test_list "src/*test.cpp") + +list(REMOVE_ITEM test_source_list ${main_source_list}) +list(REMOVE_ITEM source_list ${test_list}) + +include_directories(${PROJECT_NAME} PUBLIC src) +include_directories(${PROJECT_NAME} PUBLIC ../lib/src) + +add_executable(${PROJECT_NAME} ${source_list}) +target_link_libraries(${PROJECT_NAME} PUBLIC Utils) + +# Locate GTest +enable_testing() +find_package(GTest REQUIRED) +include_directories(${GTEST_INCLUDE_DIRS}) + +# Link runTests with what we want to test and the GTest and pthread library +add_executable(${PROJECT_NAME}_tests ${test_source_list}) +target_link_libraries( + ${PROJECT_NAME}_tests + GTest::gtest_main + Utils +) + +include(GoogleTest) +gtest_discover_tests(${PROJECT_NAME}_tests) diff --git a/additional_tasks/heap_exe/README.md b/additional_tasks/heap_exe/README.md new file mode 100644 index 00000000..25477815 --- /dev/null +++ b/additional_tasks/heap_exe/README.md @@ -0,0 +1,12 @@ +# Покупатель рыбы +Вася решил питаться рыбой. Он решил, что в течение N дней он должен съедать по одной рыбе каждый день. К сожалению, рыба — товар скоропортящийся и может храниться не более K дней, включая день покупки. С помощью методов машинного обучения Вася предсказал цены на рыбу на N дней вперёд. +Помогите Васе определить, в какие дни и сколько рыбы нужно покупать, чтобы потратить как можно меньше денег. + +# Формат ввода +Сначала вводится два целых числа N и K (1 ≤ N, K ≤ 100 000) — количество дней, в течение которых нужно питаться рыбой, и срок хранения рыбы соответственно. +Потом вводится N чисел: стоимость рыбы в этот день Ci (1 ≤ Ci ≤ 106). + +# Формат вывода +Выведите минимальную сумму, потраченную на рыбу. +Затем выведите N чисел — количество купленных рыб в каждый из дней. +Если правильных ответов несколько — выведите любой из них. \ No newline at end of file diff --git a/additional_tasks/heap_exe/src/heap.cpp b/additional_tasks/heap_exe/src/heap.cpp new file mode 100644 index 00000000..07634633 --- /dev/null +++ b/additional_tasks/heap_exe/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/additional_tasks/heap_exe/src/heap.hpp b/additional_tasks/heap_exe/src/heap.hpp new file mode 100644 index 00000000..bd967517 --- /dev/null +++ b/additional_tasks/heap_exe/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/additional_tasks/heap_exe/src/main.cpp b/additional_tasks/heap_exe/src/main.cpp new file mode 100644 index 00000000..c3aeba4b --- /dev/null +++ b/additional_tasks/heap_exe/src/main.cpp @@ -0,0 +1 @@ +int main() { return 0; } \ No newline at end of file diff --git a/additional_tasks/heap_exe/src/test.cpp b/additional_tasks/heap_exe/src/test.cpp new file mode 100644 index 00000000..0ac5ce13 --- /dev/null +++ b/additional_tasks/heap_exe/src/test.cpp @@ -0,0 +1,21 @@ + +#include + +#include + +#include "heap.hpp" + +TEST(heap, Simple1) { + ASSERT_EQ(Heap_exe(2, 1, {1, 2}), + (std::pair>{3, {1, 1}})); +} + +TEST(heap, Simple2) { + ASSERT_EQ(Heap_exe(2, 1, {1, 2}), + (std::pair>{3, {1, 1}})); +} + +TEST(heap, Simple3) { + ASSERT_EQ(Heap_exe(6, 3, {3, 8, 9, 1, 4, 1}), + (std::pair>{12, {3, 0, 0, 3, 0, 0}})); +}