diff --git a/.gitignore b/.gitignore index 7dd1be9..0d17a73 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,7 @@ target .DS_Store .gradle build +/Csharp/.vs/RefactoringGolf/v15/ +/Csharp/RefactoringGolf/obj/ +/Csharp/RefactoringGolf/bin/ +/Csharp/RefactoringGolf/*.csproj.user diff --git a/Csharp/RefactoringGolf.sln b/Csharp/RefactoringGolf.sln new file mode 100644 index 0000000..d43acec --- /dev/null +++ b/Csharp/RefactoringGolf.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2027 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RefactoringGolf", "RefactoringGolf\RefactoringGolf.csproj", "{252168AF-B7EE-4F5C-8677-B31104CBE13A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {252168AF-B7EE-4F5C-8677-B31104CBE13A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {252168AF-B7EE-4F5C-8677-B31104CBE13A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {252168AF-B7EE-4F5C-8677-B31104CBE13A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {252168AF-B7EE-4F5C-8677-B31104CBE13A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CF666B81-C45C-4B11-9ED0-49A5115327FC} + EndGlobalSection +EndGlobal diff --git a/Csharp/RefactoringGolf/Hole1/Hole1After.cs b/Csharp/RefactoringGolf/Hole1/Hole1After.cs new file mode 100644 index 0000000..707a35c --- /dev/null +++ b/Csharp/RefactoringGolf/Hole1/Hole1After.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RefactoringGolf.Hole1 +{ + public class Hole1After + { + private IList instructions = new List(); + + public void parseCommand(String command) + { + + String[] parts = command.Split(" "); + String direction = parts[0]; + int amount = int.Parse(parts[1]); + + if (direction.Equals("foward")) + { + instructions.Add(new MoveInstruction(amount)); + } + if (direction.Equals("left")) + { + instructions.Add(new TurnInstruction(amount)); + } + if (direction.Equals("right")) + { + instructions.Add(new TurnInstruction(-1 * amount)); + } + + } + } +} diff --git a/Csharp/RefactoringGolf/Hole1/Hole1Before.cs b/Csharp/RefactoringGolf/Hole1/Hole1Before.cs new file mode 100644 index 0000000..ccc8236 --- /dev/null +++ b/Csharp/RefactoringGolf/Hole1/Hole1Before.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace RefactoringGolf.Hole1 +{ + public class Hole1Before + { + private IList instructions = new List(); + + public void parseCommand(String command) + { + + String[] parts = command.Split(" "); + String direction = parts[0]; + String amount = parts[1]; + + if (direction.Equals("foward")) + { + instructions.Add(new MoveInstruction(int.Parse(amount))); + } + if (direction.Equals("left")) + { + instructions.Add(new TurnInstruction(int.Parse(amount))); + } + if (direction.Equals("right")) + { + instructions.Add(new TurnInstruction(-1 * int.Parse(amount))); + } + + } + } +} diff --git a/Csharp/RefactoringGolf/Hole2/Hole2After.cs b/Csharp/RefactoringGolf/Hole2/Hole2After.cs new file mode 100644 index 0000000..26fb443 --- /dev/null +++ b/Csharp/RefactoringGolf/Hole2/Hole2After.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; + +namespace RefactoringGolf.Hole2 +{ + public class Hole2After + { + private IList instructions = new List(); + + public void parseCommand(String command) + { + String[] parts = command.Split(" "); + String direction = parts[0]; + int amount = int.Parse(parts[1]); + + Instruction instruction = null; + if (direction.Equals("foward")) + { + instruction = new MoveInstruction(amount); + } + if (direction.Equals("left")) + { + instruction = new TurnInstruction(amount); + } + if (direction.Equals("right")) + { + instruction = new TurnInstruction(-1 * amount); + } + + instructions.Add(instruction); + } + } +} diff --git a/Csharp/RefactoringGolf/Hole2/Hole2Before.cs b/Csharp/RefactoringGolf/Hole2/Hole2Before.cs new file mode 100644 index 0000000..be2d9eb --- /dev/null +++ b/Csharp/RefactoringGolf/Hole2/Hole2Before.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; + +namespace RefactoringGolf.Hole2 +{ + public class Hole2Before + { + private IList instructions = new List(); + + public void parseCommand(String command) + { + String[] parts = command.Split(" "); + String direction = parts[0]; + int amount = int.Parse(parts[1]); + + if (direction.Equals("foward")) + { + instructions.Add(new MoveInstruction(amount)); + } + if (direction.Equals("left")) + { + instructions.Add(new TurnInstruction(amount)); + } + if (direction.Equals("right")) + { + instructions.Add(new TurnInstruction(-1 * amount)); + } + } + } +} diff --git a/Csharp/RefactoringGolf/Hole3/Hole3After.cs b/Csharp/RefactoringGolf/Hole3/Hole3After.cs new file mode 100644 index 0000000..1b3b729 --- /dev/null +++ b/Csharp/RefactoringGolf/Hole3/Hole3After.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; + +namespace RefactoringGolf.Hole3 +{ + public class Hole3After + { + private IList instructions = new List(); + + public void parseCommand(String command) + { + // Uncomment this... + // instructions.add(Instruction.toPerform(command)); + } + } +} diff --git a/Csharp/RefactoringGolf/Hole3/Hole3Before.cs b/Csharp/RefactoringGolf/Hole3/Hole3Before.cs new file mode 100644 index 0000000..4a25322 --- /dev/null +++ b/Csharp/RefactoringGolf/Hole3/Hole3Before.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; + +namespace RefactoringGolf.Hole3 +{ + public class Hole3Before + { + private IList instructions = new List(); + + public void parseCommand(String command) + { + String[] parts = command.Split(" "); + String direction = parts[0]; + int amount = int.Parse(parts[1]); + + Instruction instruction = null; + if (direction.Equals("foward")) + { + instruction = new MoveInstruction(amount); + } + if (direction.Equals("left")) + { + instruction = new TurnInstruction(amount); + } + if (direction.Equals("right")) + { + instruction = new TurnInstruction(-1 * amount); + } + + instructions.Add(instruction); + } + } +} diff --git a/Csharp/RefactoringGolf/Hole4/Hole4After.cs b/Csharp/RefactoringGolf/Hole4/Hole4After.cs new file mode 100644 index 0000000..73523e4 --- /dev/null +++ b/Csharp/RefactoringGolf/Hole4/Hole4After.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RefactoringGolf.Hole4 +{ + public class Hole4After + { + public void printLabelAndReceipt() + { + new Label().Print(); + new Receipt().Print(); + } + + class Receipt + { + public void Print() + { + Console.WriteLine("1 Book, 5.99"); + Console.WriteLine("1 CD, 9.99"); + Console.WriteLine("Total: 15.98 "); + } + } + + class Label + { + public void Print() + { + Console.WriteLine("Mr J Smith"); + Console.WriteLine("34 High Street"); + Console.WriteLine("Oxford"); + Console.WriteLine("OX1 1TT"); + } + } + } +} diff --git a/Csharp/RefactoringGolf/Hole4/Hole4Before.cs b/Csharp/RefactoringGolf/Hole4/Hole4Before.cs new file mode 100644 index 0000000..70e1481 --- /dev/null +++ b/Csharp/RefactoringGolf/Hole4/Hole4Before.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace RefactoringGolf.Hole4 +{ + public class Hole4Before + { + public void printLabelAndReceipt() + { + + Console.WriteLine("Mr J Smith"); + Console.WriteLine("34 High Street"); + Console.WriteLine("Oxford"); + Console.WriteLine("OX1 1TT"); + Console.WriteLine("1 Book, 5.99"); + Console.WriteLine("1 CD, 9.99"); + Console.WriteLine("Total: 15.98 "); + + } + } +} diff --git a/Csharp/RefactoringGolf/Hole5/Hole5After.cs b/Csharp/RefactoringGolf/Hole5/Hole5After.cs new file mode 100644 index 0000000..b3a9db1 --- /dev/null +++ b/Csharp/RefactoringGolf/Hole5/Hole5After.cs @@ -0,0 +1,75 @@ +using System; + +namespace RefactoringGolf.Hole5 +{ + public class Hole5After + { + + class FibonacciSequence : NumberSequence + { + public override int term(int n) + { + if (n < 0) + { + throw new ArgumentOutOfRangeException("Sequence undefined for negative index"); + } + if (n < 2) + { + return 1; + } + return term(n - 2) + term(n - 1); + } + + } + + class TriangularNumberSequence : NumberSequence + { + public override int term(int n) + { + if (n < 0) + { + throw new ArgumentOutOfRangeException("Sequence undefined for negative index"); + } + return (n + 2) * (n + 1) / 2; + } + + } + + public abstract class NumberSequence + { + public abstract int term(int n); + + //public Iterator iterator() + //{ + // // return new Iterator() + // // { + + // // private int currentIndex = 0; + + // // public boolean hasNext() + // // { + // // return true; + // // } + + // // public Integer next() + // // { + // // int result = term(currentIndex); + // // currentIndex++; + // // return result; + // // } + + // // public void remove() + // // { + // // throw new UnsupportedOperationException(); + // // } + // //}; + //} + } + + public void generate() + { + new FibonacciSequence().term(3); + new TriangularNumberSequence().term(3); + } + } +} diff --git a/Csharp/RefactoringGolf/Hole5/Hole5Before.cs b/Csharp/RefactoringGolf/Hole5/Hole5Before.cs new file mode 100644 index 0000000..2afeed4 --- /dev/null +++ b/Csharp/RefactoringGolf/Hole5/Hole5Before.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; + +namespace RefactoringGolf.Hole5 +{ + public class Hole5Before + { + class FibonacciSequence + { + + public int term(int n) + { + if (n < 0) + { + throw new ArgumentOutOfRangeException("Sequence undefined for negative index"); + } + if (n < 2) + { + return 1; + } + return term(n - 2) + term(n - 1); + } + + //public IEnumerator iterator() + //{ + // // return new IEnumerable() + // // { + + // // private int currentIndex = 0; + + // // public boolean hasNext() + // // { + // // return true; + // // } + + // // public Integer next() + // // { + // // int result = term(currentIndex); + // // currentIndex++; + // // return result; + // // } + + // // public void remove() + // // { + // // throw new InvalidOperationException(); + // // } + // //}; + //} + } + + class TriangularNumberSequence + { + + public int term(int n) + { + if (n < 0) + { + throw new ArgumentOutOfRangeException("Sequence undefined for negative index"); + } + return (n + 2) * (n + 1) / 2; + } + + // public Iterator iterator() + // { + // return new Iterator() + // { + + // private int currentIndex = 0; + + // public boolean hasNext() + // { + // return true; + // } + + // public Integer next() + // { + // int result = term(currentIndex); + // currentIndex++; + // return result; + // } + + // public void remove() + // { + // throw new UnsupportedOperationException(); + // } + //}; + //} + } + + public void generate() + { + new FibonacciSequence().term(3); + new TriangularNumberSequence().term(3); + } + + } +} diff --git a/Csharp/RefactoringGolf/Hole6/Hole6After.cs b/Csharp/RefactoringGolf/Hole6/Hole6After.cs new file mode 100644 index 0000000..4372c5a --- /dev/null +++ b/Csharp/RefactoringGolf/Hole6/Hole6After.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace RefactoringGolf.Hole6 +{ + public class Hole6After + { + public class NumberSequence + { + private readonly TermGenerator termGenerator; + + public NumberSequence(TermGenerator generator) + { + this.termGenerator = generator; + } + + public IEnumerable GetIterator() + { + return new Iterator(termGenerator); + } + + internal class Iterator : IEnumerable + { + private int currentIndex = 0; + private readonly TermGenerator termGenerator; + + public Iterator(TermGenerator term) + { + this.termGenerator = term; + } + + private bool hasNext() + { + return true; + } + + public IEnumerator GetEnumerator() + { + while (hasNext()) + { + yield return termGenerator.term(currentIndex++); + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } + public int term(int n) + { + return termGenerator.term(n); + } + } + + public interface TermGenerator + { + int term(int n); + } + + class TriangularTerm : TermGenerator + { + public int term(int n) + { + if (n < 0) + { + throw new ArgumentOutOfRangeException("Sequence undefined for negative index"); + } + return (n + 2) * (n + 1) / 2; + } + } + + class FibonacciTerm : TermGenerator + { + public int term(int n) + { + if (n < 0) + { + throw new ArgumentOutOfRangeException("Sequence undefined for negative index"); + } + if (n < 2) + { + return 1; + } + return term(n - 2) + term(n - 1); + } + } + + public void generate() + { + new NumberSequence(new FibonacciTerm()).term(3); + new NumberSequence(new TriangularTerm()).term(3); + } + } +} diff --git a/Csharp/RefactoringGolf/Hole6/Hole6Before.cs b/Csharp/RefactoringGolf/Hole6/Hole6Before.cs new file mode 100644 index 0000000..dc712e0 --- /dev/null +++ b/Csharp/RefactoringGolf/Hole6/Hole6Before.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace RefactoringGolf.Hole6 +{ + public class Hole6Before + { + public class FibonacciSequence : NumberSequence + { + public override int term(int n) + { + if (n < 0) + { + throw new ArgumentOutOfRangeException("Sequence undefined for negative index"); + } + if (n < 2) + { + return 1; + } + return term(n - 2) + term(n - 1); + } + } + + public class TriangularNumberSequence : NumberSequence + { + public override int term(int n) + { + if (n < 0) + { + throw new ArgumentOutOfRangeException("Sequence undefined for negative index"); + } + return (n + 2) * (n + 1) / 2; + } + } + + public abstract class NumberSequence + { + public abstract int term(int n); + + public IEnumerable GetIterator() + { + return new Iterator(term); + } + + internal class Iterator : IEnumerable + { + private int currentIndex = 0; + private readonly Func term; + + public Iterator(Func term) + { + this.term = term; + } + + private bool hasNext() + { + return true; + } + + public IEnumerator GetEnumerator() + { + while (hasNext()) + { + yield return this.term(currentIndex++); + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } + } + + public void generate() + { + new FibonacciSequence().term(3); + new TriangularNumberSequence().term(3); + } + } +} diff --git a/Csharp/RefactoringGolf/Instruction.cs b/Csharp/RefactoringGolf/Instruction.cs new file mode 100644 index 0000000..b1fbe04 --- /dev/null +++ b/Csharp/RefactoringGolf/Instruction.cs @@ -0,0 +1,8 @@ +using System; + +namespace RefactoringGolf +{ + public class Instruction + { + } +} diff --git a/Csharp/RefactoringGolf/MoveInstruction.cs b/Csharp/RefactoringGolf/MoveInstruction.cs new file mode 100644 index 0000000..b44a21d --- /dev/null +++ b/Csharp/RefactoringGolf/MoveInstruction.cs @@ -0,0 +1,12 @@ +namespace RefactoringGolf +{ + public class MoveInstruction : Instruction + { + private readonly int amount; + + public MoveInstruction(int amount) + { + this.amount = amount; + } + } +} diff --git a/Csharp/RefactoringGolf/RefactoringGolf.csproj b/Csharp/RefactoringGolf/RefactoringGolf.csproj new file mode 100644 index 0000000..5766db6 --- /dev/null +++ b/Csharp/RefactoringGolf/RefactoringGolf.csproj @@ -0,0 +1,7 @@ + + + + netcoreapp2.0 + + + diff --git a/Csharp/RefactoringGolf/TurnInstruction.cs b/Csharp/RefactoringGolf/TurnInstruction.cs new file mode 100644 index 0000000..4b147ab --- /dev/null +++ b/Csharp/RefactoringGolf/TurnInstruction.cs @@ -0,0 +1,12 @@ +namespace RefactoringGolf +{ + public class TurnInstruction : Instruction + { + private readonly int amount; + + public TurnInstruction(int amount) + { + this.amount = amount; + } + } +} diff --git a/build.gradle b/Java/build.gradle similarity index 100% rename from build.gradle rename to Java/build.gradle diff --git a/gradle/wrapper/gradle-wrapper.jar b/Java/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from gradle/wrapper/gradle-wrapper.jar rename to Java/gradle/wrapper/gradle-wrapper.jar diff --git a/gradle/wrapper/gradle-wrapper.properties b/Java/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from gradle/wrapper/gradle-wrapper.properties rename to Java/gradle/wrapper/gradle-wrapper.properties diff --git a/gradlew b/Java/gradlew old mode 100755 new mode 100644 similarity index 100% rename from gradlew rename to Java/gradlew diff --git a/gradlew.bat b/Java/gradlew.bat similarity index 100% rename from gradlew.bat rename to Java/gradlew.bat diff --git a/settings.gradle b/Java/settings.gradle similarity index 100% rename from settings.gradle rename to Java/settings.gradle diff --git a/src/main/java/com/develogical/golf/Instruction.java b/Java/src/main/java/com/develogical/golf/Instruction.java similarity index 100% rename from src/main/java/com/develogical/golf/Instruction.java rename to Java/src/main/java/com/develogical/golf/Instruction.java diff --git a/src/main/java/com/develogical/golf/MoveInstruction.java b/Java/src/main/java/com/develogical/golf/MoveInstruction.java similarity index 100% rename from src/main/java/com/develogical/golf/MoveInstruction.java rename to Java/src/main/java/com/develogical/golf/MoveInstruction.java diff --git a/src/main/java/com/develogical/golf/TurnInstruction.java b/Java/src/main/java/com/develogical/golf/TurnInstruction.java similarity index 100% rename from src/main/java/com/develogical/golf/TurnInstruction.java rename to Java/src/main/java/com/develogical/golf/TurnInstruction.java diff --git a/src/main/java/com/develogical/golf/hole1/Hole1After.java b/Java/src/main/java/com/develogical/golf/hole1/Hole1After.java similarity index 100% rename from src/main/java/com/develogical/golf/hole1/Hole1After.java rename to Java/src/main/java/com/develogical/golf/hole1/Hole1After.java diff --git a/src/main/java/com/develogical/golf/hole1/Hole1Before.java b/Java/src/main/java/com/develogical/golf/hole1/Hole1Before.java similarity index 100% rename from src/main/java/com/develogical/golf/hole1/Hole1Before.java rename to Java/src/main/java/com/develogical/golf/hole1/Hole1Before.java diff --git a/src/main/java/com/develogical/golf/hole2/Hole2After.java b/Java/src/main/java/com/develogical/golf/hole2/Hole2After.java similarity index 100% rename from src/main/java/com/develogical/golf/hole2/Hole2After.java rename to Java/src/main/java/com/develogical/golf/hole2/Hole2After.java diff --git a/src/main/java/com/develogical/golf/hole2/Hole2Before.java b/Java/src/main/java/com/develogical/golf/hole2/Hole2Before.java similarity index 100% rename from src/main/java/com/develogical/golf/hole2/Hole2Before.java rename to Java/src/main/java/com/develogical/golf/hole2/Hole2Before.java diff --git a/src/main/java/com/develogical/golf/hole3/Hole3After.java b/Java/src/main/java/com/develogical/golf/hole3/Hole3After.java similarity index 100% rename from src/main/java/com/develogical/golf/hole3/Hole3After.java rename to Java/src/main/java/com/develogical/golf/hole3/Hole3After.java diff --git a/src/main/java/com/develogical/golf/hole3/Hole3Before.java b/Java/src/main/java/com/develogical/golf/hole3/Hole3Before.java similarity index 100% rename from src/main/java/com/develogical/golf/hole3/Hole3Before.java rename to Java/src/main/java/com/develogical/golf/hole3/Hole3Before.java diff --git a/src/main/java/com/develogical/golf/hole4/Hole4After.java b/Java/src/main/java/com/develogical/golf/hole4/Hole4After.java similarity index 100% rename from src/main/java/com/develogical/golf/hole4/Hole4After.java rename to Java/src/main/java/com/develogical/golf/hole4/Hole4After.java diff --git a/src/main/java/com/develogical/golf/hole4/Hole4Before.java b/Java/src/main/java/com/develogical/golf/hole4/Hole4Before.java similarity index 100% rename from src/main/java/com/develogical/golf/hole4/Hole4Before.java rename to Java/src/main/java/com/develogical/golf/hole4/Hole4Before.java diff --git a/src/main/java/com/develogical/golf/hole5/Hole5After.java b/Java/src/main/java/com/develogical/golf/hole5/Hole5After.java similarity index 100% rename from src/main/java/com/develogical/golf/hole5/Hole5After.java rename to Java/src/main/java/com/develogical/golf/hole5/Hole5After.java diff --git a/src/main/java/com/develogical/golf/hole5/Hole5Before.java b/Java/src/main/java/com/develogical/golf/hole5/Hole5Before.java similarity index 100% rename from src/main/java/com/develogical/golf/hole5/Hole5Before.java rename to Java/src/main/java/com/develogical/golf/hole5/Hole5Before.java diff --git a/src/main/java/com/develogical/golf/hole6/Hole6After.java b/Java/src/main/java/com/develogical/golf/hole6/Hole6After.java similarity index 100% rename from src/main/java/com/develogical/golf/hole6/Hole6After.java rename to Java/src/main/java/com/develogical/golf/hole6/Hole6After.java diff --git a/src/main/java/com/develogical/golf/hole6/Hole6Before.java b/Java/src/main/java/com/develogical/golf/hole6/Hole6Before.java similarity index 100% rename from src/main/java/com/develogical/golf/hole6/Hole6Before.java rename to Java/src/main/java/com/develogical/golf/hole6/Hole6Before.java diff --git a/src/main/java/com/develogical/golf/hole6/NumberSequence.java b/Java/src/main/java/com/develogical/golf/hole6/NumberSequence.java similarity index 100% rename from src/main/java/com/develogical/golf/hole6/NumberSequence.java rename to Java/src/main/java/com/develogical/golf/hole6/NumberSequence.java