Java solution to Codility ChocolatesByNumbers problem (Lesson 12 – Euclidean algorithm) which scored 100%. The problem is to count the number of chocolates you will eat when there are N chocolates in a circle.
The strategy is to divide N by the greatest common divisor of N and M.
Reference
Solution to Chocolates-By-Numbers (Code Says)
[cc lang="java" escaped="true"] package com.codility.lesson12.euclidean; public class ChocolatesByNumbers { public int solve(int N, int M) { return N / gcdByDivision(N, M); } int gcdByDivision(int A, int B) { if(A % B == 0) return B; else return gcdByDivision(B, A % B); } } [/cc]
TestNG test cases for this problem which all passed:
[cc lang="java" escaped="true"] package test.com.codility.lesson12.euclidean; import org.testng.Assert; import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.codility.lesson12.euclidean.ChocolatesByNumbers; public class ChocolatesByNumbersTests { private ChocolatesByNumbers solution; @BeforeTest public void setUp() { solution = new ChocolatesByNumbers(); } @DataProvider(name = "data1") public Object [][] createData1() { return new Object [][] { new Object [] { 10, 4, 5 }, new Object [] { 10, 3, 10 }, new Object [] { 5, 6, 5 }, new Object [] { 5, 7, 5 }, new Object [] { 1, 1, 1 }, new Object [] { 2, 1, 2 }, new Object [] { 100, 1, 100 }, }; } @Test(dataProvider = "data1") public void verifySolution(int pN, int pM, int pExpected) { Assert.assertEquals(solution.solve(pN, pM), pExpected); } } [/cc]