The challenge
Given a list of numbers, determine whether the sum of its elements is odd or even.
Give your answer as a string matching "odd"
or "even"
.
If the input array is empty consider it as: [0]
(array with a zero).
Example:
odd_or_even([0]) == "even" odd_or_even([0, 1, 4]) == "odd" odd_or_even([0, -1, -5]) == "even"
The solution in Java code
Option 1 (using streams
):
public class Solution { public static String oddOrEven (int[] array) { return (java.util.Arrays.stream(array).sum()%2==0) ? "even" : "odd"; } }
Option 2 (using forloop
):
public class Solution { public static String oddOrEven (int[] array) { int sum = 0; for (int n : array){ sum += n; } return sum%2==0 ? "even" : "odd"; } }
Option 3 (using xor
):
public class Solution { public static String oddOrEven (int[] array) { int xor = 0; for (int i : array){ xor ^= i; } return (xor & 1) == 1 ? "odd" : "even"; } }
Test cases to validate our solution
import org.junit.Test; import static org.junit.Assert.assertEquals; import org.junit.runners.JUnit4; import java.util.*; import java.util.stream.IntStream; public class SolutionTest { @Test public void test1() { assertEquals("odd", Solution.oddOrEven(new int[] {2, 5, 34, 6})); assertEquals("odd", Solution.oddOrEven(new int[] {0, 1, 2})); assertEquals("even", Solution.oddOrEven(new int[] {0, 1, 3})); assertEquals("even", Solution.oddOrEven(new int[] {1023, 1, 2})); } @Test public void randomTests() { Random r = new Random(); for(int j = 1; j <= 200; j++) { int length = 1+r.nextInt(10); int[] array = new int[length]; for(int i = 0; i < array.length; i++) { int random_number = 1+r.nextInt(2000); array[i] = random_number; } assertEquals(this.n(array), Solution.oddOrEven(array)); } } }