From 373456042117a56724fae330e304ca41877d2e96 Mon Sep 17 00:00:00 2001 From: dmitry Date: Wed, 5 Aug 2020 17:10:14 +0300 Subject: [PATCH 1/3] Add brackets checker --- .../BracketsCheckTests.fsproj | 27 +++++++++++++++ .../BracketsCheckerTests.fs | 33 +++++++++++++++++++ .../BracketsCheckTests/Program.fs | 1 + semester4/BracketsChecker/BracketsChecker.sln | 22 +++++++++++++ .../BracketsChecker/BracketsChecker.fs | 32 ++++++++++++++++++ .../BracketsChecker/BracketsChecker.fsproj | 11 +++++++ 6 files changed, 126 insertions(+) create mode 100644 semester4/BracketsChecker/BracketsCheckTests/BracketsCheckTests.fsproj create mode 100644 semester4/BracketsChecker/BracketsCheckTests/BracketsCheckerTests.fs create mode 100644 semester4/BracketsChecker/BracketsCheckTests/Program.fs create mode 100644 semester4/BracketsChecker/BracketsChecker.sln create mode 100644 semester4/BracketsChecker/BracketsChecker/BracketsChecker.fs create mode 100644 semester4/BracketsChecker/BracketsChecker/BracketsChecker.fsproj diff --git a/semester4/BracketsChecker/BracketsCheckTests/BracketsCheckTests.fsproj b/semester4/BracketsChecker/BracketsCheckTests/BracketsCheckTests.fsproj new file mode 100644 index 0000000..8333a77 --- /dev/null +++ b/semester4/BracketsChecker/BracketsCheckTests/BracketsCheckTests.fsproj @@ -0,0 +1,27 @@ + + + + netcoreapp3.1 + + false + false + TestProject1 + + + + + + + + + + + + + + + + + + + diff --git a/semester4/BracketsChecker/BracketsCheckTests/BracketsCheckerTests.fs b/semester4/BracketsChecker/BracketsCheckTests/BracketsCheckerTests.fs new file mode 100644 index 0000000..1474b3d --- /dev/null +++ b/semester4/BracketsChecker/BracketsCheckTests/BracketsCheckerTests.fs @@ -0,0 +1,33 @@ +module TestProject1 + + +open NUnit.Framework +open FsUnit +open BracketsChecker + +let cases = + [ + "()", true + "[]", true + "{}", true + "", true + "1", true + ")(", false + "(]", false + "([{[]}])", true + "[])", false + "[[]]", true + "[1]", true + "([)]", false + "(123)", true + "]", false + "(", false + "(1)", true + "[453]", true + "[23}", false + ] |> List.map (fun (string, result) -> TestCaseData(string, result)) + +[] +[] +let bracketsTest str res = + bracketsChecker str |> should equal res \ No newline at end of file diff --git a/semester4/BracketsChecker/BracketsCheckTests/Program.fs b/semester4/BracketsChecker/BracketsCheckTests/Program.fs new file mode 100644 index 0000000..0695f84 --- /dev/null +++ b/semester4/BracketsChecker/BracketsCheckTests/Program.fs @@ -0,0 +1 @@ +module Program = let [] main _ = 0 diff --git a/semester4/BracketsChecker/BracketsChecker.sln b/semester4/BracketsChecker/BracketsChecker.sln new file mode 100644 index 0000000..a83a304 --- /dev/null +++ b/semester4/BracketsChecker/BracketsChecker.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "BracketsChecker", "BracketsChecker\BracketsChecker.fsproj", "{8751A404-2E55-4DBA-AC3E-6C90466F861F}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "BracketsCheckTests", "BracketsCheckTests\BracketsCheckTests.fsproj", "{779136A1-1CC6-402A-A881-99A8E4337227}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8751A404-2E55-4DBA-AC3E-6C90466F861F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8751A404-2E55-4DBA-AC3E-6C90466F861F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8751A404-2E55-4DBA-AC3E-6C90466F861F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8751A404-2E55-4DBA-AC3E-6C90466F861F}.Release|Any CPU.Build.0 = Release|Any CPU + {779136A1-1CC6-402A-A881-99A8E4337227}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {779136A1-1CC6-402A-A881-99A8E4337227}.Debug|Any CPU.Build.0 = Debug|Any CPU + {779136A1-1CC6-402A-A881-99A8E4337227}.Release|Any CPU.ActiveCfg = Release|Any CPU + {779136A1-1CC6-402A-A881-99A8E4337227}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/semester4/BracketsChecker/BracketsChecker/BracketsChecker.fs b/semester4/BracketsChecker/BracketsChecker/BracketsChecker.fs new file mode 100644 index 0000000..057fc45 --- /dev/null +++ b/semester4/BracketsChecker/BracketsChecker/BracketsChecker.fs @@ -0,0 +1,32 @@ +module BracketsChecker + +open System + +let bracketsChecker (str : String) = + let isNotBracket (ch : Char) = + ch <> '[' && ch <> '{' && ch <> '(' && ch <> ']' && ch <> '}' && ch <> ')' + + let isOpenBracket (bracket : Char) = + bracket = '[' || bracket = '{' || bracket = '(' + + let isMatchingBrackets (first : Char) (second : Char) = + match first with + | '(' -> second = ')' + | '[' -> second = ']' + | '{' -> second = '}' + | _ -> true + + let rec checkLine (str : List) (memory : List) = + if str = [] + then memory = [] + else + let current = List.head str + if (isNotBracket current) then + checkLine (List.tail str) (memory) + elif (isOpenBracket current) then + checkLine (List.tail str) (current :: memory) + elif (memory <> [] && isMatchingBrackets (List.head memory) (current)) then + checkLine (List.tail str) (List.tail memory) + else false + + checkLine (Seq.toList str) [] \ No newline at end of file diff --git a/semester4/BracketsChecker/BracketsChecker/BracketsChecker.fsproj b/semester4/BracketsChecker/BracketsChecker/BracketsChecker.fsproj new file mode 100644 index 0000000..d540876 --- /dev/null +++ b/semester4/BracketsChecker/BracketsChecker/BracketsChecker.fsproj @@ -0,0 +1,11 @@ + + + + netcoreapp3.1 + + + + + + + From 7a5aea45d8925c24a72dff6fa67e19acb85b31e4 Mon Sep 17 00:00:00 2001 From: dmitry Date: Wed, 5 Aug 2020 17:12:18 +0300 Subject: [PATCH 2/3] updated appveyor.yml --- appveyor.yml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 855f34f..d911de9 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,7 +1,18 @@ -image: Visual Studio 2017 + +image: Visual Studio 2019 + +init: + - git config --global core.autocrlf true + +environment: + matrix: + - solution: Semester4/BracketsChecker/BracketsChecker.sln before_build: - - nuget restore semester2/6.1/HW6T2.sln + - nuget restore %solution% build: - project: semester2/2.3/2.3.sln + project: $(solution) + +test_script: + - dotnet test %solution% From 43660f960a2b763c89fb8826bd8982d12c81cbaa Mon Sep 17 00:00:00 2001 From: dmitry Date: Mon, 17 Aug 2020 00:30:17 +0300 Subject: [PATCH 3/3] Add comments --- semester4/BracketsChecker/BracketsChecker/BracketsChecker.fs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/semester4/BracketsChecker/BracketsChecker/BracketsChecker.fs b/semester4/BracketsChecker/BracketsChecker/BracketsChecker.fs index 057fc45..3b1b0ee 100644 --- a/semester4/BracketsChecker/BracketsChecker/BracketsChecker.fs +++ b/semester4/BracketsChecker/BracketsChecker/BracketsChecker.fs @@ -2,13 +2,16 @@ open System +/// Сhecks that the parentheses are correctly placed in the expression let bracketsChecker (str : String) = let isNotBracket (ch : Char) = ch <> '[' && ch <> '{' && ch <> '(' && ch <> ']' && ch <> '}' && ch <> ')' + /// Checks if symbol is a opening bracket let isOpenBracket (bracket : Char) = bracket = '[' || bracket = '{' || bracket = '(' + /// Checks if symbols are opening and closing brackets of the same type let isMatchingBrackets (first : Char) (second : Char) = match first with | '(' -> second = ')' @@ -16,6 +19,7 @@ let bracketsChecker (str : String) = | '{' -> second = '}' | _ -> true + /// Checks if brackets in line are correct let rec checkLine (str : List) (memory : List) = if str = [] then memory = []