JAWA, 81 79 78 bajtów
JAVA (HotSpot) 71 70 bajtów
Krótszy niż inne odpowiedzi Java w momencie, gdy publikowałem (81, później 79 bajtów):
class A{public static void main(String[]a){String x="1";for(;;)x+=x.intern();}}
Jak sugeruje @Olivier Grégoire, można zapisać kolejny bajt:
class A{public static void main(String[]a){for(String x="1";;)x+=x.intern();}}
Umieszczenie x+=x.intern()jako przyrost pętli for nic by nie pomogło, ponieważ średnik jest nadal wymagany do zakończenia instrukcji for.
Jak sugeruje @ETHproductions, samo użycie x+=xrównież działa:
class A{public static void main(String[]a){String x="1";for(;;)x+=x;}}
Które mogą również skorzystać z porady @Olivier Grégoire:
class A{public static void main(String[]a){for(String x="1";;)x+=x;}}
Moje jedyne wątpliwości co do tego polega na tym, że nie ma gwarancji przydzielenia danych na stercie , ponieważ wydajna maszyna JVM może łatwo zdać sobie sprawę, że xnigdy nie ucieka od funkcji lokalnej. Użycie intern()pozwala uniknąć tego problemu, ponieważ internowane łańcuchy ostatecznie są przechowywane w polu statycznym. Jednak HotSpot generuje OutOfMemoryErrordla tego kodu, więc myślę, że jest w porządku.
Aktualizacja: @Olivier Gregoire wskazał również, że x+=xkod może się uruchamiać, StringIndexOutOfBoundsExceptiona nie OOMkiedy jest dużo pamięci. Wynika to z faktu, że Java używa typu 32-bitowego intdo indeksowania tablic (a ciągi to tylko tablice char). Nie wpływa to na x+=x.intern()rozwiązanie, ponieważ pamięć wymagana dla tego drugiego jest kwadratowa pod względem długości łańcucha i dlatego powinna być skalowana w górę do 2 ^ 62 przydzielonych bajtów.