From 0771f96e3898b41642cb9a5384ea5547ef309b98 Mon Sep 17 00:00:00 2001 From: Ivan Khokhlov Date: Fri, 2 Feb 2024 16:29:32 +0300 Subject: [PATCH 1/2] add tasks --- README.md | 2 ++ task_01/README.md | 4 ++-- task_02/CMakeLists.txt | 39 ++++++++++++++++++++++++++++++++ task_02/README.md | 3 +++ task_02/src/main.cpp | 3 +++ task_02/src/stack.cpp | 21 ++++++++++++++++++ task_02/src/stack.hpp | 23 +++++++++++++++++++ task_02/src/test.cpp | 42 +++++++++++++++++++++++++++++++++++ task_03/CMakeLists.txt | 39 ++++++++++++++++++++++++++++++++ task_03/README.md | 3 +++ task_03/src/main.cpp | 3 +++ task_03/src/test.cpp | 8 +++++++ task_03/src/topology_sort.cpp | 1 + task_03/src/topology_sort.hpp | 1 + 14 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 task_02/CMakeLists.txt create mode 100644 task_02/README.md create mode 100644 task_02/src/main.cpp create mode 100644 task_02/src/stack.cpp create mode 100644 task_02/src/stack.hpp create mode 100644 task_02/src/test.cpp create mode 100644 task_03/CMakeLists.txt create mode 100644 task_03/README.md create mode 100644 task_03/src/main.cpp create mode 100644 task_03/src/test.cpp create mode 100644 task_03/src/topology_sort.cpp create mode 100644 task_03/src/topology_sort.hpp diff --git a/README.md b/README.md index 82f24fd5..e379c20f 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,5 @@ ### Можно получить дополнительные баллы, если добавить интересные текстовые задачи. Необходимы текст задачи, решение и тесты. Каждая задача отдельный ПР, полчуть дополнительные баллы можно только если пулл реквест замержен в основную ветку. ### Можно получить дополнительные баллы, если добавить теорию в папку doc. Делается в отдельном ПР, полчуть дополнительные баллы можно только если пулл реквест замержен в основную ветку. + +### Код должен быть отформатирован clang-format'ом со стилем Google diff --git a/task_01/README.md b/task_01/README.md index 0819a478..3e7840c5 100644 --- a/task_01/README.md +++ b/task_01/README.md @@ -1,3 +1,3 @@ -# Задача на количество дней перед потеплением +# Задача 1 -Написать функцию в которую передается темепература за каждый день в определенный момент день, нужно вернуть количество дней до повышения температуры для каждого дня, если температура не повысится, то для этого дня поставить в результирующий массив 0. +Дано целое число и массив целых чисел, нужно найти 2 числа из массива которые в сумме дадут заданное число \ No newline at end of file diff --git a/task_02/CMakeLists.txt b/task_02/CMakeLists.txt new file mode 100644 index 00000000..0e239848 --- /dev/null +++ b/task_02/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_02/README.md b/task_02/README.md new file mode 100644 index 00000000..10911e33 --- /dev/null +++ b/task_02/README.md @@ -0,0 +1,3 @@ +# Задача на стэк + +В данной задаче необходимо реализовать один стэк и стэк с минимумом (нельзя использовать std::stack). Получение минимума должно работать за константное время \ No newline at end of file diff --git a/task_02/src/main.cpp b/task_02/src/main.cpp new file mode 100644 index 00000000..0e4393ba --- /dev/null +++ b/task_02/src/main.cpp @@ -0,0 +1,3 @@ +#include + +int main() { return 0; } diff --git a/task_02/src/stack.cpp b/task_02/src/stack.cpp new file mode 100644 index 00000000..8ca89902 --- /dev/null +++ b/task_02/src/stack.cpp @@ -0,0 +1,21 @@ +#include "stack.hpp" + +#include + +void Stack::Push(int value) { data_.push(value); } + +int Stack::Pop() { + auto result = data_.top(); + data_.pop(); + return result; +} + +void MinStack::Push(int value) { data_.push_back(value); } + +int MinStack::Pop() { + auto result = data_.back(); + data_.pop_back(); + return result; +} + +int MinStack::GetMin() { return *std::min_element(data_.begin(), data_.end()); } \ No newline at end of file diff --git a/task_02/src/stack.hpp b/task_02/src/stack.hpp new file mode 100644 index 00000000..138ec40f --- /dev/null +++ b/task_02/src/stack.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include +#include + +class Stack { + public: + void Push(int value); + int Pop(); + + private: + std::stack data_; +}; + +class MinStack { + public: + void Push(int value); + int Pop(); + int GetMin(); + + private: + std::vector data_; +}; diff --git a/task_02/src/test.cpp b/task_02/src/test.cpp new file mode 100644 index 00000000..54e7ce90 --- /dev/null +++ b/task_02/src/test.cpp @@ -0,0 +1,42 @@ + +#include + +#include + +#include "stack.hpp" + +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 [] +} + +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 [] +} \ No newline at end of file diff --git a/task_03/CMakeLists.txt b/task_03/CMakeLists.txt new file mode 100644 index 00000000..0e239848 --- /dev/null +++ b/task_03/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_03/README.md b/task_03/README.md new file mode 100644 index 00000000..0819a478 --- /dev/null +++ b/task_03/README.md @@ -0,0 +1,3 @@ +# Задача на количество дней перед потеплением + +Написать функцию в которую передается темепература за каждый день в определенный момент день, нужно вернуть количество дней до повышения температуры для каждого дня, если температура не повысится, то для этого дня поставить в результирующий массив 0. diff --git a/task_03/src/main.cpp b/task_03/src/main.cpp new file mode 100644 index 00000000..0e4393ba --- /dev/null +++ b/task_03/src/main.cpp @@ -0,0 +1,3 @@ +#include + +int main() { return 0; } diff --git a/task_03/src/test.cpp b/task_03/src/test.cpp new file mode 100644 index 00000000..ef5a86ae --- /dev/null +++ b/task_03/src/test.cpp @@ -0,0 +1,8 @@ + +#include + +#include "topology_sort.hpp" + +TEST(TopologySort, Simple) { + ASSERT_EQ(1, 1); // Stack [] +} diff --git a/task_03/src/topology_sort.cpp b/task_03/src/topology_sort.cpp new file mode 100644 index 00000000..e53f670c --- /dev/null +++ b/task_03/src/topology_sort.cpp @@ -0,0 +1 @@ +#include "topology_sort.hpp" diff --git a/task_03/src/topology_sort.hpp b/task_03/src/topology_sort.hpp new file mode 100644 index 00000000..6f70f09b --- /dev/null +++ b/task_03/src/topology_sort.hpp @@ -0,0 +1 @@ +#pragma once From 93858f7f7e6824c7f135c50bfc1f8621b36a9721 Mon Sep 17 00:00:00 2001 From: Ivan Khokhlov Date: Fri, 2 Feb 2024 16:46:35 +0300 Subject: [PATCH 2/2] fix --- .github/workflows/clang-tidy-post.yaml | 30 ++++++-------------------- 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/.github/workflows/clang-tidy-post.yaml b/.github/workflows/clang-tidy-post.yaml index fb9c18cb..70b0e7db 100644 --- a/.github/workflows/clang-tidy-post.yaml +++ b/.github/workflows/clang-tidy-post.yaml @@ -12,28 +12,10 @@ jobs: runs-on: ubuntu-latest steps: - # Downloads the artifact uploaded by the lint action - - name: 'Download artifact' - uses: actions/github-script@v6 - with: - script: | - const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: ${{github.event.workflow_run.id }}, - }); - const matchArtifact = artifacts.data.artifacts.filter((artifact) => { - return artifact.name == "clang-tidy-review" - })[0]; - const download = await github.rest.actions.downloadArtifact({ - owner: context.repo.owner, - repo: context.repo.repo, - artifact_id: matchArtifact.id, - archive_format: 'zip', - }); - const fs = require('fs'); - fs.writeFileSync('${{github.workspace}}/clang-tidy-review.zip', Buffer.from(download.data)); - - name: 'Unzip artifact' - run: unzip clang-tidy-review.zip - - uses: ZedThree/clang-tidy-review/post@v0.14.0 + # lgtm_comment_body, max_comments, and annotations need to be set on the posting workflow in a split setup + with: + # adjust options as necessary + lgtm_comment_body: '' + annotations: false + max_comments: 15