JAWA, 81 79 78 byte
JAVA (HotSpot) 71 70 byte
Lebih pendek dari jawaban Java lainnya pada saat saya memposting (81, kemudian 79 byte):
class A{public static void main(String[]a){String x="1";for(;;)x+=x.intern();}}
Seperti yang disarankan oleh @Olivier Grégoire, byte lebih lanjut dapat disimpan:
class A{public static void main(String[]a){for(String x="1";;)x+=x.intern();}}
Menempatkan x+=x.intern()
sebagai kenaikan for loop tidak akan membantu apa pun, karena titik koma masih diperlukan untuk mengakhiri pernyataan for.
Seperti yang disarankan oleh @ETHproductions, hanya menggunakan x+=x
karya juga:
class A{public static void main(String[]a){String x="1";for(;;)x+=x;}}
Yang juga dapat memanfaatkan tip @Olivier Grégoire:
class A{public static void main(String[]a){for(String x="1";;)x+=x;}}
Satu-satunya keraguan saya tentang hal itu adalah bahwa tidak dijamin untuk mengalokasikan data pada heap , karena JVM yang efisien dapat dengan mudah menyadari bahwa x
tidak pernah lepas dari fungsi lokal. Menggunakan intern()
menghindari masalah ini karena string diinternir akhirnya disimpan di bidang statis. Namun, HotSpot memang menghasilkan OutOfMemoryError
kode untuk itu, jadi saya kira tidak apa-apa.
Pembaruan: @Olivier Gregoire juga menunjukkan bahwa x+=x
kode dapat berjalan ke dalam StringIndexOutOfBoundsException
daripada OOM
ketika banyak memori tersedia. Ini karena Java menggunakan tipe 32-bit int
untuk mengindeks array (dan Strings hanyalah array char
). Ini tidak mempengaruhi x+=x.intern()
solusi karena memori yang diperlukan untuk yang terakhir adalah kuadrat dalam panjang string, dan karenanya harus ditingkatkan menjadi urutan 2 ^ 62 byte yang dialokasikan.