2014年09月19日

【ですころ6】Javaゴルフ講座

バーです。
本職はエンジニアっぽい感じです。
ですころ6でJava7言語最短コード書きましたb
Javaで79文字とか頭おかしいです。このコードゴルフについて書きたいと思います。

問題は、素数を求めるだけの簡単なお仕事です。まずは一切ゴルフなしで書いてみましょう。


前回の処理でi%s==0はi%s<1で1文字減るという話をしましたので、それを利用しています。
さて、こいつは困りました。最後に":"が表示されてしまいます。この問題のいやらしいところですね!
これを除去する普通の手段を追加します。


これで正しく出力されましたが、長い!長すぎるよママン!
では、バーがよく使うテクニックで:除去をしてみます。


ちょっと短くなりましたが、まだ長いです。
なぜ長いのか?それは素数判定変数boolean xのせいです。
ここで必殺のラベルbreakを使用します。Javaにはラベルbreakというのがあり、ラベル切ってbreak ラベル名;とすると、切ったラベルまで飛びます。多重ループから抜けるときには超便利なのですが、そんなことしなきゃいけないならメソッド分けろ馬鹿と言われるので、業務で使用してはいけません。あくまでコードゴルフ専用の命令です。コードゴルフ用の命令を予約レベルで用意してくれてるJavaってステキ!


さあ、かなり短くなりました。ここで余分な{}を外しましょう。


"int "と","では","のほうが短いので、sの初期化を1つ上のループに持っていき、改行コードも外してみます。


これで103文字となりました。
さて、この中で、幾つか無駄があります。まず、i<1000の部分。今回出力する最大素数は997なので、判定はi<1000ではなくてi<999でも構いません。また、String zの定義。これも本当に必要なのでしょうか。先ほども書きましたが、997が最大素数なので、その値のときだけ、:を書かないようにすればいいのではないでしょうか。その辺を踏まえてコードを書き直してみます。


これで91文字になりました。あとは地道にforの中に命令埋めたりとか、基本的なゴルフテクニックを加えていくだけの機械作業ですので省略。

そんなわけで


最終的な解は

79文字となります。
ラベルbreak?お星さまになりました(えーーっ!
posted by バー at 09:12| Comment(0) | TrackBack(0) | CodeIQ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/405653803
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。