diff --git a/.gitignore b/.gitignore index 74941b9..b4a75ff 100644 --- a/.gitignore +++ b/.gitignore @@ -333,4 +333,5 @@ ASALocalRun/ #This is mine and this is now .bin/ .obj/ -.Properties/ \ No newline at end of file +.Properties/ +/semester4/SecondHomework diff --git a/appveyor.yml b/appveyor.yml index 855f34f..5f5762b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,7 +1,7 @@ -image: Visual Studio 2017 +image: Visual Studio 2019 before_build: - - nuget restore semester2/6.1/HW6T2.sln + - nuget restore semester4/ThirdTime/ThirdTime.sln build: - project: semester2/2.3/2.3.sln + project: semester4/ThirdTime/ThirdTime.sln diff --git a/semester4/ThirdTime/ThirdTime.sln b/semester4/ThirdTime/ThirdTime.sln new file mode 100644 index 0000000..bd5f28d --- /dev/null +++ b/semester4/ThirdTime/ThirdTime.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29926.136 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ThirdTime", "ThirdTime\ThirdTime.fsproj", "{46E90A85-E11A-47E5-AE65-042C75537173}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ThirdTimeTests", "ThirdTimeTests\ThirdTimeTests.fsproj", "{98591193-E3AB-4870-BD8F-5B8F2D429BA5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {46E90A85-E11A-47E5-AE65-042C75537173}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {46E90A85-E11A-47E5-AE65-042C75537173}.Debug|Any CPU.Build.0 = Debug|Any CPU + {46E90A85-E11A-47E5-AE65-042C75537173}.Release|Any CPU.ActiveCfg = Release|Any CPU + {46E90A85-E11A-47E5-AE65-042C75537173}.Release|Any CPU.Build.0 = Release|Any CPU + {98591193-E3AB-4870-BD8F-5B8F2D429BA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {98591193-E3AB-4870-BD8F-5B8F2D429BA5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {98591193-E3AB-4870-BD8F-5B8F2D429BA5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {98591193-E3AB-4870-BD8F-5B8F2D429BA5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8B07A2AE-453C-4FC0-8DD8-C46912B03E19} + EndGlobalSection +EndGlobal diff --git a/semester4/ThirdTime/ThirdTime/PriorityQueue.fs b/semester4/ThirdTime/ThirdTime/PriorityQueue.fs new file mode 100644 index 0000000..3b175ec --- /dev/null +++ b/semester4/ThirdTime/ThirdTime/PriorityQueue.fs @@ -0,0 +1,32 @@ +module PriorityQueue + +///Очередь, где чем больше приоритет итема, тем ближе к голове списка +type PriorityQueue<'a>() = + let mutable list = [] + + ///Добавить определенный элемент с определенным приоритетом + member this.Enqueue prior (value : 'a) = + let rec enqueueHelper prev fol = + match fol with + | (insidePriority, insideValue) :: tail -> if insidePriority < prior + then prev @ [(prior, value)] @ fol + else enqueueHelper (prev @ [(prior, value)]) fol + | [] -> prev @ [(prior, value)] + + match list.Head with + | (hPrior, hValue) when hPrior < prior -> [(prior, value)] @ list + | _ -> enqueueHelper [] list + + ///Получить элемент с низшим приоритетом + member this.Dequeue() = + match list.Length with + | 0 -> raise (System.IndexOutOfRangeException("Queue is empty!")) + | _ -> let head = list.Head + list <- list.Tail + head + + ///Узнать количество элементов в очереди + member this.Length() = list.Length + + ///Узнать является ли очередь пустой + member this.IsEmpty = list.IsEmpty \ No newline at end of file diff --git a/semester4/ThirdTime/ThirdTime/Program.fs b/semester4/ThirdTime/ThirdTime/Program.fs new file mode 100644 index 0000000..a7458f5 --- /dev/null +++ b/semester4/ThirdTime/ThirdTime/Program.fs @@ -0,0 +1,8 @@ +// Learn more about F# at http://fsharp.org + +open System + +[] +let main argv = + printfn "Hello World from F#!" + 0 // return an integer exit code diff --git a/semester4/ThirdTime/ThirdTime/ThirdTime.fsproj b/semester4/ThirdTime/ThirdTime/ThirdTime.fsproj new file mode 100644 index 0000000..0a19cd5 --- /dev/null +++ b/semester4/ThirdTime/ThirdTime/ThirdTime.fsproj @@ -0,0 +1,13 @@ + + + + Exe + netcoreapp3.1 + + + + + + + + diff --git a/semester4/ThirdTime/ThirdTimeTests/PriorityQueueTest.fs b/semester4/ThirdTime/ThirdTimeTests/PriorityQueueTest.fs new file mode 100644 index 0000000..21c0347 --- /dev/null +++ b/semester4/ThirdTime/ThirdTimeTests/PriorityQueueTest.fs @@ -0,0 +1,32 @@ +module ThirdTimeTests + +open NUnit.Framework +open PriorityQueue + +let mutable queue = new PriorityQueue() + +[] +let Setup () = queue <- new PriorityQueue() + +[] +let EmptyTest () = + Assert.True(queue.IsEmpty) + +[] +let OneElementTest () = + queue.Enqueue 1 "hello" + Assert.False(queue.IsEmpty) + +[] +let SimpleTest() = + queue.Enqueue 1 "1" + queue.Enqueue 2 "2" + Assert.AreEqual((2, "2"), queue.Dequeue) + Assert.AreEqual((1, "1"), queue.Dequeue) + +[] +let SimpleIsQueueTest() = + queue.Enqueue 1 "1" + queue.Enqueue 1 "2" + Assert.AreEqual((1, "1"), queue.Dequeue) + Assert.AreEqual((1, "2"), queue.Dequeue) diff --git a/semester4/ThirdTime/ThirdTimeTests/Program.fs b/semester4/ThirdTime/ThirdTimeTests/Program.fs new file mode 100644 index 0000000..0695f84 --- /dev/null +++ b/semester4/ThirdTime/ThirdTimeTests/Program.fs @@ -0,0 +1 @@ +module Program = let [] main _ = 0 diff --git a/semester4/ThirdTime/ThirdTimeTests/ThirdTimeTests.fsproj b/semester4/ThirdTime/ThirdTimeTests/ThirdTimeTests.fsproj new file mode 100644 index 0000000..7ec9f42 --- /dev/null +++ b/semester4/ThirdTime/ThirdTimeTests/ThirdTimeTests.fsproj @@ -0,0 +1,25 @@ + + + + netcoreapp3.1 + + false + false + + + + + + + + + + + + + + + + + +