paizaオンラインハッカソン・Liteの件(延長戦)
まだしつこくやってたりします。
詳しくは、
前回書いた http://koukimino.hatenablog.com/entry/2014/08/27/202312 で。
[簡単な前回のあらすじ] Java以外の公式言語はなんとか無理やり最速記録に並べたものの、Javaだけ、0.07秒より短くできなくって、Javaのことが嫌いになりそうです。
(Javaのことは、言語としては好きですよー一応。。そういえば今もIPAの基本情報技術者試験の午後試験の選択科目に設定されていますが。。国家試験としてMicroSoft系などの一企業独自の技術には出来るだけ直接触れないようにしてきた傾向があるのに、Oracleはいいの? なんて思ったりします。いっそのこと、JavaはどこかでRubyに置き換えてもいいんじゃ。。なんて暴言か。 あとCOBOLは不滅なんだと思います(笑 念のため。。Javaは,Oracle Corporation 及びその子会社,関連会社の米国 及びその他の国における登録商標または商標です。JavaScriptは,Oracle Corporation 及びその子会社,関連会社の米国 及びその他の国における登録商標または商標です。 え、JavaScriptも!? どうやらそうらしい。。)
rana_kualuさんの
PHP - POH Lite 天才火消しエンジニア霧島 0.01秒の解答 - Qiita
cielavenirさんの
Paiza POH kirishima 最速解答 #paizahack_lite - Qiita
を見て、その発想は凄いなーと感心しつつ、
なんとか正攻法で、Javaをもう少し早くできないかなーと。
とりあえず、入手可能なソースを拝借して、どのくらいに
なるか見てみよう。。
paiza事務局さん模範解答2のもの
https://paiza.jp/poh/kirishima/result/0f3ccb242fc602120ed0d1d043c185e2
cielavenirさんの(
paiza_solutions/pohlite.java at master · cielavenir/paiza_solutions · GitHub
)もの
http://paiza.jp/poh/kirishima/result/6617d83fd0d4ed4abd4ce7eb429e0a3a
あれ? やっぱり0.07秒だな。。paiza事務局さんのものは、
CASE1でも0.11秒もかかってるし。どうもおかしい。。
そういえばPOH2での当時の私のJavaの記録は、
https://paiza.jp/poh/paizen/result/7aa09aa4070875bc57b352173ab0afac
でした。(Test case 1 は、0.04秒)
今、全く同じソースで試してみると。。
http://paiza.jp/poh/paizen/result/ef602d94b01f2c34357ac3ccbf7a48fa
ん。。。ありえないくらい遅くなってるんですが。
テストケース1:0.04秒 → 0.07秒
テストケース2:0.04秒 → 0.07秒
テストケース3:0.04秒 → 0.08秒
テストケース4:0.06秒 → 0.16秒
テストケース5:0.05秒 → 0.17秒
テストケース6:0.10秒 → 0.23秒
テストケース7:0.11秒 → 0.28秒
では、当時最速の miswilさんの提出コード で。。
http://paiza.jp/poh/paizen/result/b163d35364359d7e88b42d54323fa9ef
↓
http://paiza.jp/poh/paizen/result/d3b03f9bd2093825846b3fc59e5e9451
うわ、やっぱり遅くなってる。。
テストケース1:0.03秒 → 0.07秒
テストケース2:0.03秒 → 0.07秒
テストケース3:0.03秒 → 0.07秒
テストケース4:0.04秒 → 0.12秒
テストケース5:0.04秒 → 0.11秒
テストケース6:0.04秒 → 0.12秒
テストケース7:0.04秒 → 0.13秒
どうやら、何か環境が変わったみたい。
paizaコーディングスキルチェックの各言語のバージョン、環境情報 | ITプログラマー・エンジニア転職のpaiza より、
java 1.8.0 ということですが、前回はどうだったんでしたっけ?
java 1.8.0 は、(2014年3月18日)にリリースされているようですが、
POH2の頃は、java 1.7.0 でした? でも、Java8だからって遅くなるなんて無いですよね。。
というか、そもそも最速記録が0.01秒で残っているので、
今回の期間中に、0.01秒出せる性能があった時期があったのか、
それとも、今でも何らかの方法で早く処理させる方法があるのか
どちらかですもんね。。
結局わからずじまい。
悩む必要は無かったのかも。
とりあえず、ヒドいJavaのコード貼っておきます。
コメントに、「static-OJISAN!!」とか、
冗談で書いたまま提出してしまったので、paizaさんのブログには
公開されないことを祈ります。(笑 確か C# にも書いた気がする。。
あと、最後に、System.out.write 使ってバイト配列で標準出力してますが、
System.out.println でも、Case1~7まで、0.07秒です。