|今年も去年に引き続き、GCJの予選問題を多言語で解いてみました。昨年はD-Largeを落として7言語でしたが、今年は全問正解でリベンジ達成です。新しい言語を使う良いきっかけ、というのは方便で、ただの自己顕示欲の発露です。Javaで埋めました。今年も去年と同等以上に疲れました。なでしこが認識されず7言語になってしまっています。戦略まず6時間かけてPythonでプロト実装を行い、Largeまで解けそうなことを確認しました。各問題の方針は以下の通りです。10^6の範囲のNすべてでシミューレションを行うだけです。INSOMNIAとなるのはN=0のときだけであることが確認できます。数字から文字列に変換できる言語であればほぼ何でもOKです。Pancakes入力文字列の連続する+や-を圧縮して一つにした後、末尾の+を除くと、以下のいずれかになります。文字列操作ができる言語であればOKです。Jam頭と末尾が1である文字列1xxxx1を次々と作り、2進数から10進数のいずれで解釈しても合成数であることを愚直に確かめるだけです。11のいずれかで割り切れる数」とすれば十分です。3)などとすると文字列"10001001"を3進数で解釈した値を簡単に得られます。これと同様の関数を持つ言語だと実装が簡単です。Largeだと多倍長整数が欲しいです。Fractiles小さなKとCで実験をして規則性を導きました。LLG"の3つのパターンが、Cが増えるに従いどう増殖するかを観察します。すると、複雑度がCのとき、GがC個出現するポジションがある法則で出現しそうなことが分かります。Dも多倍長整数が使える言語を選定しました。SheepElixirのコードは以下です。関数型言語の経験が皆無のため非常に怪しいです。whileで無限ループするのに相当する書き方がわからず、関数を再帰させています。endendMain.mainJavaは以下です。Pancakes今回圧倒的に苦労した、なでしこのコードです。3時間ほどかかってます。Webを検索しても例がほとんどヒットしないのが苦労の最大の理由です。64bit整数がなかったり、文字列をイテレートする方法が(おそらく)なかったりするなど、競技プログラミングとの相性は高くないと思われます。ここでは文字列をイテレートする代わりに、文字列から部分文字列を抜き出す命令「文字抜き出す」を使っています。input_fie!変数宣言は必要ファイル名とは文字列。ファイル名は、コマンドライン[2]。入力ファイルとは文字列。入力ファイルはファイル名を「読ん」でファイルストリーム開く問題数とは整数。問題数は入力ファイルのファイルストリーム一行読む問題とは整数。パンケーキとは文字列。パンケーキは入力ファイルのファイルストリーム一行読む。