diff --git a/config.json b/config.json index b22415ece..ce2baf9fc 100644 --- a/config.json +++ b/config.json @@ -52,7 +52,8 @@ "robot-simulator", "bracket-push", "pythagorean-triplet", - "binary-search-tree" + "binary-search-tree", + "binary-search" ], "exercises": [ { @@ -299,6 +300,11 @@ "slug": "binary-search-tree", "difficulty": 1, "topics": [] + }, + { + "slug": "binary-search", + "difficulty": 1, + "topics": [] } ], "deprecated": [ diff --git a/exercises/binary-search/build.gradle b/exercises/binary-search/build.gradle new file mode 100644 index 000000000..d019b23c7 --- /dev/null +++ b/exercises/binary-search/build.gradle @@ -0,0 +1,17 @@ +apply plugin: "java" +apply plugin: "eclipse" +apply plugin: "idea" + +repositories { + mavenCentral() +} + +dependencies { + testCompile "junit:junit:4.12" +} +test { + testLogging { + exceptionFormat = 'full' + events = ["passed", "failed", "skipped"] + } +} diff --git a/exercises/binary-search/src/example/java/BinarySearch.java b/exercises/binary-search/src/example/java/BinarySearch.java new file mode 100644 index 000000000..97c50a596 --- /dev/null +++ b/exercises/binary-search/src/example/java/BinarySearch.java @@ -0,0 +1,40 @@ + +import java.util.List; + +public class BinarySearch> { + + private List array; + private int arraySize; + + public BinarySearch(List array) { + this.array = array; + this.arraySize = array.size(); + } + + public int indexOf(T value) { + return search(value); + } + + public List getArray() { + return array; + } + + private int search(T value) { + int left = 0; + int right = this.arraySize - 1; + int middle; + T element; + while (left <= right) { + middle = (int) Math.floor(0.5 * (left + right)); + element = this.array.get(middle); + if (value.compareTo(element) > 0) { + left = middle + 1; + } else if (value.compareTo(element) < 0) { + right = middle - 1; + } else { + return middle; + } + } + return -1; + } +} diff --git a/exercises/binary-search/src/main/java/.keep b/exercises/binary-search/src/main/java/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/exercises/binary-search/src/main/java/BinarySearch.java b/exercises/binary-search/src/main/java/BinarySearch.java new file mode 100644 index 000000000..ea600669c --- /dev/null +++ b/exercises/binary-search/src/main/java/BinarySearch.java @@ -0,0 +1,4 @@ + +public class BinarySearch { + +} diff --git a/exercises/binary-search/src/test/java/.keep b/exercises/binary-search/src/test/java/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/exercises/binary-search/src/test/java/BinarySearchTest.java b/exercises/binary-search/src/test/java/BinarySearchTest.java new file mode 100644 index 000000000..f15808c33 --- /dev/null +++ b/exercises/binary-search/src/test/java/BinarySearchTest.java @@ -0,0 +1,136 @@ + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import static org.junit.Assert.assertEquals; +import org.junit.Ignore; +import org.junit.Test; + +public class BinarySearchTest { + + public static final List EMPTY_LIST + = Collections.unmodifiableList(new ArrayList(0)); + + public static final List LIST_OF_UNIT_LENGTH + = Collections.unmodifiableList( + Arrays.asList(6) + ); + + private static final List SORTED_LIST + = Collections.unmodifiableList( + Arrays.asList(1, 3, 4, 6, 8, 9, 11) + ); + + public static final List SORTED_LIST_OF_ODD_LENGTH + = Collections.unmodifiableList( + Arrays.asList(1, 3, 5, 8, 13, 21, 34, 55, + 89, 144, 233, 377, 634) + ); + + public static final List SORTED_LIST_OF_EVEN_LENGTH + = Collections.unmodifiableList( + Arrays.asList(1, 3, 5, 8, 13, 21, 34, 55, + 89, 144, 233, 377) + ); + + @Test + public void findsAValueInAnArrayWithOneElement() { + BinarySearch sut = new BinarySearch<>(LIST_OF_UNIT_LENGTH); + final int value = 6; + final int actual = sut.indexOf(value); + final int expected = 0; + assertEquals(expected, actual); + } + + @Ignore + @Test + public void findsAValueInTheMiddleOfAnArray() { + BinarySearch sut = new BinarySearch<>(SORTED_LIST); + final int value = 6; + final int actual = sut.indexOf(value); + final int expected = 3; + assertEquals(expected, actual); + } + + @Ignore + @Test + public void findsAValueAtTheBeginningOfAnArray() { + BinarySearch sut = new BinarySearch<>(SORTED_LIST); + final int value = 1; + final int actual = sut.indexOf(value); + final int expected = 0; + assertEquals(expected, actual); + } + + @Ignore + @Test + public void findsAValueAtTheEndOfAnArray() { + BinarySearch sut = new BinarySearch<>(SORTED_LIST); + final int value = 11; + final int actual = sut.indexOf(value); + final int expected = 6; + assertEquals(expected, actual); + } + + @Ignore + @Test + public void findsAValueInAnArrayOfOddLength() { + BinarySearch sut = new BinarySearch<>(SORTED_LIST_OF_ODD_LENGTH); + final int value = 144; + final int actual = sut.indexOf(value); + final int expected = 9; + assertEquals(expected, actual); + } + + @Ignore + @Test + public void findsAValueInAnArrayOfEvenLength() { + BinarySearch sut + = new BinarySearch<>(SORTED_LIST_OF_EVEN_LENGTH); + final int value = 21; + final int actual = sut.indexOf(value); + final int expected = 5; + assertEquals(expected, actual); + } + + @Ignore + @Test + public void identifiesThatAValueIsNotIncludedInTheArray() { + BinarySearch sut = new BinarySearch<>(SORTED_LIST); + final int value = 7; + final int actual = sut.indexOf(value); + final int expected = -1; + assertEquals(expected, actual); + } + + @Ignore + @Test + public void aValueSmallerThanTheArraysSmallestValueIsNotIncluded() { + BinarySearch sut = new BinarySearch<>(SORTED_LIST); + final int value = 0; + final int actual = sut.indexOf(value); + final int expected = -1; + assertEquals(expected, actual); + } + + @Ignore + @Test + public void aValueLargerThanTheArraysSmallestValueIsNotIncluded() { + BinarySearch sut = new BinarySearch<>(SORTED_LIST); + final int value = 13; + final int actual = sut.indexOf(value); + final int expected = -1; + assertEquals(expected, actual); + } + + @Ignore + @Test + public void nothingIsIncludedInAnEmptyArray() { + BinarySearch sut = new BinarySearch<>(EMPTY_LIST); + final int value = 1; + final int actual = sut.indexOf(value); + final int expected = -1; + assertEquals(expected, actual); + } +}