Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions F#/BracketSequence.Test/BracketSequence.Test.fsproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>

<IsPackable>false</IsPackable>
<GenerateProgramFile>true</GenerateProgramFile>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<Compile Include="BracketSequenceTest.fs" />

</ItemGroup>

<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="FsUnit" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="NUnit" Version="4.1.0" />
<PackageReference Include="NUnit.Analyzers" Version="3.9.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\BracketSequence\BracketSequence.fsproj" />
</ItemGroup>

</Project>
40 changes: 40 additions & 0 deletions F#/BracketSequence.Test/BracketSequenceTest.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
module BracketSequence.Test

open NUnit.Framework
open FsUnit

[<Test>]
let emptyTest () =
"" |> checkBracketSequence |> should equal true

[<Test>]
let roundTest () =
"()" |> checkBracketSequence |> should equal true

[<Test>]
let roundIncorrectTest () =
"(()" |> checkBracketSequence |> should equal false

[<Test>]
let squareTest () =
"[]" |> checkBracketSequence |> should equal true

[<Test>]
let squareIncorrectTest () =
"[[]" |> checkBracketSequence |> should equal false

[<Test>]
let curlyTest () =
"{}" |> checkBracketSequence |> should equal true

[<Test>]
let curlyIncorrectTest () =
"{{}" |> checkBracketSequence |> should equal false

[<Test>]
let complicatedTest () =
"[({}){}[]]" |> checkBracketSequence |> should equal true

[<Test>]
let complicateIncorrectTest () =
"({[}){]}" |> checkBracketSequence |> should equal false
44 changes: 44 additions & 0 deletions F#/BracketSequence/BracketSequence.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
module BracketSequence

/// <summary>
/// Get corresponding opened bracket
/// </summary>
/// <param name="str"> Char to check </param>
/// <returns> If given char is any braket, returns corresponding opened bracket, None otherwise </returns>
let bracketGetOpened str =
match str with
| '(' | ')' -> Some('(')
| '{' | '}' -> Some('{')
| '[' | ']' -> Some('[')
| _ -> None

/// <summary>
/// Checks if string is correct bracket sequence
/// </summary>
/// <param name="str"> String to check </param>
/// <returns> If given bracket string is correct, true, false otherwise </returns>
let rec checkBracketSequence str =
let rec bracketHelper list (openedStack: List<char>) =
match list with
| [] -> openedStack.IsEmpty
| head::tail ->
let opened = bracketGetOpened head
match opened with
| Some (a) ->
let isOpened = a.Equals(head)
match openedStack with
| openedHead::openedTail ->
if isOpened then
bracketHelper tail (a::openedStack)
else if a.Equals(openedHead) then
bracketHelper tail openedTail
else
false
| [] ->
if isOpened then
bracketHelper tail [ a ]
else
false
| _ -> false
bracketHelper (Seq.toList str) List.empty

12 changes: 12 additions & 0 deletions F#/BracketSequence/BracketSequence.fsproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

<ItemGroup>
<Compile Include="BracketSequence.fs" />
</ItemGroup>

</Project>
12 changes: 12 additions & 0 deletions F#/forSpbu.sln
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "07.03", "07.03", "{5CA9053B
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Homework1", "Homework1\Homework1.fsproj", "{04B15EE4-079A-42ED-ACC8-E2DCD25281C6}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "BracketSequence", "BracketSequence\BracketSequence.fsproj", "{0D046BAA-DC97-4DED-8E10-9BF0D583988A}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "BracketSequence.Test", "BracketSequence.Test\BracketSequence.Test.fsproj", "{3198CB45-D4CF-4CFF-943C-4AB43E89B832}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -58,6 +62,14 @@ Global
{89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89A935E8-B5F3-435D-ACC3-A99DD7C66178}.Release|Any CPU.Build.0 = Release|Any CPU
{0D046BAA-DC97-4DED-8E10-9BF0D583988A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0D046BAA-DC97-4DED-8E10-9BF0D583988A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0D046BAA-DC97-4DED-8E10-9BF0D583988A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0D046BAA-DC97-4DED-8E10-9BF0D583988A}.Release|Any CPU.Build.0 = Release|Any CPU
{3198CB45-D4CF-4CFF-943C-4AB43E89B832}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3198CB45-D4CF-4CFF-943C-4AB43E89B832}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3198CB45-D4CF-4CFF-943C-4AB43E89B832}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3198CB45-D4CF-4CFF-943C-4AB43E89B832}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{7937CDA8-8285-4E23-AD1A-FC0F04FEEFE6} = {91E3BDA2-0836-46C2-95F0-02513FD7F13F}
Expand Down