Cod sursa(job #2347898)

Utilizator zettaIonel Herescu zetta Data 19 februarie 2019 11:00:12
Problema Pascal Scor 30
Compilator java Status done
Runda Arhiva de probleme Marime 2.08 kb
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class Main {

	private static final String IN_FILE = "pascal.in";
	private static final String OUT_FILE = "pascal.out";

	public static void main(String[] args) {
		try {
			final String inData = readIn();
			final String[] inDataParts = inData.split(" ");
			if (inDataParts.length < 2) {
				throw new IllegalArgumentException(
						"Expected 2 arguments separated by space on the first line. Found only " + inDataParts.length);
			}

			final int rowNumber = Integer.parseInt(inDataParts[0]);
			final int divisibleToThis = Integer.parseInt(inDataParts[1]);

			final int count = generatePascalRow(rowNumber, divisibleToThis);

			writeResult(count);
		} catch (Exception e) {
			e.printStackTrace();
			System.err.println("Error during execution");
		}
	}

	private static int generatePascalRow(int rowNumber, int divisibleBy) {
		int count = 0;
		
		BigDecimal remainder = new BigDecimal(divisibleBy);
		BigDecimal prevElement = new BigDecimal(1);
		if (prevElement.remainder(remainder).equals(BigDecimal.ZERO)) {
			count += 2;
		}
		for (int i = 0; i < rowNumber / 2; i++) {
			final BigDecimal currentElement = prevElement.multiply(new BigDecimal(rowNumber - i)).divide(new BigDecimal(i + 1));
			
			System.out.println(currentElement);
			prevElement = currentElement;
			if (currentElement.remainder(remainder).equals(BigDecimal.ZERO)) {
				count += 2;
			}
		}
		return count;
	}

	private static String readIn() throws IOException, URISyntaxException {
		final Path p = Paths.get(IN_FILE);
		final List<String> lines = Files.readAllLines(p);

		if (lines.size() == 0) {
			throw new IllegalArgumentException("Empty file");
		}

		return lines.get(0);
	}

	public static void writeResult(int count) throws IOException {
		BufferedWriter writer = new BufferedWriter(new FileWriter(OUT_FILE));
		writer.write(Integer.toString(count));
		writer.close();
	}
}