From 84d473d8f29e65b23ce12a859a45479974b5fe0c Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 17:56:26 +0800 Subject: [PATCH 01/18] Create reverser that reverses an array at a given position. --- .../Reverse.Tests/Reverse.Tests.csproj | 26 ++++++++++++ .../Reverse/Reverse.Tests/ReverserTests.cs | 41 +++++++++++++++++++ 73_Reverse/csharp/Reverse/Reverse.sln | 31 ++++++++++++++ 73_Reverse/csharp/Reverse/Reverse/Program.cs | 12 ++++++ .../csharp/Reverse/Reverse/Reverse.csproj | 8 ++++ 73_Reverse/csharp/Reverse/Reverse/Reverser.cs | 16 ++++++++ 6 files changed, 134 insertions(+) create mode 100644 73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj create mode 100644 73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs create mode 100644 73_Reverse/csharp/Reverse/Reverse.sln create mode 100644 73_Reverse/csharp/Reverse/Reverse/Program.cs create mode 100644 73_Reverse/csharp/Reverse/Reverse/Reverse.csproj create mode 100644 73_Reverse/csharp/Reverse/Reverse/Reverser.cs diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj b/73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj new file mode 100644 index 00000000..97b7bcce --- /dev/null +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj @@ -0,0 +1,26 @@ + + + + net5.0 + + false + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs new file mode 100644 index 00000000..2ab52d69 --- /dev/null +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs @@ -0,0 +1,41 @@ +using System.Linq; +using Xunit; + +namespace Reverse.Tests +{ + public class ReverserTests + { + [Theory] + [InlineData(new int[] { 1 }, new int[] { 1 })] + [InlineData(new int[] { 1, 2 }, new int[] { 2, 1 })] + [InlineData(new int[] { 1, 2, 3 }, new int[] { 3, 2, 1 })] + public void ReverserReversesTheArray(int[] input, int[] output) + { + Reverser.Reverse(input, input.Length); + + Assert.True(input.SequenceEqual(output)); + } + + [Fact] + public void ReverserReversesTheArrayAtTheSpecifiedIndex() + { + var input = new int[] { 1, 2, 3, 4 }; + var output = new int[] { 2, 1, 3, 4 }; + + Reverser.Reverse(input, 2); + + Assert.True(input.SequenceEqual(output)); + } + + [Fact] + public void ReversingAtIndexOneDoesNotChangeTheArray() + { + var input = new int[] { 1, 2 }; + var output = new int[] { 1, 2 }; + + Reverser.Reverse(input, 1); + + Assert.True(input.SequenceEqual(output)); + } + } +} diff --git a/73_Reverse/csharp/Reverse/Reverse.sln b/73_Reverse/csharp/Reverse/Reverse.sln new file mode 100644 index 00000000..96c338be --- /dev/null +++ b/73_Reverse/csharp/Reverse/Reverse.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32002.261 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reverse", "Reverse\Reverse.csproj", "{39463B63-6A71-4DCF-A4F2-FAA74FDEEC01}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Reverse.Tests", "Reverse.Tests\Reverse.Tests.csproj", "{96E824F8-0353-4FF2-9FEA-F850E2BE7312}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {39463B63-6A71-4DCF-A4F2-FAA74FDEEC01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39463B63-6A71-4DCF-A4F2-FAA74FDEEC01}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39463B63-6A71-4DCF-A4F2-FAA74FDEEC01}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39463B63-6A71-4DCF-A4F2-FAA74FDEEC01}.Release|Any CPU.Build.0 = Release|Any CPU + {96E824F8-0353-4FF2-9FEA-F850E2BE7312}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {96E824F8-0353-4FF2-9FEA-F850E2BE7312}.Debug|Any CPU.Build.0 = Debug|Any CPU + {96E824F8-0353-4FF2-9FEA-F850E2BE7312}.Release|Any CPU.ActiveCfg = Release|Any CPU + {96E824F8-0353-4FF2-9FEA-F850E2BE7312}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1DCA2723-D126-4B37-A698-D40DA03643A9} + EndGlobalSection +EndGlobal diff --git a/73_Reverse/csharp/Reverse/Reverse/Program.cs b/73_Reverse/csharp/Reverse/Reverse/Program.cs new file mode 100644 index 00000000..72ae99ef --- /dev/null +++ b/73_Reverse/csharp/Reverse/Reverse/Program.cs @@ -0,0 +1,12 @@ +using System; + +namespace Reverse +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + } + } +} diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverse.csproj b/73_Reverse/csharp/Reverse/Reverse/Reverse.csproj new file mode 100644 index 00000000..20827042 --- /dev/null +++ b/73_Reverse/csharp/Reverse/Reverse/Reverse.csproj @@ -0,0 +1,8 @@ + + + + Exe + net5.0 + + + diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs new file mode 100644 index 00000000..ed9b8748 --- /dev/null +++ b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs @@ -0,0 +1,16 @@ +namespace Reverse +{ + public class Reverser + { + public static void Reverse(int[] arrayToReverse, int indexToReverseTo) + { + for (int i = 0; i < indexToReverseTo / 2; i++) + { + int temp = arrayToReverse[i]; + int upperIndex = indexToReverseTo - 1 - i; + arrayToReverse[i] = arrayToReverse[upperIndex]; + arrayToReverse[upperIndex] = temp; + } + } + } +} From 2a809aabc99cb582bab93e259e1b3ec2d03a555b Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 18:09:57 +0800 Subject: [PATCH 02/18] Protect against index out of range exceptions --- .../csharp/Reverse/Reverse.Tests/ReverserTests.cs | 11 +++++++++++ 73_Reverse/csharp/Reverse/Reverse/Reverser.cs | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs index 2ab52d69..7320ef92 100644 --- a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs @@ -37,5 +37,16 @@ namespace Reverse.Tests Assert.True(input.SequenceEqual(output)); } + + [Fact] + public void Reverse_WithIndexGreaterThanArrayLength_DoesNothing() + { + var input = new int[] { 1, 2 }; + var output = new int[] { 1, 2 }; + + Reverser.Reverse(input, input.Length + 1); + + Assert.True(input.SequenceEqual(output)); + } } } diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs index ed9b8748..be3b194f 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs @@ -4,6 +4,11 @@ { public static void Reverse(int[] arrayToReverse, int indexToReverseTo) { + if (indexToReverseTo > arrayToReverse.Length) + { + return; + } + for (int i = 0; i < indexToReverseTo / 2; i++) { int temp = arrayToReverse[i]; From 8e54c0e930d87eef2ed0408591d73fcc9ce30541 Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 18:12:15 +0800 Subject: [PATCH 03/18] rename tests. --- 73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs index 7320ef92..c263dbe5 100644 --- a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs @@ -9,7 +9,7 @@ namespace Reverse.Tests [InlineData(new int[] { 1 }, new int[] { 1 })] [InlineData(new int[] { 1, 2 }, new int[] { 2, 1 })] [InlineData(new int[] { 1, 2, 3 }, new int[] { 3, 2, 1 })] - public void ReverserReversesTheArray(int[] input, int[] output) + public void Reverse_WillReverseEntireArray(int[] input, int[] output) { Reverser.Reverse(input, input.Length); @@ -17,7 +17,7 @@ namespace Reverse.Tests } [Fact] - public void ReverserReversesTheArrayAtTheSpecifiedIndex() + public void Reverse_WithSpecifiedIndex_ReversesItemsUpToThatIndex() { var input = new int[] { 1, 2, 3, 4 }; var output = new int[] { 2, 1, 3, 4 }; @@ -28,7 +28,7 @@ namespace Reverse.Tests } [Fact] - public void ReversingAtIndexOneDoesNotChangeTheArray() + public void Reverse_WithIndexOne_DoesNothing() { var input = new int[] { 1, 2 }; var output = new int[] { 1, 2 }; From b1cfa83ac56edcc867613064ee4496ea924d4084 Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 19:00:20 +0800 Subject: [PATCH 04/18] Add method for checking if a given array is in ascending order. --- .../Reverse/Reverse.Tests/ReverserTests.cs | 18 ++++++++++++++++++ 73_Reverse/csharp/Reverse/Reverse/Reverser.cs | 13 +++++++++++++ 2 files changed, 31 insertions(+) diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs index c263dbe5..d00640da 100644 --- a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs @@ -48,5 +48,23 @@ namespace Reverse.Tests Assert.True(input.SequenceEqual(output)); } + [Theory] + [InlineData(new int[] { 1 })] + [InlineData(new int[] { 1, 2 })] + [InlineData(new int[] { 1, 1 })] + public void IsArrayInAscendingOrder_WhenArrayElementsAreInNumericAscendingOrder_ReturnsTrue(int[] input) + { + var result = Reverser.IsArrayInAscendingOrder(input); + + Assert.True(result); + } + + [Fact] + public void IsArrayInOrder_WhenArrayElementsAreNotInNumericAscendingOrder_ReturnsFalse() + { + var result = Reverser.IsArrayInAscendingOrder(new int[] { 2, 1 }); + + Assert.False(result); + } } } diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs index be3b194f..e37e3d2f 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs @@ -17,5 +17,18 @@ arrayToReverse[upperIndex] = temp; } } + + public static bool IsArrayInAscendingOrder(int[] array) + { + for (int i = 1; i < array.Length; i++) + { + if (array[i] < array[i - 1]) + { + return false; + } + } + + return true; + } } } From 1d4651bfef143b766b7599f3e58086919390b8a1 Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 19:00:51 +0800 Subject: [PATCH 05/18] Add method for creating a random array of distinct values. --- .../Generators/PositiveIntegerGenerator.cs | 10 +++++++ .../Reverse.Tests/Reverse.Tests.csproj | 1 + .../Reverse/Reverse.Tests/ReverserTests.cs | 30 +++++++++++++++++++ 73_Reverse/csharp/Reverse/Reverse/Reverser.cs | 25 +++++++++++++++- 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 73_Reverse/csharp/Reverse/Reverse.Tests/Generators/PositiveIntegerGenerator.cs diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/Generators/PositiveIntegerGenerator.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/Generators/PositiveIntegerGenerator.cs new file mode 100644 index 00000000..66889bb5 --- /dev/null +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/Generators/PositiveIntegerGenerator.cs @@ -0,0 +1,10 @@ +using FsCheck; + +namespace Reverse.Tests.Generators +{ + public static class PositiveIntegerGenerator + { + public static Arbitrary Generate() => + Arb.Default.Int32().Filter(x => x > 0); + } +} diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj b/73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj index 97b7bcce..260de5e1 100644 --- a/73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj @@ -7,6 +7,7 @@ + diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs index d00640da..a6beeeb3 100644 --- a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs @@ -1,3 +1,5 @@ +using FsCheck.Xunit; +using Reverse.Tests.Generators; using System.Linq; using Xunit; @@ -48,6 +50,34 @@ namespace Reverse.Tests Assert.True(input.SequenceEqual(output)); } + + [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] + public void CreateRandomArray_ReturnsRandomArrayOfSpecifiedLength() + { + var result = Reverser.CreateRandomArray(5); + + Assert.Equal(5, result.Length); + } + + [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] + public void CreateRandomArray_MaxElementValueIsEqualToSize(int size) + { + var result = Reverser.CreateRandomArray(size); + + Assert.Equal(size, result.Max()); + } + + [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] + public void CreateRandomArray_ReturnsRandomArrayWithDistinctElements(int size) + { + var array = Reverser.CreateRandomArray(size); + + var arrayGroup = array.GroupBy(x => x); + var duplicateFound = arrayGroup.Any(x => x.Count() > 1); + + Assert.False(duplicateFound); + } + [Theory] [InlineData(new int[] { 1 })] [InlineData(new int[] { 1, 2 })] diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs index e37e3d2f..62db79f1 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs @@ -1,4 +1,6 @@ -namespace Reverse +using System; + +namespace Reverse { public class Reverser { @@ -18,6 +20,27 @@ } } + public static int[] CreateRandomArray(int size) + { + var array = new int[size]; + for (int i = 1; i <= size; i++) + { + array[i - 1] = i; + } + + var rnd = new Random(); + + for (int i = size; i > 1;) + { + int k = rnd.Next(i); + --i; + int temp = array[i]; + array[i] = array[k]; + array[k] = temp; + } + return array; + } + public static bool IsArrayInAscendingOrder(int[] array) { for (int i = 1; i < array.Length; i++) From 08282e1a7dd45ed8ccfc8c234c4b10aade41d7db Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 19:29:09 +0800 Subject: [PATCH 06/18] Configure console app --- 73_Reverse/csharp/Reverse/Reverse/Program.cs | 95 +++++++++++++++++++- 1 file changed, 94 insertions(+), 1 deletion(-) diff --git a/73_Reverse/csharp/Reverse/Reverse/Program.cs b/73_Reverse/csharp/Reverse/Reverse/Program.cs index 72ae99ef..d1de060c 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Program.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Text; namespace Reverse { @@ -6,7 +7,99 @@ namespace Reverse { static void Main(string[] args) { - Console.WriteLine("Hello World!"); + PrintTitle(); + Console.Write("DO YOU WANT THE RULES? "); + var needRulesInput = Console.ReadLine(); + + if (string.Equals(needRulesInput, "YES", StringComparison.OrdinalIgnoreCase)) + { + DisplayRules(); + } + + var tryAgain = string.Empty; + while (!string.Equals(tryAgain, "NO", StringComparison.OrdinalIgnoreCase)) + { + var array = Reverser.CreateRandomArray(9); + Console.WriteLine(PrintArrayContents(array)); + var arrayIsNotInAscendingOrder = true; + var numberOfMoves = 0; + while (arrayIsNotInAscendingOrder) + { + int index = ReadNextInput(); + + if (index == 0) + { + break; + } + + Reverser.Reverse(array, index); + Console.WriteLine(PrintArrayContents(array)); + + if (Reverser.IsArrayInAscendingOrder(array)) + { + arrayIsNotInAscendingOrder = false; + Console.WriteLine($"YOU WON IT IN {numberOfMoves} MOVES!!!"); + } + numberOfMoves++; + } + + Console.Write("TRY AGAIN (YES OR NO)"); + tryAgain = Console.ReadLine(); + } + + Console.WriteLine("OK HOPE YOU HAD FUN"); + } + + private static int ReadNextInput() + { + Console.Write("HOW MANY SHALL I REVERSE? "); + var input = ReadIntegerInput(); + while (input > 9 || input < 0) + { + if (input > 9) + { + Console.WriteLine("OOPS! TOO MANY! I CAN REVERSE AT MOST THIS MANY"); + } + + if (input < 0) + { + Console.WriteLine("OOPS! TOO FEW! I CAN REVERSE BETWEEN 1 AND THIS MANY"); + } + Console.Write("HOW MANY SHALL I REVERSE? "); + input = ReadIntegerInput(); + } + + return input; + } + + private static int ReadIntegerInput() + { + var input = Console.ReadLine(); + int.TryParse(input, out var index); + return index; + } + + private static string PrintArrayContents(int[] arr) + { + var sb = new StringBuilder(); + + foreach (int i in arr) + { + sb.Append(" " + i + " "); + } + + return sb.ToString(); + } + + private static void PrintTitle() + { + Console.WriteLine("REVERSE"); + Console.WriteLine("CREATIVE COMPUTING MORRISTON, NEW JERSEY"); + } + + private static void DisplayRules() + { + Console.WriteLine("RULES"); } } } From a819a535bb0b4d35c947d0845eca474ea67b0e42 Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 20:00:59 +0800 Subject: [PATCH 07/18] Define instance methods for reverser. --- .../Reverse/Reverse.Tests/ReverserTests.cs | 89 +++++++++++-------- .../Reverse/Reverse.Tests/TestReverser.cs | 17 ++++ 73_Reverse/csharp/Reverse/Reverse/Reverser.cs | 17 ++++ 3 files changed, 86 insertions(+), 37 deletions(-) create mode 100644 73_Reverse/csharp/Reverse/Reverse.Tests/TestReverser.cs diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs index a6beeeb3..9df7d3d5 100644 --- a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs @@ -7,15 +7,45 @@ namespace Reverse.Tests { public class ReverserTests { + [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] + public void Constructor_CreatesRandomArrayOfSpecifiedLength(int size) + { + var sut = new TestReverser(size); + + Assert.Equal(size, sut.GetArray().Length); + } + + [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] + public void ConstructorArray_MaxElementValueIsEqualToSize(int size) + { + var sut = new TestReverser(size); + + Assert.Equal(size, sut.GetArray().Max()); + } + + [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] + public void ConstructorArray_ReturnsRandomArrayWithDistinctElements(int size) + { + var sut = new TestReverser(size); + var array = sut.GetArray(); + var arrayGroup = array.GroupBy(x => x); + var duplicateFound = arrayGroup.Any(x => x.Count() > 1); + + Assert.False(duplicateFound); + } + [Theory] [InlineData(new int[] { 1 }, new int[] { 1 })] [InlineData(new int[] { 1, 2 }, new int[] { 2, 1 })] [InlineData(new int[] { 1, 2, 3 }, new int[] { 3, 2, 1 })] public void Reverse_WillReverseEntireArray(int[] input, int[] output) { - Reverser.Reverse(input, input.Length); + var sut = new TestReverser(1); + sut.SetArray(input); - Assert.True(input.SequenceEqual(output)); + sut.Reverse(input.Length); + + Assert.True(sut.GetArray().SequenceEqual(output)); } [Fact] @@ -23,10 +53,12 @@ namespace Reverse.Tests { var input = new int[] { 1, 2, 3, 4 }; var output = new int[] { 2, 1, 3, 4 }; + var sut = new TestReverser(1); + sut.SetArray(input); - Reverser.Reverse(input, 2); + sut.Reverse(2); - Assert.True(input.SequenceEqual(output)); + Assert.True(sut.GetArray().SequenceEqual(output)); } [Fact] @@ -34,10 +66,12 @@ namespace Reverse.Tests { var input = new int[] { 1, 2 }; var output = new int[] { 1, 2 }; + var sut = new TestReverser(1); + sut.SetArray(input); - Reverser.Reverse(input, 1); + sut.Reverse(1); - Assert.True(input.SequenceEqual(output)); + Assert.True(sut.GetArray().SequenceEqual(output)); } [Fact] @@ -45,37 +79,12 @@ namespace Reverse.Tests { var input = new int[] { 1, 2 }; var output = new int[] { 1, 2 }; + var sut = new TestReverser(1); + sut.SetArray(input); - Reverser.Reverse(input, input.Length + 1); + sut.Reverse(sut.GetArray().Length + 1); - Assert.True(input.SequenceEqual(output)); - } - - [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] - public void CreateRandomArray_ReturnsRandomArrayOfSpecifiedLength() - { - var result = Reverser.CreateRandomArray(5); - - Assert.Equal(5, result.Length); - } - - [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] - public void CreateRandomArray_MaxElementValueIsEqualToSize(int size) - { - var result = Reverser.CreateRandomArray(size); - - Assert.Equal(size, result.Max()); - } - - [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] - public void CreateRandomArray_ReturnsRandomArrayWithDistinctElements(int size) - { - var array = Reverser.CreateRandomArray(size); - - var arrayGroup = array.GroupBy(x => x); - var duplicateFound = arrayGroup.Any(x => x.Count() > 1); - - Assert.False(duplicateFound); + Assert.True(sut.GetArray().SequenceEqual(output)); } [Theory] @@ -84,7 +93,10 @@ namespace Reverse.Tests [InlineData(new int[] { 1, 1 })] public void IsArrayInAscendingOrder_WhenArrayElementsAreInNumericAscendingOrder_ReturnsTrue(int[] input) { - var result = Reverser.IsArrayInAscendingOrder(input); + var sut = new TestReverser(1); + sut.SetArray(input); + + var result = sut.IsArrayInAscendingOrder(); Assert.True(result); } @@ -92,7 +104,10 @@ namespace Reverse.Tests [Fact] public void IsArrayInOrder_WhenArrayElementsAreNotInNumericAscendingOrder_ReturnsFalse() { - var result = Reverser.IsArrayInAscendingOrder(new int[] { 2, 1 }); + var sut = new TestReverser(1); + sut.SetArray(new int[] { 2, 1 }); + + var result = sut.IsArrayInAscendingOrder(); Assert.False(result); } diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/TestReverser.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/TestReverser.cs new file mode 100644 index 00000000..a53004e1 --- /dev/null +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/TestReverser.cs @@ -0,0 +1,17 @@ +namespace Reverse.Tests +{ + internal class TestReverser : Reverser + { + public TestReverser(int arraySize) : base(arraySize) { } + + public int[] GetArray() + { + return _array; + } + + public void SetArray(int[] array) + { + _array = array; + } + } +} diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs index 62db79f1..426713c4 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs @@ -4,6 +4,23 @@ namespace Reverse { public class Reverser { + protected int[] _array; + + public Reverser(int arraySize) + { + _array = CreateRandomArray(arraySize); + } + + public void Reverse(int index) + { + Reverse(_array, index); + } + + public bool IsArrayInAscendingOrder() + { + return IsArrayInAscendingOrder(_array); + } + public static void Reverse(int[] arrayToReverse, int indexToReverseTo) { if (indexToReverseTo > arrayToReverse.Length) From eb27f8612ea3c89f40a1e8f61430798e8800656e Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 20:05:17 +0800 Subject: [PATCH 08/18] Add GetArrayString method. --- .../csharp/Reverse/Reverse.Tests/ReverserTests.cs | 11 +++++++++++ 73_Reverse/csharp/Reverse/Reverse/Reverser.cs | 13 +++++++++++++ 2 files changed, 24 insertions(+) diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs index 9df7d3d5..bd00436f 100644 --- a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs @@ -111,5 +111,16 @@ namespace Reverse.Tests Assert.False(result); } + + [Fact] + public void GetArrayString_ReturnsSpaceSeparatedElementsOfArrayInStringFormat() + { + var sut = new TestReverser(1); + sut.SetArray(new int[] { 1, 2 }); + + var result = sut.GetArrayString(); + + Assert.Equal(" 1 2 ", result); + } } } diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs index 426713c4..f2d720b4 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs @@ -1,4 +1,5 @@ using System; +using System.Text; namespace Reverse { @@ -70,5 +71,17 @@ namespace Reverse return true; } + + public string GetArrayString() + { + var sb = new StringBuilder(); + + foreach (int i in _array) + { + sb.Append(" " + i + " "); + } + + return sb.ToString(); + } } } From 67d1c84f2e76693e54782eb3608f027fca9eee3b Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 20:13:03 +0800 Subject: [PATCH 09/18] Update program to reference instance of reverser. --- 73_Reverse/csharp/Reverse/Reverse/Program.cs | 30 +++++++------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/73_Reverse/csharp/Reverse/Reverse/Program.cs b/73_Reverse/csharp/Reverse/Reverse/Program.cs index d1de060c..7beee62b 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Program.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Program.cs @@ -1,10 +1,10 @@ using System; -using System.Text; namespace Reverse { class Program { + private static int arrayLength = 9; static void Main(string[] args) { PrintTitle(); @@ -19,8 +19,10 @@ namespace Reverse var tryAgain = string.Empty; while (!string.Equals(tryAgain, "NO", StringComparison.OrdinalIgnoreCase)) { - var array = Reverser.CreateRandomArray(9); - Console.WriteLine(PrintArrayContents(array)); + var reverser = new Reverser(arrayLength); + + Console.WriteLine(reverser.GetArrayString()); + var arrayIsNotInAscendingOrder = true; var numberOfMoves = 0; while (arrayIsNotInAscendingOrder) @@ -32,10 +34,10 @@ namespace Reverse break; } - Reverser.Reverse(array, index); - Console.WriteLine(PrintArrayContents(array)); + reverser.Reverse(index); + Console.WriteLine(reverser.GetArrayString()); - if (Reverser.IsArrayInAscendingOrder(array)) + if (reverser.IsArrayInAscendingOrder()) { arrayIsNotInAscendingOrder = false; Console.WriteLine($"YOU WON IT IN {numberOfMoves} MOVES!!!"); @@ -58,12 +60,12 @@ namespace Reverse { if (input > 9) { - Console.WriteLine("OOPS! TOO MANY! I CAN REVERSE AT MOST THIS MANY"); + Console.WriteLine($"OOPS! TOO MANY! I CAN REVERSE AT MOST {arrayLength}"); } if (input < 0) { - Console.WriteLine("OOPS! TOO FEW! I CAN REVERSE BETWEEN 1 AND THIS MANY"); + Console.WriteLine($"OOPS! TOO FEW! I CAN REVERSE BETWEEN 1 AND {arrayLength}"); } Console.Write("HOW MANY SHALL I REVERSE? "); input = ReadIntegerInput(); @@ -79,18 +81,6 @@ namespace Reverse return index; } - private static string PrintArrayContents(int[] arr) - { - var sb = new StringBuilder(); - - foreach (int i in arr) - { - sb.Append(" " + i + " "); - } - - return sb.ToString(); - } - private static void PrintTitle() { Console.WriteLine("REVERSE"); From 0a7e386c366038a43620ad02d5a2f82eb75ca301 Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 20:13:57 +0800 Subject: [PATCH 10/18] Remove static method. --- 73_Reverse/csharp/Reverse/Reverse/Reverser.cs | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs index f2d720b4..cd94bf4f 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs @@ -19,7 +19,15 @@ namespace Reverse public bool IsArrayInAscendingOrder() { - return IsArrayInAscendingOrder(_array); + for (int i = 1; i < _array.Length; i++) + { + if (_array[i] < _array[i - 1]) + { + return false; + } + } + + return true; } public static void Reverse(int[] arrayToReverse, int indexToReverseTo) @@ -59,19 +67,6 @@ namespace Reverse return array; } - public static bool IsArrayInAscendingOrder(int[] array) - { - for (int i = 1; i < array.Length; i++) - { - if (array[i] < array[i - 1]) - { - return false; - } - } - - return true; - } - public string GetArrayString() { var sb = new StringBuilder(); From 4dc1e57789cec996479ac90c4466e996e2702c9e Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 20:14:33 +0800 Subject: [PATCH 11/18] Make static method private. --- 73_Reverse/csharp/Reverse/Reverse/Reverser.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs index cd94bf4f..99e60ea4 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs @@ -46,7 +46,7 @@ namespace Reverse } } - public static int[] CreateRandomArray(int size) + private int[] CreateRandomArray(int size) { var array = new int[size]; for (int i = 1; i <= size; i++) From 2758c3375cd204b0dce26f661fedf1ee011565ce Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 20:15:37 +0800 Subject: [PATCH 12/18] Remove static method. --- 73_Reverse/csharp/Reverse/Reverse/Reverser.cs | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs index 99e60ea4..2d2ea700 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs @@ -14,7 +14,18 @@ namespace Reverse public void Reverse(int index) { - Reverse(_array, index); + if (index > _array.Length) + { + return; + } + + for (int i = 0; i < index / 2; i++) + { + int temp = _array[i]; + int upperIndex = index - 1 - i; + _array[i] = _array[upperIndex]; + _array[upperIndex] = temp; + } } public bool IsArrayInAscendingOrder() @@ -30,22 +41,6 @@ namespace Reverse return true; } - public static void Reverse(int[] arrayToReverse, int indexToReverseTo) - { - if (indexToReverseTo > arrayToReverse.Length) - { - return; - } - - for (int i = 0; i < indexToReverseTo / 2; i++) - { - int temp = arrayToReverse[i]; - int upperIndex = indexToReverseTo - 1 - i; - arrayToReverse[i] = arrayToReverse[upperIndex]; - arrayToReverse[upperIndex] = temp; - } - } - private int[] CreateRandomArray(int size) { var array = new int[size]; From 329fe3137c4b2a5400cc76a11ef31dd3829fe7a0 Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Wed, 12 Jan 2022 20:26:18 +0800 Subject: [PATCH 13/18] Add rules. --- 73_Reverse/csharp/Reverse/Reverse/Program.cs | 35 +++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/73_Reverse/csharp/Reverse/Reverse/Program.cs b/73_Reverse/csharp/Reverse/Reverse/Program.cs index 7beee62b..2f95cc55 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Program.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Program.cs @@ -10,7 +10,7 @@ namespace Reverse PrintTitle(); Console.Write("DO YOU WANT THE RULES? "); var needRulesInput = Console.ReadLine(); - + Console.WriteLine(); if (string.Equals(needRulesInput, "YES", StringComparison.OrdinalIgnoreCase)) { DisplayRules(); @@ -21,8 +21,8 @@ namespace Reverse { var reverser = new Reverser(arrayLength); - Console.WriteLine(reverser.GetArrayString()); - + Console.WriteLine("HERE WE GO ... THE LIST IS:\n"); + PrintList(reverser.GetArrayString()); var arrayIsNotInAscendingOrder = true; var numberOfMoves = 0; while (arrayIsNotInAscendingOrder) @@ -35,7 +35,7 @@ namespace Reverse } reverser.Reverse(index); - Console.WriteLine(reverser.GetArrayString()); + PrintList(reverser.GetArrayString()); if (reverser.IsArrayInAscendingOrder()) { @@ -81,6 +81,13 @@ namespace Reverse return index; } + private static void PrintList(string list) + { + Console.WriteLine(); + Console.WriteLine(list); + Console.WriteLine(); + } + private static void PrintTitle() { Console.WriteLine("REVERSE"); @@ -89,7 +96,25 @@ namespace Reverse private static void DisplayRules() { - Console.WriteLine("RULES"); + Console.WriteLine("THIS IS THE GAME OF 'REVERSE'. TO WIN, ALL YOU HAVE"); + Console.WriteLine("TO DO IS ARRANGE A LIST OF NUMBERS (1 THOUGH 9 )"); + Console.WriteLine("IN NUMBERICAL ORDER FROM LEFT TO RIGHT. TO MOVE, YOU"); + Console.WriteLine("TELL ME HOW MANY NUMBERS (COUNTING FROM THE LEFT) TO"); + Console.WriteLine("REVERSE. FOR EXAMPLE, IF THE CURRENT LIST IS:"); + Console.WriteLine(); + Console.WriteLine(" 2 3 4 5 1 6 7 8 9"); + Console.WriteLine(); + Console.WriteLine("AND YOU REVERSE 4, THE RESULT WILL BE:"); + Console.WriteLine(); + Console.WriteLine(" 5 4 3 2 1 6 7 8 9"); + Console.WriteLine(); + Console.WriteLine("NOW IF YOU REVERSE 5, YOU WIN!"); + Console.WriteLine(); + Console.WriteLine(" 1 2 3 4 5 6 7 8 9"); + Console.WriteLine(); + Console.WriteLine("NO DOUBT YOU WILL LIKE THIS GAME, BUT "); + Console.WriteLine("IF YOU WANT TO QUIT, REVERSE 0 (ZERO)"); + Console.WriteLine(); } } } From 08ea76d111770671a0935c44d930619150e394d5 Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Thu, 13 Jan 2022 16:28:08 +0800 Subject: [PATCH 14/18] Update display --- 73_Reverse/csharp/Reverse/Reverse/Program.cs | 24 ++++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/73_Reverse/csharp/Reverse/Reverse/Program.cs b/73_Reverse/csharp/Reverse/Reverse/Program.cs index 2f95cc55..82e78131 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Program.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Program.cs @@ -21,7 +21,8 @@ namespace Reverse { var reverser = new Reverser(arrayLength); - Console.WriteLine("HERE WE GO ... THE LIST IS:\n"); + Console.WriteLine("HERE WE GO ... THE LIST IS:"); + Console.WriteLine(); PrintList(reverser.GetArrayString()); var arrayIsNotInAscendingOrder = true; var numberOfMoves = 0; @@ -41,14 +42,17 @@ namespace Reverse { arrayIsNotInAscendingOrder = false; Console.WriteLine($"YOU WON IT IN {numberOfMoves} MOVES!!!"); + Console.WriteLine(); + Console.WriteLine(); } numberOfMoves++; } - Console.Write("TRY AGAIN (YES OR NO)"); + Console.Write("TRY AGAIN (YES OR NO) "); tryAgain = Console.ReadLine(); } + Console.WriteLine(); Console.WriteLine("OK HOPE YOU HAD FUN"); } @@ -90,31 +94,37 @@ namespace Reverse private static void PrintTitle() { - Console.WriteLine("REVERSE"); - Console.WriteLine("CREATIVE COMPUTING MORRISTON, NEW JERSEY"); + Console.WriteLine("\t\t REVERSE"); + Console.WriteLine(" CREATIVE COMPUTING MORRISTON, NEW JERSEY"); + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("REVERSE -- A GAME OF SKILL"); + Console.WriteLine(); } private static void DisplayRules() { + Console.WriteLine(); Console.WriteLine("THIS IS THE GAME OF 'REVERSE'. TO WIN, ALL YOU HAVE"); Console.WriteLine("TO DO IS ARRANGE A LIST OF NUMBERS (1 THOUGH 9 )"); Console.WriteLine("IN NUMBERICAL ORDER FROM LEFT TO RIGHT. TO MOVE, YOU"); Console.WriteLine("TELL ME HOW MANY NUMBERS (COUNTING FROM THE LEFT) TO"); Console.WriteLine("REVERSE. FOR EXAMPLE, IF THE CURRENT LIST IS:"); Console.WriteLine(); - Console.WriteLine(" 2 3 4 5 1 6 7 8 9"); + Console.WriteLine("2 3 4 5 1 6 7 8 9"); Console.WriteLine(); Console.WriteLine("AND YOU REVERSE 4, THE RESULT WILL BE:"); Console.WriteLine(); - Console.WriteLine(" 5 4 3 2 1 6 7 8 9"); + Console.WriteLine("5 4 3 2 1 6 7 8 9"); Console.WriteLine(); Console.WriteLine("NOW IF YOU REVERSE 5, YOU WIN!"); Console.WriteLine(); - Console.WriteLine(" 1 2 3 4 5 6 7 8 9"); + Console.WriteLine("1 2 3 4 5 6 7 8 9"); Console.WriteLine(); Console.WriteLine("NO DOUBT YOU WILL LIKE THIS GAME, BUT "); Console.WriteLine("IF YOU WANT TO QUIT, REVERSE 0 (ZERO)"); Console.WriteLine(); + Console.WriteLine(); } } } From ed50c3e24b817e27a482ed0949d422c6a99b32c7 Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Thu, 13 Jan 2022 16:28:54 +0800 Subject: [PATCH 15/18] fix typo. --- 73_Reverse/csharp/Reverse/Reverse/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/73_Reverse/csharp/Reverse/Reverse/Program.cs b/73_Reverse/csharp/Reverse/Reverse/Program.cs index 82e78131..8454a58c 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Program.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Program.cs @@ -107,7 +107,7 @@ namespace Reverse Console.WriteLine(); Console.WriteLine("THIS IS THE GAME OF 'REVERSE'. TO WIN, ALL YOU HAVE"); Console.WriteLine("TO DO IS ARRANGE A LIST OF NUMBERS (1 THOUGH 9 )"); - Console.WriteLine("IN NUMBERICAL ORDER FROM LEFT TO RIGHT. TO MOVE, YOU"); + Console.WriteLine("IN NUMERICAL ORDER FROM LEFT TO RIGHT. TO MOVE, YOU"); Console.WriteLine("TELL ME HOW MANY NUMBERS (COUNTING FROM THE LEFT) TO"); Console.WriteLine("REVERSE. FOR EXAMPLE, IF THE CURRENT LIST IS:"); Console.WriteLine(); From 4f2bc6f98c97465e02da335d7bcb416d892ec194 Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Thu, 13 Jan 2022 16:32:55 +0800 Subject: [PATCH 16/18] Add test showing that reverse handles numbers less than zero. --- .../csharp/Reverse/Reverse.Tests/ReverserTests.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs index bd00436f..4e57a05a 100644 --- a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs @@ -87,6 +87,19 @@ namespace Reverse.Tests Assert.True(sut.GetArray().SequenceEqual(output)); } + [Fact] + public void Reverse_WithIndexLessThanZero_DoesNothing() + { + var input = new int[] { 1, 2 }; + var output = new int[] { 1, 2 }; + var sut = new TestReverser(1); + sut.SetArray(input); + + sut.Reverse(-1); + + Assert.True(sut.GetArray().SequenceEqual(output)); + } + [Theory] [InlineData(new int[] { 1 })] [InlineData(new int[] { 1, 2 })] From 7d14c37aaad85ac4c487ac247768a285fa8cc427 Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Thu, 13 Jan 2022 16:41:24 +0800 Subject: [PATCH 17/18] Handle array size inputs less than 1. --- 73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs | 9 +++++++++ 73_Reverse/csharp/Reverse/Reverse/Reverser.cs | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs index 4e57a05a..6fe3bb77 100644 --- a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs @@ -1,5 +1,6 @@ using FsCheck.Xunit; using Reverse.Tests.Generators; +using System; using System.Linq; using Xunit; @@ -7,6 +8,14 @@ namespace Reverse.Tests { public class ReverserTests { + [Fact] + public void Constructor_CannotAcceptNumberLessThanZero() + { + Action action = () => new Reverser(0); + + Assert.Throws(action); + } + [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] public void Constructor_CreatesRandomArrayOfSpecifiedLength(int size) { diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs index 2d2ea700..fdab5e96 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs @@ -43,6 +43,11 @@ namespace Reverse private int[] CreateRandomArray(int size) { + if (size < 1) + { + throw new ArgumentOutOfRangeException(nameof(size), "Array size must be a positive integer"); + } + var array = new int[size]; for (int i = 1; i <= size; i++) { From ead374e8b5935ab49e4b7ad497de7d871aeee0b6 Mon Sep 17 00:00:00 2001 From: Kristian Stolen Date: Thu, 13 Jan 2022 16:53:09 +0800 Subject: [PATCH 18/18] refactor and reformat output. --- 73_Reverse/csharp/Reverse/Reverse/Program.cs | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/73_Reverse/csharp/Reverse/Reverse/Program.cs b/73_Reverse/csharp/Reverse/Reverse/Program.cs index 8454a58c..5f8c5967 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Program.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Program.cs @@ -22,11 +22,10 @@ namespace Reverse var reverser = new Reverser(arrayLength); Console.WriteLine("HERE WE GO ... THE LIST IS:"); - Console.WriteLine(); PrintList(reverser.GetArrayString()); - var arrayIsNotInAscendingOrder = true; + var arrayIsInAscendingOrder = false; var numberOfMoves = 0; - while (arrayIsNotInAscendingOrder) + while (arrayIsInAscendingOrder == false) { int index = ReadNextInput(); @@ -37,23 +36,24 @@ namespace Reverse reverser.Reverse(index); PrintList(reverser.GetArrayString()); - - if (reverser.IsArrayInAscendingOrder()) - { - arrayIsNotInAscendingOrder = false; - Console.WriteLine($"YOU WON IT IN {numberOfMoves} MOVES!!!"); - Console.WriteLine(); - Console.WriteLine(); - } + arrayIsInAscendingOrder = reverser.IsArrayInAscendingOrder(); numberOfMoves++; } + if (arrayIsInAscendingOrder) + { + Console.WriteLine($"YOU WON IT IN {numberOfMoves} MOVES!!!"); + + } + + Console.WriteLine(); + Console.WriteLine(); Console.Write("TRY AGAIN (YES OR NO) "); tryAgain = Console.ReadLine(); } Console.WriteLine(); - Console.WriteLine("OK HOPE YOU HAD FUN"); + Console.WriteLine("OK HOPE YOU HAD FUN!!"); } private static int ReadNextInput()