はてなブックマークのコメントにJavaのコードを書いてみた

力試しにナベアツのような判定をするプログラムを作ろうとしたところ、問題が発生しました。 3の倍数や5の倍数は考えるまでもないんですが、3のつく数字をどう判定したらいいのかわかりません。 どのように判定させればよいのでしょうか?

長いと評判のJavaソースコードを、はてブのコメントに書けるかどうか試してみたくなりました。


とりあえず何も考えずに書いたコード。整数「n」の中に「x」の桁があるか判定する関数。

boolean q(int n,int x){if(n%10==x)return true;if(n<10)return false;return q(n/10,x);}


もっと短くしよう。「3」を固定にする。仕様が変わるけど質問者の要件からは外れてないので気にしない。

boolean q(int n){if(n%10==3)return true;if(n<10)return false;return q(n/10);}


三項演算子を使ってもっと短くしよう。

boolean q(int n){return n%10==3?true:n<10?false:q(n/10);}


もっといけるか

boolean q(int n){return n%10==3||n>=10&&q(n/10);}

うわー。なんだこりゃー。

障害報告

「-12345」みたいな、マイナスの数を与えたら動きがおかしくなりました。なんてこったい。
ナベアツがマイナスの数に興味を持たないことを祈るばかりです。