Skip to content

Commit

Permalink
refactoring problem 55 using clean code thoughts
Browse files Browse the repository at this point in the history
  • Loading branch information
ByIvo committed May 22, 2018
1 parent 5db1b60 commit 14136b4
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 58 deletions.
80 changes: 80 additions & 0 deletions src/main/java/clean/code/problems/LychrelNumberProverUntil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package clean.code.problems;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

public class LychrelNumberProverUntil
{
private int largestNumberToProve;

public LychrelNumberProverUntil(int largestNumberToProve)
{
this.largestNumberToProve = largestNumberToProve;
}

public static void main(String[] args)
{
int lychrelNumberCounter = new LychrelNumberProverUntil(10000).countLychrelNumbers();
System.out.println("How many? " + lychrelNumberCounter);
}

public int countLychrelNumbers()
{
List<BigInteger> lychrelNumbers = new ArrayList<BigInteger>();

for (int i = 1; i <= largestNumberToProve; i++)
{
boolean isLychrelNumber = sumItsReversedValueUntilProveItsLychrel(BigInteger.valueOf(i));
if (isLychrelNumber)
{
lychrelNumbers.add(BigInteger.valueOf(i));
}
}

return lychrelNumbers.size();
}

private boolean sumItsReversedValueUntilProveItsLychrel(BigInteger numberToVerify)
{
for (int i = 0; i < 50; i++)
{
BigInteger sumWithReversedValue = sumWithItsReversedValue(numberToVerify);
if (isPalindrome(sumWithReversedValue))
{
return false;
}
else
{
numberToVerify = sumWithReversedValue;
}
}

return true;
}

private BigInteger sumWithItsReversedValue(BigInteger numberToVerify)
{
BigInteger reversedNumber = reverseNumber(numberToVerify);
BigInteger reversedSum = numberToVerify.add(reversedNumber);

return reversedSum;
}

private boolean isPalindrome(BigInteger number)
{
String numberAsString = String.valueOf(number);
String numberAsReversedString = String.valueOf(reverseNumber(number));

return numberAsReversedString.equals(numberAsString);
}

private BigInteger reverseNumber(BigInteger toReverse)
{
String resultString = String.valueOf(toReverse);
String resultReverse = new StringBuffer(resultString).reverse().toString();

return new BigInteger(resultReverse);
}

}
58 changes: 0 additions & 58 deletions src/main/java/clean/code/problems/Problem55.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package clean.code.problems;

import static org.junit.Assert.*;

import org.junit.Test;


public class LychrelNumberProverUntilTest
{

@Test
public void sholdCount249LychrelNumbersUntil10000()
{
LychrelNumberProverUntil lychrelNumbersDiscover = new LychrelNumberProverUntil(10000);
int lychrelNumbersCounter = lychrelNumbersDiscover.countLychrelNumbers();
assertEquals(lychrelNumbersCounter, 249);
}

@Test
public void sholdCount13LychrelNumbersUntil1000()
{
LychrelNumberProverUntil lychrelNumbersDiscover = new LychrelNumberProverUntil(1000);
int lychrelNumbersCounter = lychrelNumbersDiscover.countLychrelNumbers();
assertEquals(lychrelNumbersCounter, 13);
}

}

0 comments on commit 14136b4

Please sign in to comment.