Lembre-se dos bons velhos tempos em que abrir um documento ou página da web simples era dolorosamente lento, pois consumia todos os poucos recursos que o seu computador possuía? E hoje, fazer o mesmo é ainda mais lento, apesar de seu processador ser centenas de vezes mais rápido e ter acesso a milhares de vezes mais memória?
Para simular o efeito de inchaço nos visualizadores de documentos atuais e aplicativos similares, escreva um programa que tenha problemas visíveis de desempenho quando executado em máquinas mais poderosas .
Para ter uma tarefa comum para todos, torne-o um gerador de números primos .
- O programa precisa imprimir números primos consecutivos, começando com 2, cada um em uma nova linha e nada mais. Deve fazer isso para sempre (ou até ficar sem memória). Como isso:
2 3 5 7 11 13 17
Deve haver um atraso entre a impressão de cada linha, o suficiente para ser percebido por um ser humano.
Esse atraso deve ser maior à medida que a máquina em que o programa está sendo executado fica mais rápida. Quanto mais rápido a máquina, mais lento o programa.
Não especificarei parâmetros de referência exatos, pois podem se tornar subjetivos, mas deve haver uma diferença perceptível ao homem na velocidade em duas máquinas diferentes se houver diferença significativa entre o desempenho das duas máquinas.
A velocidade do programa não precisa diminuir monotonicamente em todas as máquinas existentes já criadas. Isso seria difícil de especificar e ainda mais difícil de verificar. Confio no senso comum dos concorrentes sobre o que pode ser considerado um desempenho significativamente diferente entre as máquinas, e é suficiente para satisfazer isso.
Também não especificarei limites de tempo superiores ou inferiores exatos, mas deve estar dentro de limites razoáveis, portanto, não haverá dias ou anos entre a impressão de duas linhas.
Não exigirei que ele seja executado em tudo, desde o Eniac até os dias modernos, mas deve ser geral o suficiente, por exemplo, não é permitido dizer que funciona apenas em dois tipos específicos de CPU e detecta especificamente o nome de uma CPU específica no qual ele será executado mais devagar ou mais rápido.
O código não deve depender da versão do compilador ou intérprete. Deverá funcionar se a mesma versão do compilador / intérprete estiver instalada em uma máquina mais lenta e mais rápida, ou mesmo se o binário / bytecode for compilado em uma máquina e depois executado em duas máquinas diferentes.
Por favor, explique os princípios de como seu programa está operando. Como será difícil reproduzir os resultados, a validade da resposta pode depender da viabilidade do método.
Embora eu tenha gostado de se tornar um concurso secreto, infelizmente este site não é mais "Programming Puzzles & Code Golf", mas simplesmente "Code Golf", então o código mais curto vence.
Respostas:
Perl,
807871 bytes-9 bytes graças a @Dada
Executa o comando
lscpu
e encontra a velocidade da CPU em MHz. Quanto mais rápido o CPU, mais tempo dorme entre as saídas, 1 segundo para cada 1 MHz. Executa no Ubuntu 14.04.5. Na minha máquina particular, isso testa cada número a cada 800 segundos (13 minutos, 20 segundos). Em máquinas mais rápidas, isso pode levar mais de 50 minutos. Alteresleep$a/400
para obter algo muito mais sensato para fins de teste.fonte
$_++;
lscpu=~/z:\s+(\d+)/,sleep$1,(1x$_)!~/^(11+?)\1+$/&&say while++$_
para 71 bytes.