Skip to content

Commit

Permalink
Merge pull request #5 from jaebradley/separate-the-numbers
Browse files Browse the repository at this point in the history
separate the numbers implementation
  • Loading branch information
jaebradley committed Jul 19, 2017
2 parents a36efe1 + 41b7f23 commit e8c135b
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 0 deletions.
42 changes: 42 additions & 0 deletions codereview/beautifulNumberValidator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
## Problem
Adapted from [this HackerRank problem](https://www.hackerrank.com/challenges/separate-the-numbers/problem).

[![Beautiful Number Description][1]][1]

Instead of printing `YES` or `NO`, I just wanted to return a `boolean`.

## Implementation

<! -- language: lang-java -->

public class BeautifulNumberValidator {
public static boolean isValidBeautifulNumber(String s) {
if (s.length() < 2) {
return false;
}

for (int substringSize = 1; substringSize <= s.length() / 2; substringSize++) {
long value = Long.parseLong(s.substring(0, substringSize));

if (value == 0) {
break;
}

StringBuilder sb = new StringBuilder();
sb.append(value);

while (sb.length() < s.length() && sb.toString().equals(s.substring(0, sb.length()))) {
sb.append(++value);
}

if (sb.toString().equals(s)) {
return true;
}
}

return false;
}
}


[1]: https://i.stack.imgur.com/p8HI7.png
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package algorithms.implementations;

import algorithms.interfaces.BeautifulNumberValidator;

/**
* https://www.hackerrank.com/challenges/separate-the-numbers/problem
*/

public class BeautifulNumberValidatorImpl implements BeautifulNumberValidator {
@Override
public boolean isValidBeautifulNumber(final String s) {
if (s.length() < 2) {
return false;
}

for (int substringSize = 1; substringSize <= s.length() / 2; substringSize++) {
long value = Long.parseLong(s.substring(0, substringSize));

if (value == 0) {
break;
}

StringBuilder sb = new StringBuilder();
sb.append(value);

while (sb.length() < s.length() && sb.toString().equals(s.substring(0, sb.length()))) {
sb.append(++value);
}

if (sb.toString().equals(s)) {
return true;
}
}

return false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package algorithms.interfaces;

public interface BeautifulNumberValidator {
boolean isValidBeautifulNumber(final String s);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package algorithms.implementations;

import algorithms.interfaces.BeautifulNumberValidator;
import org.junit.Test;

import static org.junit.Assert.*;

public class BeautifulNumberValidatorImplTest {
final BeautifulNumberValidator validator = new BeautifulNumberValidatorImpl();

@Test
public void itShouldBeAValidBeautifulNumber() {
assertTrue(validator.isValidBeautifulNumber("1234"));
}

@Test
public void itShouldNotBeAValidBeautifulNumber() {
assertFalse(validator.isValidBeautifulNumber("101103"));
}

@Test
public void itShouldNotBeAValidBeautifulNumberSinceItStartsWithZero() {
assertFalse(validator.isValidBeautifulNumber("010203"));
}

@Test
public void itShouldNotBeAValidBeautifulNumberSinceItIsTooSmall() {
assertFalse(validator.isValidBeautifulNumber("1"));
}
}

0 comments on commit e8c135b

Please sign in to comment.