|
3 | 3 | import com.google.hashcode.entity.Pizza; |
4 | 4 | import com.google.hashcode.entity.Slice; |
5 | 5 | import com.google.hashcode.entity.Step; |
6 | | -import com.google.hashcode.utils.SlicingMethods; |
7 | 6 | import com.google.hashcode.utils.IoUtils; |
8 | 7 | import com.google.hashcode.utils.Profiler; |
9 | 8 | import org.slf4j.Logger; |
|
15 | 14 | import java.util.List; |
16 | 15 | import java.util.Map; |
17 | 16 |
|
18 | | -import static com.google.hashcode.utils.FilesPaths.*; |
| 17 | +import static com.google.hashcode.utils.FilesPaths.BIG_INPUT_FILE_PATH; |
| 18 | +import static com.google.hashcode.utils.FilesPaths.OUTPUT_DATA_SET_BIG_TXT; |
| 19 | +import static com.google.hashcode.utils.SlicingMethods.*; |
19 | 20 |
|
20 | 21 |
|
21 | 22 | public class App { |
22 | 23 | private static final Logger LOGGER = LoggerFactory.getLogger(App.class); |
23 | 24 |
|
24 | 25 | public static void main(String[] args) throws IOException { |
25 | | - slicePizza(EXAMPLE_INPUT_FILE_PATH, OUTPUT_DATA_SET_EXAMPLE_TXT); |
26 | | - slicePizza(SMALL_INPUT_FILE_PATH, OUTPUT_DATA_SET_SMALL_TXT); |
27 | | - slicePizza(MEDIUM_INPUT_FILE_PATH, OUTPUT_DATA_SET_MEDIUM_TXT); |
28 | | - //TODO troubles to input big files, possible exciting String max size |
29 | | - //slicePizza(BIG_INPUT_FILE_PATH, OUTPUT_DATA_SET_BIG_TXT); |
| 26 | + //slicePizza(EXAMPLE_INPUT_FILE_PATH, OUTPUT_DATA_SET_EXAMPLE_TXT); |
| 27 | + //slicePizza(SMALL_INPUT_FILE_PATH, OUTPUT_DATA_SET_SMALL_TXT); |
| 28 | + //slicePizza(MEDIUM_INPUT_FILE_PATH, OUTPUT_DATA_SET_MEDIUM_TXT); |
| 29 | + slicePizza(BIG_INPUT_FILE_PATH, OUTPUT_DATA_SET_BIG_TXT); |
30 | 30 | } |
31 | 31 |
|
| 32 | + /** |
| 33 | + * Performs a pizza slicing |
| 34 | + * |
| 35 | + * @param inputFile given input pizza file |
| 36 | + * @param outputFile a file slicing results |
| 37 | + * @throws IOException cant parse a pizza file |
| 38 | + */ |
32 | 39 | public static void slicePizza(String inputFile, String outputFile) throws IOException { |
33 | 40 | Profiler profiler = new Profiler(); |
34 | 41 | List<Slice> startPositions; |
35 | 42 | List<Slice> output = new ArrayList<>(); |
36 | 43 | Pizza pizza = new Pizza(new File(inputFile), IoUtils.parsePizza(inputFile), IoUtils.parseSliceInstructions(inputFile)); |
37 | 44 | //get start positions |
38 | | - startPositions = SlicingMethods.cutAllStartPositions(pizza); |
| 45 | + startPositions = cutAllStartPositions(pizza); |
39 | 46 | //get All steps |
40 | | - Map<Slice, List<Step>> availableSteps = SlicingMethods.getAvailableSteps(pizza, startPositions, output); |
| 47 | + Map<Slice, List<Step>> availableSteps = getAvailableSteps(pizza, startPositions, output); |
41 | 48 | while (!availableSteps.values().stream().allMatch(List::isEmpty)) { |
42 | | - Step step = SlicingMethods.selectStep(availableSteps); |
43 | | - SlicingMethods.performStep(pizza, step, startPositions, output); |
44 | | - //TODO available steps should include merging slices to each other |
45 | | - availableSteps = SlicingMethods.getAvailableSteps(pizza, startPositions, output); |
| 49 | + Step step = selectStep(availableSteps); |
| 50 | + performStep(pizza, step, startPositions, output); |
| 51 | + availableSteps = getAvailableSteps(pizza, startPositions, output); |
46 | 52 | LOGGER.info("OUTPUT AFTER A STEP: " |
47 | 53 | + "\n " + output); |
| 54 | + LOGGER.info("start positions cells number: " + startPositions.stream() |
| 55 | + .map(slice -> slice.cells.size()) |
| 56 | + .reduce(0, (integer, integer2) -> integer + integer2) |
| 57 | + ); |
48 | 58 | } |
49 | 59 | IoUtils.writeToFile(outputFile, IoUtils.parseSlices(output)); |
50 | 60 | LOGGER.info("FINISHED for " + inputFile + "!!!!!"); |
| 61 | + LOGGER.info("sliced cells number: " + output.stream() |
| 62 | + .map(slice -> slice.cells.size()) |
| 63 | + .reduce(0, (integer, integer2) -> integer + integer2)); |
51 | 64 | LOGGER.info(profiler.measure(inputFile + " execution time: ")); |
52 | 65 | } |
53 | 66 |
|
|
0 commit comments