// Arup Guha
// 4/24/2016
// Solution to 2015 AP CS A Free Response Question 4: Multiple Groups

import java.util.*;

public class MultipleGroups implements NumberGroup {

	private List<NumberGroup> groupList;

	public MultipleGroups() {
		groupList = new ArrayList<NumberGroup>();
	}

	public void add(NumberGroup g) {
		groupList.add(g);
	}

	// Solution to part (C)
	public boolean contains(int value) {

		// Check to see if value is in any of our groups.
		for (NumberGroup g : groupList)
			if (g.contains(value))
				return true;

		// If we get here, it's not in any of our groups.
		return false;
	}

	public static void main(String[] args) {

		// This is their test.
		MultipleGroups myNums = new MultipleGroups();
		myNums.add(new Range(5, 8));
		myNums.add(new Range(10, 12));
		myNums.add(new Range(1, 6));

		// It's easy just to see all of the results.
		for (int i=1; i<15; i++) {
			if (myNums.contains(i))
				System.out.println(i+" is in my group");
			else
				System.out.println(i+" is not in my group");
		}
	}
}

// Solution to part (B)
class Range implements NumberGroup {

	private int lowerBound;
	private int upperBound;

	public Range(int low, int high) {
		lowerBound = low;
		upperBound = high;
	}

	public boolean contains(int item) {
		return item >= lowerBound && item <= upperBound;
	}
}

// Solution to part (A)
interface NumberGroup {
	public boolean contains(int value);
}