Ingat masa lalu yang baik ketika membuka dokumen sederhana atau halaman web sangat lambat karena memiliki semua sumber daya yang dimiliki komputer Anda? Dan hari ini, melakukan hal yang sama bahkan lebih lambat, meskipun prosesor Anda menjadi ratusan kali lebih cepat dan memiliki akses ke ribuan kali lebih banyak memori?
Untuk mensimulasikan efek mengasapi pada pemirsa dokumen saat ini dan aplikasi serupa, tulis sebuah program yang memiliki masalah kinerja yang terlihat ketika dijalankan pada mesin yang lebih kuat .
Untuk memiliki tugas bersama untuk semua orang, jadikan sebagai pembangkit bilangan prima .
- Program harus mencetak bilangan prima berurutan, mulai dari 2, masing-masing dalam baris baru, dan tidak ada yang lain. Seharusnya ini selamanya (atau sampai kehabisan memori). Seperti ini:
2 3 5 7 11 13 17
Seharusnya ada penundaan antara mencetak setiap baris, cukup untuk bisa dipahami oleh manusia.
Penundaan ini harus lebih lama karena mesin yang menjalankan program menjadi lebih cepat. Semakin cepat mesin, semakin lambat programnya.
Saya tidak akan menentukan tolok ukur yang tepat karena mungkin menjadi subjektif, tetapi harus ada perbedaan yang dapat dilihat manusia dalam kecepatan pada dua mesin yang berbeda jika ada perbedaan yang signifikan antara kinerja kedua mesin.
Kecepatan program tidak harus menurun secara monoton di semua mesin yang ada yang pernah dibuat. Ini akan sulit ditentukan, dan bahkan lebih sulit untuk diverifikasi. Saya mempercayai akal sehat para kontestan tentang apa yang dapat dianggap sebagai kinerja yang sangat berbeda antara mesin, dan cukup untuk memuaskan itu.
Saya juga tidak akan menentukan batas waktu tepat atas atau bawah, tetapi harus di bawah batas wajar, jadi tidak ada hari atau tahun antara mencetak dua baris.
Saya tidak akan memerlukannya untuk berjalan di segala sesuatu dari Eniac hingga hari modern, tetapi harus cukup umum, misalnya, itu tidak diperbolehkan untuk mengatakan itu hanya bekerja pada dua jenis CPU tertentu, dan secara khusus mendeteksi nama satu CPU tertentu di mana ia akan berjalan lebih lambat atau lebih cepat.
Kode tidak boleh bergantung pada versi kompiler atau interpreter. Ini harus bekerja jika versi yang sama dari kompiler / juru bahasa dipasang pada mesin yang lebih lambat dan lebih cepat, atau bahkan jika biner / bytecode dikompilasi pada satu mesin dan kemudian dijalankan pada dua mesin yang berbeda.
Tolong jelaskan prinsip-prinsip bagaimana program Anda beroperasi. Karena akan sulit untuk mereproduksi hasil, validitas jawaban mungkin tergantung pada kelayakan metode.
Meskipun saya ingin itu menjadi kontes curang, sayangnya situs ini tidak lagi "Programming Puzzles & Code Golf" tetapi hanya "Code Golf", jadi kode terpendek yang menang.
Jawaban:
Perl,
807871 byte-9 byte terima kasih kepada @Dada
Jalankan perintah
lscpu
dan temukan kecepatan CPU dalam MHz. Semakin cepat CPU, semakin banyak waktu tidur di antara output, 1 detik untuk setiap 1 MHz. Berjalan di Ubuntu 14.04.5. Di mesin khusus saya, ini menguji setiap angka setiap 800 detik (13 menit, 20 detik). Pada mesin yang lebih cepat, ini bisa lebih dari 50 menit. Ubah untuksleep$a/400
menjadi sesuatu yang lebih waras untuk tujuan pengujian.sumber
$_++;
lscpu=~/z:\s+(\d+)/,sleep$1,(1x$_)!~/^(11+?)\1+$/&&say while++$_
untuk 71 byte.