4、8、15、16、23、42
この数列を無限に出力するプログラムを作成します。ただし、ソースコードに番号を表示することはできません。
次は、ソースコードに数字が表示されるため、数字を出力するための有効なJavaプログラムではありません。
class TheNumbers {
public static void main(String[] args) {
for(int n = 0;;) System.out.println(
n == 4 ? n = 8 :
n == 8 ? n = 15 :
n == 15 ? n = 16 :
n == 16 ? n = 23 :
n == 23 ? n = 42 : (n = 4)
);
}
}
「ソースコードに数字を含めることはできません」の定義は次のとおりです。
- 数字4は使用しないでください。
- 数字の8は使用しないでください。
- 数字の1の後に数字の5を使用しないでください。
- 数字の1の後に数字の6を使用しないでください。
- 数字2の後に数字3を続けて使用しないでください。
言語が数字の間に配置できる特定の文字を無視する場合、それは有効な代替ではありません。たとえば、言語がリテラルを1_5
として解釈する場合15
、これは数字1の後に数字5が続くものとしてカウントされます。
代替ベースは制限に含まれているため、たとえば次のようになります。
- バイナリ100は4の代わりに使用できません。
- 8進数の10を8の代わりに使用することはできません。
- 16進数Fは15の代わりに使用できません。
したがって、以下は、The Numbersがソースコードに表示されないため、The Numbersを出力するための有効な(ただし、あまり影響を受けていない)Javaプログラムです。
class TheNumbers {
public static void main(String[] args) {
for(int n = '*';;) {
System.out.println(n -= '&');
System.out.println(n *= 2);
System.out.println(n += 7);
System.out.println(++n);
System.out.println(n += 7);
System.out.println(n += 19);
}
}
}
そのプログラムになお、'*'
そして'&'
そうでなければ符号4,8は、そのソースコードに表示されるため、整数42及び38に置換されています。
「シーケンスを無限に出力する」の定義は、解釈に対して開かれています。そのため、たとえば、グリフを「無限に」小さくなるまで小さくして出力するプログラムは有効です。
基本的に各番号をハードコーディングしていない何らかの方法でシーケンスを生成できる場合は称賛に値します。
- 数式に導きます。私の印象では、それは存在しませんが、存在する可能性があります。
- 擬似乱数ジェネレーターを修正して、シーケンスを返します。
これは人気コンテストですので、クリエイティブになりましょう。3月26日に最多得票を獲得した回答が勝者です。
This isn't an interesting question, IMHO, since the solution is pretty trivial. Please post in the sandbox next time.
がはるかThis is a stupid question.
に優れていると思いますが、それは私の個人的な意見です。