From 4e4dd1be258d175e0c15f45a28191c127fbdbd53 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 8 Mar 2024 09:21:21 +0500 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=87=D0=B5=D0=BD=20=D1=8C=D1=83=D0=B6=D0=B0?= =?UTF-8?q?=D1=87=D0=BD=D0=B0=D1=8F=20=D0=BF=D0=BE=D0=BF=D1=8B=D1=82=D0=BA?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .clang-format | 295 ++++++++++++++++++++++++++++++++++++++++++++++++++ .gitignore | 5 +- README.md | 2 - main.cpp | 113 +++++++++++++++++++ t.cpp | 37 ------- 5 files changed, 412 insertions(+), 40 deletions(-) create mode 100644 .clang-format delete mode 100644 README.md create mode 100644 main.cpp delete mode 100644 t.cpp diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..203e2c2 --- /dev/null +++ b/.clang-format @@ -0,0 +1,295 @@ +--- +Language: Cpp + +#https://releases.llvm.org/14.0.0/tools/clang/docs/ClangFormatStyleOptions.html + +#Особый отступ для модификаторов видимости (на уровне с 'class') +AccessModifierOffset: -4 + +#Выравнивание аргументов после открытия скобки +AlignAfterOpenBracket: Align + +#Выравнивание элементов в {}, когда несколько строк друг под другом +#Настройка забирает гибкость, пока от нее отказываемся +AlignArrayOfStructures: None + +#Выравнивание после =, когда несколько строк друг под другом +AlignConsecutiveAssignments: None + +#Выравнивание значений битовых полей +AlignConsecutiveBitFields: None + +#Выравнивание деклараций имен, когда несколько строк друг под другом +AlignConsecutiveDeclarations: None + +#Выравнивание значений дефайнов, когда несколько строк друг под другом +AlignConsecutiveMacros: AcrossComments + +#Выравнивание бэкслешей в макросах +AlignEscapedNewlines: Left + +#Выравнивание операторов (так себе настройка) +AlignOperands: DontAlign + +#Выравнивание комментов, когда несколько строк друг под другом +AlignTrailingComments: true + +#Если вызов функции или список инициализаторов в фигурных скобках +#не помещается на одной строке, разрешите помещать все аргументы +# на следующую строку, даже если BinPackArguments имеет значение false. +AllowAllArgumentsOnNextLine: false + +#Если объявление функции не помещается на одной строке, разрешите +# помещать все аргументы на следующую строку, даже если +# BinPackArguments имеет значение false. +AllowAllParametersOfDeclarationOnNextLine: false + +#Если в {} нет выражений, то закрывающая скобка рядом с открывающей, без переноса: {} +AllowShortBlocksOnASingleLine: Empty + +#Запрещаем мультилайн в кейзах свича +AllowShortCaseLabelsOnASingleLine: false + +#Запрещаем мультилайн в enum +AllowShortEnumsOnASingleLine: false + +#В классах однострочные функции всегда single-line +#Свободные функции всегда НЕ single-line +#Функции без тела всегда single-line +AllowShortFunctionsOnASingleLine: Inline + +#Запрет single-line if-конструкций +AllowShortIfStatementsOnASingleLine: Never + +#Можно воротить лямбды как душе угодно +AllowShortLambdasOnASingleLine: All + +#Запрет single-line циклов +AllowShortLoopsOnASingleLine: false + +#Разрыв строки после возвращаемого типа объявляемой функции +AlwaysBreakAfterReturnType: None + +#Если true, всегда разрывать строку перед многострочными строковыми литералами. +AlwaysBreakBeforeMultilineStrings: false + +#Всегда перенос строки после обьявления шаблона +AlwaysBreakTemplateDeclarations: Yes + +#DisableFormat: false + +#Если false, аргументы вызова функции будут либо все в одной строке, +#либо будут иметь по одной строке каждый. +# ВАЖНО! с true получается гибкая настройка +BinPackArguments: true + +#Если false, параметры объявления функции или определения функции будут +#либо все в одной строке, либо будут иметь по одной строке каждый. +# ВАЖНО! с true получается гибкая настройка +BinPackParameters: true + +#Добавляет по одному пробелу с каждой стороны : (для битового поля) +BitFieldColonSpacing: Both + +#Правило переноса строки перед фигурными скобками (и не только) +BreakBeforeBraces: Custom +BraceWrapping: + AfterEnum: true + AfterStruct: true + AfterFunction: true + AfterCaseLabel: true + AfterClass: true + AfterControlStatement: true + AfterNamespace: true + AfterUnion: true + AfterExternBlock: true + BeforeElse: true + BeforeCatch: true + BeforeLambdaBody: false + SplitEmptyNamespace: false + BeforeWhile: false + SplitEmptyFunction: false + SplitEmptyRecord: false + +#При переносе операторы с левого края, но = остается на своей строке +BreakBeforeBinaryOperators: NonAssignment + +#Если true, концепт будет помещен на новую строку. +BreakBeforeConceptDeclarations: true + +#Операторы тернарного операторы с левого края (при переносе) +BreakBeforeTernaryOperators: true + +#При инициализации в конструкторе ':' и ',' не переносятся +BreakConstructorInitializers: AfterColon + +#При наследовании классов ':' и ',' не переносятся +BreakInheritanceList: AfterComma + +#Разрешить разрыв строковых литералов при форматировании. +BreakStringLiterals: false + +#Ограничение по ширине исходников +ColumnLimit: 0 + +#Если true, последовательные объявления пространств имен будут находиться в одной строке. +#Если false, каждое пространство имен объявляется в новой строке. +CompactNamespaces: false + +#Количество символов, используемых для отступа в списках инициализаторов конструктора, +#а также в списках наследования. +ConstructorInitializerIndentWidth: 4 + +#Отступ от продолжения выражения после переноса строки +#Используется при выравнивании длинных макросов по левому краю +ContinuationIndentWidth: 0 + +#Пробелы в { 1, 2, 3 } перед первым и после последнего элемента +Cpp11BracedListStyle: false + +#Если true, анализирует отформатированный файл на предмет +#наиболее распространенного выравнивания & и * +DerivePointerAlignment: false + +#Если нужно полностью отключить форматирование (зачем??) +DisableFormat: false + +#Пропуск строки ПОСЛЕ модификатора доступа (например, public:) +EmptyLineAfterAccessModifier: Never + +#Пропуск строки ДО модификатора доступа (например, public:) +EmptyLineBeforeAccessModifier: LogicalBlock + +#Экспериментировать с экспериментальными настройками не будем +#ExperimentalAutoDetectBinPacking: false + +#Комменты после namespace +FixNamespaceComments: true + +#Сортировка инклюдов - каждая секция (разделенная пустой строкой) сортируется лексикографически +IncludeBlocks: Preserve + +#Сложная ненужная настройка отступов модификаторов доступа - при true +# будет игнорировать AccessModifierOffset +IndentAccessModifiers: false + +#Дополнительный отступ у {} после case: в switch-операторе. Выглядит страшно, поэтому false +IndentCaseBlocks: false + +#Отступ у ключевого слова case в switch. при false case и switch на одном уровне +IndentCaseLabels: false + +#Выравнивание тела extern-секции +IndentExternBlock: NoIndent + +#Выравнивание goto лэйблов +IndentGotoLabels: false + +#Выравнивание вложенных препроцессорных директив +IndentPPDirectives: None + +#Сделать отступ для пункта required в шаблоне +IndentRequires: false + +#Отступы, пробелов +IndentWidth: 4 + +#При длинной сигнатуре функции можно перенести имя на новую строку без доп. отступов +IndentWrappedFunctionNames: false + +#Делать пропуск строки после начала блока { } +KeepEmptyLinesAtTheStartOfBlocks: false + +#Выравнивание тела лямбды +LambdaBodyIndentation: OuterScope + +#Максимум пустых строк подряд +MaxEmptyLinesToKeep: 1 + +#Отступы у тел вложенных namespace's +NamespaceIndentation: None + +#Количество столбцов, используемых для отступов операторов препроцессора. +#Настройка не используется +#PPIndentWidth: 10 + +#Порядок в списке инициализации. BinPack дает гибкость в настройке +PackConstructorInitializers: BinPack + +#PenaltyBreak настройки непонятно че делают вообще.. не используется + +#Выравнивание * и & к типу 'int* num' +PointerAlignment: Left + +#Не используется: +#QualifierAlignment +#QualifierOrder +#RawStringFormats + +#Выравнивание ссылки, как и указателя: int& obj +ReferenceAlignment: Pointer + +#Перенос длинных комментов +ReflowComments: false + +#Удалять {} у if, for, ... где их можно опустить (single-line тело) +#false - не удаляем +RemoveBracesLLVM: false + +#Указывает использование пустых строк для разделения блоков определения, +#включая классы, структуры, перечисления и функции. +#Leave - гибкая настройка. Оставить как есть +SeparateDefinitionBlocks: Leave + +#Максимальное количество развернутых строк, которые охватывает короткое пространство имен. +ShortNamespaceLines: 5 + +#При сортировке инклюдов учитывать регистр +SortIncludes: CaseSensitive + +#Если true, clang-format будет сортировать using-декларации +SortUsingDeclarations: false + +#Пробел после CStyle cast (int) a; +SpaceAfterCStyleCast: false + +#пробел после '!' в логических условиях +SpaceAfterLogicalNot: false + +#Пробел после ключевого слова template +SpaceAfterTemplateKeyword: true + +#Пробелы после PointerQualifiers +# Default - также как в PointerAlignment +SpaceAroundPointerQualifiers: Default + +#Пробел перед '=' +SpaceBeforeAssignmentOperators: true + +#Пробел после case colon: (case 1 : ) +#false - (case 1:) +SpaceBeforeCaseColon: false + +#Если значение равно true, перед списком в фигурных скобках C++11, +#используемым для инициализации объекта, будет вставлен пробел +#(после предшествующего идентификатора или типа). +SpaceBeforeCpp11BracedList: true + +#Если false, пробелы будут удалены перед двоеточием инициализатора конструктора. +SpaceBeforeCtorInitializerColon: true + +#Если false, пробелы будут удалены перед двоеточием наследования. +SpaceBeforeInheritanceColon: true + +#Определяет, в каких случаях ставить пробел перед открывающими скобками. +# ControlStatements ставит пробел перед открывающими скобками только +# после ключевых слов (for/if/while...). +SpaceBeforeParens: ControlStatements + +#Если false, пробелы будут удалены перед двоеточием цикла range-based fr. +SpaceBeforeRangeBasedForLoopColon: true + +#Если true, вокруг условий if/for/switch/while будут вставлены пробелы. +SpacesInConditionalStatement: false + +--- diff --git a/.gitignore b/.gitignore index c09fb2f..6907621 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,10 @@ # ---> C++ +.vscode +builds *.ilk *.pdb -.vscode +*.pro +*.pro.user # Prerequisites *.d diff --git a/README.md b/README.md deleted file mode 100644 index 47c67bf..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# f-task - diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..e68b31b --- /dev/null +++ b/main.cpp @@ -0,0 +1,113 @@ +#include + +using namespace std; + +/****************************************************************************** + + Online C++ Compiler. + Code, Compile, Run and Debug C++ program online. +Write your code in this editor and press "Run" button to compile and execute it. + +https://www.onlinegdb.com/online_c++_compiler + +*******************************************************************************/ + +#include +#include +#include +#include + +// std::string kek(std::string strIn, int pos = 0) +// { +// std::cout << strIn << std::endl; + +// for (int i = pos; i < strIn.size(); i++) +// { +// std::string strNum; +// if (std::isdigit(static_cast(strIn[i]))) +// { // Если число +// while (true) +// { +// strNum += strIn[i++]; +// if (strIn[i] == '[') +// break; // Буквы или цифры начнутся со следующей буквы +// } +// auto repeat = std::atoi(strNum.c_str()); +// std::cout << repeat << std::endl; + +// } +// } + +// return "return"; +// } + +std::string decode(std::string& strIn, std::string::iterator& itr) +{ + std::string out; + + while (itr != strIn.end()) + { + std::string strNum; + auto repeat = 1; + + auto itr_char = *itr; // DELME + + if (std::isdigit(static_cast(*itr))) + { + while (*itr != '[') + { + strNum += *itr++; + } + repeat = std::atoi(strNum.c_str()); + // std::cout << repeat << std::endl; // DELME + auto tmp = decode(strIn, ++itr); + + for (int i = 0; i < repeat; ++i) + out += tmp; + + } + + if (*itr == ']') + { + return out; // нужно будет вернуть подстроку + } + else + out += *itr; + + ++itr; + } + + return out; +} + +std::string kek(std::string strIn) +{ + std::cout << strIn << std::endl; + auto itr = strIn.begin(); + + return decode(strIn, itr); +} + +int main() +{ + std::string strIn; + + strIn = "3[a2[c]]"; + std::cout << kek(strIn) << std::endl; + + strIn = "c2[a]3[b]c"; + std::cout << kek(strIn) << std::endl; + + strIn = "c2[a3[b]]c"; + std::cout << kek(strIn) << std::endl; + + strIn = "231[ab]"; + std::cout << kek(strIn) << std::endl; + + strIn = "3[b15[a]]"; + std::cout << kek(strIn) << std::endl; + + // std::string wait; + // std::cin >> wait; + return 0; +} diff --git a/t.cpp b/t.cpp deleted file mode 100644 index b7d2bde..0000000 --- a/t.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/****************************************************************************** - - Online C++ Compiler. - Code, Compile, Run and Debug C++ program online. -Write your code in this editor and press "Run" button to compile and execute it. - -https://www.onlinegdb.com/online_c++_compiler - -*******************************************************************************/ - -#include -#include - - -void kek(std::string str) -{ - std::cout << str; - - std::string braket; - for (auto s : str) - { - } -} - -int main() -{ - std::cout << "Hello World" << std::endl; - - kek("c2[a]3[b]c"); - kek("231[ab]"); - kek("c2[a]3[b]c"); - kek("3[b15[a]]"); - - std::string wait; - std::cin >> wait; - return 0; -}