JAVA, 81 79 78 bayt
JAVA (HotSpot) 71 70 bayt
Gönderdiğim sırada diğer Java cevaplarından daha kısa (81, sonra 79 bayt):
class A{public static void main(String[]a){String x="1";for(;;)x+=x.intern();}}
@ Olivier Grégoire tarafından önerildiği gibi, başka bir byte kaydedilebilir:
class A{public static void main(String[]a){for(String x="1";;)x+=x.intern();}}
x+=x.intern()
For loop artışı olarak yerleştirmek hiçbir şeye yardımcı olmaz, çünkü for deyimini sonlandırmak için hala noktalı virgül gerekir.
@ETHproductions'un önerdiği gibi, sadece x+=x
eserleri kullanmak :
class A{public static void main(String[]a){String x="1";for(;;)x+=x;}}
Ayrıca @Olivier Grégoire'nin bahşişinden de yararlanabilirsiniz:
class A{public static void main(String[]a){for(String x="1";;)x+=x;}}
Bununla ilgili tek endişem , verimli bir JVM'nin yerel işlevden asla kaçamayacağının kolayca fark edebileceğinden öbek üzerinde veri tahsis edilmesinin garanti edilmemesidir x
. Kullanımı intern()
, bu endişeyi ortadan kaldırır, çünkü interned dizeler sonuçta statik bir alanda depolanır. Ancak, HotSpot OutOfMemoryError
bu kod için bir kod oluşturuyor , bu yüzden sanırım tamam.
Güncelleme: @Olivier Gregoire ayrıca x+=x
, StringIndexOutOfBoundsException
çok fazla OOM
hafıza olması yerine kodun çalıştırılabileceğini belirtti . Bunun nedeni, Java int
dizileri dizine almak için 32 bit türünü kullanmasıdır (ve Dizeler yalnızca dizilerdir char
). x+=x.intern()
Sonuncusu için gerekli olan bellek, dizenin uzunluğunda ikinci dereceden olduğu için bu çözümü etkilemez ve bu nedenle 2 ^ 62 ayrılmış bayt sırasına göre ölçeklendirilmelidir.