Pamiętasz dawne dobre czasy, kiedy otwieranie prostego dokumentu lub strony internetowej było boleśnie powolne, ponieważ pochłaniało wszystkie skromne zasoby komputera? A dzisiaj robienie tego samego jest jeszcze wolniejsze, mimo że procesor jest setki razy szybszy i ma dostęp do tysięcy razy więcej pamięci?
Aby zasymulować efekt wzdęcia w obecnych przeglądarkach dokumentów i podobnych aplikacjach, napisz program, który ma widoczne problemy z wydajnością, gdy jest uruchamiany na mocniejszych urządzeniach .
Aby mieć wspólne zadanie dla wszystkich, uczyń go generatorem liczb pierwszych .
- Program musi drukować kolejne liczby pierwsze, zaczynając od 2, każdy w nowej linii i nic więcej. Powinno to być na zawsze (lub do wyczerpania się pamięci). Lubię to:
2 3 5 7 11 13 17
Pomiędzy drukowaniem każdej linii powinno być opóźnienie wystarczające, aby było widoczne dla człowieka.
To opóźnienie powinno być dłuższe, ponieważ maszyna, na której działa program, staje się szybsza. Im szybsza maszyna, tym wolniejszy program.
Nie będę określać dokładnych testów porównawczych, ponieważ mogą one stać się subiektywne, ale powinna istnieć zauważalna dla człowieka różnica prędkości na dwóch różnych komputerach, jeśli istnieje znacząca różnica między wydajnością tych dwóch komputerów.
Szybkość programu nie musi monotonicznie spadać na wszystkich istniejących maszynach, jakie kiedykolwiek stworzono. Trudno byłoby to określić, a jeszcze trudniej zweryfikować. Ufam zdrowemu rozsądkowi uczestników co do tego, co można uznać za znacznie inną wydajność w porównaniu do maszyn, i to wystarczy, aby to zaspokoić.
Nie będę również określać dokładnych górnych ani dolnych limitów czasowych, ale powinno to być w rozsądnych granicach, więc nie ma dni ani lat między drukowaniem dwóch wierszy.
Nie będę wymagał, aby działał na wszystkim, od Eniaca do współczesności, ale powinien być dość ogólny, na przykład nie można powiedzieć, że działa tylko na dwóch określonych typach procesorów i konkretnie wykrywa nazwę jednego konkretnego procesora na którym będzie działał wolniej lub szybciej.
Kod nie powinien opierać się na wersji kompilatora lub interpretera. Powinien działać, jeśli ta sama wersja kompilatora / interpretera jest zainstalowana zarówno na wolniejszej, jak i szybszej maszynie, a nawet jeśli kod binarny / bajtowy jest skompilowany na jednym komputerze, a następnie działa na dwóch różnych komputerach.
Wyjaśnij zasady działania programu. Ponieważ odtworzenie wyników będzie trudne, ważność odpowiedzi może zależeć od wykonalności metody.
Chociaż wolałbym, żeby stał się zawziętym konkursem, niestety ta strona nie jest już „Programowaniem zagadek i Code Golf”, ale po prostu „Code Golf”, więc wygrywa najkrótszy kod.
Odpowiedzi:
Perl,
807871 bajtów-9 bajtów dzięki @Dada
Wykonuje polecenie
lscpu
i znajduje prędkość procesora w MHz. Im szybszy procesor, tym więcej czasu śpi między wyjściami, 1 sekunda na każde 1 MHz. Działa na Ubuntu 14.04.5. Na mojej konkretnej maszynie testuje każdą liczbę co 800 sekund (13 minut, 20 sekund). Na szybszych maszynach może to trwać ponad 50 minut. Zmień to, abysleep$a/400
uzyskać coś znacznie bardziej rozsądnego do celów testowych.źródło
$_++;
przestawienie kodu daje lscpu=~/z:\s+(\d+)/,sleep$1,(1x$_)!~/^(11+?)\1+$/&&say while++$_
dla 71 bajtów.