Skip to content
This repository was archived by the owner on Aug 11, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,39 @@ 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

- name: Test task 02
working-directory: ${{github.workspace}}/build
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_08/task_08_tests

- name: Test task 09
working-directory: ${{github.workspace}}/build
run: ./task_09/task_09_tests
39 changes: 39 additions & 0 deletions additional_tasks/heap_exe/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
12 changes: 12 additions & 0 deletions additional_tasks/heap_exe/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Покупатель рыбы
Вася решил питаться рыбой. Он решил, что в течение N дней он должен съедать по одной рыбе каждый день. К сожалению, рыба — товар скоропортящийся и может храниться не более K дней, включая день покупки. С помощью методов машинного обучения Вася предсказал цены на рыбу на N дней вперёд.
Помогите Васе определить, в какие дни и сколько рыбы нужно покупать, чтобы потратить как можно меньше денег.

# Формат ввода
Сначала вводится два целых числа N и K (1 ≤ N, K ≤ 100 000) — количество дней, в течение которых нужно питаться рыбой, и срок хранения рыбы соответственно.
Потом вводится N чисел: стоимость рыбы в этот день Ci (1 ≤ Ci ≤ 106).

# Формат вывода
Выведите минимальную сумму, потраченную на рыбу.
Затем выведите N чисел — количество купленных рыб в каждый из дней.
Если правильных ответов несколько — выведите любой из них.
83 changes: 83 additions & 0 deletions additional_tasks/heap_exe/src/heap.cpp
Original file line number Diff line number Diff line change
@@ -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<int, std::vector<int>> Heap_exe(int n, int k, std::vector<int> a) {
Heap useful_elements;
std::map<int, int> indx;

std::vector<int> 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};
}
18 changes: 18 additions & 0 deletions additional_tasks/heap_exe/src/heap.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#include <map>
#include <vector>

class Heap {
public:
void SiftUp(int i);
void SiftDown(int i);
void Insert(int x);
int GetMin();
void extractMin();
int size();

private:
std::vector<int> a;
int n = 0;
};

std::pair<int, std::vector<int>> Heap_exe(int n, int k, std::vector<int> a);
1 change: 1 addition & 0 deletions additional_tasks/heap_exe/src/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
int main() { return 0; }
21 changes: 21 additions & 0 deletions additional_tasks/heap_exe/src/test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

#include <gtest/gtest.h>

#include <vector>

#include "heap.hpp"

TEST(heap, Simple1) {
ASSERT_EQ(Heap_exe(2, 1, {1, 2}),
(std::pair<int, std::vector<int>>{3, {1, 1}}));
}

TEST(heap, Simple2) {
ASSERT_EQ(Heap_exe(2, 1, {1, 2}),
(std::pair<int, std::vector<int>>{3, {1, 1}}));
}

TEST(heap, Simple3) {
ASSERT_EQ(Heap_exe(6, 3, {3, 8, 9, 1, 4, 1}),
(std::pair<int, std::vector<int>>{12, {3, 0, 0, 3, 0, 0}}));
}
2 changes: 1 addition & 1 deletion task_01/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Задача 1

Дано целое число и массив целых чисел, нужно найти 2 числа из массива которые в сумме дадут заданное число
Дано целое число и отсортированый массив целых чисел, нужно найти 2 числа из массива которые в сумме дадут заданное число
39 changes: 39 additions & 0 deletions task_04/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
3 changes: 3 additions & 0 deletions task_04/README.md
Original file line number Diff line number Diff line change
@@ -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
3 changes: 3 additions & 0 deletions task_04/src/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include <iostream>

int main() { return 0; }
6 changes: 6 additions & 0 deletions task_04/src/test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

#include <gtest/gtest.h>

TEST(TopologySort, Simple) {
ASSERT_EQ(1, 1); // Stack []
}
39 changes: 39 additions & 0 deletions task_05/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
7 changes: 7 additions & 0 deletions task_05/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Задача на сортировку

В данной задаче необходимо реализовать сортировку одним из эфективных алгоритмов

* Merge sort
* Quick sort
* Heap sort
3 changes: 3 additions & 0 deletions task_05/src/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include <iostream>

int main() { return 0; }
6 changes: 6 additions & 0 deletions task_05/src/test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

#include <gtest/gtest.h>

TEST(TopologySort, Simple) {
ASSERT_EQ(1, 1); // Stack []
}
39 changes: 39 additions & 0 deletions task_06/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
3 changes: 3 additions & 0 deletions task_06/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Задача на порядковые статистики

В данной задаче необходимо реализовать поиск n-ой порядковой статистики
3 changes: 3 additions & 0 deletions task_06/src/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include <iostream>

int main() { return 0; }
Loading