diff --git a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaples.Test.fsproj b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaples.Test.fsproj new file mode 100644 index 0000000..fac92a5 --- /dev/null +++ b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaples.Test.fsproj @@ -0,0 +1,26 @@ + + + + net6.0 + + false + false + + + + + + + + + + + + + + + + + + + diff --git a/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs new file mode 100644 index 0000000..71fcb15 --- /dev/null +++ b/SequenceOfStaples/SequenceOfStaples.Test/SequenceOfStaplesTest.fs @@ -0,0 +1,30 @@ +module SequenceOfStaples.Test + +open NUnit.Framework +open FsUnit +open Program + +[] +let TestExpTrue () = + let result = checkStaples "({[]})" + result |> should equal true + +[] +let TestWithEmptyString () = + 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.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..3306735 --- /dev/null +++ b/SequenceOfStaples/SequenceOfStaples/Program.fs @@ -0,0 +1,17 @@ +let checkStaples (exp : string) = + 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 = '{' -> (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 + checkExpressionOnStaples listOfChar [] \ No newline at end of file diff --git a/SequenceOfStaples/SequenceOfStaples/SequenceOfStaples.fsproj b/SequenceOfStaples/SequenceOfStaples/SequenceOfStaples.fsproj new file mode 100644 index 0000000..761405f --- /dev/null +++ b/SequenceOfStaples/SequenceOfStaples/SequenceOfStaples.fsproj @@ -0,0 +1,13 @@ + + + + Exe + net6.0 + Windows + + + + + + +