From 21668747cd93170b9b3110973daf12876f025b67 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Wed, 23 Mar 2022 19:04:39 +0300 Subject: [PATCH 1/5] Add half of func --- .../SequenceOfStaples.Test.fsproj | 21 ++++++++++++++++++ .../SequenceOfStaplesTest.fs | 11 ++++++++++ SequenceOfStaples/SequenceOfStaples.sln | 22 +++++++++++++++++++ .../SequenceOfStaples/Program.fs | 16 ++++++++++++++ .../SequenceOfStaples.fsproj | 18 +++++++++++++++ 5 files changed, 88 insertions(+) create mode 100644 SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaples.Test.fsproj create mode 100644 SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs create mode 100644 SequenceOfStaples/SequenceOfStaples.sln create mode 100644 SequenceOfStaples/SequenceOfStaples/Program.fs create mode 100644 SequenceOfStaples/SequenceOfStaples/SequenceOfStaples.fsproj diff --git a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaples.Test.fsproj b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaples.Test.fsproj new file mode 100644 index 0000000..81869a9 --- /dev/null +++ b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaples.Test.fsproj @@ -0,0 +1,21 @@ + + + + net6.0 + + false + false + + + + + + + + + + + + + + diff --git a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs new file mode 100644 index 0000000..792868c --- /dev/null +++ b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs @@ -0,0 +1,11 @@ +module SequenceOfStaples.Test + +open NUnit.Framework + +[] +let Setup () = + () + +[] +let Test1 () = + Assert.Pass() \ No newline at end of file diff --git a/SequenceOfStaples/SequenceOfStaples.sln b/SequenceOfStaples/SequenceOfStaples.sln new file mode 100644 index 0000000..45e4c95 --- /dev/null +++ b/SequenceOfStaples/SequenceOfStaples.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SequenceOfStaples", "SequenceOfStaples\SequenceOfStaples.fsproj", "{CD91369A-416D-4D07-A3D1-02F07642D050}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "SequenceOfStaples.Test", "SequenceOfStaples.Test\SequenceOfStaples.Test.fsproj", "{E9555365-7F86-4E7B-AD01-033D63F04936}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CD91369A-416D-4D07-A3D1-02F07642D050}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD91369A-416D-4D07-A3D1-02F07642D050}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD91369A-416D-4D07-A3D1-02F07642D050}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD91369A-416D-4D07-A3D1-02F07642D050}.Release|Any CPU.Build.0 = Release|Any CPU + {E9555365-7F86-4E7B-AD01-033D63F04936}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9555365-7F86-4E7B-AD01-033D63F04936}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9555365-7F86-4E7B-AD01-033D63F04936}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9555365-7F86-4E7B-AD01-033D63F04936}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/SequenceOfStaples/SequenceOfStaples/Program.fs b/SequenceOfStaples/SequenceOfStaples/Program.fs new file mode 100644 index 0000000..bf527f0 --- /dev/null +++ b/SequenceOfStaples/SequenceOfStaples/Program.fs @@ -0,0 +1,16 @@ +//Реализовать функцию, которая по произвольной строке проверяет корректность скобочной +//последовательности в этой строке. Скобки бывают трёх видов. + +let checkStaples (exp : string) = + let arrayChar = Seq.toList exp + let rec check (listOfExp : char List) (array : char array) = + match listOfExp with + | h :: listOfExp when h = '[' || h = '(' || h = '{' -> (check listOfExp.Tail (array |> Array.insertAt 0 h)) + | h :: listOfExp when h = ']' -> if '[' = (array |> Array.item 0) then (check listOfExp.Tail (array |> Array.removeAt 0)) else false + | h :: listOfExp when h = ')'-> if '(' = (array |> Array.item 0) then (check listOfExp.Tail (array |> Array.removeAt 0)) else false + | h :: listOfExp when h = '}' -> if '{' = (array |> Array.item 0) then (check listOfExp.Tail (array |> Array.removeAt 0)) else false + | [] -> array.Length = 0 + | _ -> false + check arrayChar [||] + +if (checkStaples "(()){}") then printf "true" else printf "false" \ No newline at end of file diff --git a/SequenceOfStaples/SequenceOfStaples/SequenceOfStaples.fsproj b/SequenceOfStaples/SequenceOfStaples/SequenceOfStaples.fsproj new file mode 100644 index 0000000..010b704 --- /dev/null +++ b/SequenceOfStaples/SequenceOfStaples/SequenceOfStaples.fsproj @@ -0,0 +1,18 @@ + + + + Exe + net6.0 + Windows + + + + + + + + + + + + From ec8202031d72310c758ef23f9751ef163d644e4e Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Thu, 24 Mar 2022 20:31:27 +0300 Subject: [PATCH 2/5] add tests --- .../SequenceOfStaples.Test.fsproj | 5 ++++ .../SequenceOfStaplesTest.fs | 26 ++++++++++++++----- .../SequenceOfStaples/Program.fs | 22 +++++++--------- .../SequenceOfStaples.fsproj | 5 ---- 4 files changed, 34 insertions(+), 24 deletions(-) diff --git a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaples.Test.fsproj b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaples.Test.fsproj index 81869a9..fac92a5 100644 --- a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaples.Test.fsproj +++ b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaples.Test.fsproj @@ -12,10 +12,15 @@ + + + + + diff --git a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs index 792868c..3d6ae9e 100644 --- a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs +++ b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs @@ -1,11 +1,25 @@ module SequenceOfStaples.Test open NUnit.Framework +open FsUnit +open Program -[] -let Setup () = - () - [] -let Test1 () = - Assert.Pass() \ No newline at end of file +let TestExpTrue () = + let result = checkStaples "(({}))" + result |> should equal true + +[] +let TestExpWrongWithOneMoreStaple () = + let result = checkStaples "(({})))" + result |> should equal false + +[] +let TestExpWrongWithDifferentSides () = + let result = checkStaples ")(" + result |> should equal false + +[] +let TestExpWrongWithDifferentStaple () = + let result = checkStaples "(]" + result |> should equal false \ No newline at end of file diff --git a/SequenceOfStaples/SequenceOfStaples/Program.fs b/SequenceOfStaples/SequenceOfStaples/Program.fs index bf527f0..4b4cb76 100644 --- a/SequenceOfStaples/SequenceOfStaples/Program.fs +++ b/SequenceOfStaples/SequenceOfStaples/Program.fs @@ -1,16 +1,12 @@ -//Реализовать функцию, которая по произвольной строке проверяет корректность скобочной -//последовательности в этой строке. Скобки бывают трёх видов. - let checkStaples (exp : string) = - let arrayChar = Seq.toList exp - let rec check (listOfExp : char List) (array : char array) = + let ListOfChar = Seq.toList exp + let rec check (listOfExp : char List) (listOfStaples : char list) = + let charFunc x = if x = listOfStaples.Head then (check listOfExp.Tail listOfStaples.Tail) else false match listOfExp with - | h :: listOfExp when h = '[' || h = '(' || h = '{' -> (check listOfExp.Tail (array |> Array.insertAt 0 h)) - | h :: listOfExp when h = ']' -> if '[' = (array |> Array.item 0) then (check listOfExp.Tail (array |> Array.removeAt 0)) else false - | h :: listOfExp when h = ')'-> if '(' = (array |> Array.item 0) then (check listOfExp.Tail (array |> Array.removeAt 0)) else false - | h :: listOfExp when h = '}' -> if '{' = (array |> Array.item 0) then (check listOfExp.Tail (array |> Array.removeAt 0)) else false - | [] -> array.Length = 0 + | h :: tail when h = '[' || h = '(' || h = '{' -> (check tail (h :: listOfStaples)) + | h :: listOfExp when h = ']' && listOfStaples.Length > 0 -> charFunc '[' + | h :: listOfExp when h = ')' && listOfStaples.Length > 0 -> charFunc '(' + | h :: listOfExp when h = '}' && listOfStaples.Length > 0 -> charFunc '{' + | [] -> listOfStaples.Length = 0 | _ -> false - check arrayChar [||] - -if (checkStaples "(()){}") then printf "true" else printf "false" \ No newline at end of file + check ListOfChar [] \ No newline at end of file diff --git a/SequenceOfStaples/SequenceOfStaples/SequenceOfStaples.fsproj b/SequenceOfStaples/SequenceOfStaples/SequenceOfStaples.fsproj index 010b704..761405f 100644 --- a/SequenceOfStaples/SequenceOfStaples/SequenceOfStaples.fsproj +++ b/SequenceOfStaples/SequenceOfStaples/SequenceOfStaples.fsproj @@ -10,9 +10,4 @@ - - - - - From ff720672734a2e1a1cf36ed1e391260df6a2ea53 Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Tue, 26 Apr 2022 19:24:55 +0300 Subject: [PATCH 3/5] forgot add test --- .../SequenceOfStaples.Test/SequenceOfStaplesTest.fs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs index 3d6ae9e..c6d445a 100644 --- a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs +++ b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs @@ -22,4 +22,5 @@ let TestExpWrongWithDifferentSides () = [] let TestExpWrongWithDifferentStaple () = let result = checkStaples "(]" - result |> should equal false \ No newline at end of file + result |> should equal false + \ No newline at end of file From 9e49fd53d9eacf512f41334dc615eb62966d444a Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Tue, 26 Apr 2022 19:26:44 +0300 Subject: [PATCH 4/5] forgot to push commits --- .../SequenceOfStaples.Test/SequenceOfStaplesTest.fs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs index c6d445a..3d6ae9e 100644 --- a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs +++ b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs @@ -22,5 +22,4 @@ let TestExpWrongWithDifferentSides () = [] let TestExpWrongWithDifferentStaple () = let result = checkStaples "(]" - result |> should equal false - \ No newline at end of file + result |> should equal false \ No newline at end of file From 36383a26eb1442468df1c5c06de0f928a634296c Mon Sep 17 00:00:00 2001 From: MikePuzanov Date: Tue, 17 May 2022 23:30:38 +0300 Subject: [PATCH 5/5] rework func and add test --- .../SequenceOfStaplesTest.fs | 7 ++++++- .../SequenceOfStaples/Program.fs | 21 ++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs index 3d6ae9e..71fcb15 100644 --- a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs +++ b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs @@ -6,7 +6,12 @@ open Program [] let TestExpTrue () = - let result = checkStaples "(({}))" + let result = checkStaples "({[]})" + result |> should equal true + +[] +let TestWithEmptyString () = + let result = checkStaples "" result |> should equal true [] diff --git a/SequenceOfStaples/SequenceOfStaples/Program.fs b/SequenceOfStaples/SequenceOfStaples/Program.fs index 4b4cb76..3306735 100644 --- a/SequenceOfStaples/SequenceOfStaples/Program.fs +++ b/SequenceOfStaples/SequenceOfStaples/Program.fs @@ -1,12 +1,17 @@ let checkStaples (exp : string) = - let ListOfChar = Seq.toList exp - let rec check (listOfExp : char List) (listOfStaples : char list) = - let charFunc x = if x = listOfStaples.Head then (check listOfExp.Tail listOfStaples.Tail) else false + let listOfChar = Seq.toList exp + let reverseStaple staple = + match staple with + | '}' -> '{' + | ']' -> '[' + | ')' -> '(' + let rec checkExpressionOnStaples (listOfExp : char List) (listOfStaples : char list) = match listOfExp with - | h :: tail when h = '[' || h = '(' || h = '{' -> (check tail (h :: listOfStaples)) - | h :: listOfExp when h = ']' && listOfStaples.Length > 0 -> charFunc '[' - | h :: listOfExp when h = ')' && listOfStaples.Length > 0 -> charFunc '(' - | h :: listOfExp when h = '}' && listOfStaples.Length > 0 -> charFunc '{' + | h :: tail when h = '[' || h = '(' || h = '{' -> (checkExpressionOnStaples tail (h :: listOfStaples)) + | h :: tail when (h = ']' || h = ')' || h = '}') && listOfStaples.Length > 0 -> + if reverseStaple h = listOfStaples.Head then + checkExpressionOnStaples tail listOfStaples.Tail + else false | [] -> listOfStaples.Length = 0 | _ -> false - check ListOfChar [] \ No newline at end of file + checkExpressionOnStaples listOfChar [] \ No newline at end of file