JAVA, 81 79 78 Bytes
JAVA (HotSpot) 71 70 Bytes
Zum Zeitpunkt meiner Veröffentlichung kürzer als andere Java-Antworten (81, später 79 Byte):
class A{public static void main(String[]a){String x="1";for(;;)x+=x.intern();}}
Wie von @Olivier Grégoire vorgeschlagen, kann ein weiteres Byte gespeichert werden:
class A{public static void main(String[]a){for(String x="1";;)x+=x.intern();}}
Das x+=x.intern()
Inkrementieren als for-Schleife würde nichts nützen, da zum Beenden der for-Anweisung immer noch ein Semikolon erforderlich ist.
Wie von @ETHproductions vorgeschlagen, x+=x
funktioniert auch nur die Verwendung von :
class A{public static void main(String[]a){String x="1";for(;;)x+=x;}}
Was auch von @Olivier Grégoires Tipp profitieren kann:
class A{public static void main(String[]a){for(String x="1";;)x+=x;}}
Meine einzigen Bedenken dabei sind, dass die Zuweisung von Daten auf dem Heap nicht garantiert ist , da eine effiziente JVM leicht erkennen kann, dass sie x
der lokalen Funktion niemals entgeht. Die Verwendung von intern()
vermeidet dieses Problem, da internierte Zeichenfolgen letztendlich in einem statischen Feld gespeichert werden. Allerdings generiert HotSpot einen OutOfMemoryError
Code für diesen Code. Ich denke, das ist in Ordnung.
Update: @Olivier Gregoire wies auch darauf hin, dass der x+=x
Code ausgeführt werden kann, StringIndexOutOfBoundsException
anstatt OOM
wenn viel Speicher verfügbar ist. Dies liegt daran, dass Java den 32-Bit- int
Typ verwendet, um Arrays zu indizieren (und Strings sind nur Arrays von char
). Dies hat keine Auswirkung auf die x+=x.intern()
Lösung, da der für letzteres erforderliche Speicher in der Länge der Zeichenfolge quadratisch ist und daher auf die Größenordnung von 2 ^ 62 zugewiesenen Bytes skaliert werden sollte.