JAVA、 81 79 78バイト
JAVA(ホットスポット) 71 70バイト
私が投稿した他のJavaの回答よりも短い(81、後で79バイト):
class A{public static void main(String[]a){String x="1";for(;;)x+=x.intern();}}
@OlivierGrégoireが示唆したように、さらにバイトを保存できます。
class A{public static void main(String[]a){for(String x="1";;)x+=x.intern();}}
x+=x.intern()
forステートメントを終了するにはセミコロンが必要なので、forループのインクリメントとして配置しても何の助けにもなりません。
@ETHproductionsが示唆するように、使用x+=x
するだけでも機能します。
class A{public static void main(String[]a){String x="1";for(;;)x+=x;}}
@OlivierGrégoireのヒントからも恩恵を受けることができます。
class A{public static void main(String[]a){for(String x="1";;)x+=x;}}
私の唯一の不安は、ヒープにデータを割り当てることが保証されていないことです。効率的なJVM x
は、ローカル関数を決してエスケープしないことを簡単に理解できるからです。使用するとintern()
、インターンされた文字列が最終的に静的フィールドに格納されるため、この懸念を回避できます。ただし、HotSpotはOutOfMemoryError
そのコードに対してを生成するため、大丈夫だと思います。
更新:@Olivier Gregoireは、大量のメモリが利用可能な場合ではなく、x+=x
コードが実行される可能性があることも指摘しました。これは、Javaが32ビット型を使用して配列にインデックスを付けるためです(文字列はの配列にすぎません)。後者に必要なメモリは文字列の長さが2次であるため、これはソリューションに影響を与えません。したがって、割り当てられた2 ^ 62バイトのオーダーまでスケールアップする必要があります。StringIndexOutOfBoundsException
OOM
int
char
x+=x.intern()