Problem 89 auf projecteuler.net
Heute hatte ich mal wieder etwas Zeit ein weiteres Problem auf projecteuler.net zu lösen. Gelöst habe ich dieses Mal Problem 89 in der Programmiersprache Java.
Das Problem ist dank dieser Hilfe sehr einfach: https://projecteuler.net/about=roman_numerals
Man muss also nur „DCCCC“, „LXXXX“, „VIIII“, „CCCC“, „XXXX“ und „IIII“ ersetzen. Danach muss man nur noch die Differenz der Anzahl der Zeichen vor und nach dem Replacen herausfinden.
Das Programm von mir berechnet die Lösung sehr schnell:
Result: 743
real 0m0.163s
user 0m0.170s
sys 0m0.034s
Und so schaut der Code aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; public final class Prob89 { private static String romanNumbers; private static String[] singleRomanNumbers; public static void main(String[] args) { try { final byte[] encoded = Files.readAllBytes(Paths.get("89.txt")); romanNumbers = new String(encoded, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } singleRomanNumbers = romanNumbers.split("\\r?\\n"); for (int i = 0; i < singleRomanNumbers.length; i++) { singleRomanNumbers[i] = singleRomanNumbers[i].replace("DCCCC", "CM"); singleRomanNumbers[i] = singleRomanNumbers[i].replace("LXXXX", "XC"); singleRomanNumbers[i] = singleRomanNumbers[i].replace("VIIII", "IX"); singleRomanNumbers[i] = singleRomanNumbers[i].replace("CCCC", "CD"); singleRomanNumbers[i] = singleRomanNumbers[i].replace("XXXX", "XL"); singleRomanNumbers[i] = singleRomanNumbers[i].replace("IIII", "IV"); } StringBuilder b = new StringBuilder(); for (String s : singleRomanNumbers) b.append(s); String newRomanNumbers = b.toString(); final int result = romanNumbers.replace("\n", "").length() - newRomanNumbers.length(); System.out.println("Result: " + result); } } |
Veröffentlicht am 18. Juli 2015 von admin in Java, Programmierung, projecteuler