TopcoderArchiveVisit Topcoder
Archive
Algorithm problem

FullMonitor

Problem statement, definition, constraints, and public examples.

Problem Statement

A company is developing a 3-dimensional computer monitor. The monitor has a resolution of 1024 by 1024 by 1024 pixels. The monitor is a cube, with a grid of lasers on three sides of the cube, all of which share an edge (that is, no grid is on the face directly opposite another grid). As a result, one of these grids is in the XY-plane of the monitor, another is in the YZ-plane, and the third is in the XZ-plane. To "light up" a pixel, the laser on each grid which corresponds to the pixel's coordinate needs to be on, and the intersection of these three lasers is what creates the point of light.

Create a class FullMonitor containing a method numLasers which takes as an argument a String[] pixels, representing the lit pixels, and returns the total number of lasers that must be activated. If the given String[] of pixels cannot be turned on without turning on other pixels (see example 4) then return -1.

For example, if we wish to light the point (4,4,3), the XY-plane would have to light up the laser at (4,4), the YZ-plane would have to light up the laser at (4,3), and the XZ-plane would have to light up the laser at (4,3). In total, 3 lasers would have to be activated. If we were to then light the point (4,3,3), the following lasers would have to be activated: XY-plane (4,3), YZ-plane (3,3), XZ-plane (4,3). Since the XZ-plane's (4,3) laser is already activated, a total of 5 lasers would have to be activated.

Each element of pixels is formatted as (quotes added for clarity) "X,Y,Z" where X, Y, and Z are the respective coordinates of the pixel. Each coordinate is an integer between 0 and 1023 inclusive (with no extra leading zeroes).

Definition

Class:
FullMonitor
Method:
numLasers
Parameters:
String[]
Returns:
int
Method signature:
int numLasers(String[] pixels)
(be sure your method is public)

Notes

  • Each laser grid has 1024*1024=1048576 lasers, for a total of 3145728 possible activated lasers. However, this situation requires more lit pixels than can be represented using the input.

Constraints

  • pixels will contain between 0 and 50 elements, inclusive.
  • each element of pixels will be formatted as (quotes added for clarity) "X,Y,Z" where X, Y, and Z are integers between 0 and 1023, inclusive, with no extra leading zeroes
  • each element of pixels will be unique.

Examples

  1. {"25,25,25"}
    Returns: 3
    Only one pixel is lit, and it requires 3 lasers to be displayed.
  2. {"25,25,25","25,25,26"}
    Returns: 5
    2 pixels are lit, but share the same XY laser at point (25,25), so only 5 lasers are lit.
  3. {"25,25,25","25,25,26","25,26,26","25,26,25"}
    Returns: 8
  4. {"1000,1005,20","20,50,20","30,90,10","1005,30,90",
     "90,1000,1005","30,90,20","1000,90,10","40,90,10",
     "1000,1000,1000"}
    Returns: -1
  5. {"1,1,3","1,3,1","3,1,1"}
    Returns: -1
    These three pixels cannot be lit without lighting the pixel (1,1,1), so return -1.
  6. {"1,1,3","1,3,1","3,1,1","1,1,1"}
    Returns: 9
    The previous example, with (1,1,1) activated to make it possible.
  7. {"938,134,626","1015,310,957","427,741,13","388,513,56",
    "914,169,526","716,540,478","796,461,500","506,886,866",
    "44,185,744","474,104,631","557,402,744","992,132,804",
    "440,499,122","895,845,612","711,576,984","281,846,475",
    "781,620,301","305,632,954","874,659,36","17,978,393",
    "765,481,372","612,316,8","902,281,515","272,125,1012",
    "413,513,987","595,940,1014","858,1019,100","899,554,613",
    "226,995,592","793,939,286","386,41,212","111,899,737",
    "339,199,117","1014,710,638","413,187,56","301,691,368",
    "387,285,286","546,356,739","366,356,660","877,461,737",
    "538,301,629","707,116,7","701,730,70"}
    Returns: -1
  8. {"286,596,559","502,325,84","303,56,960","28,678,821",
    "542,57,303","233,418,91","13,520,124","645,129,889",
    "438,433,951","835,953,56","921,531,943","416,159,446",
    "513,426,1018","778,486,254","132,380,822","828,351,787",
    "659,531,866","893,140,419","603,721,110","888,144,689",
    "861,869,515","632,912,973","435,828,676","526,365,850",
    "162,860,173","637,910,701","169,21,311","431,722,798",
    "674,663,1012","451,343,584","132,380,1000","184,720,1011"}
    Returns: 95
  9. {"1,0,0","4,1,2","0,2,0","0,0,0","4,4,3","2,3,2","0,4,3",
    "4,2,3","4,4,1","2,2,0","4,1,1","4,0,1","1,0,2","1,3,2",
    "0,2,3","4,0,2","2,2,3"}
    Returns: 31
Back to all problems