Package net.projecteuler

Source Code of net.projecteuler.Problem18n67

package net.projecteuler;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.PrintWriter;

import net.projecteuler.model.Index;
import net.projecteuler.model.Tree;
import net.projecteuler.model.Tree.Row;

public class Problem18n67 extends AbstractProblem {

  Tree tree = new Tree();
  private PrintWriter solution;

  @Override
  public void init(Object... inits) {
    LineNumberReader lnr = newLineNumberReader("triangle.txt");
    String line = null;
    do {
      line = readLine(lnr);
      if (line != null) {
        String[] numbers = line.split(" ");
        int level = numbers.length;
        for (int i = 0; i < level; i++) {
          Integer x = Integer.parseInt(numbers[i]);
          if (x > 99)
            throw new RuntimeException(String.format("over 99: (%s, %s) %s", level - 1, i, x));
          tree.add(level - 1, i, x);
        }
      }
    } while (line != null);
    println(String.format("Loaded: %s", tree.maxRows()));
  }

  @Override
  public void solve() {
    initSolutionFile();
    Index index = tree.getRootValue();
    println(index);
    long sum = index.getValue();
    writeSolution(index, sum);
    for (int row = 0; row < tree.maxRows(); row++) {
      index = tree.getMaxChildIndex(index);
      println(index);
      if (index != null)
        sum += index.getValue();
      writeSolution(index, sum);
    }
    println(String.format("Sum: %s", sum));
    closeSolutionFile();
  }

  private void closeSolutionFile() {
    solution.flush();
    solution.close();
  }

  private void initSolutionFile() {
    File f = new File("/tmp/18n67.txt");
    try {
      f.createNewFile();
    } catch (IOException e) {
      throw new RuntimeException(String.format("Unable to create new file: ", f.getAbsolutePath()), e);
    }
    try {
      solution = new PrintWriter(f);
    } catch (FileNotFoundException e) {
      throw new RuntimeException("Oops", e);
    }
  }

  private void writeSolution(Index index, long sum) {
    if (index != null) {
      Row row = tree.getRow(index.getRow());
      for(int i = 100 - index.getRow(); i > 0; i-- )
        solution.print("   ");
      for (int col = 0; col < row.size(); col++) {
        if (col == index.getCol())
          solution.print(String.format("(%02d)", row.valueAt(col)));
        else
        solution.print(String.format(" %02d ", row.valueAt(col)));
        if (col < row.size() - 1)
          solution.print(" ");
      }
      solution.println(" => " + sum);
    }
  }
}
TOP

Related Classes of net.projecteuler.Problem18n67

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.