ความท้าทายคือการเขียนรหัสที่เร็วที่สุดที่เป็นไปได้สำหรับการคำนวณถาวรของเมทริกซ์
ถาวรของn
-by- n
matrix A
= ( a
i,j
) ถูกกำหนดเป็น
นี่แสดงให้เห็นถึงชุดของพีชคณิตทั้งหมดของS_n
[1, n]
เป็นตัวอย่าง (จาก wiki):
ในเมทริกซ์คำถามนี้เป็นสี่เหลี่ยมจัตุรัสทั้งหมดและจะมีค่า-1
และ1
อยู่ในนั้นเท่านั้น
ตัวอย่าง
การป้อนข้อมูล:
[[ 1 -1 -1 1]
[-1 -1 -1 1]
[-1 1 -1 1]
[ 1 -1 -1 1]]
ถาวร:
-4
การป้อนข้อมูล:
[[-1 -1 -1 -1]
[-1 1 -1 -1]
[ 1 -1 -1 -1]
[ 1 -1 1 -1]]
ถาวร:
0
การป้อนข้อมูล:
[[ 1 -1 1 -1 -1 -1 -1 -1]
[-1 -1 1 1 -1 1 1 -1]
[ 1 -1 -1 -1 -1 1 1 1]
[-1 -1 -1 1 -1 1 1 1]
[ 1 -1 -1 1 1 1 1 -1]
[-1 1 -1 1 -1 1 1 -1]
[ 1 -1 1 -1 1 -1 1 -1]
[-1 -1 1 -1 1 1 1 1]]
ถาวร:
192
การป้อนข้อมูล:
[[1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, 1, 1, -1],
[1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, 1, -1],
[-1, -1, 1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, -1],
[-1, -1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, -1],
[-1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1],
[1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1],
[1, -1, -1, 1, -1, -1, -1, 1, -1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1],
[1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1],
[1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1],
[-1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, 1],
[-1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1],
[1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, 1, 1],
[-1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1],
[1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 1, -1, 1, 1, -1, 1, -1, 1],
[1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1],
[1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1],
[-1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1],
[1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1],
[1, 1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1],
[-1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1]]
ถาวร:
1021509632
งาน
คุณควรเขียนโค้ดที่ได้รับn
จากn
เมทริกซ์จะให้ผลลัพธ์เป็นแบบถาวร
เนื่องจากฉันจะต้องทดสอบโค้ดของคุณมันจะมีประโยชน์ถ้าคุณสามารถให้วิธีง่ายๆในการให้เมทริกซ์เป็นอินพุตของโค้ดของคุณตัวอย่างเช่นโดยการอ่านจากมาตรฐานใน
ได้รับการเตือนว่าถาวรสามารถมีขนาดใหญ่ (เมทริกซ์ 1s ทั้งหมดเป็นกรณีที่รุนแรง)
คะแนนและความสัมพันธ์
ฉันจะทดสอบโค้ดของคุณในเมทริกซ์ +1 ที่เพิ่มขนาดแบบสุ่มและหยุดในครั้งแรกที่รหัสของคุณใช้เวลามากกว่า 1 นาทีบนคอมพิวเตอร์ของฉัน เมทริกซ์การให้คะแนนจะสอดคล้องกันสำหรับการส่งทั้งหมดเพื่อความเป็นธรรม
หากคนสองคนได้คะแนนเท่ากันผู้ชนะคือคนที่เร็วที่สุดสำหรับค่าn
นั้น หากสิ่งนั้นอยู่ภายใน 1 วินาทีของกันและกันมันก็จะเป็นโพสต์ก่อน
ภาษาและห้องสมุด
คุณสามารถใช้ภาษาและไลบรารีใด ๆ ที่คุณต้องการ แต่ไม่มีฟังก์ชั่นที่มีอยู่แล้วในการคำนวณแบบถาวร หากเป็นไปได้มันจะเป็นการดีที่จะสามารถรันโค้ดของคุณได้ดังนั้นโปรดระบุคำอธิบายโดยละเอียดเกี่ยวกับวิธีการรัน / คอมไพล์โค้ดของคุณใน Linux หากเป็นไปได้ "
การใช้งานอ้างอิง
มีคำถามคำถาม codegolfพร้อมรหัสจำนวนมากในภาษาต่างๆสำหรับการคำนวณแบบถาวรสำหรับเมทริกซ์ขนาดเล็ก MathematicaและMapleทั้งคู่มีการใช้งานอย่างถาวรหากคุณสามารถเข้าถึงได้
My Machineการจับเวลาจะทำงานบนเครื่อง 64 บิตของฉัน นี่คือการติดตั้ง Ubuntu มาตรฐานกับ 8GB RAM, AMD FX-8350 Eight-Core Processor และ Radeon HD 4250 นี่หมายความว่าฉันต้องสามารถเรียกใช้รหัสของคุณได้
ข้อมูลระดับต่ำเกี่ยวกับเครื่องของฉัน
cat /proc/cpuinfo/|grep flags
จะช่วยให้
ธง: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov ลูป pse36 sfpsffsfpfsffsfpsfpsfsfpsfsfsfpfxfxsffxfxfxfxfxfxfxfxfxfxqxfxfxfxfbfddt ที่ยอดเยี่ยมธง: fpu vme เดอ pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 f16c lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a palphs vbmc_fmstal_tws_tws_tws_twsfwfcfcfgwffgfgfgfgfgfgfgff
ฉันจะถามคำถามติดตามหลายภาษาที่เกี่ยวข้องอย่างใกล้ชิดที่ไม่ได้รับความเดือดร้อนจากปัญหา Int ขนาดใหญ่ดังนั้นผู้ที่ชื่นชอบScala , Nim , Julia , Rust , Bashสามารถแสดงภาษาของพวกเขาได้เช่นกัน
กระดานผู้นำ
- n = 33 (45 วินาที. 64 วินาทีสำหรับ n = 34) Ton HospelในC ++พร้อม g ++ 5.4.0
- n = 32 (32 วินาที) เดนนิสในCกับ gcc 5.4.0 โดยใช้ธง gcc ของ Ton Hospel
- n = 31 (54 วินาที) Christian SieversในHaskell
- n = 31 (60 วินาที) Primoในrpython
- n = 30 (26 วินาที) ezrastในRust
- n = 28 (49 วินาที) xnorกับPython + pypy 5.4.1
- n = 22 (25 วินาที) ShebangกับPython + pypy 5.4.1
หมายเหตุ ในการฝึกซ้อมการกำหนดเวลาสำหรับเดนนิสและต้นทอนพระวรสารต่าง ๆ มากมายด้วยเหตุผลลึกลับ เช่นพวกเขาดูเหมือนจะเร็วขึ้นหลังจากที่ฉันโหลดเว็บเบราว์เซอร์! เวลาที่ยกมานั้นเร็วที่สุดในการทดสอบทั้งหมดที่ฉันทำ