From abb7ef72f162c06828283df39232638f96675ac2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 30 Jun 2025 16:14:30 +0000 Subject: [PATCH 1/3] Initial plan From 5d0929ceaa7d1c9405b712372fc465de68c5aa40 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 30 Jun 2025 16:17:07 +0000 Subject: [PATCH 2/3] Initial exploration and planning for multiple Fibonacci implementations Co-authored-by: svoff <35914639+svoff@users.noreply.github.com> --- Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj | 11 +++ .../{Fibonacci.cs => Program.cs} | 0 .../bin/Debug/net8.0/2021-09-22 C# | Bin 0 -> 75144 bytes .../bin/Debug/net8.0/2021-09-22 C#.deps.json | 23 ++++++ .../bin/Debug/net8.0/2021-09-22 C#.dll | Bin 0 -> 5120 bytes .../bin/Debug/net8.0/2021-09-22 C#.pdb | Bin 0 -> 10952 bytes .../net8.0/2021-09-22 C#.runtimeconfig.json | 12 ++++ .../2021-09-22 C#.csproj.nuget.dgspec.json | 61 ++++++++++++++++ .../obj/2021-09-22 C#.csproj.nuget.g.props | 15 ++++ .../obj/2021-09-22 C#.csproj.nuget.g.targets | 2 + ...CoreApp,Version=v8.0.AssemblyAttributes.cs | 4 ++ .../net8.0/2021-09-22 C#.AssemblyInfo.cs | 22 ++++++ .../2021-09-22 C#.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 13 ++++ .../net8.0/2021-09-22 C#.GlobalUsings.g.cs | 8 +++ .../Debug/net8.0/2021-09-22 C#.assets.cache | Bin 0 -> 150 bytes ...21-09-22 C#.csproj.CoreCompileInputs.cache | 1 + .../2021-09-22 C#.csproj.FileListAbsolute.txt | 15 ++++ .../obj/Debug/net8.0/2021-09-22 C#.dll | Bin 0 -> 5120 bytes .../2021-09-22 C#.genruntimeconfig.cache | 1 + .../obj/Debug/net8.0/2021-09-22 C#.pdb | Bin 0 -> 10952 bytes .../net8.0/2021-09-22 C#.sourcelink.json | 1 + .../2021-09-22 C#/obj/Debug/net8.0/apphost | Bin 0 -> 75144 bytes .../obj/Debug/net8.0/ref/2021-09-22 C#.dll | Bin 0 -> 5120 bytes .../obj/Debug/net8.0/refint/2021-09-22 C#.dll | Bin 0 -> 5120 bytes .../2021-09-22 C#/obj/project.assets.json | 66 ++++++++++++++++++ .../2021-09-22 C#/obj/project.nuget.cache | 8 +++ 27 files changed, 264 insertions(+) create mode 100644 Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj rename Fibonacci/2021-09-22 C#/{Fibonacci.cs => Program.cs} (100%) create mode 100755 Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C# create mode 100644 Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.deps.json create mode 100644 Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.dll create mode 100644 Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.pdb create mode 100644 Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.runtimeconfig.json create mode 100644 Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.dgspec.json create mode 100644 Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.props create mode 100644 Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.targets create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfo.cs create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfoInputs.cache create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GlobalUsings.g.cs create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.assets.cache create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.CoreCompileInputs.cache create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.FileListAbsolute.txt create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.dll create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.genruntimeconfig.cache create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.pdb create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.sourcelink.json create mode 100755 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/apphost create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/ref/2021-09-22 C#.dll create mode 100644 Fibonacci/2021-09-22 C#/obj/Debug/net8.0/refint/2021-09-22 C#.dll create mode 100644 Fibonacci/2021-09-22 C#/obj/project.assets.json create mode 100644 Fibonacci/2021-09-22 C#/obj/project.nuget.cache diff --git a/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj b/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj new file mode 100644 index 0000000..10e94ed --- /dev/null +++ b/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj @@ -0,0 +1,11 @@ + + + + Exe + net8.0 + _2021_09_22_C_ + enable + enable + + + diff --git a/Fibonacci/2021-09-22 C#/Fibonacci.cs b/Fibonacci/2021-09-22 C#/Program.cs similarity index 100% rename from Fibonacci/2021-09-22 C#/Fibonacci.cs rename to Fibonacci/2021-09-22 C#/Program.cs diff --git a/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C# b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C# new file mode 100755 index 0000000000000000000000000000000000000000..f21ddacaff91de903cc35ccd61b65c82131b0b9b GIT binary patch literal 75144 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�z&2#>N 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 a`5YhppUc0*($?J{?*YqxG~$9Ns51*CX(_U?Mp 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 literal 0 HcmV?d00001 diff --git a/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.runtimeconfig.json b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.runtimeconfig.json new file mode 100644 index 0000000..becfaea --- /dev/null +++ b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.runtimeconfig.json @@ -0,0 +1,12 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.dgspec.json b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.dgspec.json new file mode 100644 index 0000000..1e333a1 --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.dgspec.json @@ -0,0 +1,61 @@ +{ + "format": 1, + "restore": { + "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj": {} + }, + "projects": { + "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj", + "projectName": "2021-09-22 C#", + "projectPath": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj", + "packagesPath": "/home/runner/.nuget/packages/", + "outputPath": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/home/runner/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/8.0.117/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.props b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.props new file mode 100644 index 0000000..cf7e7b6 --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /home/runner/.nuget/packages/ + /home/runner/.nuget/packages/ + PackageReference + 6.8.1 + + + + + \ No newline at end of file diff --git a/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.targets b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2217181 --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfo.cs b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfo.cs new file mode 100644 index 0000000..b8e09f5 --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("2021-09-22 C#")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+abb7ef72f162c06828283df39232638f96675ac2")] +[assembly: System.Reflection.AssemblyProductAttribute("2021-09-22 C#")] +[assembly: System.Reflection.AssemblyTitleAttribute("2021-09-22 C#")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfoInputs.cache b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfoInputs.cache new file mode 100644 index 0000000..84f41f5 --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f8bc1392cd5f568c63ad3f375e6fcaf3396f698bfb62b76bd8b06be1dc70cb51 diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GeneratedMSBuildEditorConfig.editorconfig b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..734989b --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = _2021_09_22_C_ +build_property.ProjectDir = /home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GlobalUsings.g.cs b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.assets.cache b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..1d764575ba3bd1dbc40926cc65092db86af16990 GIT binary patch literal 150 zcmWIWc6a1qU|?7{g>Uli)U#DgGYtck1F{nu*W9|;Xy;#-(A>6n+3KHvCIQtD3mAb4 lW%V=ib5r$;O7rqki}dyKO4CzI^a~P`vlG)(i}eYa1OV}X9R>gZ literal 0 HcmV?d00001 diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.CoreCompileInputs.cache b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..216b840 --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +ef67cc630d4657c3fb26a509d9385ffa015070e4255114986cba43a30e6783db diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.FileListAbsolute.txt b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..5a5dcfc --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.FileListAbsolute.txt @@ -0,0 +1,15 @@ +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GeneratedMSBuildEditorConfig.editorconfig +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfoInputs.cache +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfo.cs +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.CoreCompileInputs.cache +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.sourcelink.json +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C# +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.deps.json +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.runtimeconfig.json +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.dll +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.pdb +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.dll +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/refint/2021-09-22 C#.dll +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.pdb +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.genruntimeconfig.cache +/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/ref/2021-09-22 C#.dll diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.dll b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.dll new file mode 100644 index 0000000000000000000000000000000000000000..48681e5e4adeee460b1e5cfbf74d5081dc944bcd GIT binary patch literal 5120 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 literal 0 HcmV?d00001 diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.sourcelink.json b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.sourcelink.json new file mode 100644 index 0000000..3d1dab6 --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.sourcelink.json @@ -0,0 +1 @@ +{"documents":{"/home/runner/work/ProgrammingPractice/ProgrammingPractice/*":"https://raw.githubusercontent.com/svoff/ProgrammingPractice/abb7ef72f162c06828283df39232638f96675ac2/*"}} \ No newline at end of file diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/apphost b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/apphost new file mode 100755 index 0000000000000000000000000000000000000000..f21ddacaff91de903cc35ccd61b65c82131b0b9b GIT binary patch literal 75144 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�z&2#>N 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 literal 0 HcmV?d00001 diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/refint/2021-09-22 C#.dll b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/refint/2021-09-22 C#.dll new file mode 100644 index 0000000000000000000000000000000000000000..c3edd0f7fcf7fc5d9daf591da982aedb30fceb7c GIT binary patch literal 5120 zcmeHKU2GIp6h2ehQWhx%kzh11ZZT@G)BS;^3;o&tVwL{bF7+=FW@qniN9JdpnO(ZZ zXrqz%Nc2?`UrbC)lm}vnhM>j=9;^>W6CX&_2NF$8h_A+o-@P-lJEedqPZI9zoO{o? z=YIE`b7#((oqF~Zts|mV+*hs;okh=EPS6{ZWlVSO`m~eIY*=~VtaNzgf&8NG$`!{h zJE|#bs%6=pTwt&q)&guDGjaoQ*)h}t2E z`O}diO`=|1{1KbwqSJz&{q@6|<%n!Na#8_!KG)JFLnauRZl#D)K%#kRdfBlC}sNC5)RGqt@+ zLP;mm$t(wKBLnnhY|#A*(J$zCAP05Ndya0EU9Q3NAWz}lN9L&&1D+$h4;`5tL%$9D zpPU~t>;ih;uv|K{jc5aB{*cnN-M7EfpA(jFJNV80@_l<(^80qWL_bUIG$(QT5Pc(U zCJB)3v{Ojt=yk}m(kGxF5vRumeN)gjAwMX_D*~sh> zFX)EuMP?`T0zA_+eU52W#GuBm3bhhAjTdS4*(gQB2y`1uSjk`-j}zfaXtcx5EKi))+s-iwGo z2=Xr%eaXi;K3dztJnhdMh0EhhY)aKFGF=V+GjYUx_R52l%lT^mnzo2sD-$jAcYGH8 zY6w58_gzEI^{!He#MfV3GbPTDzQ!MqQ^$z<(TA;n-ChhAkdcmpj?)}QlgMDx;3q*R z{I7L7*LwLcKU4WwVb&T7fKVo|`|36(WDBH{0~{T7hyl~064^p=H}O?@%&L&Om{-Yz zo(;}#r(54aWsqQ#2Q3})@->i_gieCOYcCZrhM&}lwWGi@sUr5M!y^?O6Ywc$r6@@~ z=(C_HTr%{#F*_#KhE|VZg^P^OZK$lW@kSU4ykt_t-UVPdKxz7yL?uWxZocPM=<^79 zLf3+=M#SRl@1;-?n!L_GjOr}WVXQBU)!h3E)rI9{S_Cq|NBjpAd(8xL9$CIu=r8B| zDBaASew=54Wy6jt;^alFCPel6aej?@Vejg-S4XNDr#-N%fNMYeD}km!laxWPVUG;; zVdURwSW-g$%|epKodNBGB#Ti7EB66OgPgZMaZbZH8yC1H@C`&v#{01P#F}>Sb0fNl z|8+k`9{S6lo$nu7G7Y)rSImJpl2}|uO|pwf+5_<;`H7ysxa@kWRa6bzVgvCybK^sU zu~@$vRA?ChmOBuyI@SSKTV$r{_L#cn*sfjjdNkWSpt`0~OU7kWwe%8my)X@n-3DW_ z+`yVFGJFzv^;HJ(6dRWA{pD$bW-XO~w> z?C7%)IPAqLY-Gh*N3Y>yqRiZz#7qa60=EH!EUZ;|g*wb?%#aOE2jZ$bY1QoG%!$iY zeON=SLcDi2%LHV literal 0 HcmV?d00001 diff --git a/Fibonacci/2021-09-22 C#/obj/project.assets.json b/Fibonacci/2021-09-22 C#/obj/project.assets.json new file mode 100644 index 0000000..bbd8768 --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/project.assets.json @@ -0,0 +1,66 @@ +{ + "version": 3, + "targets": { + "net8.0": {} + }, + "libraries": {}, + "projectFileDependencyGroups": { + "net8.0": [] + }, + "packageFolders": { + "/home/runner/.nuget/packages/": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj", + "projectName": "2021-09-22 C#", + "projectPath": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj", + "packagesPath": "/home/runner/.nuget/packages/", + "outputPath": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/home/runner/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/8.0.117/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/Fibonacci/2021-09-22 C#/obj/project.nuget.cache b/Fibonacci/2021-09-22 C#/obj/project.nuget.cache new file mode 100644 index 0000000..077248a --- /dev/null +++ b/Fibonacci/2021-09-22 C#/obj/project.nuget.cache @@ -0,0 +1,8 @@ +{ + "version": 2, + "dgSpecHash": "eHIM71Xf3bmCoZhgp1n/z44co9aBxijVqDhBLVD5dKAOL5CqL4xm4pTTE3jTb7LpuI/qPk+9DBVCSD04e2d6sQ==", + "success": true, + "projectFilePath": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj", + "expectedPackageFiles": [], + "logs": [] +} \ No newline at end of file From 03a8ce836b6aafd66ae44431d84137705499f443 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 30 Jun 2025 16:21:27 +0000 Subject: [PATCH 3/3] Implement multiple Fibonacci algorithms with tests and benchmarks Co-authored-by: svoff <35914639+svoff@users.noreply.github.com> --- .gitignore | 8 ++ .../FibonacciBenchmark.csproj | 14 +++ .../FibonacciBenchmark/Program.cs | 102 ++++++++++++++++++ .../FibonacciImplementations.sln | 34 ++++++ .../DynamicProgrammingFibonacci.cs | 29 +++++ .../FibonacciImplementations.csproj | 9 ++ .../FibonacciImplementations/IFibonacci.cs | 19 ++++ .../IterativeFibonacci.cs | 31 ++++++ .../MatrixFibonacci.cs | 50 +++++++++ .../MemoizedFibonacci.cs | 36 +++++++ .../RecursiveFibonacci.cs | 19 ++++ .../FibonacciTests/FibonacciTests.csproj | 29 +++++ .../FibonacciTests/GlobalUsings.cs | 1 + .../FibonacciTests/UnitTest1.cs | 101 +++++++++++++++++ Fibonacci/Multiple-Implementations/README.md | 79 ++++++++++++++ 15 files changed, 561 insertions(+) create mode 100644 Fibonacci/Multiple-Implementations/FibonacciBenchmark/FibonacciBenchmark.csproj create mode 100644 Fibonacci/Multiple-Implementations/FibonacciBenchmark/Program.cs create mode 100644 Fibonacci/Multiple-Implementations/FibonacciImplementations.sln create mode 100644 Fibonacci/Multiple-Implementations/FibonacciImplementations/DynamicProgrammingFibonacci.cs create mode 100644 Fibonacci/Multiple-Implementations/FibonacciImplementations/FibonacciImplementations.csproj create mode 100644 Fibonacci/Multiple-Implementations/FibonacciImplementations/IFibonacci.cs create mode 100644 Fibonacci/Multiple-Implementations/FibonacciImplementations/IterativeFibonacci.cs create mode 100644 Fibonacci/Multiple-Implementations/FibonacciImplementations/MatrixFibonacci.cs create mode 100644 Fibonacci/Multiple-Implementations/FibonacciImplementations/MemoizedFibonacci.cs create mode 100644 Fibonacci/Multiple-Implementations/FibonacciImplementations/RecursiveFibonacci.cs create mode 100644 Fibonacci/Multiple-Implementations/FibonacciTests/FibonacciTests.csproj create mode 100644 Fibonacci/Multiple-Implementations/FibonacciTests/GlobalUsings.cs create mode 100644 Fibonacci/Multiple-Implementations/FibonacciTests/UnitTest1.cs create mode 100644 Fibonacci/Multiple-Implementations/README.md diff --git a/.gitignore b/.gitignore index b883f1f..a691bdd 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,9 @@ *.exe + +# .NET build artifacts +bin/ +obj/ +*.dll +*.pdb +*.deps.json +*.runtimeconfig.json diff --git a/Fibonacci/Multiple-Implementations/FibonacciBenchmark/FibonacciBenchmark.csproj b/Fibonacci/Multiple-Implementations/FibonacciBenchmark/FibonacciBenchmark.csproj new file mode 100644 index 0000000..14494cb --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciBenchmark/FibonacciBenchmark.csproj @@ -0,0 +1,14 @@ + + + + + + + + Exe + net8.0 + enable + enable + + + diff --git a/Fibonacci/Multiple-Implementations/FibonacciBenchmark/Program.cs b/Fibonacci/Multiple-Implementations/FibonacciBenchmark/Program.cs new file mode 100644 index 0000000..0e27a77 --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciBenchmark/Program.cs @@ -0,0 +1,102 @@ +using System.Diagnostics; +using FibonacciImplementations; + +namespace FibonacciBenchmark; + +class Program +{ + static void Main(string[] args) + { + Console.WriteLine("Fibonacci Implementations Benchmark"); + Console.WriteLine("===================================="); + Console.WriteLine(); + + var implementations = new List + { + new IterativeFibonacci(), + new MemoizedFibonacci(), + new DynamicProgrammingFibonacci(), + new MatrixFibonacci(), + new RecursiveFibonacci() // Last because it's slowest + }; + + // Test different input sizes + var testCases = new[] { 10, 20, 30, 35 }; + + foreach (var n in testCases) + { + Console.WriteLine($"Calculating Fibonacci({n}):"); + Console.WriteLine("Implementation".PadRight(25) + "Result".PadRight(15) + "Time (ms)"); + Console.WriteLine(new string('-', 50)); + + foreach (var implementation in implementations) + { + // Skip recursive for large numbers to avoid excessive wait time + if (implementation is RecursiveFibonacci && n > 35) + { + Console.WriteLine($"{implementation.Name}".PadRight(25) + "SKIPPED".PadRight(15) + "(too slow)"); + continue; + } + + var stopwatch = Stopwatch.StartNew(); + long result; + + try + { + result = implementation.Calculate(n); + stopwatch.Stop(); + + Console.WriteLine($"{implementation.Name}".PadRight(25) + + $"{result}".PadRight(15) + + $"{stopwatch.ElapsedMilliseconds:F2}"); + } + catch (Exception ex) + { + stopwatch.Stop(); + Console.WriteLine($"{implementation.Name}".PadRight(25) + + "ERROR".PadRight(15) + + $"{ex.Message}"); + } + } + + Console.WriteLine(); + } + + // Performance comparison for moderate-sized numbers + Console.WriteLine("Performance Comparison (average over 100 runs):"); + Console.WriteLine("================================================"); + + const int testN = 25; + const int iterations = 100; + + Console.WriteLine($"Calculating Fibonacci({testN}) - Average over {iterations} iterations:"); + Console.WriteLine("Implementation".PadRight(25) + "Average Time (ms)"); + Console.WriteLine(new string('-', 45)); + + foreach (var implementation in implementations) + { + if (implementation is RecursiveFibonacci) + { + // Skip recursive for performance test as it's too slow + Console.WriteLine($"{implementation.Name}".PadRight(25) + "SKIPPED (too slow)"); + continue; + } + + var totalTime = 0.0; + + for (int i = 0; i < iterations; i++) + { + var stopwatch = Stopwatch.StartNew(); + implementation.Calculate(testN); + stopwatch.Stop(); + totalTime += stopwatch.Elapsed.TotalMilliseconds; + } + + var averageTime = totalTime / iterations; + Console.WriteLine($"{implementation.Name}".PadRight(25) + $"{averageTime:F4}"); + } + + Console.WriteLine(); + Console.WriteLine("Note: Recursive implementation is excluded from larger tests due to exponential time complexity."); + } +} diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations.sln b/Fibonacci/Multiple-Implementations/FibonacciImplementations.sln new file mode 100644 index 0000000..22ec6ca --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations.sln @@ -0,0 +1,34 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FibonacciImplementations", "FibonacciImplementations\FibonacciImplementations.csproj", "{14C60D42-1396-487E-93EA-40A0C841F6DA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FibonacciTests", "FibonacciTests\FibonacciTests.csproj", "{F62A15A4-5A47-4599-9164-17C7EF43F559}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FibonacciBenchmark", "FibonacciBenchmark\FibonacciBenchmark.csproj", "{E09968E5-98F3-4E95-A670-246435C923E5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {14C60D42-1396-487E-93EA-40A0C841F6DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {14C60D42-1396-487E-93EA-40A0C841F6DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {14C60D42-1396-487E-93EA-40A0C841F6DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {14C60D42-1396-487E-93EA-40A0C841F6DA}.Release|Any CPU.Build.0 = Release|Any CPU + {F62A15A4-5A47-4599-9164-17C7EF43F559}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F62A15A4-5A47-4599-9164-17C7EF43F559}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F62A15A4-5A47-4599-9164-17C7EF43F559}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F62A15A4-5A47-4599-9164-17C7EF43F559}.Release|Any CPU.Build.0 = Release|Any CPU + {E09968E5-98F3-4E95-A670-246435C923E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E09968E5-98F3-4E95-A670-246435C923E5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E09968E5-98F3-4E95-A670-246435C923E5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E09968E5-98F3-4E95-A670-246435C923E5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/DynamicProgrammingFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/DynamicProgrammingFibonacci.cs new file mode 100644 index 0000000..d11aed7 --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/DynamicProgrammingFibonacci.cs @@ -0,0 +1,29 @@ +namespace FibonacciImplementations; + +/// +/// Dynamic programming (bottom-up) implementation of Fibonacci calculation +/// Time complexity: O(n) +/// Space complexity: O(n) for the array +/// +public class DynamicProgrammingFibonacci : IFibonacci +{ + public string Name => "Dynamic Programming"; + + public long Calculate(int n) + { + if (n < 0) throw new ArgumentException("n must be non-negative"); + if (n == 0) return 0; + if (n == 1) return 1; + + var dp = new long[n + 1]; + dp[0] = 0; + dp[1] = 1; + + for (int i = 2; i <= n; i++) + { + dp[i] = dp[i - 1] + dp[i - 2]; + } + + return dp[n]; + } +} \ No newline at end of file diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/FibonacciImplementations.csproj b/Fibonacci/Multiple-Implementations/FibonacciImplementations/FibonacciImplementations.csproj new file mode 100644 index 0000000..fa71b7a --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/FibonacciImplementations.csproj @@ -0,0 +1,9 @@ + + + + net8.0 + enable + enable + + + diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/IFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/IFibonacci.cs new file mode 100644 index 0000000..56482ff --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/IFibonacci.cs @@ -0,0 +1,19 @@ +namespace FibonacciImplementations; + +/// +/// Interface for Fibonacci number calculation implementations +/// +public interface IFibonacci +{ + /// + /// Calculate the nth Fibonacci number + /// + /// The position in the Fibonacci sequence (0-based) + /// The nth Fibonacci number + long Calculate(int n); + + /// + /// Name of the implementation for identification + /// + string Name { get; } +} diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/IterativeFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/IterativeFibonacci.cs new file mode 100644 index 0000000..4994e76 --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/IterativeFibonacci.cs @@ -0,0 +1,31 @@ +namespace FibonacciImplementations; + +/// +/// Iterative implementation of Fibonacci calculation +/// Time complexity: O(n) +/// Space complexity: O(1) +/// +public class IterativeFibonacci : IFibonacci +{ + public string Name => "Iterative"; + + public long Calculate(int n) + { + if (n < 0) throw new ArgumentException("n must be non-negative"); + if (n == 0) return 0; + if (n == 1) return 1; + + long prev2 = 0; + long prev1 = 1; + long current = 0; + + for (int i = 2; i <= n; i++) + { + current = prev1 + prev2; + prev2 = prev1; + prev1 = current; + } + + return current; + } +} \ No newline at end of file diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/MatrixFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/MatrixFibonacci.cs new file mode 100644 index 0000000..cfae686 --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/MatrixFibonacci.cs @@ -0,0 +1,50 @@ +namespace FibonacciImplementations; + +/// +/// Matrix exponentiation implementation of Fibonacci calculation +/// Time complexity: O(log n) +/// Space complexity: O(log n) due to recursion in matrix exponentiation +/// +public class MatrixFibonacci : IFibonacci +{ + public string Name => "Matrix Exponentiation"; + + public long Calculate(int n) + { + if (n < 0) throw new ArgumentException("n must be non-negative"); + if (n == 0) return 0; + if (n == 1) return 1; + + var baseMatrix = new long[,] { { 1, 1 }, { 1, 0 } }; + var result = MatrixPower(baseMatrix, n - 1); + + return result[0, 0]; + } + + private long[,] MatrixPower(long[,] matrix, int power) + { + if (power == 1) + { + return (long[,])matrix.Clone(); + } + + if (power % 2 == 0) + { + var half = MatrixPower(matrix, power / 2); + return MatrixMultiply(half, half); + } + else + { + return MatrixMultiply(matrix, MatrixPower(matrix, power - 1)); + } + } + + private long[,] MatrixMultiply(long[,] a, long[,] b) + { + return new long[,] + { + { a[0, 0] * b[0, 0] + a[0, 1] * b[1, 0], a[0, 0] * b[0, 1] + a[0, 1] * b[1, 1] }, + { a[1, 0] * b[0, 0] + a[1, 1] * b[1, 0], a[1, 0] * b[0, 1] + a[1, 1] * b[1, 1] } + }; + } +} \ No newline at end of file diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/MemoizedFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/MemoizedFibonacci.cs new file mode 100644 index 0000000..9b424fe --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/MemoizedFibonacci.cs @@ -0,0 +1,36 @@ +namespace FibonacciImplementations; + +/// +/// Memoized recursive implementation of Fibonacci calculation +/// Time complexity: O(n) +/// Space complexity: O(n) for memoization cache + O(n) for call stack +/// +public class MemoizedFibonacci : IFibonacci +{ + public string Name => "Memoized Recursive"; + + public long Calculate(int n) + { + if (n < 0) throw new ArgumentException("n must be non-negative"); + + var memo = new Dictionary(); + return CalculateWithMemo(n, memo); + } + + private long CalculateWithMemo(int n, Dictionary memo) + { + if (memo.ContainsKey(n)) + return memo[n]; + + long result; + if (n == 0) + result = 0; + else if (n == 1) + result = 1; + else + result = CalculateWithMemo(n - 1, memo) + CalculateWithMemo(n - 2, memo); + + memo[n] = result; + return result; + } +} \ No newline at end of file diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/RecursiveFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/RecursiveFibonacci.cs new file mode 100644 index 0000000..fa26eee --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/RecursiveFibonacci.cs @@ -0,0 +1,19 @@ +namespace FibonacciImplementations; + +/// +/// Simple recursive implementation of Fibonacci calculation +/// Time complexity: O(2^n) +/// Space complexity: O(n) due to call stack +/// +public class RecursiveFibonacci : IFibonacci +{ + public string Name => "Recursive"; + + public long Calculate(int n) + { + if (n < 0) throw new ArgumentException("n must be non-negative"); + if (n == 0) return 0; + if (n == 1) return 1; + return Calculate(n - 1) + Calculate(n - 2); + } +} \ No newline at end of file diff --git a/Fibonacci/Multiple-Implementations/FibonacciTests/FibonacciTests.csproj b/Fibonacci/Multiple-Implementations/FibonacciTests/FibonacciTests.csproj new file mode 100644 index 0000000..0287a5e --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciTests/FibonacciTests.csproj @@ -0,0 +1,29 @@ + + + + net8.0 + enable + enable + + false + true + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/Fibonacci/Multiple-Implementations/FibonacciTests/GlobalUsings.cs b/Fibonacci/Multiple-Implementations/FibonacciTests/GlobalUsings.cs new file mode 100644 index 0000000..8c927eb --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciTests/GlobalUsings.cs @@ -0,0 +1 @@ +global using Xunit; \ No newline at end of file diff --git a/Fibonacci/Multiple-Implementations/FibonacciTests/UnitTest1.cs b/Fibonacci/Multiple-Implementations/FibonacciTests/UnitTest1.cs new file mode 100644 index 0000000..55b9af6 --- /dev/null +++ b/Fibonacci/Multiple-Implementations/FibonacciTests/UnitTest1.cs @@ -0,0 +1,101 @@ +namespace FibonacciTests; + +using FibonacciImplementations; + +public class FibonacciTests +{ + private readonly List _implementations; + + public FibonacciTests() + { + _implementations = new List + { + new RecursiveFibonacci(), + new IterativeFibonacci(), + new MemoizedFibonacci(), + new DynamicProgrammingFibonacci(), + new MatrixFibonacci() + }; + } + + [Theory] + [InlineData(0, 0)] + [InlineData(1, 1)] + [InlineData(2, 1)] + [InlineData(3, 2)] + [InlineData(4, 3)] + [InlineData(5, 5)] + [InlineData(6, 8)] + [InlineData(7, 13)] + [InlineData(8, 21)] + [InlineData(9, 34)] + [InlineData(10, 55)] + [InlineData(15, 610)] + [InlineData(20, 6765)] + public void Calculate_ShouldReturnCorrectFibonacciNumber_ForAllImplementations(int n, long expected) + { + foreach (var implementation in _implementations) + { + var result = implementation.Calculate(n); + Assert.Equal(expected, result); + } + } + + [Fact] + public void Calculate_ShouldThrowArgumentException_ForNegativeInput() + { + foreach (var implementation in _implementations) + { + Assert.Throws(() => implementation.Calculate(-1)); + } + } + + [Fact] + public void Calculate_ShouldReturnConsistentResults_AcrossAllImplementations() + { + // Test first 25 Fibonacci numbers (avoid too large numbers for recursive implementation) + for (int n = 0; n < 25; n++) + { + long? expectedResult = null; + + foreach (var implementation in _implementations) + { + var result = implementation.Calculate(n); + + if (expectedResult == null) + { + expectedResult = result; + } + else + { + Assert.Equal(expectedResult.Value, result); + } + } + } + } + + [Fact] + public void AllImplementations_ShouldHaveUniqueName() + { + var names = _implementations.Select(impl => impl.Name).ToList(); + Assert.Equal(names.Count, names.Distinct().Count()); + } + + [Fact] + public void Calculate_ShouldHandleLargerNumbers_ForEfficientImplementations() + { + // Test larger numbers for efficient implementations (excluding recursive) + var efficientImplementations = _implementations + .Where(impl => !(impl is RecursiveFibonacci)) + .ToList(); + + const int largeN = 40; + const long expectedResult = 102334155; // F(40) + + foreach (var implementation in efficientImplementations) + { + var result = implementation.Calculate(largeN); + Assert.Equal(expectedResult, result); + } + } +} \ No newline at end of file diff --git a/Fibonacci/Multiple-Implementations/README.md b/Fibonacci/Multiple-Implementations/README.md new file mode 100644 index 0000000..a97aa5d --- /dev/null +++ b/Fibonacci/Multiple-Implementations/README.md @@ -0,0 +1,79 @@ +# Multiple Fibonacci Implementations + +This solution demonstrates various approaches to calculating Fibonacci numbers, each with different time and space complexity characteristics. + +## Implementations + +### 1. Recursive (`RecursiveFibonacci`) +- **Time Complexity**: O(2^n) - Exponential +- **Space Complexity**: O(n) - Due to call stack +- **Description**: Simple recursive implementation following the mathematical definition +- **Use Case**: Educational purposes; demonstrates the naive approach + +### 2. Iterative (`IterativeFibonacci`) +- **Time Complexity**: O(n) - Linear +- **Space Complexity**: O(1) - Constant +- **Description**: Bottom-up iterative approach using only two variables +- **Use Case**: Most efficient for general purpose use + +### 3. Memoized Recursive (`MemoizedFibonacci`) +- **Time Complexity**: O(n) - Linear (with memoization) +- **Space Complexity**: O(n) - For memoization cache + call stack +- **Description**: Recursive with caching to avoid redundant calculations +- **Use Case**: When you need to calculate multiple Fibonacci numbers + +### 4. Dynamic Programming (`DynamicProgrammingFibonacci`) +- **Time Complexity**: O(n) - Linear +- **Space Complexity**: O(n) - For the array +- **Description**: Bottom-up approach building a table of results +- **Use Case**: When you need all Fibonacci numbers up to n + +### 5. Matrix Exponentiation (`MatrixFibonacci`) +- **Time Complexity**: O(log n) - Logarithmic +- **Space Complexity**: O(log n) - Due to recursion in matrix exponentiation +- **Description**: Uses matrix multiplication and fast exponentiation +- **Use Case**: Most efficient for very large n values + +## Running the Solution + +### Build the Solution +```bash +dotnet build +``` + +### Run Tests +```bash +dotnet test +``` + +### Run Performance Benchmark +```bash +dotnet run --project FibonacciBenchmark +``` + +## Performance Results + +The benchmark demonstrates clear performance differences: + +- **Iterative**: Fastest and most memory efficient +- **Matrix Exponentiation**: Best for very large numbers (O(log n)) +- **Dynamic Programming**: Good balance, useful when you need all values up to n +- **Memoized Recursive**: Good for multiple calculations, but higher memory overhead +- **Recursive**: Exponential time complexity, only suitable for small inputs + +## Test Coverage + +The test suite includes: +- Correctness verification for known Fibonacci values +- Consistency testing across all implementations +- Edge case handling (negative inputs) +- Large number testing for efficient implementations +- Unique naming verification + +## Key Insights + +1. **Recursive** approach demonstrates the importance of algorithm optimization +2. **Iterative** shows how simple changes can dramatically improve performance +3. **Memoization** illustrates the time-space tradeoff in optimization +4. **Matrix multiplication** shows advanced mathematical approaches to optimization +5. **Dynamic Programming** demonstrates systematic bottom-up problem solving \ No newline at end of file