Erinnern Sie sich an die guten alten Zeiten, als das Öffnen eines einfachen Dokuments oder einer Webseite schmerzhaft langsam war, da alle knappen Ressourcen Ihres Computers aufgebraucht waren? Und heute ist es sogar noch langsamer, dies zu tun, obwohl Ihr Prozessor hunderte Male schneller ist und auf tausende Male mehr Speicher zugreifen kann?
Schreiben Sie ein Programm, das sichtbare Leistungsprobleme aufweist, wenn es auf leistungsstärkeren Computern ausgeführt wird, um die Auswirkung von Aufblähungen in aktuellen Dokumentbetrachtungsprogrammen und ähnlichen Anwendungen zu simulieren .
Machen Sie es zu einem Primzahlengenerator , damit alle eine gemeinsame Aufgabe haben .
- Das Programm muss fortlaufende Primzahlen, beginnend mit 2, jeweils in einer neuen Zeile und sonst nichts ausgeben. Es sollte für immer (oder bis der Speicher ausgeht). So was:
2 3 5 7 11 13 17
Zwischen dem Drucken jeder Zeile sollte eine Verzögerung liegen, die für einen Menschen erkennbar ist.
Diese Verzögerung sollte länger sein, da der Computer, auf dem das Programm ausgeführt wird, schneller wird. Je schneller die Maschine ist, desto langsamer ist das Programm.
Ich werde keine genauen Benchmarks angeben, da dies subjektiv werden könnte, aber es sollte einen von Menschen wahrnehmbaren Unterschied in der Geschwindigkeit auf zwei verschiedenen Maschinen geben, wenn es einen signifikanten Unterschied zwischen der Leistung der beiden Maschinen gibt.
Die Geschwindigkeit des Programms muss nicht auf allen vorhandenen Maschinen, die jemals erstellt wurden, monoton abnehmen. Dies wäre schwer zu spezifizieren und noch schwerer zu verifizieren. Ich vertraue dem gesunden Menschenverstand der Wettbewerber in Bezug auf das, was als signifikant unterschiedliche Leistung zwischen Maschinen angesehen werden kann, und es reicht aus, um dies zu befriedigen.
Ich werde auch keine genauen oberen oder unteren Zeitlimits angeben, aber es sollte unter vernünftigen Grenzen liegen, also bitte keine Tage oder Jahre zwischen dem Drucken von zwei Zeilen.
Ich werde nicht verlangen, dass es auf allen Computern von Eniac bis zu modernen Computern ausgeführt wird, aber es sollte allgemein genug sein. Beispielsweise darf nicht gesagt werden, dass es nur auf zwei bestimmten CPU-Typen funktioniert und speziell den Namen einer bestimmten CPU erkennt auf dem es langsamer oder schneller laufen wird.
Der Code sollte nicht von der Compiler- oder Interpreter-Version abhängen. Es sollte funktionieren, wenn dieselbe Version des Compilers / Interpreters sowohl auf einem langsameren als auch auf einem schnelleren Computer installiert ist, oder selbst wenn der Binär- / Bytecode auf einem Computer kompiliert und dann auf zwei verschiedenen Computern ausgeführt wird.
Bitte erläutern Sie die Funktionsweise Ihres Programms. Da es schwierig sein wird, die Ergebnisse zu reproduzieren, hängt die Gültigkeit der Antwort möglicherweise von der Durchführbarkeit der Methode ab.
Obwohl ich es mir gewünscht hätte, ein hinterhältiger Wettbewerb zu werden, heißt diese Seite leider nicht mehr "Programmieren von Rätseln und Code Golf", sondern einfach "Code Golf", sodass der kürzeste Code gewinnt.
Antworten:
Perl,
807871 Bytes-9 Bytes dank @Dada
Führt den Befehl aus
lscpu
und ermittelt die CPU-Geschwindigkeit in MHz. Je schneller die CPU ist, desto länger dauert der Ruhezustand zwischen den Ausgängen (1 Sekunde pro 1 MHz). Läuft unter Ubuntu 14.04.5. Auf meinem speziellen Computer wird jede Nummer alle 800 Sekunden (13 Minuten, 20 Sekunden) getestet. Bei schnelleren Maschinen kann dies über 50 Minuten dauern. Ändern Sie essleep$a/400
, um zu Testzwecken etwas viel Vernünftigeres zu erhalten.quelle
$_++;
umstellen, erhalten Sie lscpu=~/z:\s+(\d+)/,sleep$1,(1x$_)!~/^(11+?)\1+$/&&say while++$_
für 71 Byte.