私の友人と私は、AP Computer Scienceクラスの研究室で働いていましたが、終了後もクラスの半分がまだ空いていたため、ゴルフの問題を1つコーディングすることにしました。ここに質問があります:
数値nが与えられた場合、nは各桁で割り切れますか?
たとえば、128はこのテストに合格します。1、2、および8で割り切れます。ゼロの数字は、自動的に数字を失格にします。必要に応じて他の言語を使用し、ソリューションを投稿することもできますが、クラスで使用する言語であるJavaでプログラムをコンパクトに作成できる方法に関心があります。これまでのところ、我々は両方とも51を持っています。これが私の現在のコードです:
public boolean dividesSelf(int n){for(int p=n;n%10>0;)n/=p%(n%10)>0?.1:10;return n<1;}
// 51 characters
// Breakdown:
// for(int p=n; Saves one semicolon to put declaration into for loop
// n%10>0;) Basic check-for-zero
// n/= Pretty simple, discarding one number off of n at a time
// p%(n%10)>0? If p (the given value) is not divisible by n%10 (the current digit)...
// .1:10; Divide by .1 (multiply by 10) so it fails the check next iteration. If it is divisible, divide by 10 to truncate the last digit
// return n<1 If the number was fully divisible, every digit would be truncated, and n would be 0. Else, there would still be non-zero digits.
必要条件
メソッドのシグネチャは、何でもかまいません。関数本体を数えるだけです。ただし、メソッドがブール値を返し、1つの数値パラメーター(文字列ではなく)のみを渡すようにしてください。
コードはこれらのすべてのケースをパスできる必要があります(元の質問の指示に忠実であり続けるために、言語がブール値をサポートしている場合、ブール値のtrueとfalse のみがカウントされます。 0でfalse、0以外の整数(1または-1が望ましい)でtrueを表します。
128 -> true
12 -> true
120 -> false
122 -> true
13 -> false
32 -> false
22 -> true
42 -> false
212 -> true
213 -> false
162 -> true
204 -> false
また、私たちは、空白は、プログラムの動作に不可欠でない限り、そう、同じことを行う気軽に空白カウントされませんでした(Javaで改行はカウントされませんので、しかし、間に単一のスペースint
とx=1
幸運を行い、カウント。) !
0
数字はそれぞれの倍数である唯一の数字です)、ほとんどの答えはそれをチェックするために興味のない方法で長くなると思います。だから、タイトルがもたらす問題のほうが好きです(0を除く数字の倍数ではなく、数字で割り切れます)。
true
およびfalse
またはあるtruthy / falsyだけでなく、値OK?3.java
チャレンジ自体はJavaとは無関係なので、タグは実際にはここには適用されません。