วันที่ยาวที่สุดของปี - นี่คือบางสิ่งบางอย่างที่จะเสียเวลาเพิ่ม ...
ภาพรวม
โปรดทราบว่านี่ไม่ใช่การประกวดความนิยมและไม่ใช่ความท้าทายในการแสดงผลกราฟิก - คุณจะต้องส่งออกสตริง 65,536 เลขศูนย์และรายการที่คุณต้องการเท่านั้น ตัวอย่างข้อมูลสแต็คที่ด้านล่างของคำถามจะแสดงเป็นภาพขนาด 256 x 256 และคำนวณคะแนนอย่างเป็นทางการของคุณ จากนั้นคุณสามารถบันทึกภาพและอัปโหลดไปยังคำตอบของคุณพร้อมกับรหัสของคุณ (เนื่องจากเอาต์พุตสตริงจะไม่พอดีกับคำตอบ Stack Exchange 30,000 อักขระ)
เกณฑ์การให้คะแนน
คะแนนของภาพคือผลรวมของคะแนนของแต่ละพิกเซล คะแนนของแต่ละพิกเซลคือผลรวมของคะแนนย่อยสำหรับแต่ละที่ไม่ใช่ฉาก , ระยะทางที่สำคัญพิกเซลที่มีสีตรงข้ามที่จะพิกเซลที่ถูกยิง คะแนนย่อยสำหรับแต่ละพิกเซลดังกล่าวเป็น1/p
ที่p
คือระยะทางที่สำคัญ
ในบริบทของคำถามนี้คำศัพท์มีคำจำกัดความดังต่อไปนี้:
Non-orthogonal:พิกเซลนั้นไม่ใช่ orthogonal กับพิกเซลที่ทำคะแนนหากมันไม่ได้อยู่ในแถวเดียวกันและไม่ได้อยู่ในคอลัมน์เดียวกัน
ระยะนายกรัฐมนตรี:พิกเซลที่สำคัญระยะทางจากพิกเซลที่ถูกยิงได้ถ้าพวกเขาจะแยกจากกันโดยระยะทางยุคลิดที่เป็นว่าจำนวนเฉพาะ โดยเฉพาะอย่างยิ่งระยะทางคือระยะทางต่ำสุดที่วัดได้แบบ toroidally - พิกเซลด้านซ้ายบนคือระยะทาง
sqrt(2)
จากพิกเซลด้านล่างขวา (ขอบทั้ง 4 ขอบ)สีตรงข้าม:พิกเซลมีสีตรงข้ามกับพิกเซลที่ให้คะแนนหากค่ารวมเป็น 1 นั่นคืออันแรกคือ 0 และที่สองคือ 1 หรือที่แรกคือ 1 และที่สองคือ 0
Stack Snippet มีโค้ดตัวอย่างที่แสดงวิธีการให้คะแนนภาพ แต่ไม่รวมถึงการเพิ่มประสิทธิภาพหรือวิธีการที่มีประสิทธิภาพเพียงแค่โค้ดที่ถูกต้องเพื่อให้การให้คะแนนของภาพขั้นสุดท้ายสามารถทำได้อย่างสม่ำเสมอ
หากมีสิ่งใดในรหัสไม่ถูกต้องโปรดแจ้งให้เราทราบอย่างใดอย่างหนึ่งในความคิดเห็นหรือในการแชท
JavaScript อาจไม่จำเป็นต้องเป็นภาษาที่ดีที่สุดในการตอบคำถามท้าทายนี้ โปรดทราบว่ารหัสตัวอย่างจงใจไม่ให้เบาะแสเกี่ยวกับแนวทางที่รวดเร็วยิ่งขึ้น มันจะมีประสิทธิภาพแนะนำที่ได้แสดงให้เห็นแล้วในคำตอบที่มีอยู่
การแสดง
พิกเซลการให้คะแนน
สำหรับความรู้สึกที่เข้าใจง่ายสำหรับการกระจายของพิกเซลการให้คะแนนที่นี่ (เป็นสีม่วง) เป็นพิกเซลระยะทางที่ไม่เอกพันธ์สำหรับพิกเซล (128, 128) ของภาพ 256 x 256:
ภาพสุ่ม
นี่เป็นภาพที่สร้างแบบสุ่มจากตัวอย่างคำตอบ Python 3 มีคะแนน 138,267.64 และให้บางอย่างเพื่อเอาชนะ
อินพุต
รหัสไม่จำเป็นต้องมีการป้อนข้อมูล
เอาท์พุต
รหัสควรส่งออกสตริง 65,536 เลขศูนย์และรายการแทนพิกเซลของภาพขาวดำ 256 x 256 ตัวเลขควรเป็นสตริงต่อเนื่องโดยไม่มีตัวคั่น คุณอาจพบว่าการคัดลอกและวางได้ง่ายขึ้นหากคุณส่งออกไปยังไฟล์ แต่สิ่งนี้ขึ้นอยู่กับคุณ
รหัสของคุณอาจส่งออกข้อมูลอื่น ๆ ที่คุณพบว่ามีประโยชน์ตราบใดที่สตริงสามารถคัดลอกและวางลงใน Stack Snippet ได้ ตัวอย่างเช่นคุณอาจต้องการส่งออกสตริงที่ดีที่สุดไปยังไฟล์และคะแนนที่ดีที่สุดไปยัง STDOUT ในช่วงเวลาปกติทำให้ผู้ใช้สามารถเลือกเวลาที่จะหยุดการค้นหา
กองย่อย
ตามที่Sp3000ชี้ให้เห็นตัวอย่างก็ใช้เวลา 10 นาทีในการคำนวณคะแนนซึ่งช้าเกินไปเล็กน้อยแม้กระทั่งสำหรับการอ้างอิงที่ไม่มีประสิทธิภาพโดยเจตนา ฉันได้แก้ไขใน Sp3000 แนะนำการปรับปรุงของ precomputing พิกเซล offsets สำหรับการให้คะแนนและตอนนี้ใช้เวลาไม่กี่วินาทีในการคำนวณคะแนน
หากคุณใช้ผลลัพธ์หรือรหัสของคำตอบอื่นเป็นจุดเริ่มต้นสำหรับรหัสของคุณเองโปรดอย่าลืมให้เครดิตและลิงก์ไปยังคำตอบที่สนับสนุน คำตอบสำหรับคำถามนี้ไม่จำเป็นต้องให้เครดิตคำตอบตัวอย่างหรือรหัสในคำถาม