diff --git a/LocalNetwork/LocalNetwork.sln b/LocalNetwork/LocalNetwork.sln
new file mode 100644
index 0000000..6c28172
--- /dev/null
+++ b/LocalNetwork/LocalNetwork.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "LocalNetwork", "LocalNetwork\LocalNetwork.fsproj", "{61970833-AC88-4081-B541-26C330049AFC}"
+EndProject
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "LocalNetwotk.Test", "LocalNetwotk.Test\LocalNetwotk.Test.fsproj", "{4BC2F556-89CD-4EDA-9E60-7DD6165C7E5E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {61970833-AC88-4081-B541-26C330049AFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {61970833-AC88-4081-B541-26C330049AFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {61970833-AC88-4081-B541-26C330049AFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {61970833-AC88-4081-B541-26C330049AFC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4BC2F556-89CD-4EDA-9E60-7DD6165C7E5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4BC2F556-89CD-4EDA-9E60-7DD6165C7E5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4BC2F556-89CD-4EDA-9E60-7DD6165C7E5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4BC2F556-89CD-4EDA-9E60-7DD6165C7E5E}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/LocalNetwork/LocalNetwork/LocalNetwork.fs b/LocalNetwork/LocalNetwork/LocalNetwork.fs
new file mode 100644
index 0000000..80c8f6b
--- /dev/null
+++ b/LocalNetwork/LocalNetwork/LocalNetwork.fs
@@ -0,0 +1,51 @@
+module LocalNetwork.LocalNetwork
+
+open System
+open System.Collections.Generic
+
+// виды систем
+type OperationSystem =
+ | Windows
+ | Linux
+ | MacOS
+
+// тип компьютера
+type Computer(id : int,name : OperationSystem, virus : bool, probability : float) =
+ member val Id = id
+ member val Name =
+ match name with
+ | Windows -> "Windows"
+ | Linux -> "Linux"
+ | MacOS -> "MacOS"
+ member val Virus = virus with get, set
+ member val Probability = probability
+
+// локальная сеть
+type public Network(matrix : int [,], computers : Computer[], virus : int list) =
+ let matrix = matrix
+ let computers = computers
+ let mutable IsAnyInfected = true
+ let mutable countOfSteps = 0
+ let virusNetwork() =
+ IsAnyInfected <- false
+ countOfSteps <- countOfSteps + 1
+ computers |> Array.iteri(fun i computer ->
+ if computer.Virus then
+ computers |> Array.iteri(fun j computer ->
+ let comp = Array.get computers j
+ if (Array2D.get matrix i j = 1 && not comp.Virus) then
+ IsAnyInfected <- true
+ if comp.Probability >= Random().NextDouble() then
+ comp.Virus <- true))
+
+ let print =
+ printfn "\n\nStep: %i" countOfSteps
+ computers |> Array.iteri(fun i computer -> printfn $"\nName: %i{i + 1}, Operation system: %s{computer.Name}, is infected: %b{computer.Virus}")
+
+ member val Computers = computers with get
+ member this.DoOneStep() =
+ virusNetwork()
+ member this.DoAll() =
+ while IsAnyInfected do
+ virusNetwork()
+ print
\ No newline at end of file
diff --git a/LocalNetwork/LocalNetwork/LocalNetwork.fsproj b/LocalNetwork/LocalNetwork/LocalNetwork.fsproj
new file mode 100644
index 0000000..aff50b8
--- /dev/null
+++ b/LocalNetwork/LocalNetwork/LocalNetwork.fsproj
@@ -0,0 +1,13 @@
+
+
+
+ net6.0
+ Windows
+
+
+
+
+
+
+
+
diff --git a/LocalNetwork/LocalNetwork/Program.fs b/LocalNetwork/LocalNetwork/Program.fs
new file mode 100644
index 0000000..5433aa0
--- /dev/null
+++ b/LocalNetwork/LocalNetwork/Program.fs
@@ -0,0 +1,3 @@
+module Program
+// For more information see https://aka.ms/fsharp-console-apps
+printfn "Hello from F#"
\ No newline at end of file
diff --git a/LocalNetwork/LocalNetwotk.Test/LocalNetworkTest.fs b/LocalNetwork/LocalNetwotk.Test/LocalNetworkTest.fs
new file mode 100644
index 0000000..9550eec
--- /dev/null
+++ b/LocalNetwork/LocalNetwotk.Test/LocalNetworkTest.fs
@@ -0,0 +1,56 @@
+module LocalNetwotk.Test
+
+open System
+open LocalNetwork.LocalNetwork
+open NUnit.Framework
+open FsUnit
+open LocalNetwork
+
+[]
+let TestWithProbability1 () =
+ let comp1 = Computer(0, OperationSystem.Linux, false, 1.0)
+ let comp2 = Computer(0, OperationSystem.Windows, true, 1.0)
+
+ let comp3 = Computer(0, OperationSystem.MacOS, false, 1.0)
+ let matrix = [ [1; 1; 0]; [1; 1; 1]; [0; 1; 0] ]
+ let network = Network(array2D matrix, [| comp1; comp2; comp3|], [1])
+ network.DoAll()
+ for comp in network.Computers do
+ comp.Virus |> should equal true
+
+[]
+let TestWithProbability0 () =
+ let comp1 = Computer(0, OperationSystem.Linux, false, 0.0)
+ let comp2 = Computer(0, OperationSystem.Windows, false, 0.0)
+
+ let comp3 = Computer(0, OperationSystem.MacOS, false, 0.0)
+ let matrix = [ [1; 1; 0]; [1; 1; 1]; [0; 1; 0] ]
+ let network = Network(array2D matrix, [| comp1; comp2; comp3|], [1])
+ network.DoAll()
+ for comp in network.Computers do
+ comp.Virus |> should equal false
+
+[]
+let TestWithDifferentProbability () =
+ let comp1 = Computer(0, OperationSystem.Linux, true, 0.3)
+ let comp2 = Computer(0, OperationSystem.Windows, false, 0.3)
+
+ let comp3 = Computer(0, OperationSystem.MacOS, false, 0.7)
+ let matrix = [ [1; 1; 0]; [1; 1; 1]; [0; 1; 0] ]
+ let network = Network(array2D matrix, [| comp1; comp2; comp3|], [1])
+ network.DoAll()
+ for comp in network.Computers do
+ comp.Virus |> should equal true
+
+[]
+let TestWithWhenNotAllBecomeVirus () =
+ let comp1 = Computer(0, OperationSystem.Linux, true, 0.5)
+ let comp2 = Computer(0, OperationSystem.Windows, false, 0.8)
+
+ let comp3 = Computer(0, OperationSystem.MacOS, false, 0.7)
+ let matrix = [ [1; 1; 0]; [1; 1; 0]; [0; 0; 0] ]
+ let network = Network(array2D matrix, [| comp1; comp2; comp3|], [1])
+ network.DoAll()
+ comp1.Virus |> should equal true
+ comp2.Virus |> should equal true
+ comp3.Virus |> should equal false
\ No newline at end of file
diff --git a/LocalNetwork/LocalNetwotk.Test/LocalNetwotk.Test.fsproj b/LocalNetwork/LocalNetwotk.Test/LocalNetwotk.Test.fsproj
new file mode 100644
index 0000000..62fe7ff
--- /dev/null
+++ b/LocalNetwork/LocalNetwotk.Test/LocalNetwotk.Test.fsproj
@@ -0,0 +1,27 @@
+
+
+
+ net6.0
+
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LocalNetwork/LocalNetwotk.Test/Program.fs b/LocalNetwork/LocalNetwotk.Test/Program.fs
new file mode 100644
index 0000000..176a7b6
--- /dev/null
+++ b/LocalNetwork/LocalNetwotk.Test/Program.fs
@@ -0,0 +1,4 @@
+module Program =
+
+ []
+ let main _ = 0