From fa3071680fa6e9615901da3613e223280f642522 Mon Sep 17 00:00:00 2001 From: ParthoShuvo Date: Sun, 9 Jul 2017 23:56:15 +0600 Subject: [PATCH 1/4] Day4 solution has been added --- .../org/jugbd/marathon/day4/Directory.java | 49 ++++++++++--------- .../java/org/jugbd/marathon/day4/File.java | 15 +++--- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/main/java/org/jugbd/marathon/day4/Directory.java b/src/main/java/org/jugbd/marathon/day4/Directory.java index 69953ea..d63bfd5 100644 --- a/src/main/java/org/jugbd/marathon/day4/Directory.java +++ b/src/main/java/org/jugbd/marathon/day4/Directory.java @@ -1,29 +1,32 @@ package org.jugbd.marathon.day4; +import java.util.ArrayList; import java.util.Date; +import java.util.List; public class Directory { - private String name; - private Date createdDate; - - public Directory(String root) { - - } - - public void add(File file) { - - } - - public int numberOfFiles() { - - return 0; - } - - public Object getName() { - return name; - } - - public Date getCreatedDate() { - return createdDate; - } + private String name; + private Date createdDate; + private List files = new ArrayList<>(); + + public Directory(String root) { + this.name = root; + this.createdDate = new Date(); + } + + public void add(File file) { + files.add(file); + } + + public int numberOfFiles() { + return files.size(); + } + + public Object getName() { + return name; + } + + public Date getCreatedDate() { + return createdDate; + } } diff --git a/src/main/java/org/jugbd/marathon/day4/File.java b/src/main/java/org/jugbd/marathon/day4/File.java index 3ec3cd3..9602d9e 100644 --- a/src/main/java/org/jugbd/marathon/day4/File.java +++ b/src/main/java/org/jugbd/marathon/day4/File.java @@ -1,14 +1,13 @@ package org.jugbd.marathon.day4; - public class File { - private String name; - - public File(String name) { + private String name; - } + public File(String name) { + this.name = name; + } - public String getName() { - return name; - } + public String getName() { + return name; + } } From cb9297cc495238e8497065083f5d41bd021c47c1 Mon Sep 17 00:00:00 2001 From: ParthoShuvo Date: Mon, 10 Jul 2017 02:16:01 +0600 Subject: [PATCH 2/4] Day4 has been solved with custom test-cases --- .../org/jugbd/marathon/day4/Directory.java | 26 ++++-- .../java/org/jugbd/marathon/day4/File.java | 9 ++- .../marathon/day4/FileSystemComponent.java | 22 ++++++ .../jugbd/marathon/day4/FileSystemTest.java | 79 +++++++++++++------ 4 files changed, 103 insertions(+), 33 deletions(-) create mode 100644 src/main/java/org/jugbd/marathon/day4/FileSystemComponent.java diff --git a/src/main/java/org/jugbd/marathon/day4/Directory.java b/src/main/java/org/jugbd/marathon/day4/Directory.java index d63bfd5..103b1a4 100644 --- a/src/main/java/org/jugbd/marathon/day4/Directory.java +++ b/src/main/java/org/jugbd/marathon/day4/Directory.java @@ -4,28 +4,44 @@ import java.util.Date; import java.util.List; -public class Directory { +public class Directory extends FileSystemComponent { private String name; private Date createdDate; - private List files = new ArrayList<>(); + private List files = new ArrayList<>(); public Directory(String root) { + if (root == null || root.isEmpty()) { + throw new IllegalArgumentException( + "Directory name shouldn't be null or empty string"); + } this.name = root; this.createdDate = new Date(); } - public void add(File file) { - files.add(file); + @Override + public void add(FileSystemComponent fileComponent) { + if (files.contains(fileComponent)) { + throw new IllegalArgumentException(fileComponent.getName() + + " already exists in " + this.getName() + " directory"); + } else if (fileComponent.hashCode() == this.hashCode() + && fileComponent.getName().equals(this.getName())) { + throw new IllegalArgumentException( + "A parent directory can't hold itself as its child component"); + } + files.add(fileComponent); } + @Override public int numberOfFiles() { return files.size(); } - public Object getName() { + @Override + public String getName() { return name; } + @Override public Date getCreatedDate() { return createdDate; } diff --git a/src/main/java/org/jugbd/marathon/day4/File.java b/src/main/java/org/jugbd/marathon/day4/File.java index 9602d9e..ed8de9b 100644 --- a/src/main/java/org/jugbd/marathon/day4/File.java +++ b/src/main/java/org/jugbd/marathon/day4/File.java @@ -1,12 +1,17 @@ package org.jugbd.marathon.day4; -public class File { +public class File extends FileSystemComponent{ private String name; public File(String name) { + if (name == null || name.isEmpty()) { + throw new IllegalArgumentException( + "Directory name shouldn't be null or empty string"); + } this.name = name; } - + + @Override public String getName() { return name; } diff --git a/src/main/java/org/jugbd/marathon/day4/FileSystemComponent.java b/src/main/java/org/jugbd/marathon/day4/FileSystemComponent.java new file mode 100644 index 0000000..35c96e5 --- /dev/null +++ b/src/main/java/org/jugbd/marathon/day4/FileSystemComponent.java @@ -0,0 +1,22 @@ +package org.jugbd.marathon.day4; + +import java.util.Date; + +public abstract class FileSystemComponent { + + public String getName() { + throw new UnsupportedOperationException(); + } + + public int numberOfFiles() { + throw new UnsupportedOperationException(); + } + + public void add(FileSystemComponent fileSystemComponent) { + throw new UnsupportedOperationException(); + } + + public Date getCreatedDate() { + throw new UnsupportedOperationException(); + } +} diff --git a/src/test/java/org/jugbd/marathon/day4/FileSystemTest.java b/src/test/java/org/jugbd/marathon/day4/FileSystemTest.java index 3efb1c7..ef8d8e7 100644 --- a/src/test/java/org/jugbd/marathon/day4/FileSystemTest.java +++ b/src/test/java/org/jugbd/marathon/day4/FileSystemTest.java @@ -1,35 +1,62 @@ package org.jugbd.marathon.day4; - -import org.junit.Test; - -import java.util.Date; - import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertNotNull; -public class FileSystemTest { - - - @Test - public void basicTest() { - String rootDirectoryName = "root"; - Directory root = new Directory(rootDirectoryName); - assertNotNull(root); - assertEquals(rootDirectoryName, root.getName()); - - String fileName = "profile.jpg"; - File file = new File(fileName); - assertNotNull(file); - - assertEquals(fileName, file.getName()); +import java.util.Date; - root.add(file); - assertEquals(1, root.numberOfFiles()); +import org.junit.Test; - Date createdDate = root.getCreatedDate(); - assertNotNull(createdDate); +public class FileSystemTest { - //Add more test cases - } + @Test + public void basicTest() { + String rootDirectoryName = "root"; + Directory root = new Directory(rootDirectoryName); + assertNotNull(root); + assertEquals(rootDirectoryName, root.getName()); + + String fileName = "profile.jpg"; + File file = new File(fileName); + assertNotNull(file); + + assertEquals(fileName, file.getName()); + + root.add(file); + assertEquals(1, root.numberOfFiles()); + + Date createdDate = root.getCreatedDate(); + assertNotNull(createdDate); + + FileSystemComponent dir2 = new Directory("Dir2"); + root.add(dir2); + assertEquals(2, root.numberOfFiles()); + } + + @Test(expected = IllegalArgumentException.class) + public void testDuplicateFileExistance() { + FileSystemComponent root = new Directory("root"); + File file = new File("profile.jpg"); + root.add(file); + root.add(file); + assertEquals(1, root.numberOfFiles()); + } + + @Test(expected = IllegalArgumentException.class) + public void testEmptyOrNullDirectoryName(){ + new Directory(null); + } + + @Test(expected = IllegalArgumentException.class) + public void testEmptyOrNullFileName(){ + new File(""); + } + + @Test(expected = IllegalArgumentException.class) + public void testParentAsAChild(){ + FileSystemComponent root = new Directory("root"); + root.add(root); + } + + } \ No newline at end of file From ddc5c07cd4c6f97e8955a56cf10ed97305915791 Mon Sep 17 00:00:00 2001 From: ParthoShuvo Date: Mon, 10 Jul 2017 03:28:53 +0600 Subject: [PATCH 3/4] Day3 problem's solution with additional testcases --- .../marathon/day3/TrappingTheRainWater.java | 58 +++++++++---------- .../day3/TrappingTheRainWaterTest.java | 2 + 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/src/main/java/org/jugbd/marathon/day3/TrappingTheRainWater.java b/src/main/java/org/jugbd/marathon/day3/TrappingTheRainWater.java index 23b1303..112060c 100644 --- a/src/main/java/org/jugbd/marathon/day3/TrappingTheRainWater.java +++ b/src/main/java/org/jugbd/marathon/day3/TrappingTheRainWater.java @@ -1,35 +1,31 @@ package org.jugbd.marathon.day3; - public class TrappingTheRainWater { - static int findWaterUnit(int[] arr) { - - int unitOfWater = 0, i, j, k; - boolean checked[] = new boolean[arr.length]; - - for(i=0;i arr[j]) { + sum += arr[i] - arr[j]; + if (j == length) { + canHold = false; + break; + } + j++; + } + if (canHold) { + unitOfWater += sum; + i = j; + continue; + } + } + i++; + } + return unitOfWater; + } } diff --git a/src/test/java/org/jugbd/marathon/day3/TrappingTheRainWaterTest.java b/src/test/java/org/jugbd/marathon/day3/TrappingTheRainWaterTest.java index 9d854e0..5ba2900 100644 --- a/src/test/java/org/jugbd/marathon/day3/TrappingTheRainWaterTest.java +++ b/src/test/java/org/jugbd/marathon/day3/TrappingTheRainWaterTest.java @@ -12,5 +12,7 @@ public void basicTest() { assertEquals(2, TrappingTheRainWater.findWaterUnit(new int[]{2, 0, 2})); assertEquals(10, TrappingTheRainWater.findWaterUnit(new int[]{3, 0, 0, 2, 0, 4})); assertEquals(6, TrappingTheRainWater.findWaterUnit(new int[]{0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1})); + assertEquals(0, TrappingTheRainWater.findWaterUnit(new int[]{0, 1, 0})); + assertEquals(4, TrappingTheRainWater.findWaterUnit(new int[]{3, 4, 0, 5, 2, 3, 0, 0})); } } \ No newline at end of file From 5771b531c6ec1d18d1ef4eb89af37c8b4a5657f4 Mon Sep 17 00:00:00 2001 From: ParthoShuvo Date: Mon, 10 Jul 2017 22:29:43 +0600 Subject: [PATCH 4/4] Day2 problem's solution with some additional test cases --- .../jugbd/marathon/day2/BiggestNumber.java | 76 ++++++++----------- .../marathon/day2/BiggestNumberTest.java | 2 + 2 files changed, 32 insertions(+), 46 deletions(-) diff --git a/src/main/java/org/jugbd/marathon/day2/BiggestNumber.java b/src/main/java/org/jugbd/marathon/day2/BiggestNumber.java index 2b1ccf1..8fd0857 100644 --- a/src/main/java/org/jugbd/marathon/day2/BiggestNumber.java +++ b/src/main/java/org/jugbd/marathon/day2/BiggestNumber.java @@ -1,50 +1,34 @@ package org.jugbd.marathon.day2; -import java.util.Arrays; - public class BiggestNumber { - public static long findTheNextBiggerNumber(long n) { - - int ar[] = new int[20]; // long is 64 bit, so max 19 digits can be possible - int length = 0, tmp; - boolean found = false; - while (n > 0) { - - ar[length++] = (int) (n % 10); - n /= 10; - } - - for (int i = 0, j = length - 1; i < length / 2; i++, j--) { - tmp = ar[i]; - ar[i] = ar[j]; - ar[j] = tmp; - } - - // 52876 - - for (int i = length - 1; i >= 0; i--) { - for (int j = i - 1; j >= 0; j--) { - if (ar[j] < ar[i]) { - - tmp = ar[i]; - ar[i] = ar[j]; - ar[j] = tmp; - Arrays.sort(ar, j + 1, length); - found = true; - break; - } - } - - if (found) { - break; - } - } - - n = 0; - for (int i = 0; i < length; i++) { - n = n * 10 + ar[i]; - } - - return found ? n : -1; - } + public static long findTheNextBiggerNumber(long n) { + + char[] digits = String.valueOf(n).toCharArray(); + if (digits.length == 1) + return -1; + for (int i = digits.length - 2; i >= 0; i--) { + int index = getImmediateMaxDigitAsIndex(digits, i + 1, digits.length, digits[i]); + if (index != -1) { + char ch = digits[index]; + for (int j = index - 1; j >= i; j--) { + digits[j + 1] = digits[j]; + } + digits[i] = ch; + return Long.parseLong(new String(digits)); + } + } + return -1; + } + + static int getImmediateMaxDigitAsIndex(char[] digits, int startInd, int endInd, char givenDigit) { + int index = -1; + char min = '9'; + for (int i = startInd; i < endInd; i++) { + if (digits[i] > givenDigit && min > digits[i]) { + index = i; + min = digits[i]; + } + } + return index; + } } diff --git a/src/test/java/org/jugbd/marathon/day2/BiggestNumberTest.java b/src/test/java/org/jugbd/marathon/day2/BiggestNumberTest.java index e11dd53..3dd6cc3 100644 --- a/src/test/java/org/jugbd/marathon/day2/BiggestNumberTest.java +++ b/src/test/java/org/jugbd/marathon/day2/BiggestNumberTest.java @@ -17,5 +17,7 @@ public void basicTests() { assertEquals(-1, BiggestNumber.findTheNextBiggerNumber(111)); assertEquals(-1, BiggestNumber.findTheNextBiggerNumber(531)); assertEquals(753772, BiggestNumber.findTheNextBiggerNumber(737752)); + assertEquals(5499214, BiggestNumber.findTheNextBiggerNumber(5499142)); + assertEquals(219, BiggestNumber.findTheNextBiggerNumber(192)); } } \ No newline at end of file