import java.util.*;

public class Renovation
{
    public Renovation (boolean debug)
    {
        _debug = debug;
    }

    public Vector<Coordinate> tilesOfLife (Vector<String> lines, int numberOfDays)
    {
        Vector<Coordinate> blackTiles = getBlackTiles(lines);

        for (int i = 0; i < numberOfDays; i++)
        {
            Vector<Coordinate> nextIteration = new Vector<Coordinate>();

            for (int index = 0; index < blackTiles.size(); index++)
            {
                Coordinate current = blackTiles.elementAt(index);
                Vector<Coordinate> adjacentTiles = Directions.adjacentCoordinates(current);
            }
        }

        return blackTiles;
    }

    public Vector<Coordinate> getBlackTiles (Vector<String> lines)
    {
        Vector<Coordinate> blackTiles = new Vector<Coordinate>();

        for (int i = 0; i < lines.size(); i++)
        {
            Coordinate coord = tilePosition(lines.elementAt(i));

            if (!blackTiles.contains(coord))
                blackTiles.add(coord);
            else
                blackTiles.remove(coord);
        }

        return blackTiles;
    }

    private Coordinate tilePosition (String line)
    {
        Coordinate coord = new Coordinate(0, 0);
        int index = 0;
        String remainder = line;

        while (index < line.length())
        {
            int directionSize = 2;

            if ((remainder.startsWith(Directions.EAST)) || (remainder.startsWith(Directions.WEST)))
                directionSize = 1;

            String direction = remainder.substring(0, directionSize);

            remainder = remainder.substring(directionSize);
            index += directionSize;

            if (_debug)
            {
                System.out.println("Direction: "+direction);
                System.out.println("Remainder: "+remainder);
            }

            coord = Directions.getCoordinate(direction, coord);
        }

        return coord;
    }

    private boolean _debug;
}
@@ -638,16 +638,734 @@
 rrent);%0A
+                int neighbouringBlackTiles = Util.commonBlackTiles(blackTiles, adjacentTiles);%0A%0A                /*%0A                 * Any black tile with zero or more than 2 black tiles immediately adjacent%0A                 * to it is flipped to white.%0A                 */%0A%0A                if ((neighbouringBlackTiles == 0) %7C%7C (neighbouringBlackTiles %3E 2))%0A                %7B%0A                    if (_debug)%0A                        System.out.println(%22Flipping %22+current+%22 to white.%22);%0A                %7D%0A                else%0A                %7B%0A                    if (_debug)%0A                        System.out.println(%22Leaving %22+current+%22 as black.%22);%0A%0A                    nextIteration.add(current);%0A                %7D%0A
         

Update Renovation.java