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));
}
}
}