From b84465707dd559cc88f1a2f4b688818688234a4e Mon Sep 17 00:00:00 2001 From: Marek Strympl <strymmar@fel.cvut.cz> Date: Sun, 2 Mar 2025 17:31:58 +0100 Subject: [PATCH 1/5] Files removed --- pr01 | Bin 35272 -> 0 bytes pr01.cpp | 37 ------------------------------------- 2 files changed, 37 deletions(-) delete mode 100755 pr01 delete mode 100644 pr01.cpp diff --git a/pr01 b/pr01 deleted file mode 100755 index c91b50a54d13dba70dcbfff258212dab0210b4d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35272 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 L*Y!C9IZ^dLMyrO5 diff --git a/pr01.cpp b/pr01.cpp deleted file mode 100644 index f6c40f1..0000000 --- a/pr01.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include <iostream> - -class myClass -{ - public: - static int count; - int value; - myClass() { - count++; - value = 10; - std::cout << "Created\n"; - } - myClass(int val) { - count++; - value = val; - std::cout << "Created\n"; - } - ~myClass() { - std::cout << "Destroyed\n"; - } -}; - -int myClass::count = 0; - -int main() -{ - int Marek = 0; - - myClass a; - std::cout << "Instanci " << myClass::count << std::endl; - - myClass *c = new myClass(5); - - delete c; - - return Marek; -} -- GitLab From a632ffa27e246591762b65bc5fdcaebcb8cc0947 Mon Sep 17 00:00:00 2001 From: Marek Strympl <strymmar@fel.cvut.cz> Date: Sun, 2 Mar 2025 17:33:39 +0100 Subject: [PATCH 2/5] .cpp file for HW01 added --- HW01.cpp | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 HW01.cpp diff --git a/HW01.cpp b/HW01.cpp new file mode 100644 index 0000000..e69de29 -- GitLab From dd4a2fd20342546a97e1289d910639293233e936 Mon Sep 17 00:00:00 2001 From: Marek Strympl <strymmar@fel.cvut.cz> Date: Tue, 18 Mar 2025 14:48:12 +0100 Subject: [PATCH 3/5] HW01 done and added --- .gitignore | 2 - 01/.vscode/settings.json | 55 ++++++++++ 01/data/bon_pub01.err | 0 01/data/bon_pub01.in | 8 ++ 01/data/bon_pub01.out | 13 +++ 01/data/bon_pub02.err | 0 01/data/bon_pub02.in | 8 ++ 01/data/bon_pub02.out | 13 +++ 01/data/bon_pub03.err | 0 01/data/bon_pub03.in | 9 ++ 01/data/bon_pub03.out | 13 +++ 01/data/pub01.err | 0 01/data/pub01.in | 7 ++ 01/data/pub01.out | 12 +++ 01/data/pub02.err | 0 01/data/pub02.in | 6 ++ 01/data/pub02.out | 14 +++ 01/data/pub03.err | 1 + 01/data/pub03.in | 5 + 01/data/pub03.out | 0 01/data/pub04.err | 1 + 01/data/pub04.in | 5 + 01/data/pub04.out | 0 01/data/pub05.err | 1 + 01/data/pub05.in | 6 ++ 01/data/pub05.out | 0 01/data/pub06.err | 1 + 01/data/pub06.in | 6 ++ 01/data/pub06.out | 0 01/template/Makefile | 17 +++ 01/template/dmskoskds.cpp | 211 ++++++++++++++++++++++++++++++++++++++ 01/template/idk.out | 12 +++ 01/template/main.cpp | 211 ++++++++++++++++++++++++++++++++++++++ 01/template/main.hpp | 6 ++ 01/template/main.zip | Bin 0 -> 3304 bytes 01/template/parse.cpp | 53 ++++++++++ 01/template/parse.hpp | 48 +++++++++ 37 files changed, 742 insertions(+), 2 deletions(-) create mode 100644 01/.vscode/settings.json create mode 100644 01/data/bon_pub01.err create mode 100644 01/data/bon_pub01.in create mode 100644 01/data/bon_pub01.out create mode 100644 01/data/bon_pub02.err create mode 100644 01/data/bon_pub02.in create mode 100644 01/data/bon_pub02.out create mode 100644 01/data/bon_pub03.err create mode 100644 01/data/bon_pub03.in create mode 100644 01/data/bon_pub03.out create mode 100644 01/data/pub01.err create mode 100644 01/data/pub01.in create mode 100644 01/data/pub01.out create mode 100644 01/data/pub02.err create mode 100644 01/data/pub02.in create mode 100644 01/data/pub02.out create mode 100644 01/data/pub03.err create mode 100644 01/data/pub03.in create mode 100644 01/data/pub03.out create mode 100644 01/data/pub04.err create mode 100644 01/data/pub04.in create mode 100644 01/data/pub04.out create mode 100644 01/data/pub05.err create mode 100644 01/data/pub05.in create mode 100644 01/data/pub05.out create mode 100644 01/data/pub06.err create mode 100644 01/data/pub06.in create mode 100644 01/data/pub06.out create mode 100644 01/template/Makefile create mode 100644 01/template/dmskoskds.cpp create mode 100644 01/template/idk.out create mode 100644 01/template/main.cpp create mode 100644 01/template/main.hpp create mode 100644 01/template/main.zip create mode 100644 01/template/parse.cpp create mode 100644 01/template/parse.hpp diff --git a/.gitignore b/.gitignore index e7c164e..e69de29 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +0,0 @@ -* -!*.cpp \ No newline at end of file diff --git a/01/.vscode/settings.json b/01/.vscode/settings.json new file mode 100644 index 0000000..b0bd9ac --- /dev/null +++ b/01/.vscode/settings.json @@ -0,0 +1,55 @@ +{ + "files.associations": { + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "compare": "cpp", + "concepts": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "map": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "regex": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "typeinfo": "cpp" + } +} \ No newline at end of file diff --git a/01/data/bon_pub01.err b/01/data/bon_pub01.err new file mode 100644 index 0000000..e69de29 diff --git a/01/data/bon_pub01.in b/01/data/bon_pub01.in new file mode 100644 index 0000000..0b5a722 --- /dev/null +++ b/01/data/bon_pub01.in @@ -0,0 +1,8 @@ +config.min=-5000 +config.max=5000 +config.width=3 +config.align=left +config.stretch=0 += +3300;4400;20;SUM(A:C) +-40;-50;-60 \ No newline at end of file diff --git a/01/data/bon_pub01.out b/01/data/bon_pub01.out new file mode 100644 index 0000000..bb548ea --- /dev/null +++ b/01/data/bon_pub01.out @@ -0,0 +1,13 @@ +config.min=-5000 +config.max=5000 +config.width=3 +config.align=left +config.stretch=0 + ++-----+-----+-----+-----+-----+ +| | A | B | C | D | ++-----+-----+-----+-----+-----+ +| 1 | ### | ### | 20 | ### | ++-----+-----+-----+-----+-----+ +| 2 | -40 | -50 | -60 | | ++-----+-----+-----+-----+-----+ diff --git a/01/data/bon_pub02.err b/01/data/bon_pub02.err new file mode 100644 index 0000000..e69de29 diff --git a/01/data/bon_pub02.in b/01/data/bon_pub02.in new file mode 100644 index 0000000..2eaadb9 --- /dev/null +++ b/01/data/bon_pub02.in @@ -0,0 +1,8 @@ +config.min=-5000 +config.max=5000 +config.width=3 +config.align=left +config.stretch=1 += +3300;4400;20;SUM(A:C) +-40;-50;-60 \ No newline at end of file diff --git a/01/data/bon_pub02.out b/01/data/bon_pub02.out new file mode 100644 index 0000000..b1a1f59 --- /dev/null +++ b/01/data/bon_pub02.out @@ -0,0 +1,13 @@ +config.min=-5000 +config.max=5000 +config.width=4 +config.align=left +config.stretch=1 + ++------+------+------+------+------+ +| | A | B | C | D | ++------+------+------+------+------+ +| 1 | 3300 | 4400 | 20 | 7720 | ++------+------+------+------+------+ +| 2 | -40 | -50 | -60 | | ++------+------+------+------+------+ diff --git a/01/data/bon_pub03.err b/01/data/bon_pub03.err new file mode 100644 index 0000000..e69de29 diff --git a/01/data/bon_pub03.in b/01/data/bon_pub03.in new file mode 100644 index 0000000..a208a9e --- /dev/null +++ b/01/data/bon_pub03.in @@ -0,0 +1,9 @@ +config.min=-99 +config.max=100 +config.width=4 +config.align=left +config.header=0 += +33;44;20;SUM(A:C) +-40;-50;SUM(A:B);SUM(A:C) +3;14;15;92 \ No newline at end of file diff --git a/01/data/bon_pub03.out b/01/data/bon_pub03.out new file mode 100644 index 0000000..a221375 --- /dev/null +++ b/01/data/bon_pub03.out @@ -0,0 +1,13 @@ +config.min=-99 +config.max=100 +config.width=4 +config.align=left +config.header=0 + ++------+------+------+------+ +| 33 | 44 | 20 | 97 | ++------+------+------+------+ +| -40 | -50 | -90 | -180 | ++------+------+------+------+ +| 3 | 14 | 15 | 92 | ++------+------+------+------+ diff --git a/01/data/pub01.err b/01/data/pub01.err new file mode 100644 index 0000000..e69de29 diff --git a/01/data/pub01.in b/01/data/pub01.in new file mode 100644 index 0000000..1d3908c --- /dev/null +++ b/01/data/pub01.in @@ -0,0 +1,7 @@ +config.min=-99 +config.max=150 +config.width=3 +config.align=left += +10;20;20;SUM(A:C) +-10;-20;-30;-40;-50 \ No newline at end of file diff --git a/01/data/pub01.out b/01/data/pub01.out new file mode 100644 index 0000000..2721437 --- /dev/null +++ b/01/data/pub01.out @@ -0,0 +1,12 @@ +config.min=-99 +config.max=150 +config.width=3 +config.align=left + ++-----+-----+-----+-----+-----+-----+ +| | A | B | C | D | E | ++-----+-----+-----+-----+-----+-----+ +| 1 | 10 | 20 | 20 | 50 | | ++-----+-----+-----+-----+-----+-----+ +| 2 | -10 | -20 | -30 | -40 | -50 | ++-----+-----+-----+-----+-----+-----+ diff --git a/01/data/pub02.err b/01/data/pub02.err new file mode 100644 index 0000000..e69de29 diff --git a/01/data/pub02.in b/01/data/pub02.in new file mode 100644 index 0000000..451c8bc --- /dev/null +++ b/01/data/pub02.in @@ -0,0 +1,6 @@ +config.width=3 +config.align=right += +10;20;30;SUM(A:C) +-40;-50;-60;-70 +90;80;-20;-30 \ No newline at end of file diff --git a/01/data/pub02.out b/01/data/pub02.out new file mode 100644 index 0000000..ad2a982 --- /dev/null +++ b/01/data/pub02.out @@ -0,0 +1,14 @@ +config.min=-99 +config.max=100 +config.width=3 +config.align=right + ++-----+-----+-----+-----+-----+ +| | A | B | C | D | ++-----+-----+-----+-----+-----+ +| 1 | 10 | 20 | 30 | 60 | ++-----+-----+-----+-----+-----+ +| 2 | -40 | -50 | -60 | -70 | ++-----+-----+-----+-----+-----+ +| 3 | 90 | 80 | -20 | -30 | ++-----+-----+-----+-----+-----+ diff --git a/01/data/pub03.err b/01/data/pub03.err new file mode 100644 index 0000000..5b44dda --- /dev/null +++ b/01/data/pub03.err @@ -0,0 +1 @@ +Out of range diff --git a/01/data/pub03.in b/01/data/pub03.in new file mode 100644 index 0000000..dad237b --- /dev/null +++ b/01/data/pub03.in @@ -0,0 +1,5 @@ +config.min=0 +config.max=10 += +10;20;30;SUM(A:C) +60;20;70 \ No newline at end of file diff --git a/01/data/pub03.out b/01/data/pub03.out new file mode 100644 index 0000000..e69de29 diff --git a/01/data/pub04.err b/01/data/pub04.err new file mode 100644 index 0000000..30b992d --- /dev/null +++ b/01/data/pub04.err @@ -0,0 +1 @@ +Invalid input diff --git a/01/data/pub04.in b/01/data/pub04.in new file mode 100644 index 0000000..7ce5df9 --- /dev/null +++ b/01/data/pub04.in @@ -0,0 +1,5 @@ +config.min=0 +config.max=1000 += +a;b;c;400;500;SUM(A:E) +60;20;30;40;50;60;70 \ No newline at end of file diff --git a/01/data/pub04.out b/01/data/pub04.out new file mode 100644 index 0000000..e69de29 diff --git a/01/data/pub05.err b/01/data/pub05.err new file mode 100644 index 0000000..c24f7a3 --- /dev/null +++ b/01/data/pub05.err @@ -0,0 +1 @@ +Invalid configuration diff --git a/01/data/pub05.in b/01/data/pub05.in new file mode 100644 index 0000000..11b71ea --- /dev/null +++ b/01/data/pub05.in @@ -0,0 +1,6 @@ +config.min=0 +config.max=1000 +config.width=-5 += +100;200;300;400;500;SUM(A:E) +60;20;30;40;50;60;70 \ No newline at end of file diff --git a/01/data/pub05.out b/01/data/pub05.out new file mode 100644 index 0000000..e69de29 diff --git a/01/data/pub06.err b/01/data/pub06.err new file mode 100644 index 0000000..347b3fd --- /dev/null +++ b/01/data/pub06.err @@ -0,0 +1 @@ +Cell is too short diff --git a/01/data/pub06.in b/01/data/pub06.in new file mode 100644 index 0000000..7097a89 --- /dev/null +++ b/01/data/pub06.in @@ -0,0 +1,6 @@ +config.min=0 +config.max=1000 +config.width=2 += +100;200;300;400;500;SUM(A:E) +60;20;30;40;50;60;70 \ No newline at end of file diff --git a/01/data/pub06.out b/01/data/pub06.out new file mode 100644 index 0000000..e69de29 diff --git a/01/template/Makefile b/01/template/Makefile new file mode 100644 index 0000000..1ba7c4a --- /dev/null +++ b/01/template/Makefile @@ -0,0 +1,17 @@ +CXX = g++ +CXXFLAGS = -pedantic -Wall -Werror -std=c++17 + +SRC = main.cpp parse.cpp +OBJ = $(SRC:.cpp=.o) +EXEC = program + +all: $(EXEC) + +$(EXEC): $(OBJ) + $(CXX) $(CXXFLAGS) -o $@ $^ + +%.o: %.cpp %.hpp + $(CXX) $(CXXFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJ) $(EXEC) diff --git a/01/template/dmskoskds.cpp b/01/template/dmskoskds.cpp new file mode 100644 index 0000000..2880862 --- /dev/null +++ b/01/template/dmskoskds.cpp @@ -0,0 +1,211 @@ +#include <iostream> +#include <string> +#include <regex> +#include <vector> +#include <sstream> +#include <iomanip> +#include "main.hpp" +#include "parse.hpp" + +#define OUT_OF_RANGE 100 +#define INVALID_INPUT 101 +#define INVALID_CONFIGURATION 102 +#define CELL_IS_TOO_SHORT 103 + +void print_border_line(size_t length, int chars_amount); +bool is_cell_too_short(int number, int width); + +int main(){ + + int Marek = 0; + + // variable for decoded config + config_t config; + std::string line; + bool readingConfig = true; // Flag to control reading config vs table + + std::vector<config_t> my_configs; + config_t new_config; + + new_config.type = "min"; + new_config.value = "-99"; + new_config.valid = true; + my_configs.push_back(new_config); + + new_config.type = "max"; + new_config.value = "100"; + new_config.valid = true; + my_configs.push_back(new_config); + + new_config.type = "width"; + new_config.value = "3"; + new_config.valid = true; + my_configs.push_back(new_config); + + new_config.type = "align"; + new_config.value = "left"; + new_config.valid = true; + my_configs.push_back(new_config); + +/* READING CONFIG +*****************************************************************************************/ + do { + std::getline(std::cin, line); + + if (readingConfig) { + config = getConfig(line); // Decode config + + if (config.valid) { + for (std::size_t i = 0; i < my_configs.size(); i++) { + if (config.type.compare(my_configs[i].type) == 0) { + my_configs[i].value = config.value; + } + } + } + // If the line is exactly "=" + if (line == "=") { + + readingConfig = false; // Stop reading config, start reading table + } + } + } while (readingConfig); +/***************************************************************************************/ + + if (stoi(my_configs[0].value) > stoi(my_configs[1].value) || stoi(my_configs[2].value) < 1) { + std::cerr << "Invalid configuration\r\n"; + return INVALID_CONFIGURATION; + } + +/* READING THE TABLE +*****************************************************************************************/ + + std::vector<std::vector<int>> values; + + int min = stoi(my_configs[0].value); + int max = stoi(my_configs[1].value); + int width = stoi(my_configs[2].value); + + // Now, we are reading table values + while (std::getline(std::cin, line)) { + std::stringstream ss(line); + std::vector<int> row; + std::string cell; + int number; + + while (std::getline(ss, cell, ';')) { + try { // if loaded cell is a number + number = std::stoi(cell); + // Check if the number is in the given range + if (number < min || number > max) { + std::cerr << "Out of range\r\n"; + return OUT_OF_RANGE; + } + if (is_cell_too_short(number, width)) { + std::cerr << "Cell is too short\r\n"; + return CELL_IS_TOO_SHORT; + } + row.push_back(number); + } + // If the cell isn't a number + catch (const std::exception& e) { // if there is a text (SUM?) + std::regex sum_regex(R"(SUM\(([A-Z]):([A-Z])\))"); + std::smatch match; + int sum = 0; + + if (std::regex_match(cell, match, sum_regex)) { + char from = match[1].str()[0]; + char to = match[2].str()[0]; + + for (int i = from - 'A'; i <= to - 'A'; i++) { + sum += row[i]; + } + } else { + std::cerr << "Invalid input\r\n"; + return INVALID_INPUT; + } + if (is_cell_too_short(sum, width)) { + std::cerr << "Cell is too short\r\n"; + return CELL_IS_TOO_SHORT; + } + row.push_back(sum); + } + } + values.push_back(row); + } + +/***************************************************************************************/ + + +/* PRINTING CONFIG INFO +***************************************************************************************/ + for (const auto& config : my_configs) { + std::cout << "config." << config.type << "=" << config.value << "\r\n"; + } + std::cout << "\r\n"; + +/***************************************************************************************/ + + // Finds the width of the table (according to the longest row) + size_t max_length = 0; + for (const auto& row : values) { + if (row.size() > max_length) { + max_length = row.size(); + } + } + +/* PRINTING TABLE +***************************************************************************************/ + + print_border_line(max_length, width); + if (my_configs[3].value == "left") { + std::cout << std::left; + } + + std::cout << "|" << std::string(width + 2, ' '); + + std::cout << "|"; + for (char i = 'A'; i < 'A' + static_cast<char>(max_length); i++) { + std::cout << " " << std::setw(width) << i << " |"; + } + std::cout << "\r\n"; + + print_border_line(max_length, width); + + size_t rows_amount = values.size(); + for (size_t row = 0; row < rows_amount; row++) { + size_t cols_amount = values[row].size(); + std::cout << "| " << std::setw(width) << row + 1 << " |"; + for (size_t col = 0; col < max_length; col++) { + if (cols_amount > 0) { + std::cout << " " << std::setw(width) << values[row][col] << " |"; + cols_amount -= 1; + } else { + std::cout << " " << std::string(width + 1, ' ') << "|"; + } + } + std::cout << "\r\n"; + print_border_line(max_length, width); + } + +/***************************************************************************************/ + + return Marek; +} + +void print_border_line(size_t length, int chars_amount) { + std::cout << "+"; + for (size_t i = 0; i < length + 1; i++) { + std::cout << std::string(chars_amount + 2, '-') ; + std::cout << "+"; + } + std::cout << "\r\n"; +} + +bool is_cell_too_short(int number, int width) { + bool ret = false; + int len = std::to_string(std::abs(number)).length(); + if (len > width) { + ret = true; + } + return ret; +} diff --git a/01/template/idk.out b/01/template/idk.out new file mode 100644 index 0000000..2721437 --- /dev/null +++ b/01/template/idk.out @@ -0,0 +1,12 @@ +config.min=-99 +config.max=150 +config.width=3 +config.align=left + ++-----+-----+-----+-----+-----+-----+ +| | A | B | C | D | E | ++-----+-----+-----+-----+-----+-----+ +| 1 | 10 | 20 | 20 | 50 | | ++-----+-----+-----+-----+-----+-----+ +| 2 | -10 | -20 | -30 | -40 | -50 | ++-----+-----+-----+-----+-----+-----+ diff --git a/01/template/main.cpp b/01/template/main.cpp new file mode 100644 index 0000000..d38f333 --- /dev/null +++ b/01/template/main.cpp @@ -0,0 +1,211 @@ +#include <iostream> +#include <string> +#include <regex> +#include <vector> +#include <sstream> +#include <iomanip> +#include "main.hpp" +#include "parse.hpp" + +#define OUT_OF_RANGE 100 +#define INVALID_INPUT 101 +#define INVALID_CONFIGURATION 102 +#define CELL_IS_TOO_SHORT 103 + +void print_border_line(size_t length, int chars_amount); +bool is_cell_too_short(int number, int width); + +int main(){ + + int Marek = 0; + + // variable for decoded config + config_t config; + std::string line; + bool readingConfig = true; // Flag to control reading config vs table + + std::vector<config_t> my_configs; + config_t new_config; + + new_config.type = "min"; + new_config.value = "-99"; + new_config.valid = true; + my_configs.push_back(new_config); + + new_config.type = "max"; + new_config.value = "100"; + new_config.valid = true; + my_configs.push_back(new_config); + + new_config.type = "width"; + new_config.value = "3"; + new_config.valid = true; + my_configs.push_back(new_config); + + new_config.type = "align"; + new_config.value = "left"; + new_config.valid = true; + my_configs.push_back(new_config); + +/* READING CONFIG +*****************************************************************************************/ + do { + std::getline(std::cin, line); + + if (readingConfig) { + config = getConfig(line); // Decode config + + if (config.valid) { + for (std::size_t i = 0; i < my_configs.size(); i++) { + if (config.type.compare(my_configs[i].type) == 0) { + my_configs[i].value = config.value; + } + } + } + // If the line is exactly "=" + if (line == "=") { + + readingConfig = false; // Stop reading config, start reading table + } + } + } while (readingConfig); +/***************************************************************************************/ + + if (stoi(my_configs[0].value) > stoi(my_configs[1].value) || stoi(my_configs[2].value) < 1) { + std::cerr << "Invalid configuration\n"; + return INVALID_CONFIGURATION; + } + +/* READING THE TABLE +*****************************************************************************************/ + + std::vector<std::vector<int>> values; + + int min = stoi(my_configs[0].value); + int max = stoi(my_configs[1].value); + int width = stoi(my_configs[2].value); + + // Now, we are reading table values + while (std::getline(std::cin, line)) { + std::stringstream ss(line); + std::vector<int> row; + std::string cell; + int number; + + while (std::getline(ss, cell, ';')) { + try { // if loaded cell is a number + number = std::stoi(cell); + // Check if the number is in the given range + if (number < min || number > max) { + std::cerr << "Out of range\n"; + return OUT_OF_RANGE; + } + if (is_cell_too_short(number, width)) { + std::cerr << "Cell is too short\n"; + return CELL_IS_TOO_SHORT; + } + row.push_back(number); + } + // If the cell isn't a number + catch (const std::exception& e) { // if there is a text (SUM?) + std::regex sum_regex(R"(SUM\(([A-Z]):([A-Z])\))"); + std::smatch match; + int sum = 0; + + if (std::regex_match(cell, match, sum_regex)) { + char from = match[1].str()[0]; + char to = match[2].str()[0]; + + for (int i = from - 'A'; i <= to - 'A'; i++) { + sum += row[i]; + } + } else { + std::cerr << "Invalid input\n"; + return INVALID_INPUT; + } + if (is_cell_too_short(sum, width)) { + std::cerr << "Cell is too short\n"; + return CELL_IS_TOO_SHORT; + } + row.push_back(sum); + } + } + values.push_back(row); + } + +/***************************************************************************************/ + + +/* PRINTING CONFIG INFO +***************************************************************************************/ + for (const auto& config : my_configs) { + std::cout << "config." << config.type << "=" << config.value << "\n"; + } + std::cout << "\n"; + +/***************************************************************************************/ + + // Finds the width of the table (according to the longest row) + size_t max_length = 0; + for (const auto& row : values) { + if (row.size() > max_length) { + max_length = row.size(); + } + } + +/* PRINTING TABLE +***************************************************************************************/ + + print_border_line(max_length, width); + if (my_configs[3].value == "left") { + std::cout << std::left; + } + + std::cout << "|" << std::string(width + 2, ' '); + + std::cout << "|"; + for (char i = 'A'; i < 'A' + static_cast<char>(max_length); i++) { + std::cout << " " << std::setw(width) << i << " |"; + } + std::cout << "\n"; + + print_border_line(max_length, width); + + size_t rows_amount = values.size(); + for (size_t row = 0; row < rows_amount; row++) { + size_t cols_amount = values[row].size(); + std::cout << "| " << std::setw(width) << row + 1 << " |"; + for (size_t col = 0; col < max_length; col++) { + if (cols_amount > 0) { + std::cout << " " << std::setw(width) << values[row][col] << " |"; + cols_amount -= 1; + } else { + std::cout << " " << std::string(width + 1, ' ') << "|"; + } + } + std::cout << "\n"; + print_border_line(max_length, width); + } + +/***************************************************************************************/ + + return Marek; +} + +void print_border_line(size_t length, int chars_amount) { + std::cout << "+"; + for (size_t i = 0; i < length + 1; i++) { + std::cout << std::string(chars_amount + 2, '-'); + std::cout << "+"; + } + std::cout << "\n"; +} + +bool is_cell_too_short(int number, int width) { + bool ret = false; + int len = std::to_string(std::abs(number)).length(); + if (len > width) { + ret = true; + } + return ret; +} diff --git a/01/template/main.hpp b/01/template/main.hpp new file mode 100644 index 0000000..bc9d9ad --- /dev/null +++ b/01/template/main.hpp @@ -0,0 +1,6 @@ + +#ifndef MAIN_HPP +#define MAIN_HPP + + +#endif \ No newline at end of file diff --git a/01/template/main.zip b/01/template/main.zip new file mode 100644 index 0000000000000000000000000000000000000000..bcc2c31289647a74d5869e16bc4855543cae3401 GIT binary patch literal 3304 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 literal 0 HcmV?d00001 diff --git a/01/template/parse.cpp b/01/template/parse.cpp new file mode 100644 index 0000000..9a63b68 --- /dev/null +++ b/01/template/parse.cpp @@ -0,0 +1,53 @@ + +#include <string> +#include <regex> +#include <vector> +#include "parse.hpp" + +config_t getConfig(std::string text){ + config_t config; + std::regex regexConfig("(\\w+).(\\w+)=([\\w-]+)"); + std::smatch fn_match; + config.valid = false; + + if(std::regex_search(text, fn_match, regexConfig)){ + if(fn_match[1].compare("config") == 0){ // If there is 1st word is config + config.type = fn_match[2]; // Sets type from text + config.value = fn_match[3]; // Sets value from text + config.valid = true; + } + else{ + config.type = "not config"; + } + } + return config; +} + +sum_t getSum(std::string text, std::vector<int> numbers){ + sum_t sum; + std::regex regexConfig("(\\w+)\\((\\w):(\\w)\\)"); + std::smatch fn_match; + sum.valid = false; + sum.value = 0; + + if(std::regex_search(text, fn_match, regexConfig)){ + if(fn_match[1].compare("SUM") == 0){ + std::string temp = fn_match[2]; + int from = temp[0] - 'A'; + temp = fn_match[3]; + int to = temp[0] - 'A'; + + if(to < (int)numbers.size()){ + for(int i=from; i<=to; i++){ + sum.value += numbers[i]; + } + sum.valid = true; + sum.width = std::to_string(sum.value).size(); + } + else{ + sum.valid = false; + } + } + } + return sum; +} \ No newline at end of file diff --git a/01/template/parse.hpp b/01/template/parse.hpp new file mode 100644 index 0000000..f7ef73b --- /dev/null +++ b/01/template/parse.hpp @@ -0,0 +1,48 @@ +#ifndef _PARSE_HPP_ +#define _PARSE_HPP_ + +#include <string> +#include <vector> + +/** + * Header file for parsing inputs and printing out the header and lines + */ + +/** + * @brief Configuration struct + */ +typedef struct{ + std::string type; /**< Type of the config as string */ + std::string value; /**< Value after '=' char */ + bool valid; /**< true if this configuration is valid */ +}config_t; + +/** + * @brief Sum struct + */ +typedef struct{ + int value; /**< Sum of the cells */ + bool valid; /**< true if this sum is valid */ + int width; /**< Width of the text */ +}sum_t; + +/** + * @brief Parse input string to parse input configuration + * + * @param text Input string for parsing (one line) + * @retval Configuration struct (config_t) with parsed values + * + */ +config_t getConfig(std::string text); + +/** + * @brief Parse sum cell and return value and its validity + * + * @param text Text for parsing in format SUM(FROM:TO) + * @param numbers Vector of numbers which can be summed + * @retval sum_t struct with the value, text width and valid information + * + */ +sum_t getSum(std::string text, std::vector<int> numbers); + +#endif // __PARSE_HPP_ \ No newline at end of file -- GitLab From 016c814ff9e1b42e0b54065a9109eff8531337de Mon Sep 17 00:00:00 2001 From: Marek Strympl <strymmar@fel.cvut.cz> Date: Tue, 18 Mar 2025 15:18:05 +0100 Subject: [PATCH 4/5] Folder and file for HW02 added --- 01/template/main.cpp | 5 +- 02/doprava.cpp | 218 +++++++++++++++++++++++++ 02/doprava.hpp | 129 +++++++++++++++ 02/driver_list.txt | 45 ++++++ 02/main.cpp | 85 ++++++++++ 02/makefile | 22 +++ 02/network.txt | 374 +++++++++++++++++++++++++++++++++++++++++++ 02/out1.txt | 122 ++++++++++++++ 02/out2.txt | 75 +++++++++ 02/out3.txt | 51 ++++++ 02/readme.txt | 18 +++ HW01.cpp | 0 12 files changed, 1143 insertions(+), 1 deletion(-) create mode 100644 02/doprava.cpp create mode 100644 02/doprava.hpp create mode 100644 02/driver_list.txt create mode 100644 02/main.cpp create mode 100644 02/makefile create mode 100644 02/network.txt create mode 100644 02/out1.txt create mode 100644 02/out2.txt create mode 100644 02/out3.txt create mode 100644 02/readme.txt delete mode 100644 HW01.cpp diff --git a/01/template/main.cpp b/01/template/main.cpp index d38f333..7d67cb2 100644 --- a/01/template/main.cpp +++ b/01/template/main.cpp @@ -45,7 +45,7 @@ int main(){ new_config.type = "align"; new_config.value = "left"; new_config.valid = true; - my_configs.push_back(new_config); + my_configs.push_back(new_config); /* READING CONFIG *****************************************************************************************/ @@ -59,6 +59,9 @@ int main(){ for (std::size_t i = 0; i < my_configs.size(); i++) { if (config.type.compare(my_configs[i].type) == 0) { my_configs[i].value = config.value; + } else { + // TODO MAKE NEW CONFIG + // config_t tmp_config = } } } diff --git a/02/doprava.cpp b/02/doprava.cpp new file mode 100644 index 0000000..28858e9 --- /dev/null +++ b/02/doprava.cpp @@ -0,0 +1,218 @@ +#include "doprava.hpp" +using namespace std; + +Time::Time(int ss) : seconds(ss) {} // initialize by seconds after midnight: seconds(ss){}; + +Time::Time(int hh, int mm, int ss) : seconds(3600 * hh + 60 * mm + ss) {} // initialize by hours, minutes seconds + +Time::Time(const Time &tt) : seconds(tt.seconds) {} // copy-constructor + +Time &Time::operator=(const Time &tt) +{ + this->seconds = tt.seconds; + return *this; +} + +int Time::gets() const { return seconds; } // get seconds after midnight // {return ss;} +void Time::gett(int &hh, int &mm, int &ss) const // get hours, minutes, seconds +{ + ss = seconds; + hh = ss / 3600; + ss -= 3600 * hh; + mm = ss / 60; + ss -= 60 * mm; +} + +Time operator+(const Time &lhs, const Time &rhs) { return Time(lhs.seconds + rhs.seconds); } +Time operator-(const Time &lhs, const Time &rhs) { return Time(lhs.seconds - rhs.seconds); } +bool operator<(const Time &lhs, const Time &rhs) { return lhs.seconds < rhs.seconds; } +bool operator>(const Time &lhs, const Time &rhs) { return rhs < lhs; } +bool operator<=(const Time &lhs, const Time &rhs) { return !(lhs > rhs); } +bool operator>=(const Time &lhs, const Time &rhs) { return !(lhs < rhs); } +bool operator==(const Time &lhs, const Time &rhs) { return lhs.seconds == rhs.seconds; } +bool operator!=(const Time &lhs, const Time &rhs) { return !(lhs == rhs); } + +Depart::Depart(Time ti_in, Lndir dir_in) : ti(ti_in), dir(dir_in) {} + +Depart::Depart(const Depart &dep) : Depart(dep.ti, dep.dir) {} + +Depart &Depart::operator=(const Depart &d) +{ + this->ti = d.ti; + this->dir = d.dir; + return *this; +} + +PlanConn::PlanConn(Driver drv_in, vector<Depart> d) : vector<Depart>(d), drv(drv_in) {} +PlanConn::PlanConn(const PlanConn &orig) : PlanConn(orig.drv, orig) {} +PlanConn &PlanConn::operator=(const PlanConn &orig) +{ + if (&orig != this) // if not identical + { + this->drv = orig.drv; + this->clear(); + for (auto it = orig.begin(); it != orig.end(); it++) + this->push_back(*it); + } + return *this; +} + +Driver::Driver(string name_in) : name(name_in) {} + +Driver::Driver(const Driver &drv) : name(drv.name) {} + +Driver &Driver::operator=(const Driver &drv) +{ + this->name = drv.name; + return *this; +} + +bool Driver::operator==(const Driver &drv) const +{ + return !name.compare(drv.name); +} + +bool Driver::operator!=(const Driver &drv) const +{ + return name.compare(drv.name); +} + +void DriverList::loadFromFile(string filename) +{ + string tmpstr; + int drivercount; + ifstream infile(filename); + if (infile.is_open()) + { + for (drivercount = 0; getline(infile, tmpstr); drivercount++) + this->push_back(Driver(tmpstr)); + cout << "Loaded " << drivercount << " names from " << filename << ".\n"; + infile.close(); + } + else + { + cout << "Could not open " << filename << ". Driver List not loaded." << endl; + } +} + +Line::Line(const Line &orig) : stops(orig.stops), conns_fwd(orig.conns_fwd), conns_bwd(orig.conns_bwd) {} + +Line &Line::operator=(const Line &orig) +{ + this->stops = orig.stops; + this->conns_fwd = orig.conns_fwd; + this->conns_bwd = orig.conns_bwd; + return *this; +} + +Line Network::getLine(int ln) const +{ + if (ln < 0 || (unsigned)ln >= this->lines.size()) + throw out_of_range("Line number out of range."); + else + return lines[ln]; +} + +int Network::nlines() const +{ + return this->lines.size(); +} + +void Network::loadFromFile(string filename) +{ + + Line tmpL; + Depart tmpD; + PlanConn tmpC; + Lndir tmpdir; + + string tmpstr; + + ifstream infile(filename); + if (infile.is_open()) + { + while (getline(infile, tmpstr)) + { + if (tmpstr.rfind("{", 0) == 0) //if dbegin with "{", create new line + { + tmpC.clear(); + istringstream ss(tmpstr); + char ch; + int sec; + + string token; + ss >> ch; + if (ch != '{' || !ss.good()) + { + infile.close(); + throw file_corrupt(); + } + ss >> ch; + if (ch == 'f' && ss.good()) + tmpdir = Lndir::fwd; + else if (ch == 'b' && ss.good()) + tmpdir = Lndir::bwd; + else + throw file_corrupt(); + ss >> ch; + if (ch != ';' || !ss.good()) + { + infile.close(); + throw file_corrupt(); + } + + if (!getline(ss, token, ';')) + { + infile.close(); + throw file_corrupt(); + } + tmpC.drv = Driver(token); + + ch = ';'; + while (ch == ';') + { + ss >> sec; + ss >> ch; + if (!ss.good()) + throw file_corrupt(); + tmpC.push_back(Depart(Time(sec), tmpdir)); + } + if (ch == '}') + if (tmpdir == Lndir::fwd) + tmpL.conns_fwd.push_back(tmpC); + else + tmpL.conns_bwd.push_back(tmpC); + else + { + infile.close(); + throw file_corrupt(); + } + } + else if (tmpstr.rfind("#####", 0) == 0) //if begins with "#####", push_back line + { + this->lines.push_back(tmpL); + } + else // we have to start a new line! + { + tmpL.stops.clear(); + tmpL.conns_fwd.clear(); + tmpL.conns_bwd.clear(); + istringstream ss(tmpstr); + string token; + while (getline(ss, token, ';')) + { + // cout<< token<< endl; + tmpL.stops.push_back(token); + } + } + } + + infile.close(); + std::cout << "Loaded network from " << filename << ".\n"; + } + else + { + std::cout << "Could not open " << filename << ". Network not loaded." << endl; + } +} + diff --git a/02/doprava.hpp b/02/doprava.hpp new file mode 100644 index 0000000..372b8c8 --- /dev/null +++ b/02/doprava.hpp @@ -0,0 +1,129 @@ +#ifndef DOPRAVA_H +#define DOPRAVA_H + +#include <vector> +#include <list> +#include <string> +#include <algorithm> +#include <iostream> +#include <fstream> +#include <sstream> + +using namespace std; + +// exception for read file - do not modify +struct file_corrupt : public std::exception +{ + const char *what() const throw() { return "file_corrupt"; } +}; + +// Direction of connection/departure +enum class Lndir +{ + fwd, + bwd +}; + + + +class Time +{ + int seconds; // seconds after midnight +public: + Time(int ss = 0); // initialize by seconds after midnight: seconds(ss){}; + Time(int hh, int mm, int ss = 0); // initialize by hours, minutes seconds + Time(const Time &tt); // copy-constructor + int gets() const; // get seconds after midnight // {return ss;} + void gett(int &hh, int &mm, int &ss) const; // get hours, minutes seconds + Time &operator=(const Time &tt); + friend Time operator+(const Time &lhs, const Time &rhs); + friend Time operator-(const Time &lhs, const Time &rhs); + friend bool operator<(const Time &lhs, const Time &rhs); + friend bool operator>(const Time &lhs, const Time &rhs); + friend bool operator<=(const Time &lhs, const Time &rhs); + friend bool operator>=(const Time &lhs, const Time &rhs); + friend bool operator==(const Time &lhs, const Time &rhs); + friend bool operator!=(const Time &lhs, const Time &rhs); +}; + +Time operator+(const Time &lhs, const Time &rhs); +Time operator-(const Time &lhs, const Time &rhs); +bool operator<(const Time &lhs, const Time &rhs); +bool operator>(const Time &lhs, const Time &rhs); +bool operator<=(const Time &lhs, const Time &rhs); +bool operator>=(const Time &lhs, const Time &rhs); +bool operator==(const Time &lhs, const Time &rhs); +bool operator!=(const Time &lhs, const Time &rhs); + +// Generic Departure +struct Depart +{ + Time ti; // time of departure + Lndir dir; // direction of departure + + // Constructors + Depart(Time = Time(0), Lndir dir_in = Lndir::fwd); + Depart(const Depart &dep); + // Assign + Depart &operator=(const Depart &d); +}; + +// Driver structure +struct Driver +{ + string name; + // Constructors + Driver(string name_in = ""); + Driver(const Driver &drv); + // Assign + Driver &operator=(const Driver &drv); + bool operator==(const Driver &drv) const; + bool operator!=(const Driver &drv) const; +}; + +// list of drivers - std::list with ability to read from file. +struct DriverList : list<Driver> +{ + void loadFromFile(string filename); +}; + +// Timetable for one connection +struct PlanConn : public vector<Depart> +{ + Driver drv; // driver of the connection + + // Constructors + PlanConn(Driver drv = Driver(), vector<Depart> d = vector<Depart>()); + PlanConn(const PlanConn &orig); + + //Assign + PlanConn &operator=(const PlanConn &drv); +}; + +// Structure of a single line +struct Line +{ + vector<string> stops; // stops on the line in forward order + vector<PlanConn> conns_fwd; // all connections of the line going forward + vector<PlanConn> conns_bwd; // all connections of the line going backward + + Line() : stops({}), conns_fwd({}), conns_bwd({}){}; // Implicit constructor + Line(const Line &orig); // Copy constructor + Line & operator=(const Line &orig); // Copy-assignment + // no destructor => implicit; +}; + +// structure of networks (Collection of lines) +class Network +{ +protected: + vector<Line> lines; +public: + Line getLine(int ln) const; // returns line with number ln + int nlines() const; // maximal number of lines + Line operator()(int ln) const { return getLine(ln); } // Alias For getLine + void loadFromFile(string filename); +}; + + +#endif \ No newline at end of file diff --git a/02/driver_list.txt b/02/driver_list.txt new file mode 100644 index 0000000..3c64630 --- /dev/null +++ b/02/driver_list.txt @@ -0,0 +1,45 @@ +Alain Prost +Alan Jones +Alberto Ascari +Ari Vatanen +Ayrton Senna +Bruce McLaren +Carlos Sainz +Damon Hill +Denny Hulme +Eddie Irvine +Emerson Fittipaldi +Fernando Alonso +Giuseppe Farina +Graham Hill +Henri Toivonen +Jack Brabham +Jackie Stewart +Jacques Villeneuve +James Hunt +Jean Alesi +Jenson Button +Jim Clark +Jochen Rindt +Jody Scheckter +John Surtees +Juan M. Fangio +Keke Rosberg +Kimi Raikkonen +Lewis Hamilton +Mario Andretti +Michael Schumacher +Michele Mouton +Mika Hakkinen +Mike Hawthorn +Miki Biasion +Nelson Piquet +Nico Rosberg +Nigel Mansell +Niki Lauda +Petter Solberg +Phil Hill +Richard Burns +Sebastian Vettel +Stig Blomqvist +Timo Salonen diff --git a/02/main.cpp b/02/main.cpp new file mode 100644 index 0000000..957d291 --- /dev/null +++ b/02/main.cpp @@ -0,0 +1,85 @@ +#include <iostream> +#include <vector> +#include "doprava.hpp" + +//Feel free to create your solution in multiple files +// and add the includes here. e.g.: +//#include "solution.hpp" + +using namespace std; + +int main(int argc, char** argv) { + + // Load files: + DriverList dl; + dl.loadFromFile("driver_list.txt"); + + Network net; + net.loadFromFile("network.txt"); + + // variables for argument decoding + string flag_in; + list<string> stop_in; + + if (argc > 1) + flag_in = string(argv[1]); + else + { + cerr << "Missing argument. Terminating." << endl; + return 1; + } + + if ((!flag_in.compare("--schedule"))) + { + // input check - do not edit + if (argc > 2) + { + for (int i = 2; i < argc; i++) + { + string temp = argv[i]; + replace(temp.begin(), temp.end(), '_', ' '); + stop_in.push_back(temp); + } + } + else + { + cerr << "Missing stop name. Terminating." << endl; + return 2; + } + // end of input check + + /* here should start the code for printing timetables*/ + /* stop_in contains names of stops, for which the timetable is to be printed. */ + + // This is an example, how it can be done using lambda-function + for_each(stop_in.begin(), stop_in.end(), [&] (string stop_name) {print_timetable(net,stop_name);} ); + // This is an example, how it can be done using for-loop + // for( auto iter = stop_in.begin(); iter != stop_in.end(); iter++) print_timetable(net,*iter); + + /* here should end the code for printing timetables*/ + } + else if ((!flag_in.compare("--line-routing"))) + { + + /* here should start the code for printing line routes without stats*/ + + + + /* here should end the code for printing line routes without stats*/ + } + else if ((!flag_in.compare("--driver-stops"))) + { + + /* here should start the code for stops statistics for drivers */ + + + + /* here should end the code for stops statistics for drivers */ + } + else + { + cout << "Flag not recognized, terminating." << endl; + } + + return 0; +} \ No newline at end of file diff --git a/02/makefile b/02/makefile new file mode 100644 index 0000000..cba02c6 --- /dev/null +++ b/02/makefile @@ -0,0 +1,22 @@ +CXX = clang++ +CXXFLAGS= -g -std=c++17 -Wall -Wpedantic +SOURCES = $(wildcard *.cpp) + +main: $(SOURCES) + $(CXX) $^ -o $@ $(CXXFLAGS) + +out1.txt: main network.txt driver_list.txt + ./main --schedule "Petrackovo namesti" "Vitkov" "U Bufetu" > out1.txt + +out2.txt: main network.txt driver_list.txt + ./main --line-routing > out2.txt + +out3.txt: main network.txt driver_list.txt + ./main --driver-stops > out3.txt + +all: main + +run: out1.txt out2.txt out3.txt + +clean: + rm -f main out1.txt out2.txt out3.txt diff --git a/02/network.txt b/02/network.txt new file mode 100644 index 0000000..49a703c --- /dev/null +++ b/02/network.txt @@ -0,0 +1,374 @@ +U Petnika;Pred Menzou;Matematiku;Fyziku;Radioelektronicka;Elektromagnetickeho pole;Mikroelektronicka;Studentska;Paterova;Nosterova;U Zavrene skoly;U Bufetu;Knihovnicka;Dekanat;Rektorat;Studijni odd. +{f;Jim Clark;14400;14580;14700;14820;14940;15040;15160;15240;15330;15410;15480;15600;15760;15890;16000;16120} +{f;James Hunt;16200;16380;16500;16620;16740;16840;16960;17040;17130;17210;17280;17400;17560;17690;17800;17920} +{f;Graham Hill;18000;18180;18300;18420;18540;18640;18760;18840;18930;19010;19080;19200;19360;19490;19600;19720} +{f;Jack Brabham;19800;19980;20100;20220;20340;20440;20560;20640;20730;20810;20880;21000;21160;21290;21400;21520} +{f;Nelson Piquet;21600;21780;21900;22020;22140;22240;22360;22440;22530;22610;22680;22800;22960;23090;23200;23320} +{f;Keke Rosberg;22500;22680;22800;22920;23040;23140;23260;23340;23430;23510;23580;23700;23860;23990;24100;24220} +{f;Ayrton Senna;23400;23580;23700;23820;23940;24040;24160;24240;24330;24410;24480;24600;24760;24890;25000;25120} +{f;John Surtees;24300;24480;24600;24720;24840;24940;25060;25140;25230;25310;25380;25500;25660;25790;25900;26020} +{f;Jim Clark;25200;25380;25500;25620;25740;25840;25960;26040;26130;26210;26280;26400;26560;26690;26800;26920} +{f;Niki Lauda;26100;26280;26400;26520;26640;26740;26860;26940;27030;27110;27180;27300;27460;27590;27700;27820} +{f;Jackie Stewart;27000;27180;27300;27420;27540;27640;27760;27840;27930;28010;28080;28200;28360;28490;28600;28720} +{f;Emerson Fittipaldi;27900;28080;28200;28320;28440;28540;28660;28740;28830;28910;28980;29100;29260;29390;29500;29620} +{f;Graham Hill;28800;28980;29100;29220;29340;29440;29560;29640;29730;29810;29880;30000;30160;30290;30400;30520} +{f;James Hunt;29700;29880;30000;30120;30240;30340;30460;30540;30630;30710;30780;30900;31060;31190;31300;31420} +{f;Nelson Piquet;30600;30780;30900;31020;31140;31240;31360;31440;31530;31610;31680;31800;31960;32090;32200;32320} +{f;Jochen Rindt;31500;31680;31800;31920;32040;32140;32260;32340;32430;32510;32580;32700;32860;32990;33100;33220} +{f;Keke Rosberg;32400;32580;32700;32820;32940;33040;33160;33240;33330;33410;33480;33600;33760;33890;34000;34120} +{f;Jack Brabham;33300;33480;33600;33720;33840;33940;34060;34140;34230;34310;34380;34500;34660;34790;34900;35020} +{f;Ayrton Senna;34200;34380;34500;34620;34740;34840;34960;35040;35130;35210;35280;35400;35560;35690;35800;35920} +{f;John Surtees;35100;35280;35400;35520;35640;35740;35860;35940;36030;36110;36180;36300;36460;36590;36700;36820} +{f;Jackie Stewart;36000;36180;36300;36420;36540;36640;36760;36840;36930;37010;37080;37200;37360;37490;37600;37720} +{f;Nelson Piquet;37800;37980;38100;38220;38340;38440;38560;38640;38730;38810;38880;39000;39160;39290;39400;39520} +{f;Jim Clark;39600;39780;39900;40020;40140;40240;40360;40440;40530;40610;40680;40800;40960;41090;41200;41320} +{f;Niki Lauda;41400;41580;41700;41820;41940;42040;42160;42240;42330;42410;42480;42600;42760;42890;43000;43120} +{f;Jochen Rindt;43200;43380;43500;43620;43740;43840;43960;44040;44130;44210;44280;44400;44560;44690;44800;44920} +{f;Emerson Fittipaldi;45000;45180;45300;45420;45540;45640;45760;45840;45930;46010;46080;46200;46360;46490;46600;46720} +{f;Graham Hill;46800;46980;47100;47220;47340;47440;47560;47640;47730;47810;47880;48000;48160;48290;48400;48520} +{f;Ayrton Senna;48600;48780;48900;49020;49140;49240;49360;49440;49530;49610;49680;49800;49960;50090;50200;50320} +{f;Keke Rosberg;50400;50580;50700;50820;50940;51040;51160;51240;51330;51410;51480;51600;51760;51890;52000;52120} +{f;Jack Brabham;52200;52380;52500;52620;52740;52840;52960;53040;53130;53210;53280;53400;53560;53690;53800;53920} +{f;James Hunt;54000;54180;54300;54420;54540;54640;54760;54840;54930;55010;55080;55200;55360;55490;55600;55720} +{f;Jackie Stewart;54900;55080;55200;55320;55440;55540;55660;55740;55830;55910;55980;56100;56260;56390;56500;56620} +{f;Niki Lauda;55800;55980;56100;56220;56340;56440;56560;56640;56730;56810;56880;57000;57160;57290;57400;57520} +{f;John Surtees;56700;56880;57000;57120;57240;57340;57460;57540;57630;57710;57780;57900;58060;58190;58300;58420} +{f;Nelson Piquet;57600;57780;57900;58020;58140;58240;58360;58440;58530;58610;58680;58800;58960;59090;59200;59320} +{f;Emerson Fittipaldi;58500;58680;58800;58920;59040;59140;59260;59340;59430;59510;59580;59700;59860;59990;60100;60220} +{f;Jochen Rindt;59400;59580;59700;59820;59940;60040;60160;60240;60330;60410;60480;60600;60760;60890;61000;61120} +{f;Jim Clark;60300;60480;60600;60720;60840;60940;61060;61140;61230;61310;61380;61500;61660;61790;61900;62020} +{f;Keke Rosberg;61200;61380;61500;61620;61740;61840;61960;62040;62130;62210;62280;62400;62560;62690;62800;62920} +{f;Graham Hill;62100;62280;62400;62520;62640;62740;62860;62940;63030;63110;63180;63300;63460;63590;63700;63820} +{f;Ayrton Senna;63000;63180;63300;63420;63540;63640;63760;63840;63930;64010;64080;64200;64360;64490;64600;64720} +{f;Jack Brabham;63900;64080;64200;64320;64440;64540;64660;64740;64830;64910;64980;65100;65260;65390;65500;65620} +{f;Jackie Stewart;64800;64980;65100;65220;65340;65440;65560;65640;65730;65810;65880;66000;66160;66290;66400;66520} +{f;Niki Lauda;65700;65880;66000;66120;66240;66340;66460;66540;66630;66710;66780;66900;67060;67190;67300;67420} +{f;Emerson Fittipaldi;66600;66780;66900;67020;67140;67240;67360;67440;67530;67610;67680;67800;67960;68090;68200;68320} +{f;John Surtees;67500;67680;67800;67920;68040;68140;68260;68340;68430;68510;68580;68700;68860;68990;69100;69220} +{f;Nelson Piquet;68400;68580;68700;68820;68940;69040;69160;69240;69330;69410;69480;69600;69760;69890;70000;70120} +{f;James Hunt;70200;70380;70500;70620;70740;70840;70960;71040;71130;71210;71280;71400;71560;71690;71800;71920} +{f;Jochen Rindt;72000;72180;72300;72420;72540;72640;72760;72840;72930;73010;73080;73200;73360;73490;73600;73720} +{f;Graham Hill;73800;73980;74100;74220;74340;74440;74560;74640;74730;74810;74880;75000;75160;75290;75400;75520} +{f;Keke Rosberg;75600;75780;75900;76020;76140;76240;76360;76440;76530;76610;76680;76800;76960;77090;77200;77320} +{f;Ayrton Senna;77400;77580;77700;77820;77940;78040;78160;78240;78330;78410;78480;78600;78760;78890;79000;79120} +{f;Niki Lauda;79200;79380;79500;79620;79740;79840;79960;80040;80130;80210;80280;80400;80560;80690;80800;80920} +{f;Jim Clark;81000;81180;81300;81420;81540;81640;81760;81840;81930;82010;82080;82200;82360;82490;82600;82720} +{f;Jackie Stewart;82800;82980;83100;83220;83340;83440;83560;83640;83730;83810;83880;84000;84160;84290;84400;84520} +{b;Nelson Piquet;16420;16240;16120;16000;15880;15780;15660;15580;15490;15410;15340;15220;15060;14930;14820;14700} +{b;Ayrton Senna;18220;18040;17920;17800;17680;17580;17460;17380;17290;17210;17140;17020;16860;16730;16620;16500} +{b;Niki Lauda;20020;19840;19720;19600;19480;19380;19260;19180;19090;19010;18940;18820;18660;18530;18420;18300} +{b;Jim Clark;21820;21640;21520;21400;21280;21180;21060;20980;20890;20810;20740;20620;20460;20330;20220;20100} +{b;Emerson Fittipaldi;23620;23440;23320;23200;23080;22980;22860;22780;22690;22610;22540;22420;22260;22130;22020;21900} +{b;Jackie Stewart;24520;24340;24220;24100;23980;23880;23760;23680;23590;23510;23440;23320;23160;23030;22920;22800} +{b;Jochen Rindt;25420;25240;25120;25000;24880;24780;24660;24580;24490;24410;24340;24220;24060;23930;23820;23700} +{b;James Hunt;26320;26140;26020;25900;25780;25680;25560;25480;25390;25310;25240;25120;24960;24830;24720;24600} +{b;Graham Hill;27220;27040;26920;26800;26680;26580;26460;26380;26290;26210;26140;26020;25860;25730;25620;25500} +{b;Nelson Piquet;28120;27940;27820;27700;27580;27480;27360;27280;27190;27110;27040;26920;26760;26630;26520;26400} +{b;Keke Rosberg;29020;28840;28720;28600;28480;28380;28260;28180;28090;28010;27940;27820;27660;27530;27420;27300} +{b;Jack Brabham;29920;29740;29620;29500;29380;29280;29160;29080;28990;28910;28840;28720;28560;28430;28320;28200} +{b;Ayrton Senna;30820;30640;30520;30400;30280;30180;30060;29980;29890;29810;29740;29620;29460;29330;29220;29100} +{b;Jim Clark;31720;31540;31420;31300;31180;31080;30960;30880;30790;30710;30640;30520;30360;30230;30120;30000} +{b;John Surtees;32620;32440;32320;32200;32080;31980;31860;31780;31690;31610;31540;31420;31260;31130;31020;30900} +{b;Niki Lauda;33520;33340;33220;33100;32980;32880;32760;32680;32590;32510;32440;32320;32160;32030;31920;31800} +{b;Jackie Stewart;34420;34240;34120;34000;33880;33780;33660;33580;33490;33410;33340;33220;33060;32930;32820;32700} +{b;Nelson Piquet;35320;35140;35020;34900;34780;34680;34560;34480;34390;34310;34240;34120;33960;33830;33720;33600} +{b;Emerson Fittipaldi;36220;36040;35920;35800;35680;35580;35460;35380;35290;35210;35140;35020;34860;34730;34620;34500} +{b;Graham Hill;37120;36940;36820;36700;36580;36480;36360;36280;36190;36110;36040;35920;35760;35630;35520;35400} +{b;Jochen Rindt;38020;37840;37720;37600;37480;37380;37260;37180;37090;37010;36940;36820;36660;36530;36420;36300} +{b;Keke Rosberg;39820;39640;39520;39400;39280;39180;39060;38980;38890;38810;38740;38620;38460;38330;38220;38100} +{b;James Hunt;41620;41440;41320;41200;41080;40980;40860;40780;40690;40610;40540;40420;40260;40130;40020;39900} +{b;Ayrton Senna;43420;43240;43120;43000;42880;42780;42660;42580;42490;42410;42340;42220;42060;41930;41820;41700} +{b;Jack Brabham;45220;45040;44920;44800;44680;44580;44460;44380;44290;44210;44140;44020;43860;43730;43620;43500} +{b;Jackie Stewart;47020;46840;46720;46600;46480;46380;46260;46180;46090;46010;45940;45820;45660;45530;45420;45300} +{b;Niki Lauda;48820;48640;48520;48400;48280;48180;48060;47980;47890;47810;47740;47620;47460;47330;47220;47100} +{b;John Surtees;50620;50440;50320;50200;50080;49980;49860;49780;49690;49610;49540;49420;49260;49130;49020;48900} +{b;Emerson Fittipaldi;52420;52240;52120;52000;51880;51780;51660;51580;51490;51410;51340;51220;51060;50930;50820;50700} +{b;Nelson Piquet;54220;54040;53920;53800;53680;53580;53460;53380;53290;53210;53140;53020;52860;52730;52620;52500} +{b;Jim Clark;56020;55840;55720;55600;55480;55380;55260;55180;55090;55010;54940;54820;54660;54530;54420;54300} +{b;Jochen Rindt;56920;56740;56620;56500;56380;56280;56160;56080;55990;55910;55840;55720;55560;55430;55320;55200} +{b;Graham Hill;57820;57640;57520;57400;57280;57180;57060;56980;56890;56810;56740;56620;56460;56330;56220;56100} +{b;Ayrton Senna;58720;58540;58420;58300;58180;58080;57960;57880;57790;57710;57640;57520;57360;57230;57120;57000} +{b;Keke Rosberg;59620;59440;59320;59200;59080;58980;58860;58780;58690;58610;58540;58420;58260;58130;58020;57900} +{b;Jack Brabham;60520;60340;60220;60100;59980;59880;59760;59680;59590;59510;59440;59320;59160;59030;58920;58800} +{b;Jackie Stewart;61420;61240;61120;61000;60880;60780;60660;60580;60490;60410;60340;60220;60060;59930;59820;59700} +{b;Niki Lauda;62320;62140;62020;61900;61780;61680;61560;61480;61390;61310;61240;61120;60960;60830;60720;60600} +{b;James Hunt;63220;63040;62920;62800;62680;62580;62460;62380;62290;62210;62140;62020;61860;61730;61620;61500} +{b;Emerson Fittipaldi;64120;63940;63820;63700;63580;63480;63360;63280;63190;63110;63040;62920;62760;62630;62520;62400} +{b;John Surtees;65020;64840;64720;64600;64480;64380;64260;64180;64090;64010;63940;63820;63660;63530;63420;63300} +{b;Nelson Piquet;65920;65740;65620;65500;65380;65280;65160;65080;64990;64910;64840;64720;64560;64430;64320;64200} +{b;Jochen Rindt;66820;66640;66520;66400;66280;66180;66060;65980;65890;65810;65740;65620;65460;65330;65220;65100} +{b;Keke Rosberg;67720;67540;67420;67300;67180;67080;66960;66880;66790;66710;66640;66520;66360;66230;66120;66000} +{b;Graham Hill;68620;68440;68320;68200;68080;67980;67860;67780;67690;67610;67540;67420;67260;67130;67020;66900} +{b;Ayrton Senna;69520;69340;69220;69100;68980;68880;68760;68680;68590;68510;68440;68320;68160;68030;67920;67800} +{b;Jim Clark;70420;70240;70120;70000;69880;69780;69660;69580;69490;69410;69340;69220;69060;68930;68820;68700} +{b;Jackie Stewart;72220;72040;71920;71800;71680;71580;71460;71380;71290;71210;71140;71020;70860;70730;70620;70500} +{b;Niki Lauda;74020;73840;73720;73600;73480;73380;73260;73180;73090;73010;72940;72820;72660;72530;72420;72300} +{b;Jack Brabham;75820;75640;75520;75400;75280;75180;75060;74980;74890;74810;74740;74620;74460;74330;74220;74100} +{b;Emerson Fittipaldi;77620;77440;77320;77200;77080;76980;76860;76780;76690;76610;76540;76420;76260;76130;76020;75900} +{b;John Surtees;79420;79240;79120;79000;78880;78780;78660;78580;78490;78410;78340;78220;78060;77930;77820;77700} +{b;James Hunt;81220;81040;80920;80800;80680;80580;80460;80380;80290;80210;80140;80020;79860;79730;79620;79500} +{b;Nelson Piquet;83020;82840;82720;82600;82480;82380;82260;82180;82090;82010;81940;81820;81660;81530;81420;81300} +{b;Graham Hill;84820;84640;84520;84400;84280;84180;84060;83980;83890;83810;83740;83620;83460;83330;83220;83100} +##### +Italska;Desinfekcni;Lihovar;Za Filtrem;Testovaci;Respiratoru;Petrackovo namesti;Ochrannych stitu;U Zavrene skoly;Prymulova;Remdesivirova;Svepomoci;Infekcni;Na Ventilaci;V Karantene;Spanelska +{f;Kimi Raikkonen;14220;14400;14580;14760;14940;15060;15180;15300;15420;15540;15660;15790;15920;16050;16180;16310} +{f;Jacques Villeneuve;15720;15900;16080;16260;16440;16560;16680;16800;16920;17040;17160;17290;17420;17550;17680;17810} +{f;Jenson Button;17220;17400;17580;17760;17940;18060;18180;18300;18420;18540;18660;18790;18920;19050;19180;19310} +{f;Nico Rosberg;18720;18900;19080;19260;19440;19560;19680;19800;19920;20040;20160;20290;20420;20550;20680;20810} +{f;Damon Hill;20220;20400;20580;20760;20940;21060;21180;21300;21420;21540;21660;21790;21920;22050;22180;22310} +{f;Nigel Mansell;21720;21900;22080;22260;22440;22560;22680;22800;22920;23040;23160;23290;23420;23550;23680;23810} +{f;Sebastian Vettel;22920;23100;23280;23460;23640;23760;23880;24000;24120;24240;24360;24490;24620;24750;24880;25010} +{f;Mika Hakkinen;24120;24300;24480;24660;24840;24960;25080;25200;25320;25440;25560;25690;25820;25950;26080;26210} +{f;Michael Schumacher;25320;25500;25680;25860;26040;26160;26280;26400;26520;26640;26760;26890;27020;27150;27280;27410} +{f;Alain Prost;26520;26700;26880;27060;27240;27360;27480;27600;27720;27840;27960;28090;28220;28350;28480;28610} +{f;Fernando Alonso;27720;27900;28080;28260;28440;28560;28680;28800;28920;29040;29160;29290;29420;29550;29680;29810} +{f;Lewis Hamilton;28920;29100;29280;29460;29640;29760;29880;30000;30120;30240;30360;30490;30620;30750;30880;31010} +{f;Jacques Villeneuve;30120;30300;30480;30660;30840;30960;31080;31200;31320;31440;31560;31690;31820;31950;32080;32210} +{f;Kimi Raikkonen;31320;31500;31680;31860;32040;32160;32280;32400;32520;32640;32760;32890;33020;33150;33280;33410} +{f;Jenson Button;32520;32700;32880;33060;33240;33360;33480;33600;33720;33840;33960;34090;34220;34350;34480;34610} +{f;Damon Hill;33720;33900;34080;34260;34440;34560;34680;34800;34920;35040;35160;35290;35420;35550;35680;35810} +{f;Nigel Mansell;34920;35100;35280;35460;35640;35760;35880;36000;36120;36240;36360;36490;36620;36750;36880;37010} +{f;Nico Rosberg;36120;36300;36480;36660;36840;36960;37080;37200;37320;37440;37560;37690;37820;37950;38080;38210} +{f;Sebastian Vettel;37320;37500;37680;37860;38040;38160;38280;38400;38520;38640;38760;38890;39020;39150;39280;39410} +{f;Fernando Alonso;38520;38700;38880;39060;39240;39360;39480;39600;39720;39840;39960;40090;40220;40350;40480;40610} +{f;Alain Prost;40020;40200;40380;40560;40740;40860;40980;41100;41220;41340;41460;41590;41720;41850;41980;42110} +{f;Mika Hakkinen;41520;41700;41880;42060;42240;42360;42480;42600;42720;42840;42960;43090;43220;43350;43480;43610} +{f;Jacques Villeneuve;43020;43200;43380;43560;43740;43860;43980;44100;44220;44340;44460;44590;44720;44850;44980;45110} +{f;Michael Schumacher;44520;44700;44880;45060;45240;45360;45480;45600;45720;45840;45960;46090;46220;46350;46480;46610} +{f;Kimi Raikkonen;46020;46200;46380;46560;46740;46860;46980;47100;47220;47340;47460;47590;47720;47850;47980;48110} +{f;Lewis Hamilton;47520;47700;47880;48060;48240;48360;48480;48600;48720;48840;48960;49090;49220;49350;49480;49610} +{f;Nigel Mansell;49020;49200;49380;49560;49740;49860;49980;50100;50220;50340;50460;50590;50720;50850;50980;51110} +{f;Nico Rosberg;50520;50700;50880;51060;51240;51360;51480;51600;51720;51840;51960;52090;52220;52350;52480;52610} +{f;Fernando Alonso;52020;52200;52380;52560;52740;52860;52980;53100;53220;53340;53460;53590;53720;53850;53980;54110} +{f;Damon Hill;53520;53700;53880;54060;54240;54360;54480;54600;54720;54840;54960;55090;55220;55350;55480;55610} +{f;Sebastian Vettel;54720;54900;55080;55260;55440;55560;55680;55800;55920;56040;56160;56290;56420;56550;56680;56810} +{f;Jenson Button;55920;56100;56280;56460;56640;56760;56880;57000;57120;57240;57360;57490;57620;57750;57880;58010} +{f;Jacques Villeneuve;57120;57300;57480;57660;57840;57960;58080;58200;58320;58440;58560;58690;58820;58950;59080;59210} +{f;Alain Prost;58320;58500;58680;58860;59040;59160;59280;59400;59520;59640;59760;59890;60020;60150;60280;60410} +{f;Kimi Raikkonen;59520;59700;59880;60060;60240;60360;60480;60600;60720;60840;60960;61090;61220;61350;61480;61610} +{f;Michael Schumacher;60720;60900;61080;61260;61440;61560;61680;61800;61920;62040;62160;62290;62420;62550;62680;62810} +{f;Mika Hakkinen;61920;62100;62280;62460;62640;62760;62880;63000;63120;63240;63360;63490;63620;63750;63880;64010} +{f;Lewis Hamilton;63120;63300;63480;63660;63840;63960;64080;64200;64320;64440;64560;64690;64820;64950;65080;65210} +{f;Nico Rosberg;64320;64500;64680;64860;65040;65160;65280;65400;65520;65640;65760;65890;66020;66150;66280;66410} +{f;Nigel Mansell;65520;65700;65880;66060;66240;66360;66480;66600;66720;66840;66960;67090;67220;67350;67480;67610} +{f;Fernando Alonso;66720;66900;67080;67260;67440;67560;67680;67800;67920;68040;68160;68290;68420;68550;68680;68810} +{f;Sebastian Vettel;67920;68100;68280;68460;68640;68760;68880;69000;69120;69240;69360;69490;69620;69750;69880;70010} +{f;Jacques Villeneuve;69120;69300;69480;69660;69840;69960;70080;70200;70320;70440;70560;70690;70820;70950;71080;71210} +{f;Jenson Button;70320;70500;70680;70860;71040;71160;71280;71400;71520;71640;71760;71890;72020;72150;72280;72410} +{f;Damon Hill;72720;72900;73080;73260;73440;73560;73680;73800;73920;74040;74160;74290;74420;74550;74680;74810} +{f;Alain Prost;75120;75300;75480;75660;75840;75960;76080;76200;76320;76440;76560;76690;76820;76950;77080;77210} +{f;Michael Schumacher;77520;77700;77880;78060;78240;78360;78480;78600;78720;78840;78960;79090;79220;79350;79480;79610} +{f;Lewis Hamilton;79920;80100;80280;80460;80640;80760;80880;81000;81120;81240;81360;81490;81620;81750;81880;82010} +{b;Sebastian Vettel;16730;16550;16370;16190;16010;15890;15770;15650;15530;15410;15290;15160;15030;14900;14770;14640} +{b;Mika Hakkinen;18230;18050;17870;17690;17510;17390;17270;17150;17030;16910;16790;16660;16530;16400;16270;16140} +{b;Alain Prost;19730;19550;19370;19190;19010;18890;18770;18650;18530;18410;18290;18160;18030;17900;17770;17640} +{b;Michael Schumacher;21230;21050;20870;20690;20510;20390;20270;20150;20030;19910;19790;19660;19530;19400;19270;19140} +{b;Fernando Alonso;22730;22550;22370;22190;22010;21890;21770;21650;21530;21410;21290;21160;21030;20900;20770;20640} +{b;Lewis Hamilton;24230;24050;23870;23690;23510;23390;23270;23150;23030;22910;22790;22660;22530;22400;22270;22140} +{b;Kimi Raikkonen;25430;25250;25070;24890;24710;24590;24470;24350;24230;24110;23990;23860;23730;23600;23470;23340} +{b;Jacques Villeneuve;26630;26450;26270;26090;25910;25790;25670;25550;25430;25310;25190;25060;24930;24800;24670;24540} +{b;Jenson Button;27830;27650;27470;27290;27110;26990;26870;26750;26630;26510;26390;26260;26130;26000;25870;25740} +{b;Damon Hill;29030;28850;28670;28490;28310;28190;28070;27950;27830;27710;27590;27460;27330;27200;27070;26940} +{b;Nico Rosberg;30230;30050;29870;29690;29510;29390;29270;29150;29030;28910;28790;28660;28530;28400;28270;28140} +{b;Nigel Mansell;31430;31250;31070;30890;30710;30590;30470;30350;30230;30110;29990;29860;29730;29600;29470;29340} +{b;Sebastian Vettel;32630;32450;32270;32090;31910;31790;31670;31550;31430;31310;31190;31060;30930;30800;30670;30540} +{b;Mika Hakkinen;33830;33650;33470;33290;33110;32990;32870;32750;32630;32510;32390;32260;32130;32000;31870;31740} +{b;Alain Prost;35030;34850;34670;34490;34310;34190;34070;33950;33830;33710;33590;33460;33330;33200;33070;32940} +{b;Fernando Alonso;36230;36050;35870;35690;35510;35390;35270;35150;35030;34910;34790;34660;34530;34400;34270;34140} +{b;Jacques Villeneuve;37430;37250;37070;36890;36710;36590;36470;36350;36230;36110;35990;35860;35730;35600;35470;35340} +{b;Michael Schumacher;38630;38450;38270;38090;37910;37790;37670;37550;37430;37310;37190;37060;36930;36800;36670;36540} +{b;Kimi Raikkonen;39830;39650;39470;39290;39110;38990;38870;38750;38630;38510;38390;38260;38130;38000;37870;37740} +{b;Lewis Hamilton;41030;40850;40670;40490;40310;40190;40070;39950;39830;39710;39590;39460;39330;39200;39070;38940} +{b;Nigel Mansell;42530;42350;42170;41990;41810;41690;41570;41450;41330;41210;41090;40960;40830;40700;40570;40440} +{b;Nico Rosberg;44030;43850;43670;43490;43310;43190;43070;42950;42830;42710;42590;42460;42330;42200;42070;41940} +{b;Damon Hill;45530;45350;45170;44990;44810;44690;44570;44450;44330;44210;44090;43960;43830;43700;43570;43440} +{b;Fernando Alonso;47030;46850;46670;46490;46310;46190;46070;45950;45830;45710;45590;45460;45330;45200;45070;44940} +{b;Jenson Button;48530;48350;48170;47990;47810;47690;47570;47450;47330;47210;47090;46960;46830;46700;46570;46440} +{b;Sebastian Vettel;50030;49850;49670;49490;49310;49190;49070;48950;48830;48710;48590;48460;48330;48200;48070;47940} +{b;Alain Prost;51530;51350;51170;50990;50810;50690;50570;50450;50330;50210;50090;49960;49830;49700;49570;49440} +{b;Mika Hakkinen;53030;52850;52670;52490;52310;52190;52070;51950;51830;51710;51590;51460;51330;51200;51070;50940} +{b;Jacques Villeneuve;54530;54350;54170;53990;53810;53690;53570;53450;53330;53210;53090;52960;52830;52700;52570;52440} +{b;Kimi Raikkonen;56030;55850;55670;55490;55310;55190;55070;54950;54830;54710;54590;54460;54330;54200;54070;53940} +{b;Lewis Hamilton;57230;57050;56870;56690;56510;56390;56270;56150;56030;55910;55790;55660;55530;55400;55270;55140} +{b;Michael Schumacher;58430;58250;58070;57890;57710;57590;57470;57350;57230;57110;56990;56860;56730;56600;56470;56340} +{b;Nigel Mansell;59630;59450;59270;59090;58910;58790;58670;58550;58430;58310;58190;58060;57930;57800;57670;57540} +{b;Nico Rosberg;60830;60650;60470;60290;60110;59990;59870;59750;59630;59510;59390;59260;59130;59000;58870;58740} +{b;Fernando Alonso;62030;61850;61670;61490;61310;61190;61070;60950;60830;60710;60590;60460;60330;60200;60070;59940} +{b;Damon Hill;63230;63050;62870;62690;62510;62390;62270;62150;62030;61910;61790;61660;61530;61400;61270;61140} +{b;Sebastian Vettel;64430;64250;64070;63890;63710;63590;63470;63350;63230;63110;62990;62860;62730;62600;62470;62340} +{b;Jacques Villeneuve;65630;65450;65270;65090;64910;64790;64670;64550;64430;64310;64190;64060;63930;63800;63670;63540} +{b;Jenson Button;66830;66650;66470;66290;66110;65990;65870;65750;65630;65510;65390;65260;65130;65000;64870;64740} +{b;Alain Prost;68030;67850;67670;67490;67310;67190;67070;66950;66830;66710;66590;66460;66330;66200;66070;65940} +{b;Michael Schumacher;69230;69050;68870;68690;68510;68390;68270;68150;68030;67910;67790;67660;67530;67400;67270;67140} +{b;Mika Hakkinen;70430;70250;70070;69890;69710;69590;69470;69350;69230;69110;68990;68860;68730;68600;68470;68340} +{b;Lewis Hamilton;71630;71450;71270;71090;70910;70790;70670;70550;70430;70310;70190;70060;69930;69800;69670;69540} +{b;Kimi Raikkonen;72830;72650;72470;72290;72110;71990;71870;71750;71630;71510;71390;71260;71130;71000;70870;70740} +{b;Nico Rosberg;75230;75050;74870;74690;74510;74390;74270;74150;74030;73910;73790;73660;73530;73400;73270;73140} +{b;Fernando Alonso;77630;77450;77270;77090;76910;76790;76670;76550;76430;76310;76190;76060;75930;75800;75670;75540} +{b;Nigel Mansell;80030;79850;79670;79490;79310;79190;79070;78950;78830;78710;78590;78460;78330;78200;78070;77940} +{b;Sebastian Vettel;82430;82250;82070;81890;81710;81590;81470;81350;81230;81110;80990;80860;80730;80600;80470;80340} +##### +Vitkov;Dobesova alej;Navratilova;Nentvichova;Studentska;Patova trida;Petrackovo namesti;Pani Vyborne;Maternovy sady +{f;Alberto Ascari;17100;17235;17370;17505;17640;17775;17910;18045;18180} +{f;Juan M. Fangio;19500;19635;19770;19905;20040;20175;20310;20445;20580} +{f;Giuseppe Farina;21900;22035;22170;22305;22440;22575;22710;22845;22980} +{f;Jody Scheckter;23100;23235;23370;23505;23640;23775;23910;24045;24180} +{f;Alan Jones;24300;24435;24570;24705;24840;24975;25110;25245;25380} +{f;Mike Hawthorn;25500;25635;25770;25905;26040;26175;26310;26445;26580} +{f;Denny Hulme;26700;26835;26970;27105;27240;27375;27510;27645;27780} +{f;Alberto Ascari;27900;28035;28170;28305;28440;28575;28710;28845;28980} +{f;Mario Andretti;29100;29235;29370;29505;29640;29775;29910;30045;30180} +{f;Phil Hill;30300;30435;30570;30705;30840;30975;31110;31245;31380} +{f;Jody Scheckter;31500;31635;31770;31905;32040;32175;32310;32445;32580} +{f;Giuseppe Farina;32700;32835;32970;33105;33240;33375;33510;33645;33780} +{f;Alan Jones;33900;34035;34170;34305;34440;34575;34710;34845;34980} +{f;Denny Hulme;35100;35235;35370;35505;35640;35775;35910;36045;36180} +{f;Phil Hill;37500;37635;37770;37905;38040;38175;38310;38445;38580} +{f;Mike Hawthorn;39900;40035;40170;40305;40440;40575;40710;40845;40980} +{f;Alberto Ascari;42300;42435;42570;42705;42840;42975;43110;43245;43380} +{f;Juan M. Fangio;44700;44835;44970;45105;45240;45375;45510;45645;45780} +{f;Mario Andretti;47100;47235;47370;47505;47640;47775;47910;48045;48180} +{f;Giuseppe Farina;49500;49635;49770;49905;50040;50175;50310;50445;50580} +{f;Denny Hulme;51900;52035;52170;52305;52440;52575;52710;52845;52980} +{f;Alan Jones;54300;54435;54570;54705;54840;54975;55110;55245;55380} +{f;Phil Hill;56700;56835;56970;57105;57240;57375;57510;57645;57780} +{f;Alberto Ascari;57900;58035;58170;58305;58440;58575;58710;58845;58980} +{f;Mike Hawthorn;59100;59235;59370;59505;59640;59775;59910;60045;60180} +{f;Jody Scheckter;60300;60435;60570;60705;60840;60975;61110;61245;61380} +{f;Juan M. Fangio;61500;61635;61770;61905;62040;62175;62310;62445;62580} +{f;Mario Andretti;62700;62835;62970;63105;63240;63375;63510;63645;63780} +{f;Giuseppe Farina;63900;64035;64170;64305;64440;64575;64710;64845;64980} +{f;Alan Jones;65100;65235;65370;65505;65640;65775;65910;66045;66180} +{f;Alberto Ascari;66300;66435;66570;66705;66840;66975;67110;67245;67380} +{f;Phil Hill;67500;67635;67770;67905;68040;68175;68310;68445;68580} +{f;Mike Hawthorn;68700;68835;68970;69105;69240;69375;69510;69645;69780} +{f;Denny Hulme;69900;70035;70170;70305;70440;70575;70710;70845;70980} +{f;Juan M. Fangio;71100;71235;71370;71505;71640;71775;71910;72045;72180} +{f;Mario Andretti;72300;72435;72570;72705;72840;72975;73110;73245;73380} +{f;Jody Scheckter;73500;73635;73770;73905;74040;74175;74310;74445;74580} +{f;Giuseppe Farina;74700;74835;74970;75105;75240;75375;75510;75645;75780} +{f;Alberto Ascari;77100;77235;77370;77505;77640;77775;77910;78045;78180} +{f;Alan Jones;79500;79635;79770;79905;80040;80175;80310;80445;80580} +{f;Phil Hill;81900;82035;82170;82305;82440;82575;82710;82845;82980} +{b;Mike Hawthorn;19080;18945;18810;18675;18540;18405;18270;18135;18000} +{b;Denny Hulme;21480;21345;21210;21075;20940;20805;20670;20535;20400} +{b;Mario Andretti;23880;23745;23610;23475;23340;23205;23070;22935;22800} +{b;Alberto Ascari;25080;24945;24810;24675;24540;24405;24270;24135;24000} +{b;Giuseppe Farina;26280;26145;26010;25875;25740;25605;25470;25335;25200} +{b;Phil Hill;27480;27345;27210;27075;26940;26805;26670;26535;26400} +{b;Alan Jones;28680;28545;28410;28275;28140;28005;27870;27735;27600} +{b;Jody Scheckter;29880;29745;29610;29475;29340;29205;29070;28935;28800} +{b;Mike Hawthorn;31080;30945;30810;30675;30540;30405;30270;30135;30000} +{b;Denny Hulme;32280;32145;32010;31875;31740;31605;31470;31335;31200} +{b;Alberto Ascari;33480;33345;33210;33075;32940;32805;32670;32535;32400} +{b;Phil Hill;34680;34545;34410;34275;34140;34005;33870;33735;33600} +{b;Mario Andretti;35880;35745;35610;35475;35340;35205;35070;34935;34800} +{b;Juan M. Fangio;37080;36945;36810;36675;36540;36405;36270;36135;36000} +{b;Giuseppe Farina;39480;39345;39210;39075;38940;38805;38670;38535;38400} +{b;Jody Scheckter;41880;41745;41610;41475;41340;41205;41070;40935;40800} +{b;Denny Hulme;44280;44145;44010;43875;43740;43605;43470;43335;43200} +{b;Alan Jones;46680;46545;46410;46275;46140;46005;45870;45735;45600} +{b;Phil Hill;49080;48945;48810;48675;48540;48405;48270;48135;48000} +{b;Mike Hawthorn;51480;51345;51210;51075;50940;50805;50670;50535;50400} +{b;Alberto Ascari;53880;53745;53610;53475;53340;53205;53070;52935;52800} +{b;Juan M. Fangio;56280;56145;56010;55875;55740;55605;55470;55335;55200} +{b;Mario Andretti;58680;58545;58410;58275;58140;58005;57870;57735;57600} +{b;Giuseppe Farina;59880;59745;59610;59475;59340;59205;59070;58935;58800} +{b;Denny Hulme;61080;60945;60810;60675;60540;60405;60270;60135;60000} +{b;Alan Jones;62280;62145;62010;61875;61740;61605;61470;61335;61200} +{b;Phil Hill;63480;63345;63210;63075;62940;62805;62670;62535;62400} +{b;Alberto Ascari;64680;64545;64410;64275;64140;64005;63870;63735;63600} +{b;Mike Hawthorn;65880;65745;65610;65475;65340;65205;65070;64935;64800} +{b;Jody Scheckter;67080;66945;66810;66675;66540;66405;66270;66135;66000} +{b;Juan M. Fangio;68280;68145;68010;67875;67740;67605;67470;67335;67200} +{b;Giuseppe Farina;69480;69345;69210;69075;68940;68805;68670;68535;68400} +{b;Mario Andretti;70680;70545;70410;70275;70140;70005;69870;69735;69600} +{b;Alberto Ascari;71880;71745;71610;71475;71340;71205;71070;70935;70800} +{b;Alan Jones;73080;72945;72810;72675;72540;72405;72270;72135;72000} +{b;Phil Hill;74280;74145;74010;73875;73740;73605;73470;73335;73200} +{b;Mike Hawthorn;75480;75345;75210;75075;74940;74805;74670;74535;74400} +{b;Juan M. Fangio;76680;76545;76410;76275;76140;76005;75870;75735;75600} +{b;Denny Hulme;79080;78945;78810;78675;78540;78405;78270;78135;78000} +{b;Jody Scheckter;81480;81345;81210;81075;80940;80805;80670;80535;80400} +{b;Alberto Ascari;83880;83745;83610;83475;83340;83205;83070;82935;82800} +##### +Svepomoci;Dobrovolniku;Lekaru;Svadlen;Cesko-cinskeho pratelstvi;Bezrouskova;Papirenske zavody;Posledni role +{f;Henri Toivonen;21900;22035;22170;22305;22440;22575;22710;22845} +{f;Stig Blomqvist;23400;23535;23670;23805;23940;24075;24210;24345} +{f;Ari Vatanen;24900;25035;25170;25305;25440;25575;25710;25845} +{f;Richard Burns;26400;26535;26670;26805;26940;27075;27210;27345} +{f;Petter Solberg;27900;28035;28170;28305;28440;28575;28710;28845} +{f;Timo Salonen;29400;29535;29670;29805;29940;30075;30210;30345} +{f;Michele Mouton;30900;31035;31170;31305;31440;31575;31710;31845} +{f;Carlos Sainz;32400;32535;32670;32805;32940;33075;33210;33345} +{f;Miki Biasion;33900;34035;34170;34305;34440;34575;34710;34845} +{f;Henri Toivonen;35400;35535;35670;35805;35940;36075;36210;36345} +{f;Ari Vatanen;36900;37035;37170;37305;37440;37575;37710;37845} +{f;Stig Blomqvist;38400;38535;38670;38805;38940;39075;39210;39345} +{f;Richard Burns;39900;40035;40170;40305;40440;40575;40710;40845} +{f;Petter Solberg;41400;41535;41670;41805;41940;42075;42210;42345} +{f;Timo Salonen;42900;43035;43170;43305;43440;43575;43710;43845} +{f;Michele Mouton;44400;44535;44670;44805;44940;45075;45210;45345} +{f;Carlos Sainz;45900;46035;46170;46305;46440;46575;46710;46845} +{f;Ari Vatanen;47400;47535;47670;47805;47940;48075;48210;48345} +{f;Henri Toivonen;48900;49035;49170;49305;49440;49575;49710;49845} +{f;Miki Biasion;50400;50535;50670;50805;50940;51075;51210;51345} +{f;Stig Blomqvist;51900;52035;52170;52305;52440;52575;52710;52845} +{f;Richard Burns;53400;53535;53670;53805;53940;54075;54210;54345} +{f;Timo Salonen;54900;55035;55170;55305;55440;55575;55710;55845} +{f;Petter Solberg;56400;56535;56670;56805;56940;57075;57210;57345} +{f;Michele Mouton;57900;58035;58170;58305;58440;58575;58710;58845} +{f;Ari Vatanen;59400;59535;59670;59805;59940;60075;60210;60345} +{f;Carlos Sainz;60900;61035;61170;61305;61440;61575;61710;61845} +{f;Henri Toivonen;62400;62535;62670;62805;62940;63075;63210;63345} +{f;Miki Biasion;63900;64035;64170;64305;64440;64575;64710;64845} +{f;Stig Blomqvist;65400;65535;65670;65805;65940;66075;66210;66345} +{f;Richard Burns;66900;67035;67170;67305;67440;67575;67710;67845} +{f;Timo Salonen;68400;68535;68670;68805;68940;69075;69210;69345} +{f;Carlos Sainz;69900;70035;70170;70305;70440;70575;70710;70845} +{f;Michele Mouton;71400;71535;71670;71805;71940;72075;72210;72345} +{f;Petter Solberg;72900;73035;73170;73305;73440;73575;73710;73845} +{f;Henri Toivonen;74400;74535;74670;74805;74940;75075;75210;75345} +{f;Miki Biasion;75900;76035;76170;76305;76440;76575;76710;76845} +{f;Stig Blomqvist;77400;77535;77670;77805;77940;78075;78210;78345} +{f;Timo Salonen;78900;79035;79170;79305;79440;79575;79710;79845} +{b;Timo Salonen;23145;23010;22875;22740;22605;22470;22335;22200} +{b;Carlos Sainz;24645;24510;24375;24240;24105;23970;23835;23700} +{b;Miki Biasion;26145;26010;25875;25740;25605;25470;25335;25200} +{b;Michele Mouton;27645;27510;27375;27240;27105;26970;26835;26700} +{b;Henri Toivonen;29145;29010;28875;28740;28605;28470;28335;28200} +{b;Stig Blomqvist;30645;30510;30375;30240;30105;29970;29835;29700} +{b;Richard Burns;32145;32010;31875;31740;31605;31470;31335;31200} +{b;Ari Vatanen;33645;33510;33375;33240;33105;32970;32835;32700} +{b;Petter Solberg;35145;35010;34875;34740;34605;34470;34335;34200} +{b;Michele Mouton;36645;36510;36375;36240;36105;35970;35835;35700} +{b;Timo Salonen;38145;38010;37875;37740;37605;37470;37335;37200} +{b;Carlos Sainz;39645;39510;39375;39240;39105;38970;38835;38700} +{b;Ari Vatanen;41145;41010;40875;40740;40605;40470;40335;40200} +{b;Miki Biasion;42645;42510;42375;42240;42105;41970;41835;41700} +{b;Henri Toivonen;44145;44010;43875;43740;43605;43470;43335;43200} +{b;Stig Blomqvist;45645;45510;45375;45240;45105;44970;44835;44700} +{b;Timo Salonen;47145;47010;46875;46740;46605;46470;46335;46200} +{b;Richard Burns;48645;48510;48375;48240;48105;47970;47835;47700} +{b;Petter Solberg;50145;50010;49875;49740;49605;49470;49335;49200} +{b;Michele Mouton;51645;51510;51375;51240;51105;50970;50835;50700} +{b;Carlos Sainz;53145;53010;52875;52740;52605;52470;52335;52200} +{b;Ari Vatanen;54645;54510;54375;54240;54105;53970;53835;53700} +{b;Henri Toivonen;56145;56010;55875;55740;55605;55470;55335;55200} +{b;Miki Biasion;57645;57510;57375;57240;57105;56970;56835;56700} +{b;Stig Blomqvist;59145;59010;58875;58740;58605;58470;58335;58200} +{b;Richard Burns;60645;60510;60375;60240;60105;59970;59835;59700} +{b;Timo Salonen;62145;62010;61875;61740;61605;61470;61335;61200} +{b;Petter Solberg;63645;63510;63375;63240;63105;62970;62835;62700} +{b;Carlos Sainz;65145;65010;64875;64740;64605;64470;64335;64200} +{b;Michele Mouton;66645;66510;66375;66240;66105;65970;65835;65700} +{b;Miki Biasion;68145;68010;67875;67740;67605;67470;67335;67200} +{b;Henri Toivonen;69645;69510;69375;69240;69105;68970;68835;68700} +{b;Stig Blomqvist;71145;71010;70875;70740;70605;70470;70335;70200} +{b;Ari Vatanen;72645;72510;72375;72240;72105;71970;71835;71700} +{b;Richard Burns;74145;74010;73875;73740;73605;73470;73335;73200} +{b;Timo Salonen;75645;75510;75375;75240;75105;74970;74835;74700} +{b;Carlos Sainz;77145;77010;76875;76740;76605;76470;76335;76200} +{b;Henri Toivonen;78645;78510;78375;78240;78105;77970;77835;77700} +{b;Miki Biasion;80145;80010;79875;79740;79605;79470;79335;79200} +##### diff --git a/02/out1.txt b/02/out1.txt new file mode 100644 index 0000000..c49f9ee --- /dev/null +++ b/02/out1.txt @@ -0,0 +1,122 @@ +Loaded 45 names from driver_list.txt. +Loaded network from network.txt. ++------------------------------------------------------------------------------+ +| Petrackovo namesti Line: 1 | ++--------------------------------------++--------------------------------------+ +| To: Spanelska || To: Italska | ++----+---------------------------------++----+---------------------------------+ +| 00 | || 00 | | +| 01 | || 01 | | +| 02 | || 02 | | +| 03 | || 03 | | +| 04 | 13 38 || 04 | 22 47 | +| 05 | 03 28 53 || 05 | 12 37 | +| 06 | 18 38 58 || 06 | 02 27 47 | +| 07 | 18 38 58 || 07 | 07 27 47 | +| 08 | 18 38 58 || 08 | 07 27 47 | +| 09 | 18 38 58 || 09 | 07 27 47 | +| 10 | 18 38 58 || 10 | 07 27 47 | +| 11 | 23 48 || 11 | 07 32 57 | +| 12 | 13 38 || 12 | 22 47 | +| 13 | 03 28 53 || 13 | 12 37 | +| 14 | 18 43 || 14 | 02 27 52 | +| 15 | 08 28 48 || 15 | 17 37 57 | +| 16 | 08 28 48 || 16 | 17 37 57 | +| 17 | 08 28 48 || 17 | 17 37 57 | +| 18 | 08 28 48 || 18 | 17 37 57 | +| 19 | 08 28 48 || 19 | 17 37 57 | +| 20 | 28 || 20 | 37 | +| 21 | 08 48 || 21 | 17 57 | +| 22 | 28 || 22 | 37 | +| 23 | || 23 | | ++----+---------------------------------++----+---------------------------------+ ++------------------------------------------------------------------------------+ +| Petrackovo namesti Line: 2 | ++--------------------------------------++--------------------------------------+ +| To: Maternovy sady || To: Vitkov | ++----+---------------------------------++----+---------------------------------+ +| 00 | || 00 | | +| 01 | || 01 | | +| 02 | || 02 | | +| 03 | || 03 | | +| 04 | 58 || 04 | | +| 05 | 38 || 05 | 04 44 | +| 06 | 18 38 58 || 06 | 24 44 | +| 07 | 18 38 58 || 07 | 04 24 44 | +| 08 | 18 38 58 || 08 | 04 24 44 | +| 09 | 18 38 58 || 09 | 04 24 44 | +| 10 | 38 || 10 | 04 44 | +| 11 | 18 58 || 11 | 24 | +| 12 | 38 || 12 | 04 44 | +| 13 | 18 58 || 13 | 24 | +| 14 | 38 || 14 | 04 44 | +| 15 | 18 58 || 15 | 24 | +| 16 | 18 38 58 || 16 | 04 24 44 | +| 17 | 18 38 58 || 17 | 04 24 44 | +| 18 | 18 38 58 || 18 | 04 24 44 | +| 19 | 18 38 58 || 19 | 04 24 44 | +| 20 | 18 38 58 || 20 | 04 24 44 | +| 21 | 38 || 21 | 04 44 | +| 22 | 18 58 || 22 | 24 | +| 23 | || 23 | 04 | ++----+---------------------------------++----+---------------------------------+ ++------------------------------------------------------------------------------+ +| Vitkov Line: 2 | ++--------------------------------------++--------------------------------------+ +| To: Maternovy sady || To: Vitkov | ++----+---------------------------------++----+---------------------------------+ +| 00 | || 00 | | +| 01 | || 01 | | +| 02 | || 02 | | +| 03 | || 03 | | +| 04 | 45 || 04 | | +| 05 | 25 || 05 | 18 58 | +| 06 | 05 25 45 || 06 | 38 58 | +| 07 | 05 25 45 || 07 | 18 38 58 | +| 08 | 05 25 45 || 08 | 18 38 58 | +| 09 | 05 25 45 || 09 | 18 38 58 | +| 10 | 25 || 10 | 18 58 | +| 11 | 05 45 || 11 | 38 | +| 12 | 25 || 12 | 18 58 | +| 13 | 05 45 || 13 | 38 | +| 14 | 25 || 14 | 18 58 | +| 15 | 05 45 || 15 | 38 | +| 16 | 05 25 45 || 16 | 18 38 58 | +| 17 | 05 25 45 || 17 | 18 38 58 | +| 18 | 05 25 45 || 18 | 18 38 58 | +| 19 | 05 25 45 || 19 | 18 38 58 | +| 20 | 05 25 45 || 20 | 18 38 58 | +| 21 | 25 || 21 | 18 58 | +| 22 | 05 45 || 22 | 38 | +| 23 | || 23 | 18 | ++----+---------------------------------++----+---------------------------------+ ++------------------------------------------------------------------------------+ +| U Bufetu Line: 0 | ++--------------------------------------++--------------------------------------+ +| To: Studijni odd. || To: U Petnika | ++----+---------------------------------++----+---------------------------------+ +| 00 | || 00 | | +| 01 | || 01 | | +| 02 | || 02 | | +| 03 | || 03 | | +| 04 | 20 50 || 04 | 13 43 | +| 05 | 20 50 || 05 | 13 43 | +| 06 | 20 35 50 || 06 | 13 28 43 58 | +| 07 | 05 20 35 50 || 07 | 13 28 43 58 | +| 08 | 05 20 35 50 || 08 | 13 28 43 58 | +| 09 | 05 20 35 50 || 09 | 13 28 43 58 | +| 10 | 05 20 50 || 10 | 13 43 | +| 11 | 20 50 || 11 | 13 43 | +| 12 | 20 50 || 12 | 13 43 | +| 13 | 20 50 || 13 | 13 43 | +| 14 | 20 50 || 14 | 13 43 | +| 15 | 20 35 50 || 15 | 13 28 43 58 | +| 16 | 05 20 35 50 || 16 | 13 28 43 58 | +| 17 | 05 20 35 50 || 17 | 13 28 43 58 | +| 18 | 05 20 35 50 || 18 | 13 28 43 58 | +| 19 | 05 20 50 || 19 | 13 43 | +| 20 | 20 50 || 20 | 13 43 | +| 21 | 20 50 || 21 | 13 43 | +| 22 | 20 50 || 22 | 13 43 | +| 23 | 20 || 23 | 13 | ++----+---------------------------------++----+---------------------------------+ diff --git a/02/out2.txt b/02/out2.txt new file mode 100644 index 0000000..87f9303 --- /dev/null +++ b/02/out2.txt @@ -0,0 +1,75 @@ +Loaded 45 names from driver_list.txt. +Loaded network from network.txt. ++------------------------------------------------------------------------------+ +| Line: 0 | ++---+----+-----------------------------++---+----+-----------------------------+ +| d | rT | ==> || d | rT | <== | ++---+----+-----------------------------++---+----+-----------------------------+ +| 0 | 00 | U Petnika || 0 | 00 | Studijni odd. | +| 3 | 03 | Pred Menzou || 2 | 02 | Rektorat | +| 2 | 05 | Matematiku || 1 | 03 | Dekanat | +| 2 | 07 | Fyziku || 2 | 06 | Knihovnicka | +| 2 | 09 | Radioelektronicka || 2 | 08 | U Bufetu | +| 1 | 10 | Elektromagnetickeho pole || 2 | 10 | U Zavrene skoly | +| 2 | 12 | Mikroelektronicka || 1 | 11 | Nosterova | +| 1 | 14 | Studentska || 1 | 13 | Paterova | +| 1 | 15 | Paterova || 1 | 14 | Studentska | +| 1 | 16 | Nosterova || 1 | 16 | Mikroelektronicka | +| 1 | 18 | U Zavrene skoly || 2 | 18 | Elektromagnetickeho pole | +| 2 | 20 | U Bufetu || 1 | 19 | Radioelektronicka | +| 2 | 22 | Knihovnicka || 2 | 21 | Fyziku | +| 2 | 24 | Dekanat || 2 | 23 | Matematiku | +| 1 | 26 | Rektorat || 2 | 25 | Pred Menzou | +| 2 | 28 | Studijni odd. || 3 | 28 | U Petnika | ++---+----+-----------------------------++---+----+-----------------------------+ ++------------------------------------------------------------------------------+ +| Line: 1 | ++---+----+-----------------------------++---+----+-----------------------------+ +| d | rT | ==> || d | rT | <== | ++---+----+-----------------------------++---+----+-----------------------------+ +| 0 | 00 | Italska || 0 | 00 | Spanelska | +| 3 | 03 | Desinfekcni || 2 | 02 | V Karantene | +| 3 | 06 | Lihovar || 2 | 04 | Na Ventilaci | +| 3 | 09 | Za Filtrem || 2 | 06 | Infekcni | +| 3 | 12 | Testovaci || 2 | 08 | Svepomoci | +| 2 | 14 | Respiratoru || 2 | 10 | Remdesivirova | +| 2 | 16 | Petrackovo namesti || 2 | 12 | Prymulova | +| 2 | 18 | Ochrannych stitu || 2 | 14 | U Zavrene skoly | +| 2 | 20 | U Zavrene skoly || 2 | 16 | Ochrannych stitu | +| 2 | 22 | Prymulova || 2 | 18 | Petrackovo namesti | +| 2 | 24 | Remdesivirova || 2 | 20 | Respiratoru | +| 2 | 26 | Svepomoci || 2 | 22 | Testovaci | +| 2 | 28 | Infekcni || 3 | 25 | Za Filtrem | +| 2 | 30 | Na Ventilaci || 3 | 28 | Lihovar | +| 2 | 32 | V Karantene || 3 | 31 | Desinfekcni | +| 2 | 34 | Spanelska || 3 | 34 | Italska | ++---+----+-----------------------------++---+----+-----------------------------+ ++------------------------------------------------------------------------------+ +| Line: 2 | ++---+----+-----------------------------++---+----+-----------------------------+ +| d | rT | ==> || d | rT | <== | ++---+----+-----------------------------++---+----+-----------------------------+ +| 0 | 00 | Vitkov || 0 | 00 | Maternovy sady | +| 2 | 02 | Dobesova alej || 2 | 02 | Pani Vyborne | +| 2 | 04 | Navratilova || 2 | 04 | Petrackovo namesti | +| 2 | 06 | Nentvichova || 2 | 06 | Patova trida | +| 2 | 09 | Studentska || 2 | 09 | Studentska | +| 2 | 11 | Patova trida || 2 | 11 | Nentvichova | +| 2 | 13 | Petrackovo namesti || 2 | 13 | Navratilova | +| 2 | 15 | Pani Vyborne || 2 | 15 | Dobesova alej | +| 2 | 18 | Maternovy sady || 2 | 18 | Vitkov | ++---+----+-----------------------------++---+----+-----------------------------+ ++------------------------------------------------------------------------------+ +| Line: 3 | ++---+----+-----------------------------++---+----+-----------------------------+ +| d | rT | ==> || d | rT | <== | ++---+----+-----------------------------++---+----+-----------------------------+ +| 0 | 00 | Svepomoci || 0 | 00 | Posledni role | +| 2 | 02 | Dobrovolniku || 2 | 02 | Papirenske zavody | +| 2 | 04 | Lekaru || 2 | 04 | Bezrouskova | +| 2 | 06 | Svadlen || 2 | 06 | Cesko-cinskeho pratelstvi | +| 2 | 09 | Cesko-cinskeho pratelstvi || 2 | 09 | Svadlen | +| 2 | 11 | Bezrouskova || 2 | 11 | Lekaru | +| 2 | 13 | Papirenske zavody || 2 | 13 | Dobrovolniku | +| 2 | 15 | Posledni role || 2 | 15 | Svepomoci | ++---+----+-----------------------------++---+----+-----------------------------+ diff --git a/02/out3.txt b/02/out3.txt new file mode 100644 index 0000000..693d26e --- /dev/null +++ b/02/out3.txt @@ -0,0 +1,51 @@ +Loaded 45 names from driver_list.txt. +Loaded network from network.txt. ++----------------------+---+----+-----+ +| Driver Name | L | nC | nSt | ++----------------------+---+----+-----+ +| Nelson Piquet | 0 | 11 | 176 | +| Ayrton Senna | 0 | 10 | 160 | +| Graham Hill | 0 | 10 | 160 | +| Jackie Stewart | 0 | 10 | 160 | +| Niki Lauda | 0 | 10 | 160 | +| Emerson Fittipaldi | 0 | 9 | 144 | +| Fernando Alonso | 1 | 9 | 144 | +| Jacques Villeneuve | 1 | 9 | 144 | +| Jim Clark | 0 | 9 | 144 | +| Keke Rosberg | 0 | 9 | 144 | +| Sebastian Vettel | 1 | 9 | 144 | +| Alain Prost | 1 | 8 | 128 | +| Jack Brabham | 0 | 8 | 128 | +| James Hunt | 0 | 8 | 128 | +| Jochen Rindt | 0 | 8 | 128 | +| John Surtees | 0 | 8 | 128 | +| Kimi Raikkonen | 1 | 8 | 128 | +| Lewis Hamilton | 1 | 8 | 128 | +| Michael Schumacher | 1 | 8 | 128 | +| Nico Rosberg | 1 | 8 | 128 | +| Nigel Mansell | 1 | 8 | 128 | +| Damon Hill | 1 | 7 | 112 | +| Jenson Button | 1 | 7 | 112 | +| Mika Hakkinen | 1 | 7 | 112 | +| Alberto Ascari | 2 | 12 | 108 | +| Phil Hill | 2 | 10 | 90 | +| Alan Jones | 2 | 9 | 81 | +| Denny Hulme | 2 | 9 | 81 | +| Giuseppe Farina | 2 | 9 | 81 | +| Mike Hawthorn | 2 | 9 | 81 | +| Henri Toivonen | 3 | 10 | 80 | +| Timo Salonen | 3 | 10 | 80 | +| Carlos Sainz | 3 | 9 | 72 | +| Jody Scheckter | 2 | 8 | 72 | +| Juan M. Fangio | 2 | 8 | 72 | +| Mario Andretti | 2 | 8 | 72 | +| Miki Biasion | 3 | 9 | 72 | +| Stig Blomqvist | 3 | 9 | 72 | +| Ari Vatanen | 3 | 8 | 64 | +| Michele Mouton | 3 | 8 | 64 | +| Richard Burns | 3 | 8 | 64 | +| Petter Solberg | 3 | 7 | 56 | +| Bruce McLaren | X | XX | XXX | +| Eddie Irvine | X | XX | XXX | +| Jean Alesi | X | XX | XXX | ++----------------------+---+----+-----+ diff --git a/02/readme.txt b/02/readme.txt new file mode 100644 index 0000000..dd4b640 --- /dev/null +++ b/02/readme.txt @@ -0,0 +1,18 @@ +Readme for PPC-2021 HW02: + +How to compile: +g++ -g main.cpp doprava.cpp -o main -std=c++17 -Wall -Wpedantic +or use makefile: +make all + +How to test: +.\main --schedule "Petrackovo namesti" "Vitkov" "U Bufetu" > out1.txt +.\main --line-routing > out2.txt +.\main --driver-stops > out3.txt +or use makefile: +make run + + +Feel free to change the stop names in test #1. The names of the stations are available in the provided file out2.txt. +Alternative variant of calling --schedule option is: +.\main --schedule Petrackovo_namesti Vitkov U_Bufetu > out1.txt diff --git a/HW01.cpp b/HW01.cpp deleted file mode 100644 index e69de29..0000000 -- GitLab From dd9468a0a3b54a4d1b3c7e25b674688d71e54791 Mon Sep 17 00:00:00 2001 From: Marek Strympl <strymmar@fel.cvut.cz> Date: Fri, 21 Mar 2025 17:30:13 +0100 Subject: [PATCH 5/5] Bonus for HW01 added --- 01/template/.vscode/settings.json | 5 ++ 01/template/idk.out | 28 +++++---- 01/template/main.cpp | 98 ++++++++++++++++++++++++------ 01/template/main.zip | Bin 3304 -> 3638 bytes 01/template/working_basic.zip | Bin 0 -> 3304 bytes 5 files changed, 100 insertions(+), 31 deletions(-) create mode 100644 01/template/.vscode/settings.json create mode 100644 01/template/working_basic.zip diff --git a/01/template/.vscode/settings.json b/01/template/.vscode/settings.json new file mode 100644 index 0000000..930ff05 --- /dev/null +++ b/01/template/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "*.tcc": "cpp" + } +} \ No newline at end of file diff --git a/01/template/idk.out b/01/template/idk.out index 2721437..c705e99 100644 --- a/01/template/idk.out +++ b/01/template/idk.out @@ -1,12 +1,16 @@ -config.min=-99 -config.max=150 -config.width=3 -config.align=left - -+-----+-----+-----+-----+-----+-----+ -| | A | B | C | D | E | -+-----+-----+-----+-----+-----+-----+ -| 1 | 10 | 20 | 20 | 50 | | -+-----+-----+-----+-----+-----+-----+ -| 2 | -10 | -20 | -30 | -40 | -50 | -+-----+-----+-----+-----+-----+-----+ +config.min=-99 +config.max=150 +config.width=3 +config.align=left +config.min=-99 +config.max=150 +config.width=3 +config.align=left + ++-----+-----+-----+-----+-----+-----+ +| | A | B | C | D | E | ++-----+-----+-----+-----+-----+-----+ +| 1 | 10 | 20 | 20 | 50 | | ++-----+-----+-----+-----+-----+-----+ +| 2 | -10 | -20 | -30 | -40 | -50 | ++-----+-----+-----+-----+-----+-----+ diff --git a/01/template/main.cpp b/01/template/main.cpp index 7d67cb2..b3db266 100644 --- a/01/template/main.cpp +++ b/01/template/main.cpp @@ -18,6 +18,8 @@ bool is_cell_too_short(int number, int width); int main(){ int Marek = 0; + int stretch_type = 10; + bool is_print_header = true; // variable for decoded config config_t config; @@ -45,6 +47,11 @@ int main(){ new_config.type = "align"; new_config.value = "left"; new_config.valid = true; + my_configs.push_back(new_config); + + new_config.type = "header"; + new_config.value = "1"; + new_config.valid = true; my_configs.push_back(new_config); /* READING CONFIG @@ -59,9 +66,11 @@ int main(){ for (std::size_t i = 0; i < my_configs.size(); i++) { if (config.type.compare(my_configs[i].type) == 0) { my_configs[i].value = config.value; - } else { - // TODO MAKE NEW CONFIG - // config_t tmp_config = + } else if (i == my_configs.size() - 1) { + if (config.type.compare("stretch") == 0) { + stretch_type = stoi(config.value); + my_configs.push_back(config); + } } } } @@ -79,6 +88,10 @@ int main(){ return INVALID_CONFIGURATION; } + if (stoi(my_configs[4].value) == 0) { + is_print_header = false; + } + /* READING THE TABLE *****************************************************************************************/ @@ -103,7 +116,8 @@ int main(){ std::cerr << "Out of range\n"; return OUT_OF_RANGE; } - if (is_cell_too_short(number, width)) { + // Checks cell size + if (is_cell_too_short(number, width) && (stretch_type == 10)) { std::cerr << "Cell is too short\n"; return CELL_IS_TOO_SHORT; } @@ -126,7 +140,7 @@ int main(){ std::cerr << "Invalid input\n"; return INVALID_INPUT; } - if (is_cell_too_short(sum, width)) { + if (is_cell_too_short(sum, width) && (stretch_type == 10)) { std::cerr << "Cell is too short\n"; return CELL_IS_TOO_SHORT; } @@ -138,11 +152,29 @@ int main(){ /***************************************************************************************/ + if (stretch_type == 1) { + // Find the longest number + int length_longest_number = 0; + for (const auto& row : values) { + for (const auto& cell : row) { + int cell_length = std::to_string(std::abs(cell)).length(); + if (cell_length > length_longest_number) { + length_longest_number = cell_length; + } + } + } + width = length_longest_number; + my_configs[2].value = std::to_string(width); + } /* PRINTING CONFIG INFO ***************************************************************************************/ for (const auto& config : my_configs) { - std::cout << "config." << config.type << "=" << config.value << "\n"; + if (config.type.compare("header") == 0 && config.value.compare("1") == 0) { + + } else { + std::cout << "config." << config.type << "=" << config.value << "\n"; + } } std::cout << "\n"; @@ -158,36 +190,64 @@ int main(){ /* PRINTING TABLE ***************************************************************************************/ - - print_border_line(max_length, width); + if (my_configs[3].value == "left") { std::cout << std::left; } - std::cout << "|" << std::string(width + 2, ' '); + // If header==1 + if (is_print_header) { + print_border_line(max_length + 1, width); - std::cout << "|"; - for (char i = 'A'; i < 'A' + static_cast<char>(max_length); i++) { - std::cout << " " << std::setw(width) << i << " |"; - } - std::cout << "\n"; + std::cout << "|" << std::string(width + 2, ' '); - print_border_line(max_length, width); + std::cout << "|"; + for (char i = 'A'; i < 'A' + static_cast<char>(max_length); i++) { + std::cout << " " << std::setw(width) << i << " |"; + } + std::cout << "\n"; + } + if (is_print_header) { + print_border_line(max_length + 1, width); + } else { + print_border_line(max_length, width); + } size_t rows_amount = values.size(); for (size_t row = 0; row < rows_amount; row++) { size_t cols_amount = values[row].size(); - std::cout << "| " << std::setw(width) << row + 1 << " |"; + if (is_print_header) { + std::cout << "| " << std::setw(width) << row + 1 << " |"; + } else { + std::cout << "|"; + } for (size_t col = 0; col < max_length; col++) { if (cols_amount > 0) { - std::cout << " " << std::setw(width) << values[row][col] << " |"; + if (stretch_type == 0) { + int num_len = std::to_string(std::abs(values[row][col])).length(); + if (num_len > width) { + std::cout << " "; + for (int i = 0; i < width; i++) { + std::cout << "#"; + } + std::cout << " |"; + } else { + std::cout << " " << std::setw(width) << values[row][col] << " |"; + } + } else { + std::cout << " " << std::setw(width) << values[row][col] << " |"; + } cols_amount -= 1; } else { std::cout << " " << std::string(width + 1, ' ') << "|"; } } std::cout << "\n"; - print_border_line(max_length, width); + if (is_print_header) { + print_border_line(max_length + 1, width); + } else { + print_border_line(max_length, width); + } } /***************************************************************************************/ @@ -197,7 +257,7 @@ int main(){ void print_border_line(size_t length, int chars_amount) { std::cout << "+"; - for (size_t i = 0; i < length + 1; i++) { + for (size_t i = 0; i < length; i++) { std::cout << std::string(chars_amount + 2, '-'); std::cout << "+"; } diff --git a/01/template/main.zip b/01/template/main.zip index bcc2c31289647a74d5869e16bc4855543cae3401..4ceeff63a211d511dfebfcff1d94258f11d812a4 100644 GIT binary patch delta 2528 zcmai$c{J4BAIFEm4Dnb;9(!bGkbbfxOHzzfjEs>nGL|qy3N83%D@&ol7*w)*?93op zvSi7UeGN59%Vgin_Mm>J=k)x}`JH<{_uTtA_rA{i^WW?9pXI{9c?6h=4+H{1LDwR^ z(T8%Ch%^WYbXsDsBMidZUm?I9JUuOutRV2s*m38*^1g8Z#K80!3<B+M189WBqy|^* zC#xI-n8rygl#(D7twah;M5?~xi`G#*S$RMGaG~*ZT){l*-3yNjbh#tKY}nQdCB|Yy z2NKZZDbM3a*bIPj;j4qJX@)PylGj{qMg;CN(G11HzlG@1!E0j&FI>VNnPTc0I}jYI zj!e0&|4i3bkv=-y5Xoy6Tvos>207&1_*KF8#z%}WXYHfX!Fql59<j}<eiJ*>tB|)v zMc6FIjz{be=Pl)-gDqBDG?45cY7w!0OTe`X;0uQ1-t5#6jd>Bs9hgnWzT_{)(I!qU zgtg4F=R7{V9$6LCc|(J{PdfO@$8+__q2$x;=Z}t-Rmmomh+p+Tkz6SeF@_UtYS3@< z)O<0idR2!>Qk8j8FyJZpQL~yunP4#FUhPfQombDNpFZYDRSwnlZt4qaG)0`vWP1e+ z%dOR+$ovb$3gd~E=;?__@EoCeL?dD(Y@;VEnk*JNiIp(^47+Hgd{~n^Jza9t_io<M za(!VGcHPiCdo&}9l6cHs!a!f*wOl;bCq*UjZod}?pZeqe5Yc4a%H@aD$mY<^`m-Ey zYTxQ=7ft*{LsoolE>0vXO-)Y}y+8xb_7sZ*8jeuEeL2x|T)S)M%Lm~HFnUc3jDE=F zSRUr?02}xO{-RD;Qoh&D{pcnqrKjt5Wz2JFDfWc{n{{xrXx%l4od69n)0p)nx;OvA z%O_I^k~S|KnlRtU*^p)0Z={{xh6z%=#%BGd8#iUmLI5Qi(qa@l=v_QV%z>A(^QqYJ zhmMu&;`EpYY<gf;{Csx$hM<hdd4cKK(Tq4MjWoB>BOJvx`@x(LWTQENwe7wjmHn)} zHP$FhR0Xdvr!YwgL0B*%FX!KxDH)V+vW(182rDY85J~9`j0uzVy#7_lXQ^|_P5+4$ z3O1BCF4gREHDjHbVL(hx6_`4Lrp;g8>{)7>4j-uUmV9=YV;%glTk>w!qV>^LtS_z~ z6X9|}>rT=;X=VNqSrH>2i!U?rI;LO^O~gpw-Q~B)!lB;GcBO%aWxdcV!7Henh4Gy= z)dI2iMsV2zNle1WqpY(V>02?yF~g)1nIPHChZ0(vHj0zo7%T1pH=yj>3*5!H#y9zP zE(a~b1^Y4nI*wK?FH%wl)j#aGLzd}=07Uz?j<gk#x<urVk3M<;Z$mohbzTw$wUJIe z-l>#v?^G|fRmhO@>}uVgdd8}?@dZRP=B3=e#xTxYhQCP8#_!`^lS@5N!a7tuj{twu zH&YC6#ZrFxXu?q`Hz0O~>MQ7o;#=UoEzPOd-6?Tyuv{;y?!6obi)(lB^+GCV3GWTX zR*2WRtg)T&UTzAX4D=pHOQ5l5*Gc}{v=E^VGD}3Nq$Cs3!hcPLD_5nKoY0tw?I9!i zdM^M-SGq0H*oD#id3A{2T^X`B%;{Y0s#<@0@eF=Ued|mEAl)<!-(Wk}9}sw5I<v?o ztEZyIv4D$wOJ8P2dFIA|aVDeu822i9Q3q9Ve2`b)Z8G|Vo%kJsnqIXtEJa-5BVS^W zF5AaT7+|Bo9wjf;`bV-<d!@qLN0D0QJD!h{Cu?*)gih1vqK(oC;Wlj3l~lyG8?m+A zOEddK-}A4PfJk8+?YwB)niBy%1$Xf6XucYvb(r_Puwi%~2<J|56?Hje5q0uGBb7(Y z+V1`3;=;Jm)#29*QHm;6vhrK`aK+4)I#`wMeI8k;f~&4tTaKU~A||`VjSEh416O<g zwLp4TE+d!!WhXfm>*si@_DDfhD%fn2NwXATakMl97<MVqdu6^@Fl${c#M;0eU&9T$ zDbc18#BFMYC`|LDIMBt{g75n<3VO(;;jas7o1c*N$kJB~oQB?X-++5iRf1Zhmi_p+ z%od?Cdh@e9T1rA2hM!RLr+qY&a-R6(Eqkn{pl3fkzayWpxSsK!cuPNcw>dts_KfmE zDb(RDp!_{JZ_@xoTz5ykLA@JUOZfg&63-fHQkA=gJSKxomPCFoz?lv9CRr#QR1!Ed z&#nI@Xg)P#VBzEoN_}PF36t7p8e?6KQ@)c42`6Og(N87~lk3Ax?IY5|BEY$&B3*0g z<hI$Im``MPoTe?HM@x_)w@n{&E~|dUKt=+-96D#wnh9*TyhQu*LWjp)e3`d9=FJhM z=d6jDLm^HHx$2h!#EnzmW|%w(diDnIsAcjv6FyKqF|=9Mj_%wfO^Eg>uXKotaNk+u zLc_`_5ft`Ms3q(Qk)*WF7{tS%^K9-rMndaMU!ObmZ5#}y+Gz+E<-^fXdP~YiQGg{5 zWj0SBlo_<hukyH^?UIAeEjtT%rprT@Z)77{?~@7Q3z_LlZK-KiuxPPPcIIPxer~t{ zL5Ouj>aFB%J<lXZ%AiA`zlXPOT~aIOdT-CXK@_?ERQBoFdr!7Vy%*UnG0wSeAY^sg zSofwsn18HLQO8`!yrhQ8h`F!<B=lx|XQ6hx=OEnW0`P!6eFUA_642*bvXW`g+V=XT zMD`Ju_S&xgw3s!w*zMp$9-kGLi^qdUtNX2xiB@<t_kvBxy3qvefpui@dbL9BMfmKD zMzT=tH+7ShsKrlnJ~JzJJ6uKlHp`2I@#C!2!)6bQ9yK|wq^@Fya{kzItPv53nx-p6 zqENHC-{-(>XI3JsWhavIoV=Jba<}u?GZv2>)OH~fH+_4p{JY+9!f77Al)>lrHT2~y zVQtA>fl%0&h@Z;f@>3b?`bV8P!pCDF5FPOD<Ji*>G00v|D14lPhio%2?Ga)<SVi}{ zyDuqmtXz!1zg0wFmkt6k>=rd}@AOMdn16`LZ&Gp|!N4dA{vkI1PWexoB=je3Kl3il zt{)iv-En@$5vXF$A9mB^F@r#?pnu}Rc5$BeUe_FdXwyFL|KjEptDBd1ah**2IHSD@ ee-2y3_FvwweE);T%(C}|X?JPuaz3)}-TnsbRDQGo delta 2036 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 diff --git a/01/template/working_basic.zip b/01/template/working_basic.zip new file mode 100644 index 0000000000000000000000000000000000000000..bcc2c31289647a74d5869e16bc4855543cae3401 GIT binary patch literal 3304 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 literal 0 HcmV?d00001 -- GitLab