Prime Nerd Sniping Pattern


16

วันที่ยาวที่สุดของปี - นี่คือบางสิ่งบางอย่างที่จะเสียเวลาเพิ่ม ...


ภาพรวม

โปรดทราบว่านี่ไม่ใช่การประกวดความนิยมและไม่ใช่ความท้าทายในการแสดงผลกราฟิก - คุณจะต้องส่งออกสตริง 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 สำหรับการให้คะแนนและตอนนี้ใช้เวลาไม่กี่วินาทีในการคำนวณคะแนน


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

มอบเครดิตให้แรนดัลมันโรสำหรับคำว่าNerd Sniping

คำตอบ:


36

CJam, คะแนน 276496.9062958626

2,128*_(]128*

มันกลายเป็นสิ่งที่ดีที่สุดเพราะ: ไม่มีคู่ที่ไม่ใช่ฉากตั้งกับระยะทาง 2 ดังนั้นระยะทางจะต้องเป็นเลขคี่และดังนั้นจึงเป็นระยะทางกำลังสอง ในฐานะที่เป็น p 2 = x 2 + y 2หนึ่งใน x และ y (กำลังสองหรือไม่) ต้องเป็นเลขคี่และอีกอันจะต้องเป็นเลขคู่ จุดเหล่านั้นอยู่ในสีตรงข้ามในภาพนี้เสมอ

สิ่งนี้และสิ่งที่เป็นลบก็เป็นทางออกที่ดีที่สุด ในการแก้ปัญหาที่ดีที่สุดไม่ควรมีพิกเซลที่มีมุมฉากเป็นระยะทางที่สำคัญซึ่งมีสีเดียวกัน มีพิกเซลตรงกันข้ามที่อยู่ติดกันในแนวทแยงมุมเช่น (3,4) และ (4,3) โดยการเติมพิกเซลของสีตรงข้าม ฯลฯ เราจะได้เส้นทแยงมุมที่มีสีเดียวกัน เริ่มต้นจากแต่ละพิกเซลในแนวทแยงเราสามารถรับ anti-diagonals ทั้งหมดในลักษณะเดียวกัน ทราบว่าพวกเขาล้อมรอบ มันยังคงเหมาะสมถ้าไม่ทำ


3
ฉันหวังว่าจะใช้เวลานานกว่าที่ผู้คนจะสังเกตเห็นว่า ...
trichoplax

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

4
ป.ล. ฉันไม่ทราบว่าเวลาที่คุณเห็นคำถามนี้ แต่ทางออกที่ดีที่สุด 71 นาทีหลังจากคำถามถูกโพสต์สมควรได้รับรางวัล - ฉันจะต้องรอ 2 วันก่อนที่ฉันจะสามารถกำหนด ...
trichoplax

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

8
@trichoplax เนื่องจากคุณรู้ว่ามีทางออกที่ดีที่สุดฉันคิดว่าคุณน่าจะแก้ไขคำถามได้ดีขึ้นเพื่อให้แก้ไขได้น้อยลง แม้ว่า jimmy23013 จะพบว่ามันรวดเร็ว แต่ก็เป็นเรื่องของเวลาจนกว่าจะมีคนพบมันแล้วมันก็จบลงแล้ว
xnor

1

Python 3 คะแนน 138267.64

นี่คือคำตอบที่น้อยที่สุดเป็นตัวอย่างของสิ่งที่จำเป็นและเป็นสิ่งที่จะชนะ ...

มันรวมถึง

  • ชื่อภาษา
  • คะแนนจากกองตัวอย่างในคำถาม
  • ภาพที่บันทึกจากสแต็คตัวอย่าง
  • รหัสที่ใช้สร้างสตริง 65,536 เลขศูนย์และรายการ

เอาท์พุต

ภาพที่สร้างแบบสุ่ม

รหัส

from random import random

output_string = ''
filename = '65536digits.txt'

for t in range(65536):
    digit = int(random() * 2)
    output_string += str(digit)

with open(filename, 'w') as output_file:
    output_file.write(output_string)

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.