diff --git a/config.json b/config.json
index 16d423e2b0..1dbc6fb584 100644
--- a/config.json
+++ b/config.json
@@ -995,6 +995,17 @@
"Algorithms"
]
},
+ {
+ "uuid": "0ed2de0f-70da-4f04-834e-01bfb0aa48d3",
+ "slug": "complex-numbers",
+ "core": false,
+ "unlocked_by": "leap",
+ "difficulty": 6,
+ "topics": [
+ "Tuples",
+ "Mathematics"
+ ]
+ },
{
"uuid": "d03a9508-336a-4425-8f47-f04317d1ba15",
"slug": "poker",
diff --git a/exercises/Exercises.All.sln b/exercises/Exercises.All.sln
index 108d1d08bb..c32d1e5e69 100644
--- a/exercises/Exercises.All.sln
+++ b/exercises/Exercises.All.sln
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26228.4
+VisualStudioVersion = 15.0.26403.7
MinimumVisualStudioVersion = 15.0.26124.0
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Accumulate", "accumulate\Accumulate.csproj", "{F16C0EE1-6923-4328-B015-363CF24FF867}"
EndProject
@@ -218,6 +218,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpiralMatrix", "spiral-matr
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CollatzConjecture", "collatz-conjecture\CollatzConjecture.csproj", "{18BC2EE7-E798-40DE-A346-0B803137E67D}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComplexNumbers", "complex-numbers\ComplexNumbers.csproj", "{D0399EAC-5563-4234-9828-0C607BAF7623}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -1524,6 +1526,18 @@ Global
{18BC2EE7-E798-40DE-A346-0B803137E67D}.Release|x64.Build.0 = Release|Any CPU
{18BC2EE7-E798-40DE-A346-0B803137E67D}.Release|x86.ActiveCfg = Release|Any CPU
{18BC2EE7-E798-40DE-A346-0B803137E67D}.Release|x86.Build.0 = Release|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Debug|x64.Build.0 = Debug|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Debug|x86.Build.0 = Debug|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Release|x64.ActiveCfg = Release|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Release|x64.Build.0 = Release|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Release|x86.ActiveCfg = Release|Any CPU
+ {D0399EAC-5563-4234-9828-0C607BAF7623}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/exercises/Exercises.Default.sln b/exercises/Exercises.Default.sln
index 3666f1041f..ae75b953c1 100644
--- a/exercises/Exercises.Default.sln
+++ b/exercises/Exercises.Default.sln
@@ -1,216 +1,218 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26228.4
+VisualStudioVersion = 15.0.26403.7
MinimumVisualStudioVersion = 15.0.26124.0
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Accumulate", "accumulate\Accumulate.csproj", "{F16C0EE1-6923-4328-B015-363CF24FF867}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Accumulate", "accumulate\Accumulate.csproj", "{F16C0EE1-6923-4328-B015-363CF24FF867}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Acronym", "acronym\Acronym.csproj", "{0B8FF29D-6707-4112-8398-6F383A31524D}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Acronym", "acronym\Acronym.csproj", "{0B8FF29D-6707-4112-8398-6F383A31524D}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AllYourBase", "all-your-base\AllYourBase.csproj", "{CFA7CC8D-C585-4AE6-BAD0-840D3DC62A43}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AllYourBase", "all-your-base\AllYourBase.csproj", "{CFA7CC8D-C585-4AE6-BAD0-840D3DC62A43}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Allergies", "allergies\Allergies.csproj", "{C9372234-0F42-4E0E-BD55-EAC351D9256C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Allergies", "allergies\Allergies.csproj", "{C9372234-0F42-4E0E-BD55-EAC351D9256C}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Alphametics", "alphametics\Alphametics.csproj", "{BA7E7612-8AE8-4246-8E09-190445DF9900}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Alphametics", "alphametics\Alphametics.csproj", "{BA7E7612-8AE8-4246-8E09-190445DF9900}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Anagram", "anagram\Anagram.csproj", "{815C764D-CC32-4BD9-8F32-78A2D030C71E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Anagram", "anagram\Anagram.csproj", "{815C764D-CC32-4BD9-8F32-78A2D030C71E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AtbashCipher", "atbash-cipher\AtbashCipher.csproj", "{4CEF0893-7AE3-455E-98C1-89BB822AC1C2}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AtbashCipher", "atbash-cipher\AtbashCipher.csproj", "{4CEF0893-7AE3-455E-98C1-89BB822AC1C2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BankAccount", "bank-account\BankAccount.csproj", "{12BF4BEE-261C-42B8-B2DC-D80262744AC2}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BankAccount", "bank-account\BankAccount.csproj", "{12BF4BEE-261C-42B8-B2DC-D80262744AC2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BeerSong", "beer-song\BeerSong.csproj", "{BE87F8A4-E216-40A7-86CF-153A15BAFEF8}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BeerSong", "beer-song\BeerSong.csproj", "{BE87F8A4-E216-40A7-86CF-153A15BAFEF8}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BinarySearch", "binary-search\BinarySearch.csproj", "{1F8B6B66-7A58-4F84-9D3A-FB454D2CC3E2}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BinarySearch", "binary-search\BinarySearch.csproj", "{1F8B6B66-7A58-4F84-9D3A-FB454D2CC3E2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BinarySearchTree", "binary-search-tree\BinarySearchTree.csproj", "{6FBC562A-7721-4846-81B6-D79D5AF576C5}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BinarySearchTree", "binary-search-tree\BinarySearchTree.csproj", "{6FBC562A-7721-4846-81B6-D79D5AF576C5}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bob", "bob\Bob.csproj", "{C8D01AEE-9AD9-4134-9721-3442C59702B2}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bob", "bob\Bob.csproj", "{C8D01AEE-9AD9-4134-9721-3442C59702B2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BookStore", "book-store\BookStore.csproj", "{F9175D9F-7602-4BE1-B565-EA723D0CDF0A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookStore", "book-store\BookStore.csproj", "{F9175D9F-7602-4BE1-B565-EA723D0CDF0A}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bowling", "bowling\Bowling.csproj", "{CE0CA302-A594-422D-A215-E78F2F3AF0CE}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bowling", "bowling\Bowling.csproj", "{CE0CA302-A594-422D-A215-E78F2F3AF0CE}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BracketPush", "bracket-push\BracketPush.csproj", "{A9584773-6FD0-42CB-B94E-A61125C5C1E7}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BracketPush", "bracket-push\BracketPush.csproj", "{A9584773-6FD0-42CB-B94E-A61125C5C1E7}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Change", "change\Change.csproj", "{31595C04-4C0E-4A72-90A1-054EE5C47BFC}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Change", "change\Change.csproj", "{31595C04-4C0E-4A72-90A1-054EE5C47BFC}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CircularBuffer", "circular-buffer\CircularBuffer.csproj", "{A3016178-CED9-4DDD-8FF4-03C420AD77B9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CircularBuffer", "circular-buffer\CircularBuffer.csproj", "{A3016178-CED9-4DDD-8FF4-03C420AD77B9}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Clock", "clock\Clock.csproj", "{D498F024-BA85-4543-88F9-1DCF239470C7}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Clock", "clock\Clock.csproj", "{D498F024-BA85-4543-88F9-1DCF239470C7}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Connect", "connect\Connect.csproj", "{2C9B22CE-770A-400B-BD9B-287030CF12BB}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Connect", "connect\Connect.csproj", "{2C9B22CE-770A-400B-BD9B-287030CF12BB}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CryptoSquare", "crypto-square\CryptoSquare.csproj", "{A6151CB7-713E-43B0-A403-9C73F9936D4B}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CryptoSquare", "crypto-square\CryptoSquare.csproj", "{A6151CB7-713E-43B0-A403-9C73F9936D4B}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomSet", "custom-set\CustomSet.csproj", "{3ED88500-2825-4F24-81E6-C816FF89A5B5}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomSet", "custom-set\CustomSet.csproj", "{3ED88500-2825-4F24-81E6-C816FF89A5B5}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diamond", "diamond\Diamond.csproj", "{93092B18-7447-4F06-AD46-FC7B39EC9E89}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Diamond", "diamond\Diamond.csproj", "{93092B18-7447-4F06-AD46-FC7B39EC9E89}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DifferenceOfSquares", "difference-of-squares\DifferenceOfSquares.csproj", "{07DA1459-6101-43E1-A1AF-48ABD8D62ADD}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DifferenceOfSquares", "difference-of-squares\DifferenceOfSquares.csproj", "{07DA1459-6101-43E1-A1AF-48ABD8D62ADD}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiffieHellman", "diffie-hellman\DiffieHellman.csproj", "{58000112-543C-401E-9D1C-EBABC5A67A14}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiffieHellman", "diffie-hellman\DiffieHellman.csproj", "{58000112-543C-401E-9D1C-EBABC5A67A14}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dominoes", "dominoes\Dominoes.csproj", "{99CCDA48-1CA3-46B9-89B8-0B45106304FC}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dominoes", "dominoes\Dominoes.csproj", "{99CCDA48-1CA3-46B9-89B8-0B45106304FC}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ErrorHandling", "error-handling\ErrorHandling.csproj", "{B341FE12-9233-4E34-8C1C-4E62AC2F8AE1}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ErrorHandling", "error-handling\ErrorHandling.csproj", "{B341FE12-9233-4E34-8C1C-4E62AC2F8AE1}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etl", "etl\Etl.csproj", "{B7E811DB-8575-4C77-9AF9-49DA840557C2}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Etl", "etl\Etl.csproj", "{B7E811DB-8575-4C77-9AF9-49DA840557C2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FlattenArray", "flatten-array\FlattenArray.csproj", "{FD52020A-6F1E-42FA-81CE-1F6A8E7C9737}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FlattenArray", "flatten-array\FlattenArray.csproj", "{FD52020A-6F1E-42FA-81CE-1F6A8E7C9737}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FoodChain", "food-chain\FoodChain.csproj", "{FED33EF6-AC47-4E9A-B615-66B16B846E94}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FoodChain", "food-chain\FoodChain.csproj", "{FED33EF6-AC47-4E9A-B615-66B16B846E94}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Forth", "forth\Forth.csproj", "{ACB24C7C-C92D-43F9-B1B1-9444696DAD36}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Forth", "forth\Forth.csproj", "{ACB24C7C-C92D-43F9-B1B1-9444696DAD36}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gigasecond", "gigasecond\Gigasecond.csproj", "{2C8C5AE3-D04F-48F4-8AF5-D7535277B7A0}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gigasecond", "gigasecond\Gigasecond.csproj", "{2C8C5AE3-D04F-48F4-8AF5-D7535277B7A0}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GoCounting", "go-counting\GoCounting.csproj", "{A5417213-F20A-4C06-9D8B-8688B0C4EE61}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GoCounting", "go-counting\GoCounting.csproj", "{A5417213-F20A-4C06-9D8B-8688B0C4EE61}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GradeSchool", "grade-school\GradeSchool.csproj", "{A03A743F-C645-45CB-80A0-BE10D2FC1A13}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GradeSchool", "grade-school\GradeSchool.csproj", "{A03A743F-C645-45CB-80A0-BE10D2FC1A13}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Grains", "grains\Grains.csproj", "{29C6234D-5562-4495-A014-92388EE4518E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grains", "grains\Grains.csproj", "{29C6234D-5562-4495-A014-92388EE4518E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Grep", "grep\Grep.csproj", "{4427F391-652B-4804-BED4-7CD0D218FE28}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Grep", "grep\Grep.csproj", "{4427F391-652B-4804-BED4-7CD0D218FE28}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hamming", "hamming\Hamming.csproj", "{61BAD6B6-3A48-4E9B-8333-F1884F68A0A5}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hamming", "hamming\Hamming.csproj", "{61BAD6B6-3A48-4E9B-8333-F1884F68A0A5}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld", "hello-world\HelloWorld.csproj", "{0CC90F16-9B6C-4C87-A49B-600DB3DF0D2A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloWorld", "hello-world\HelloWorld.csproj", "{0CC90F16-9B6C-4C87-A49B-600DB3DF0D2A}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "House", "house\House.csproj", "{4D68748B-6DEF-4E05-830C-43AF09B2CE8A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "House", "house\House.csproj", "{4D68748B-6DEF-4E05-830C-43AF09B2CE8A}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Isogram", "isogram\Isogram.csproj", "{91CF9FC4-105B-4E21-8692-1D5E539E42E9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Isogram", "isogram\Isogram.csproj", "{91CF9FC4-105B-4E21-8692-1D5E539E42E9}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KindergartenGarden", "kindergarten-garden\KindergartenGarden.csproj", "{D504C93E-AE1A-4852-9727-6E565632D38E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KindergartenGarden", "kindergarten-garden\KindergartenGarden.csproj", "{D504C93E-AE1A-4852-9727-6E565632D38E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LargestSeriesProduct", "largest-series-product\LargestSeriesProduct.csproj", "{1632128F-A60B-49B8-A5DB-05F3F1A3B84C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LargestSeriesProduct", "largest-series-product\LargestSeriesProduct.csproj", "{1632128F-A60B-49B8-A5DB-05F3F1A3B84C}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Leap", "leap\Leap.csproj", "{8CA92DF0-3C60-4F23-9890-806744E1F514}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Leap", "leap\Leap.csproj", "{8CA92DF0-3C60-4F23-9890-806744E1F514}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ledger", "ledger\Ledger.csproj", "{507ED1D4-F905-4AAD-897D-AD403FA56663}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ledger", "ledger\Ledger.csproj", "{507ED1D4-F905-4AAD-897D-AD403FA56663}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LinkedList", "linked-list\LinkedList.csproj", "{C9ADF8BA-8239-4514-8906-A8E09A1A874C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LinkedList", "linked-list\LinkedList.csproj", "{C9ADF8BA-8239-4514-8906-A8E09A1A874C}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ListOps", "list-ops\ListOps.csproj", "{7370EDAC-0F7C-4008-A8C6-8C6240EE518E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ListOps", "list-ops\ListOps.csproj", "{7370EDAC-0F7C-4008-A8C6-8C6240EE518E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Luhn", "luhn\Luhn.csproj", "{6B934B23-6A75-42FC-9B6C-B3F4CFA6673F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Luhn", "luhn\Luhn.csproj", "{6B934B23-6A75-42FC-9B6C-B3F4CFA6673F}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markdown", "markdown\Markdown.csproj", "{AFA39C3B-C0A0-445C-8129-4DFD3009B56E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Markdown", "markdown\Markdown.csproj", "{AFA39C3B-C0A0-445C-8129-4DFD3009B56E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Matrix", "matrix\Matrix.csproj", "{BCC05EA8-DB49-4684-9888-1B8688BE3FA6}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Matrix", "matrix\Matrix.csproj", "{BCC05EA8-DB49-4684-9888-1B8688BE3FA6}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Meetup", "meetup\Meetup.csproj", "{87FCABD0-2762-464E-9489-415E95D12427}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Meetup", "meetup\Meetup.csproj", "{87FCABD0-2762-464E-9489-415E95D12427}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Minesweeper", "minesweeper\Minesweeper.csproj", "{C84E079F-9790-425A-9C86-C69122811E6F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Minesweeper", "minesweeper\Minesweeper.csproj", "{C84E079F-9790-425A-9C86-C69122811E6F}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NthPrime", "nth-prime\NthPrime.csproj", "{F437861F-4FF8-418E-B205-FB04D23E0312}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NthPrime", "nth-prime\NthPrime.csproj", "{F437861F-4FF8-418E-B205-FB04D23E0312}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NucleotideCount", "nucleotide-count\NucleotideCount.csproj", "{6A9E4125-03D1-4DAF-8333-336C49360621}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NucleotideCount", "nucleotide-count\NucleotideCount.csproj", "{6A9E4125-03D1-4DAF-8333-336C49360621}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OcrNumbers", "ocr-numbers\OcrNumbers.csproj", "{1BA7884A-3D6F-4479-A0F9-44385662FE24}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OcrNumbers", "ocr-numbers\OcrNumbers.csproj", "{1BA7884A-3D6F-4479-A0F9-44385662FE24}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PalindromeProducts", "palindrome-products\PalindromeProducts.csproj", "{FBE7E7D4-EBF1-4B0C-B63E-540DA1C9CEAA}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PalindromeProducts", "palindrome-products\PalindromeProducts.csproj", "{FBE7E7D4-EBF1-4B0C-B63E-540DA1C9CEAA}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pangram", "pangram\Pangram.csproj", "{7E047279-FD70-440F-8FB9-B47E88747EF4}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pangram", "pangram\Pangram.csproj", "{7E047279-FD70-440F-8FB9-B47E88747EF4}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ParallelLetterFrequency", "parallel-letter-frequency\ParallelLetterFrequency.csproj", "{A60E1C9A-6E52-42F7-ACA2-BB58DA64361E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ParallelLetterFrequency", "parallel-letter-frequency\ParallelLetterFrequency.csproj", "{A60E1C9A-6E52-42F7-ACA2-BB58DA64361E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PascalsTriangle", "pascals-triangle\PascalsTriangle.csproj", "{427A9EFA-5E06-4176-A287-0DC0E0CD3E86}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PascalsTriangle", "pascals-triangle\PascalsTriangle.csproj", "{427A9EFA-5E06-4176-A287-0DC0E0CD3E86}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PerfectNumbers", "perfect-numbers\PerfectNumbers.csproj", "{4B864ACE-495C-46FB-870F-4D794C02C8F9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PerfectNumbers", "perfect-numbers\PerfectNumbers.csproj", "{4B864ACE-495C-46FB-870F-4D794C02C8F9}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PhoneNumber", "phone-number\PhoneNumber.csproj", "{17419CBD-2AC6-479F-ACA7-D478F9FBF397}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PhoneNumber", "phone-number\PhoneNumber.csproj", "{17419CBD-2AC6-479F-ACA7-D478F9FBF397}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PigLatin", "pig-latin\PigLatin.csproj", "{03856292-CE47-45EE-91D4-6ACF27E1925F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PigLatin", "pig-latin\PigLatin.csproj", "{03856292-CE47-45EE-91D4-6ACF27E1925F}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Poker", "poker\Poker.csproj", "{762A1A84-4B1E-49A1-BC58-4988BB489F7C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Poker", "poker\Poker.csproj", "{762A1A84-4B1E-49A1-BC58-4988BB489F7C}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pov", "pov\Pov.csproj", "{3B42D204-BFB1-456F-B5F5-9421EECE465A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pov", "pov\Pov.csproj", "{3B42D204-BFB1-456F-B5F5-9421EECE465A}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrimeFactors", "prime-factors\PrimeFactors.csproj", "{F8BC96E4-15E2-4F64-9D25-E167EC207404}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PrimeFactors", "prime-factors\PrimeFactors.csproj", "{F8BC96E4-15E2-4F64-9D25-E167EC207404}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProteinTranslation", "protein-translation\ProteinTranslation.csproj", "{A2EB7FD7-7660-4297-B431-9833CB65A848}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProteinTranslation", "protein-translation\ProteinTranslation.csproj", "{A2EB7FD7-7660-4297-B431-9833CB65A848}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Proverb", "proverb\Proverb.csproj", "{086D5907-AAF8-4488-A2AD-4A3430D74FAB}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Proverb", "proverb\Proverb.csproj", "{086D5907-AAF8-4488-A2AD-4A3430D74FAB}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythagoreanTriplet", "pythagorean-triplet\PythagoreanTriplet.csproj", "{6ACF8F5B-B1E1-439B-AFFF-42D6B143760E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PythagoreanTriplet", "pythagorean-triplet\PythagoreanTriplet.csproj", "{6ACF8F5B-B1E1-439B-AFFF-42D6B143760E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QueenAttack", "queen-attack\QueenAttack.csproj", "{50FB388F-6D68-400C-A919-0414B87466A7}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QueenAttack", "queen-attack\QueenAttack.csproj", "{50FB388F-6D68-400C-A919-0414B87466A7}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RailFenceCipher", "rail-fence-cipher\RailFenceCipher.csproj", "{F1957BE5-4CA4-494B-A62B-AA4F5E4D460A}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RailFenceCipher", "rail-fence-cipher\RailFenceCipher.csproj", "{F1957BE5-4CA4-494B-A62B-AA4F5E4D460A}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Raindrops", "raindrops\Raindrops.csproj", "{F2077E7E-7305-4FC7-8D67-D90037B3F370}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Raindrops", "raindrops\Raindrops.csproj", "{F2077E7E-7305-4FC7-8D67-D90037B3F370}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Rectangles", "rectangles\Rectangles.csproj", "{A8777E05-E344-4673-915B-E9224002C423}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Rectangles", "rectangles\Rectangles.csproj", "{A8777E05-E344-4673-915B-E9224002C423}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RnaTranscription", "rna-transcription\RnaTranscription.csproj", "{05B08A0C-5BCA-4FF6-9C42-9DFF5E7DCDEA}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RnaTranscription", "rna-transcription\RnaTranscription.csproj", "{05B08A0C-5BCA-4FF6-9C42-9DFF5E7DCDEA}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RobotName", "robot-name\RobotName.csproj", "{C9CFE66E-6921-4CCE-83A7-D5B54812122F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RobotName", "robot-name\RobotName.csproj", "{C9CFE66E-6921-4CCE-83A7-D5B54812122F}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RobotSimulator", "robot-simulator\RobotSimulator.csproj", "{A0FD4472-99E5-4FBC-A6A7-20786EA167DF}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RobotSimulator", "robot-simulator\RobotSimulator.csproj", "{A0FD4472-99E5-4FBC-A6A7-20786EA167DF}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RomanNumerals", "roman-numerals\RomanNumerals.csproj", "{86272012-C994-41F7-BFAF-4BED50797B22}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RomanNumerals", "roman-numerals\RomanNumerals.csproj", "{86272012-C994-41F7-BFAF-4BED50797B22}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunLengthEncoding", "run-length-encoding\RunLengthEncoding.csproj", "{94B89563-1E74-42F9-96A5-19CD800AFECB}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RunLengthEncoding", "run-length-encoding\RunLengthEncoding.csproj", "{94B89563-1E74-42F9-96A5-19CD800AFECB}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaddlePoints", "saddle-points\SaddlePoints.csproj", "{E5D2964E-CFE9-4DE6-99B5-1F54F9984F65}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaddlePoints", "saddle-points\SaddlePoints.csproj", "{E5D2964E-CFE9-4DE6-99B5-1F54F9984F65}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Say", "say\Say.csproj", "{C92F8E81-6FB1-46FF-9B68-2D126F8903E6}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Say", "say\Say.csproj", "{C92F8E81-6FB1-46FF-9B68-2D126F8903E6}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScaleGenerator", "scale-generator\ScaleGenerator.csproj", "{B9207BE6-2577-4C49-AF5F-130A17BBEA73}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ScaleGenerator", "scale-generator\ScaleGenerator.csproj", "{B9207BE6-2577-4C49-AF5F-130A17BBEA73}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScrabbleScore", "scrabble-score\ScrabbleScore.csproj", "{40C19FFA-E1E1-4589-86E4-B7BEF336CE79}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ScrabbleScore", "scrabble-score\ScrabbleScore.csproj", "{40C19FFA-E1E1-4589-86E4-B7BEF336CE79}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SecretHandshake", "secret-handshake\SecretHandshake.csproj", "{64324C38-03F7-4624-8F00-B85183DDBF99}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SecretHandshake", "secret-handshake\SecretHandshake.csproj", "{64324C38-03F7-4624-8F00-B85183DDBF99}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Series", "series\Series.csproj", "{14C24193-D5E0-4D29-B270-C27B43CC1925}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Series", "series\Series.csproj", "{14C24193-D5E0-4D29-B270-C27B43CC1925}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SgfParsing", "sgf-parsing\SgfParsing.csproj", "{B25208A4-3C80-411E-A36A-7BC4AA506DC7}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SgfParsing", "sgf-parsing\SgfParsing.csproj", "{B25208A4-3C80-411E-A36A-7BC4AA506DC7}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sieve", "sieve\Sieve.csproj", "{2A56B16C-3980-4380-84E8-B20DEEEFB5D6}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sieve", "sieve\Sieve.csproj", "{2A56B16C-3980-4380-84E8-B20DEEEFB5D6}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleCipher", "simple-cipher\SimpleCipher.csproj", "{269971FF-B748-4B95-8507-534C229A60B9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleCipher", "simple-cipher\SimpleCipher.csproj", "{269971FF-B748-4B95-8507-534C229A60B9}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleLinkedList", "simple-linked-list\SimpleLinkedList.csproj", "{F6244150-1AD9-470E-B0F0-72389B10639E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleLinkedList", "simple-linked-list\SimpleLinkedList.csproj", "{F6244150-1AD9-470E-B0F0-72389B10639E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpaceAge", "space-age\SpaceAge.csproj", "{D1102F23-265A-4CA8-975C-75564DFFAA04}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SpaceAge", "space-age\SpaceAge.csproj", "{D1102F23-265A-4CA8-975C-75564DFFAA04}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Strain", "strain\Strain.csproj", "{F4C5ECB6-2C17-4BC9-BF8F-BA9117BD2843}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Strain", "strain\Strain.csproj", "{F4C5ECB6-2C17-4BC9-BF8F-BA9117BD2843}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sublist", "sublist\Sublist.csproj", "{B9C4BF5F-2D56-4B06-A1EE-1E1CC642D14B}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sublist", "sublist\Sublist.csproj", "{B9C4BF5F-2D56-4B06-A1EE-1E1CC642D14B}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SumOfMultiples", "sum-of-multiples\SumOfMultiples.csproj", "{6CE987BF-9677-476C-8BB9-1BE7CC16F932}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SumOfMultiples", "sum-of-multiples\SumOfMultiples.csproj", "{6CE987BF-9677-476C-8BB9-1BE7CC16F932}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tournament", "tournament\Tournament.csproj", "{BD63E691-0A53-46CE-B687-E3CD95F1D4B1}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tournament", "tournament\Tournament.csproj", "{BD63E691-0A53-46CE-B687-E3CD95F1D4B1}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Transpose", "transpose\Transpose.csproj", "{FCF9AB0E-4310-4BCB-8682-833450658B97}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transpose", "transpose\Transpose.csproj", "{FCF9AB0E-4310-4BCB-8682-833450658B97}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TreeBuilding", "tree-building\TreeBuilding.csproj", "{607AB17F-1305-4002-A980-DB60699688F1}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TreeBuilding", "tree-building\TreeBuilding.csproj", "{607AB17F-1305-4002-A980-DB60699688F1}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Triangle", "triangle\Triangle.csproj", "{128B3A5D-E28C-4C7F-8B16-3202D0F73A00}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Triangle", "triangle\Triangle.csproj", "{128B3A5D-E28C-4C7F-8B16-3202D0F73A00}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TwelveDays", "twelve-days\TwelveDays.csproj", "{B98F63AB-F0C8-4594-98BD-0BBBAEA4C4E9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TwelveDays", "twelve-days\TwelveDays.csproj", "{B98F63AB-F0C8-4594-98BD-0BBBAEA4C4E9}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TwoBucket", "two-bucket\TwoBucket.csproj", "{62EBA4E5-BD13-4F7C-85E6-65D633B3FB6C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TwoBucket", "two-bucket\TwoBucket.csproj", "{62EBA4E5-BD13-4F7C-85E6-65D633B3FB6C}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VariableLengthQuantity", "variable-length-quantity\VariableLengthQuantity.csproj", "{DFE95B37-24F5-417A-8C3F-788255CE8A04}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VariableLengthQuantity", "variable-length-quantity\VariableLengthQuantity.csproj", "{DFE95B37-24F5-417A-8C3F-788255CE8A04}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WordCount", "word-count\WordCount.csproj", "{77E253C3-5FCE-45A4-B285-BE24945E0D70}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WordCount", "word-count\WordCount.csproj", "{77E253C3-5FCE-45A4-B285-BE24945E0D70}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WordSearch", "word-search\WordSearch.csproj", "{32ECF281-6D99-42D4-AD00-C8B56A8270F8}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WordSearch", "word-search\WordSearch.csproj", "{32ECF281-6D99-42D4-AD00-C8B56A8270F8}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wordy", "wordy\Wordy.csproj", "{2EBD1C45-9D80-413A-9BE8-4ECB43C06843}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wordy", "wordy\Wordy.csproj", "{2EBD1C45-9D80-413A-9BE8-4ECB43C06843}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZebraPuzzle", "zebra-puzzle\ZebraPuzzle.csproj", "{79198D56-C3F2-49D6-B8BF-5BB674B6F7A2}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZebraPuzzle", "zebra-puzzle\ZebraPuzzle.csproj", "{79198D56-C3F2-49D6-B8BF-5BB674B6F7A2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zipper", "zipper\Zipper.csproj", "{83504141-FF2A-427E-8A51-9FA0E9037A78}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Zipper", "zipper\Zipper.csproj", "{83504141-FF2A-427E-8A51-9FA0E9037A78}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RotationalCipher", "rotational-cipher\RotationalCipher.csproj", "{F72CEE93-2F93-4408-8FCC-FBEB3AF0C285}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RotationalCipher", "rotational-cipher\RotationalCipher.csproj", "{F72CEE93-2F93-4408-8FCC-FBEB3AF0C285}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TwoFer", "two-fer\TwoFer.csproj", "{F82A2061-8DE1-4A54-882F-6D57A5518B37}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TwoFer", "two-fer\TwoFer.csproj", "{F82A2061-8DE1-4A54-882F-6D57A5518B37}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpiralMatrix", "spiral-matrix\SpiralMatrix.csproj", "{0D1B97CC-3395-481C-A6ED-B26063729241}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SpiralMatrix", "spiral-matrix\SpiralMatrix.csproj", "{0D1B97CC-3395-481C-A6ED-B26063729241}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CollatzConjecture", "collatz-conjecture\CollatzConjecture.csproj", "{37BA7FE8-84D3-45BB-9BDA-51917B951F40}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CollatzConjecture", "collatz-conjecture\CollatzConjecture.csproj", "{37BA7FE8-84D3-45BB-9BDA-51917B951F40}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComplexNumbers", "complex-numbers\ComplexNumbers.csproj", "{2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -1482,6 +1484,18 @@ Global
{37BA7FE8-84D3-45BB-9BDA-51917B951F40}.Release|x64.Build.0 = Release|Any CPU
{37BA7FE8-84D3-45BB-9BDA-51917B951F40}.Release|x86.ActiveCfg = Release|Any CPU
{37BA7FE8-84D3-45BB-9BDA-51917B951F40}.Release|x86.Build.0 = Release|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Debug|x64.Build.0 = Debug|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Debug|x86.Build.0 = Debug|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Release|x64.ActiveCfg = Release|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Release|x64.Build.0 = Release|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Release|x86.ActiveCfg = Release|Any CPU
+ {2DC6B70F-1D7D-489F-BCD9-32BE0462AE14}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/exercises/complex-numbers/ComplexNumbers.cs b/exercises/complex-numbers/ComplexNumbers.cs
new file mode 100644
index 0000000000..5a1bcfbc5f
--- /dev/null
+++ b/exercises/complex-numbers/ComplexNumbers.cs
@@ -0,0 +1,53 @@
+using System;
+
+public struct ComplexNumber
+{
+ public ComplexNumber(double real, double imaginary)
+ {
+ }
+
+ public double Real()
+ {
+ throw new NotImplementedException("You need to implement this function.");
+ }
+
+ public double Imaginary()
+ {
+ throw new NotImplementedException("You need to implement this function.");
+ }
+
+ public ComplexNumber Mul(ComplexNumber other)
+ {
+ throw new NotImplementedException("You need to implement this function.");
+ }
+
+ public ComplexNumber Add(ComplexNumber other)
+ {
+ throw new NotImplementedException("You need to implement this function.");
+ }
+
+ public ComplexNumber Sub(ComplexNumber other)
+ {
+ throw new NotImplementedException("You need to implement this function.");
+ }
+
+ public ComplexNumber Div(ComplexNumber other)
+ {
+ throw new NotImplementedException("You need to implement this function.");
+ }
+
+ public double Abs()
+ {
+ throw new NotImplementedException("You need to implement this function.");
+ }
+
+ public ComplexNumber Conjugate()
+ {
+ throw new NotImplementedException("You need to implement this function.");
+ }
+
+ public ComplexNumber Exp()
+ {
+ throw new NotImplementedException("You need to implement this function.");
+ }
+}
\ No newline at end of file
diff --git a/exercises/complex-numbers/ComplexNumbers.csproj b/exercises/complex-numbers/ComplexNumbers.csproj
new file mode 100644
index 0000000000..abe7054ca4
--- /dev/null
+++ b/exercises/complex-numbers/ComplexNumbers.csproj
@@ -0,0 +1,18 @@
+
+
+
+ Exe
+ netcoreapp1.0
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/exercises/complex-numbers/ComplexNumbersTest.cs b/exercises/complex-numbers/ComplexNumbersTest.cs
new file mode 100644
index 0000000000..f2016ece46
--- /dev/null
+++ b/exercises/complex-numbers/ComplexNumbersTest.cs
@@ -0,0 +1,255 @@
+// This file was auto-generated based on version 1.0.0 of the canonical data.
+
+using Xunit;
+using System;
+
+public class ComplexNumbersTest
+{
+ [Fact]
+ public void Real_part_of_a_purely_real_number()
+ {
+ var sut = new ComplexNumber(1, 0);
+ Assert.Equal(1, sut.Real());
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Real_part_of_a_purely_imaginary_number()
+ {
+ var sut = new ComplexNumber(0, 1);
+ Assert.Equal(0, sut.Real());
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Real_part_of_a_number_with_real_and_imaginary_part()
+ {
+ var sut = new ComplexNumber(1, 2);
+ Assert.Equal(1, sut.Real());
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Imaginary_part_of_a_purely_real_number()
+ {
+ var sut = new ComplexNumber(1, 0);
+ Assert.Equal(0, sut.Imaginary());
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Imaginary_part_of_a_purely_imaginary_number()
+ {
+ var sut = new ComplexNumber(0, 1);
+ Assert.Equal(1, sut.Imaginary());
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Imaginary_part_of_a_number_with_real_and_imaginary_part()
+ {
+ var sut = new ComplexNumber(1, 2);
+ Assert.Equal(2, sut.Imaginary());
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Imaginary_unit()
+ {
+ var sut = new ComplexNumber(0, 1);
+ var expected = new ComplexNumber(-1, 0);
+ Assert.Equal(expected.Real(), sut.Mul(new ComplexNumber(0, 1)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Mul(new ComplexNumber(0, 1)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Add_purely_real_numbers()
+ {
+ var sut = new ComplexNumber(1, 0);
+ var expected = new ComplexNumber(3, 0);
+ Assert.Equal(expected.Real(), sut.Add(new ComplexNumber(2, 0)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Add(new ComplexNumber(2, 0)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Add_purely_imaginary_numbers()
+ {
+ var sut = new ComplexNumber(0, 1);
+ var expected = new ComplexNumber(0, 3);
+ Assert.Equal(expected.Real(), sut.Add(new ComplexNumber(0, 2)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Add(new ComplexNumber(0, 2)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Add_numbers_with_real_and_imaginary_part()
+ {
+ var sut = new ComplexNumber(1, 2);
+ var expected = new ComplexNumber(4, 6);
+ Assert.Equal(expected.Real(), sut.Add(new ComplexNumber(3, 4)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Add(new ComplexNumber(3, 4)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Subtract_purely_real_numbers()
+ {
+ var sut = new ComplexNumber(1, 0);
+ var expected = new ComplexNumber(-1, 0);
+ Assert.Equal(expected.Real(), sut.Sub(new ComplexNumber(2, 0)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Sub(new ComplexNumber(2, 0)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Subtract_purely_imaginary_numbers()
+ {
+ var sut = new ComplexNumber(0, 1);
+ var expected = new ComplexNumber(0, -1);
+ Assert.Equal(expected.Real(), sut.Sub(new ComplexNumber(0, 2)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Sub(new ComplexNumber(0, 2)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Subtract_numbers_with_real_and_imaginary_part()
+ {
+ var sut = new ComplexNumber(1, 2);
+ var expected = new ComplexNumber(-2, -2);
+ Assert.Equal(expected.Real(), sut.Sub(new ComplexNumber(3, 4)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Sub(new ComplexNumber(3, 4)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Multiply_purely_real_numbers()
+ {
+ var sut = new ComplexNumber(1, 0);
+ var expected = new ComplexNumber(2, 0);
+ Assert.Equal(expected.Real(), sut.Mul(new ComplexNumber(2, 0)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Mul(new ComplexNumber(2, 0)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Multiply_purely_imaginary_numbers()
+ {
+ var sut = new ComplexNumber(0, 1);
+ var expected = new ComplexNumber(-2, 0);
+ Assert.Equal(expected.Real(), sut.Mul(new ComplexNumber(0, 2)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Mul(new ComplexNumber(0, 2)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Multiply_numbers_with_real_and_imaginary_part()
+ {
+ var sut = new ComplexNumber(1, 2);
+ var expected = new ComplexNumber(-5, 10);
+ Assert.Equal(expected.Real(), sut.Mul(new ComplexNumber(3, 4)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Mul(new ComplexNumber(3, 4)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Divide_purely_real_numbers()
+ {
+ var sut = new ComplexNumber(1, 0);
+ var expected = new ComplexNumber(0.5, 0);
+ Assert.Equal(expected.Real(), sut.Div(new ComplexNumber(2, 0)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Div(new ComplexNumber(2, 0)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Divide_purely_imaginary_numbers()
+ {
+ var sut = new ComplexNumber(0, 1);
+ var expected = new ComplexNumber(0.5, 0);
+ Assert.Equal(expected.Real(), sut.Div(new ComplexNumber(0, 2)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Div(new ComplexNumber(0, 2)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Divide_numbers_with_real_and_imaginary_part()
+ {
+ var sut = new ComplexNumber(1, 2);
+ var expected = new ComplexNumber(0.44, 0.08);
+ Assert.Equal(expected.Real(), sut.Div(new ComplexNumber(3, 4)).Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Div(new ComplexNumber(3, 4)).Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Absolute_value_of_a_positive_purely_real_number()
+ {
+ var sut = new ComplexNumber(5, 0);
+ Assert.Equal(5, sut.Abs());
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Absolute_value_of_a_negative_purely_real_number()
+ {
+ var sut = new ComplexNumber(-5, 0);
+ Assert.Equal(5, sut.Abs());
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Absolute_value_of_a_purely_imaginary_number_with_positive_imaginary_part()
+ {
+ var sut = new ComplexNumber(0, 5);
+ Assert.Equal(5, sut.Abs());
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Absolute_value_of_a_purely_imaginary_number_with_negative_imaginary_part()
+ {
+ var sut = new ComplexNumber(0, -5);
+ Assert.Equal(5, sut.Abs());
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Absolute_value_of_a_number_with_real_and_imaginary_part()
+ {
+ var sut = new ComplexNumber(3, 4);
+ Assert.Equal(5, sut.Abs());
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Conjugate_a_purely_real_number()
+ {
+ var sut = new ComplexNumber(5, 0);
+ var expected = new ComplexNumber(5, 0);
+ Assert.Equal(expected.Real(), sut.Conjugate().Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Conjugate().Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Conjugate_a_purely_imaginary_number()
+ {
+ var sut = new ComplexNumber(0, 5);
+ var expected = new ComplexNumber(0, -5);
+ Assert.Equal(expected.Real(), sut.Conjugate().Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Conjugate().Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Conjugate_a_number_with_real_and_imaginary_part()
+ {
+ var sut = new ComplexNumber(1, 1);
+ var expected = new ComplexNumber(1, -1);
+ Assert.Equal(expected.Real(), sut.Conjugate().Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Conjugate().Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Eulers_identity_formula()
+ {
+ var sut = new ComplexNumber(0, Math.PI);
+ var expected = new ComplexNumber(-1, 0);
+ Assert.Equal(expected.Real(), sut.Exp().Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Exp().Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Exponential_of_0()
+ {
+ var sut = new ComplexNumber(0, 0);
+ var expected = new ComplexNumber(1, 0);
+ Assert.Equal(expected.Real(), sut.Exp().Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Exp().Imaginary(), 15);
+ }
+
+ [Fact(Skip = "Remove to run test")]
+ public void Exponential_of_a_purely_real_number()
+ {
+ var sut = new ComplexNumber(1, 0);
+ var expected = new ComplexNumber(Math.E, 0);
+ Assert.Equal(expected.Real(), sut.Exp().Real(), 15);
+ Assert.Equal(expected.Imaginary(), sut.Exp().Imaginary(), 15);
+ }
+}
\ No newline at end of file
diff --git a/exercises/complex-numbers/Example.cs b/exercises/complex-numbers/Example.cs
new file mode 100644
index 0000000000..c9f9962a33
--- /dev/null
+++ b/exercises/complex-numbers/Example.cs
@@ -0,0 +1,78 @@
+using System;
+using System.Diagnostics;
+
+[DebuggerDisplay("{_real} + {_imaginary}i")]
+public struct ComplexNumber
+{
+ private readonly double _real;
+ private readonly double _imaginary;
+
+ public ComplexNumber(double real, double imaginary)
+ {
+ _real = real;
+ _imaginary = imaginary;
+ }
+
+ public double Real()
+ {
+ return _real;
+ }
+
+ public double Imaginary()
+ {
+ return _imaginary;
+ }
+
+ public ComplexNumber Mul(ComplexNumber other)
+ {
+ return new ComplexNumber(
+ _real * other._real - _imaginary * other._imaginary,
+ _imaginary * other._real + _real * other._imaginary);
+ }
+
+ public ComplexNumber Add(ComplexNumber other)
+ {
+ return new ComplexNumber(
+ _real + other._real,
+ _imaginary + other._imaginary);
+ }
+
+ public ComplexNumber Sub(ComplexNumber other)
+ {
+ return new ComplexNumber(
+ _real - other._real,
+ _imaginary - other._imaginary);
+ }
+
+ public ComplexNumber Div(ComplexNumber other)
+ {
+ var denominator = other._real * other._real + other._imaginary * other._imaginary;
+ var real = (_real * other._real + _imaginary * other._imaginary) / denominator;
+ var imaginary = (_imaginary * other._real - _real * _real * other._imaginary) / denominator;
+
+ return new ComplexNumber(real, imaginary);
+ }
+
+ public double Abs()
+ {
+ return Math.Sqrt(_real * _real + _imaginary * _imaginary);
+ }
+
+ public ComplexNumber Conjugate()
+ {
+ return new ComplexNumber(
+ _real,
+ -1 * _imaginary);
+ }
+
+ public ComplexNumber Exp()
+ {
+ var real = Math.Cos(_imaginary);
+ var imaginary = Math.Sin(_imaginary);
+ var factor = Math.Exp(_real);
+
+ return new ComplexNumber(
+ real * factor,
+ imaginary * factor);
+ }
+}
\ No newline at end of file
diff --git a/generators/Exercises/ComplexNumbers.cs b/generators/Exercises/ComplexNumbers.cs
new file mode 100644
index 0000000000..0cd906aed5
--- /dev/null
+++ b/generators/Exercises/ComplexNumbers.cs
@@ -0,0 +1,119 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Generators.Input;
+using Generators.Output;
+using Newtonsoft.Json.Linq;
+
+namespace Generators.Exercises
+{
+ public class ComplexNumbers : Exercise
+ {
+ protected override void UpdateCanonicalData(CanonicalData canonicalData)
+ {
+ canonicalData.Exercise = "complex-number";
+
+ // Ensure the Real and Imaginary methods are tested first as they're used later to assert equality between complex numbers
+ canonicalData.Cases = canonicalData.Cases.OrderBy(c => c.Property == "real" || c.Property == "imaginary" ? 0 : 1).ToArray();
+
+ foreach (var canonicalDataCase in canonicalData.Cases)
+ {
+ canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
+
+ // Process expected
+ if (IsComplexNumber(canonicalDataCase.Expected))
+ {
+ canonicalDataCase.UseVariableForExpected = true;
+ }
+
+ canonicalDataCase.Expected = ConvertToType(canonicalDataCase.Expected);
+
+ // Process constructor param
+ var constructorParamName = canonicalDataCase.Input.ContainsKey("input") ? "input" : "z1";
+
+ var constructorParamValues = canonicalDataCase.Input[constructorParamName]
+ .ConvertToEnumerable()
+ .Select(v => ConvertMathDouble(v))
+ .ToArray();
+
+ canonicalDataCase.ConstructorInput = new Dictionary
+ {
+ ["real"] = constructorParamValues[0],
+ ["imaginary"] = constructorParamValues[1]
+ };
+
+ canonicalDataCase.Input.Remove(constructorParamName);
+
+ // Process function param
+ var keys = canonicalDataCase.Input.Keys.ToArray();
+
+ foreach (var key in keys)
+ {
+ canonicalDataCase.Input[key] = ConvertToType(canonicalDataCase.Input[key]);
+ }
+ }
+ }
+
+ protected override string RenderTestMethodBodyAssert(TestMethodBody testMethodBody)
+ {
+ if (testMethodBody.UseVariableForExpected)
+ return RenderComplexNumberAssert(testMethodBody);
+
+ return base.RenderTestMethodBodyAssert(testMethodBody);
+ }
+
+ private static string RenderComplexNumberAssert(TestMethodBody testMethodBody)
+ {
+ var tmeplate = "Assert.Equal({{ ExpectedParameter }}.Real(), {{ TestedValue }}.Real(), 15);\r\nAssert.Equal({{ ExpectedParameter }}.Imaginary(), {{ TestedValue }}.Imaginary(), 15);";
+
+ return TemplateRenderer.RenderInline(tmeplate, testMethodBody.AssertTemplateParameters);
+ }
+
+ protected override HashSet GetUsingNamespaces()
+ {
+ var usingNamespaces = base.GetUsingNamespaces();
+ usingNamespaces.Add(typeof(Math).Namespace);
+
+ return usingNamespaces;
+ }
+
+ private object ConvertToType(object rawValue)
+ {
+ if (IsComplexNumber(rawValue))
+ {
+ var array = rawValue
+ .ConvertToEnumerable()
+ .Select(rv => ConvertToType(rv))
+ .ToArray();
+
+ return new UnescapedValue($"new ComplexNumber({array[0]}, {array[1]})");
+ }
+ else if (rawValue is string)
+ {
+ return ConvertMathDouble((string)rawValue);
+ }
+ else
+ {
+ return rawValue;
+ }
+ }
+
+ private bool IsComplexNumber(object rawValue)
+ {
+ return rawValue is JArray;
+ }
+
+ private object ConvertMathDouble(string value)
+ {
+ switch (value)
+ {
+ case "e":
+ return new UnescapedValue("Math.E");
+ case "pi":
+ return new UnescapedValue("Math.PI");
+ default:
+ return double.Parse(value);
+ }
+ }
+ }
+}
\ No newline at end of file