通常8つの反復を実行する典型的なループを見てみましょう。
for (int x=0; x<8; ++x);
あなたはそれを無限にしなければなりません!
このような形式のループをサポートするすべての言語の人気コンテストですfor
。したがって、最高得点(マイナスからマイナス)のソリューションが勝ちます。
あなたの言語が他の形式のfor
ループを持っているが、あなたが確信しているなら、あなたはそれで何かクールなものを作ることができます。私は利用可能な構造と言語の範囲を拡大する権利を留保しますが、縮小されることはありませんので、以前は正しいソリューションを落とすことを恐れないでください。
ソリューションとは何ですか?
ソリューションは2つのプログラムで構成されます。
最初のプログラムはクリーンプログラムです。これは、for
ループが8回繰り返される、お使いの言語の典型的なプログラムです。それは通常のプログラムでなければならず、開発者なら誰でも書くことができます。準備のための特別なハッキングはありません。例えば:
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
2番目のプログラムが拡張されます。このプログラムには、クリーンなプログラムからのすべてのコードといくつかの追加コードが含まれている必要があります。拡張ポイントの数には限りがあります。詳細については、完全なルールセクションをご覧ください。上記のクリーンなプログラムの拡張プログラムは
inline bool operator < (const int &a, const int &b)
{
return true;
}
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
これは、アイデアを示すための単なる例です(C ++ではコンパイルできません)。実際の正しい拡張プログラムは、コンパイル可能で、動作し、無限ループである必要があります。
完全なルール
両方のプログラム:
- そのような
for
ループをサポートする言語はすべて大丈夫です。 - ループ本体は空でなければなりません。より正確には、出力または他のコードをループに配置できますが、ループが空の場合のループの動作は同じである必要があります。
クリーンプログラム:
ループは整数または数値カウンターを使用して、8回の反復を実行します。
for (int x=0; x<8; ++x); // C, C++, C# for (var x=0; x<8; ++x); // C#, Javascript for (auto x=0; x<8; ++x); // C, C++ for (auto signed x=0; x<8; ++x); // C, C++ for (register int x=0; x<8; ++x); // C, C++
ユーザー定義型は許可されていません。
- ループ変数の代わりにプロパティ(グローバル変数を除く)を使用することは許可されていません。
変数の宣言は、ループの内側でも外側でもかまいません。次のコードは大丈夫です:
int x; for(x=0; x<8; ++x);
プレフィックスインクリメントまたはポストフィックスインクリメントのいずれかを使用できます。
ループ制限
8
は、名前付き定数または変数に保存せずに、定数リテラルとして記述する必要があります。8に等しい変数または定数を宣言し、それを他の値で再割り当て、オーバーライド、またはシャドウイングすることに基づいたソリューションを防止するために作成されました。const double n = 8; int main() { const double n = 9007199254740992; for (double x=0; x<n; ++x); return 0; }
拡張プログラム:
- クリーンなコードのすべてのコードを含める必要があります。
- 限られた数の拡張ポイントでクリーンプログラムを拡張する必要があります。
- 無限ループ自体と同じ
for
ループを実行する必要があります。
ループを別の無限構造に配置することはできません。 - コードのテキスト表現が変更されていない限り、実行時またはコンパイル時にコードのパッチを適用できます。
- 文字列に構造を配置して渡すこと
eval
は許可されていません。
拡張ポイント:
- 他のファイルまたは他のアセンブリを含む、クリーンなコードを含むフラグメントの外の場所。
for
ステートメント(単一のピースとして-for
構造とその本体)は変更しないでください。- 変数宣言は同じに保つ必要があります。
- 単純なステートメント間の任意の場所を拡張ポイントとして使用できます。
- 変数がループ外で宣言され、値の即時割り当てが行われていない場合にのみ、そのような割り当てを追加できます。
/* extension point here */
int main()
/* extension point here */
{
/* extension point here */
int x /* extension point for assignment here */;
/* extension point here */
for (x=0; x<8; ++x);
/* extension point here */
return 0;
/* extension point here */
}
/* extension point here */
int main()
{
/* BEGIN: No changes allowed */ int x = 0; /* END */
/* extension point here */
/* BEGIN: No changes allowed */ for (x=0; x<8; ++x); /* END */
return 0;
}
PS:可能であれば、オンラインIDEへのリンクを提供してください。
java.lang.Integer
か?2.これは、適切な勝利基準があればより良いでしょう。