¿Recuerdas los viejos tiempos cuando abrir un simple documento o página web era penosamente lento ya que acaparaba todos los escasos recursos que tenía tu computadora? ¿Y hoy, hacer lo mismo es aún más lento, a pesar de que su procesador es cientos de veces más rápido y tiene acceso a miles de veces más memoria?
Para simular el efecto de la hinchazón en los visores de documentos actuales y aplicaciones similares, escriba un programa que tenga problemas visibles de rendimiento cuando se ejecute en máquinas más potentes .
Para tener una tarea común para todos, conviértalo en un generador de números primos .
- El programa tiene que imprimir números primos consecutivos, comenzando desde 2, cada uno en una nueva línea, y nada más. Debería hacerlo para siempre (o hasta quedarse sin memoria). Me gusta esto:
2 3 5 7 11 13 17
Debe haber un retraso entre la impresión de cada línea, lo suficiente como para que un humano pueda percibirlo.
Este retraso debería ser mayor a medida que la máquina en la que se ejecuta el programa se vuelva más rápida. Cuanto más rápida sea la máquina, más lento será el programa.
No especificaré puntos de referencia exactos, ya que podría ser subjetivo, pero debería haber una diferencia perceptible en la velocidad en dos máquinas diferentes si hay una diferencia significativa entre el rendimiento de las dos máquinas.
La velocidad del programa no tiene que estar disminuyendo monotónicamente en todas las máquinas existentes jamás creadas. Esto sería difícil de especificar e incluso más difícil de verificar. Confío en el sentido común de los concursantes sobre lo que se puede considerar un rendimiento significativamente diferente entre las máquinas, y es suficiente para satisfacer eso.
Tampoco especificaré límites de tiempo superiores o inferiores exactos, pero debe estar dentro de límites razonables, por lo que no hay días o años entre la impresión de dos líneas, por favor.
No requeriré que se ejecute en todo, desde el Eniac hasta la actualidad, pero debería ser lo suficientemente general, por ejemplo, no está permitido decir que solo funciona en dos tipos de CPU específicos, y detecta específicamente el nombre de una CPU específica en el que se ejecutará más lento o más rápido.
El código no debe basarse en la versión del compilador o intérprete. Debería funcionar si la misma versión del compilador / intérprete está instalada en una máquina más lenta y más rápida, o incluso si el código binario / byte se compila en una máquina y luego se ejecuta en dos máquinas diferentes.
Por favor explique los principios de cómo está funcionando su programa. Como será difícil reproducir los resultados, la validez de la respuesta puede depender de la viabilidad del método.
Aunque me hubiera gustado que se convirtiera en un concurso clandestino, lamentablemente este sitio ya no es "Programming Puzzles & Code Golf", sino simplemente "Code Golf", por lo que gana el código más corto.
Respuestas:
Perl,
807871 bytes-9 bytes gracias a @Dada
Ejecuta el comando
lscpu
y encuentra la velocidad de la CPU en MHz. Cuanto más rápida es la CPU, más tiempo duerme entre salidas, 1 segundo por cada 1 MHz. Se ejecuta en Ubuntu 14.04.5. En mi máquina en particular, esto prueba cada número cada 800 segundos (13 minutos, 20 segundos). En máquinas más rápidas, esto puede durar más de 50 minutos. Cámbielo asleep$a/400
para obtener algo mucho más sano para fines de prueba.fuente
$_++;
lscpu=~/z:\s+(\d+)/,sleep$1,(1x$_)!~/^(11+?)\1+$/&&say while++$_
para 71 bytes.