เครื่องสร้างหมายเลขเฉพาะสำหรับความคิดถึง [ปิด]


16

จำวันเก่า ๆ ที่ดีเมื่อเปิดเอกสารง่าย ๆ หรือหน้าเว็บช้าลงอย่างเจ็บปวดเพราะมันมีทรัพยากรน้อยมากที่คอมพิวเตอร์ของคุณมี? และในวันนี้การทำสิ่งเดียวกันนั้นช้าลงแม้ว่าตัวประมวลผลของคุณจะเร็วขึ้นเป็นร้อยเท่าและมีการเข้าถึงหน่วยความจำมากกว่าเดิมหลายพันเท่า

เพื่อจำลองผลกระทบของการขยายตัวในการดูเอกสารในปัจจุบันและการใช้งานที่คล้ายกันเขียนโปรแกรมที่มีปัญหาประสิทธิภาพการทำงานที่มองเห็นได้เมื่อทำงานบนเครื่องที่มีประสิทธิภาพมากขึ้น

หากต้องการมีงานร่วมกันสำหรับทุกคนให้กำหนดเป็นตัวสร้างหมายเลขเฉพาะ

  • โปรแกรมจะต้องพิมพ์หมายเลขเฉพาะติดต่อกันเริ่มต้นจาก 2 แต่ละในบรรทัดใหม่และไม่มีอะไรอื่น มันควรทำอย่างนี้ตลอดไป (หรือจนกว่าหน่วยความจำจะหมด) แบบนี้:
2
3
5
7
11
13
17
  • ควรมีความล่าช้าระหว่างการพิมพ์แต่ละบรรทัดพอที่จะรับรู้โดยมนุษย์

  • ความล่าช้านี้ควรจะนานกว่านั้นเมื่อเครื่องที่โปรแกรมทำงานได้รับเร็วขึ้น ยิ่งเครื่องทำงานเร็วขึ้นเท่าใดโปรแกรมก็จะทำงานช้าลง

  • ฉันจะไม่ระบุมาตรฐานที่แน่นอนเนื่องจากมันอาจเป็นอัตวิสัย แต่ควรมีความแตกต่างที่มนุษย์เห็นได้ในความเร็วของเครื่องสองเครื่องที่แตกต่างกันหากมีความแตกต่างอย่างมีนัยสำคัญระหว่างประสิทธิภาพของเครื่องทั้งสอง

  • ความเร็วของโปรแกรมไม่จำเป็นต้องลดความซ้ำซากจำเจในเครื่องที่มีอยู่ทั้งหมดที่เคยสร้าง สิ่งนี้จะยากที่จะระบุและยิ่งยากต่อการตรวจสอบ ฉันเชื่อในความรู้สึกร่วมของผู้แข่งขันเกี่ยวกับสิ่งที่สามารถพิจารณาได้มีประสิทธิภาพแตกต่างกันอย่างมีนัยสำคัญระหว่างเครื่องและมันก็เพียงพอที่จะตอบสนองได้

  • ฉันจะไม่ระบุการ จำกัด เวลาบนหรือล่างที่แน่นอน แต่ควรอยู่ภายใต้ขีด จำกัด ที่สมเหตุสมผลดังนั้นจึงไม่มีวันหรือปีระหว่างการพิมพ์สองบรรทัดโปรด

  • ฉันไม่ต้องการให้มันทำงานทุกอย่างตั้งแต่ Eniac ถึงสมัยใหม่ แต่มันควรจะเป็นแบบทั่วไปเช่นไม่อนุญาตให้บอกว่ามันใช้งานได้กับซีพียูเฉพาะสองประเภทเท่านั้น ซึ่งมันจะทำงานช้าลงหรือเร็วขึ้น

  • รหัสไม่ควรพึ่งพาคอมไพเลอร์หรือรุ่นล่าม มันควรจะทำงานถ้าคอมไพเลอร์ / ล่ามรุ่นเดียวกันถูกติดตั้งบนเครื่องที่ช้าลงและเร็วขึ้นหรือแม้ว่าไบนารี / bytecode จะถูกคอมไพล์ในเครื่องเดียว

  • โปรดอธิบายหลักการของการใช้งานโปรแกรมของคุณ เนื่องจากเป็นการยากที่จะทำซ้ำผลลัพธ์ความถูกต้องของคำตอบอาจขึ้นอยู่กับความเป็นไปได้ของวิธีการ

แม้ว่าฉันจะอยากให้มันกลายเป็นการแข่งขันที่มีเล่ห์เหลี่ยม แต่น่าเสียดายที่เว็บไซต์นี้ไม่ใช่ "Programming Puzzles & Code Golf" อีกต่อไป แต่เพียงแค่ "Code Golf" ดังนั้นรหัสที่สั้นที่สุดชนะ


5
ยิ่งเครื่องทำงานเร็วขึ้นเท่าใดโปรแกรมก็จะทำงานช้าลง ฉันไม่เห็นวิธีที่ง่ายในการทำให้เป็นเกณฑ์ที่ตรวจสอบได้
Luis Mendo

1
@ LuisMendo: ฉันเห็นอย่างน้อยสองวิธีในการทำสิ่งนี้ได้อย่างง่ายดาย
vsz

1
@vsz ปัญหาที่ฉันเห็นคือการทำซ้ำ มีคนบอกว่าพวกเขาทดสอบกับสองเครื่องและสังเกตเห็นความแตกต่างของความเร็วตามที่ต้องการ แต่คุณไม่สามารถสร้างพฤติกรรมนั้นบนเครื่องสองเครื่องของคุณได้ ดังนั้นคำตอบคือถูกต้อง?
Luis Mendo

1
ควรติดแท็กด้วยช่องคลอดที่ยุ่งหรือไม่?
mbomb007

2
คุณคิดว่าอะไรคือ“ เครื่องจักรที่ทรงพลังกว่า” ? เครื่องที่มีสเปคเดียวกัน แต่ RAM มากกว่าถือว่ามีประสิทธิภาพมากกว่าหรือไม่ จำนวนคำสั่งที่โปรเซสเซอร์ดำเนินการในไม่กี่วินาที? ทั้งสอง? อื่น ๆ อีก?
ทำให้เสียชีวิต

คำตอบ:


4

Perl, 80 78 71 ไบต์

-9 ไบต์ขอบคุณ @Dada

$_++;`lscpu`=~/z:\s+(\d+)/,sleep$1,(1x$_)!~/^(11+?)\1+$/&&say while$_++

รันคำสั่งlscpuและค้นหาความเร็ว CPU เป็น MHz ยิ่งซีพียูเร็วขึ้นเท่าใดเวลาในการนอนหลับก็จะมากขึ้น 1 วินาทีต่อทุกๆ 1 MHz ทำงานบน Ubuntu 14.04.5 ในเครื่องของฉันเครื่องนี้จะทดสอบตัวเลขทุก ๆ 800 วินาที (13 นาที 20 วินาที) บนเครื่องที่เร็วกว่านี้อาจนานกว่า 50 นาที เปลี่ยนเป็นsleep$a/400รับสิ่งที่มีสติมากขึ้นสำหรับการทดสอบ


การจัดเรียงโค้ดเล็กน้อยให้$_++;lscpu =~/z:\s+(\d+)/,sleep$1,(1x$_)!~/^(11+?)\1+$/&&say while++$_สำหรับ 71 ไบต์
Dada
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.