JAVA, 81 79 78 octets
JAVA (HotSpot) 71 70 octets
Plus court que les autres réponses Java au moment où j'ai posté (81, 79 octets plus tard):
class A{public static void main(String[]a){String x="1";for(;;)x+=x.intern();}}
Comme suggéré par @Olivier Grégoire, un octet supplémentaire peut être sauvegardé:
class A{public static void main(String[]a){for(String x="1";;)x+=x.intern();}}
Placer en x+=x.intern()
tant qu'incrément de boucle for n'aiderait en rien, car un point-virgule est toujours requis pour terminer l'instruction for.
Comme suggéré par @ETHproductions, utiliser uniquement les x+=x
œuvres suivantes:
class A{public static void main(String[]a){String x="1";for(;;)x+=x;}}
Ce qui peut également bénéficier du conseil de @Olivier Grégoire:
class A{public static void main(String[]a){for(String x="1";;)x+=x;}}
Ma seule inquiétude à ce sujet est qu'il n'est pas garanti d'allouer des données sur le tas , car une JVM efficace peut facilement réaliser qu'elle x
n'échappe jamais à la fonction locale. L'utilisation intern()
évite ce problème car les chaînes internes finissent par être stockées dans un champ statique. Cependant, HotSpot génère un OutOfMemoryError
pour ce code, donc je suppose que ça va.
Mise à jour: @Olivier Gregoire a également souligné que le x+=x
code peut être utilisé StringIndexOutOfBoundsException
plutôt que OOM
lorsque beaucoup de mémoire est disponible. En effet, Java utilise le type 32 bits int
pour indexer des tableaux (et les chaînes ne sont que des tableaux de char
). Cela n'affecte pas la x+=x.intern()
solution car la mémoire requise pour cette dernière est quadratique dans la longueur de la chaîne et doit donc être mise à l'échelle jusqu'à l'ordre de 2 ^ 62 octets alloués.