From 452e0168cef7d5050461b93fb6bb4f61ce82b30b Mon Sep 17 00:00:00 2001 From: IgnatSergeev Date: Fri, 17 May 2024 22:56:47 +0300 Subject: [PATCH 1/4] Finished first hw --- F#/Homework1/Homework1.fs | 67 +++++++++++++++++++++++++++++++++ F#/Homework1/Homework1.fsproj | 13 +++++++ F#/forSpbu.sln | 11 ++++++ F#/forSpbu.sln.DotSettings.user | 6 +++ 4 files changed, 97 insertions(+) create mode 100644 F#/Homework1/Homework1.fs create mode 100644 F#/Homework1/Homework1.fsproj create mode 100644 F#/forSpbu.sln.DotSettings.user diff --git a/F#/Homework1/Homework1.fs b/F#/Homework1/Homework1.fs new file mode 100644 index 0000000..af29b77 --- /dev/null +++ b/F#/Homework1/Homework1.fs @@ -0,0 +1,67 @@ +module Homework1 + +/// +/// Calculates factorial of the given number +/// +/// Number to calculate factorial from +let rec factorial num = + let rec factorialHelper acc number = + match number with + | 0u -> acc + | _ -> factorialHelper (acc * number) (number - 1u) + factorialHelper 1u num + +/// +/// Calculates fibonacci number +/// +/// Index of fibonacci number(starting with 0) +let rec fibonacci num = + let rec fibonacciHelper ind curr next = + match ind with + | 0u -> curr + | _ -> fibonacciHelper (ind - 1u) next (curr + next) + fibonacciHelper num 1 1 + +/// +/// Reverses the list +/// +/// List to reverse +/// Reversed list +let rec reverseList list = + let rec reverseListHelper list tail = + match list with + | [] -> tail + | head :: t -> reverseListHelper t (head :: tail) + reverseListHelper list [] + +/// +/// Generates list of [2^n; 2^(n + 1); ...; 2^(n + m)] +/// +/// First power +/// Number of elements +let rec genPowerList n m = + let rec genPowerListHelper num list curPower = + if curPower = n + m then + num :: list + else if curPower < n then + genPowerListHelper (num * 2) list (curPower + 1) + else + genPowerListHelper (num * 2) (num :: list) (curPower + 1) + reverseList (genPowerListHelper 2 [] 1) + +/// +/// Search for element in the list +/// +/// List to search +/// Element to search +/// None if element not found and position otherwise +let rec findElement mainList elem = + let rec findElementHelper pos list = + match list with + | [] -> None + | head :: tail -> + if head = elem then + Some(pos) + else + findElementHelper (pos + 1) tail + findElementHelper 0 mainList \ No newline at end of file diff --git a/F#/Homework1/Homework1.fsproj b/F#/Homework1/Homework1.fsproj new file mode 100644 index 0000000..386f953 --- /dev/null +++ b/F#/Homework1/Homework1.fsproj @@ -0,0 +1,13 @@ + + + + net8.0 + true + Factorial + + + + + + + diff --git a/F#/forSpbu.sln b/F#/forSpbu.sln index 9a517dd..ce5dc23 100644 --- a/F#/forSpbu.sln +++ b/F#/forSpbu.sln @@ -5,6 +5,10 @@ VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "07.03", "07.03\07.03.fsproj", "{0FD34DFA-792D-44F0-BD17-CE59DD81D040}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "07.03", "07.03", "{5CA9053B-DE9B-4824-9F19-AEB464E3B9D8}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Homework1", "Homework1\Homework1.fsproj", "{04B15EE4-079A-42ED-ACC8-E2DCD25281C6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -18,5 +22,12 @@ Global {0FD34DFA-792D-44F0-BD17-CE59DD81D040}.Debug|Any CPU.Build.0 = Debug|Any CPU {0FD34DFA-792D-44F0-BD17-CE59DD81D040}.Release|Any CPU.ActiveCfg = Release|Any CPU {0FD34DFA-792D-44F0-BD17-CE59DD81D040}.Release|Any CPU.Build.0 = Release|Any CPU + {04B15EE4-079A-42ED-ACC8-E2DCD25281C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04B15EE4-079A-42ED-ACC8-E2DCD25281C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04B15EE4-079A-42ED-ACC8-E2DCD25281C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04B15EE4-079A-42ED-ACC8-E2DCD25281C6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {04B15EE4-079A-42ED-ACC8-E2DCD25281C6} = {5CA9053B-DE9B-4824-9F19-AEB464E3B9D8} EndGlobalSection EndGlobal diff --git a/F#/forSpbu.sln.DotSettings.user b/F#/forSpbu.sln.DotSettings.user new file mode 100644 index 0000000..dab14af --- /dev/null +++ b/F#/forSpbu.sln.DotSettings.user @@ -0,0 +1,6 @@ + + <SessionState ContinuousTestingMode="0" IsActive="True" Name="Test" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <TestAncestor> + <TestId>NUnit3x::89A935E8-B5F3-435D-ACC3-A99DD7C66178::net8.0::PriorityQueue.Test</TestId> + </TestAncestor> +</SessionState> \ No newline at end of file From d117eb9cbbcf2368f0b2725301756045692bfba6 Mon Sep 17 00:00:00 2001 From: IgnatSergeev Date: Fri, 17 May 2024 22:59:50 +0300 Subject: [PATCH 2/4] Fixed sln --- F#/forSpbu.sln | 2 -- 1 file changed, 2 deletions(-) diff --git a/F#/forSpbu.sln b/F#/forSpbu.sln index ce5dc23..da4e1ca 100644 --- a/F#/forSpbu.sln +++ b/F#/forSpbu.sln @@ -3,8 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "07.03", "07.03\07.03.fsproj", "{0FD34DFA-792D-44F0-BD17-CE59DD81D040}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "07.03", "07.03", "{5CA9053B-DE9B-4824-9F19-AEB464E3B9D8}" EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Homework1", "Homework1\Homework1.fsproj", "{04B15EE4-079A-42ED-ACC8-E2DCD25281C6}" From 336cf6e200d3470aea31fd0cdf04afabab0ff4f7 Mon Sep 17 00:00:00 2001 From: IgnatSergeev Date: Fri, 17 May 2024 23:00:37 +0300 Subject: [PATCH 3/4] Removed dotsettings --- F#/forSpbu.sln.DotSettings.user | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 F#/forSpbu.sln.DotSettings.user diff --git a/F#/forSpbu.sln.DotSettings.user b/F#/forSpbu.sln.DotSettings.user deleted file mode 100644 index dab14af..0000000 --- a/F#/forSpbu.sln.DotSettings.user +++ /dev/null @@ -1,6 +0,0 @@ - - <SessionState ContinuousTestingMode="0" IsActive="True" Name="Test" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <TestAncestor> - <TestId>NUnit3x::89A935E8-B5F3-435D-ACC3-A99DD7C66178::net8.0::PriorityQueue.Test</TestId> - </TestAncestor> -</SessionState> \ No newline at end of file From 3231d32d0de583222729a2b164e00cc5c98faefd Mon Sep 17 00:00:00 2001 From: IgnatSergeev Date: Fri, 17 May 2024 23:06:10 +0300 Subject: [PATCH 4/4] Fixed incorrect arguments handling --- F#/Homework1/Homework1.fs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/F#/Homework1/Homework1.fs b/F#/Homework1/Homework1.fs index af29b77..fc8ae3b 100644 --- a/F#/Homework1/Homework1.fs +++ b/F#/Homework1/Homework1.fs @@ -39,7 +39,9 @@ let rec reverseList list = /// /// First power /// Number of elements +/// None if given negative arguments, list otherwise let rec genPowerList n m = + if n < 0 || m < 0 then None else let rec genPowerListHelper num list curPower = if curPower = n + m then num :: list @@ -47,7 +49,7 @@ let rec genPowerList n m = genPowerListHelper (num * 2) list (curPower + 1) else genPowerListHelper (num * 2) (num :: list) (curPower + 1) - reverseList (genPowerListHelper 2 [] 1) + Some(reverseList (genPowerListHelper 1 [] 0)) /// /// Search for element in the list