Marathon Match 39 が始まりました。
問題は以下のURLにあります。
http://www.topcoder.com/longcontest/?module=ViewProblemStatement&compid=8831&rd=13564
今回は賞金がかかっているようなので、Top5に入ると賞金がもらえるようです。あと期間は1週間弱残っているので、参加してみてはいかがでしょうか?
問題はシーザー暗号を解読するものです。複数の同一の鍵で暗号化された文字列から、暗号鍵を求めます。シーザー暗号については http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97%E5%8F%B7 を参考にしてください。
とりあえず、問題を解くためのとっかかりのために今回も起動部分だけを書いたものを続きに貼り付けておきます。また、問題を解く際に辞書データを利用できますが、ローカルでのテストの際には自作が必要になります。これが MM36の時と同じものなので、以下のURLのソースをそのまま使えるようです。http://d.hatena.ne.jp/Horiuchi_H/20080629/1214719313
import java.util.NoSuchElementException; import java.util.Random; import java.util.Scanner; public class OneTimePad { private static final char[] ELEMENTS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); public String decrypt(String[] encoded) { int len = encoded[0].length(); StringBuilder builder = new StringBuilder(len); for (int index = 0; index < len; index++) { builder.append("A"); } return builder.toString(); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); System.err.println("n=" + n); int m = scanner.nextInt(); System.err.println("m=" + m); String[] encoded = new String[n]; try { for (int index = 0; index < n; index++) { encoded[index] = scanner.next(); System.err.println("index=" + index); } } catch (NoSuchElementException ex) { } System.err.println("End input."); OneTimePad solution = new OneTimePad(); String decryptKey = solution.decrypt(encoded); System.err.println("result=" + decryptKey); System.out.println(decryptKey); } }