คำถามติดแท็ก fastest-code

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

3
นับจำนวนสตริงไบนารีที่สมดุลที่ตรงกับชุดของมาสก์
สตริงไบนารีคือสตริงที่มีตัวละครเท่านั้นที่มาจาก01 สตริงไบนารีสมดุลเป็นสตริงไบนารีซึ่งมีเป็นจำนวนมากว่า0ในฐานะ1 s คุณจะได้รับจำนวนเต็มบวกnและจำนวนมาสก์โดยพลการแต่ละตัวมีความยาว2nอักขระและมีอักขระที่ดึงออกมาจาก012เท่านั้น สตริงไบนารีและการแข่งขันหน้ากากถ้ามันเป็นระยะเวลาเดียวกันและตกลงที่ตัวอักษรในทุกตำแหน่งที่หน้ากากไม่ได้2 เช่นหน้ากาก011022ตรงกับสตริงไบนารี011000 , 011001 , 011010 , 011011 รับnและมาสก์เป็นอินพุต (คั่นด้วยบรรทัดใหม่) คุณต้องส่งออกจำนวนสตริงไบนารีที่สมดุลที่แตกต่างกันซึ่งตรงกับมาสก์หนึ่งตัวหรือมากกว่า ตัวอย่าง อินพุต 3 111222 000112 122020 122210 102120 เหตุผล สมดุลเพียงไบนารีการจับคู่สาย111,222เป็น111,000 สมดุลเพียงไบนารีการจับคู่สาย000112เป็น000111 สมดุลสตริงไบนารีที่ตรงกับ122,020เป็น111,000 (นับแล้ว), 110010และ101010 สมดุลสตริงไบนารีที่ตรงกับ122,210เป็น110,010 (นับแล้ว) 101,010 (นับแล้ว) และ100110 สมดุลสตริงไบนารีที่ตรงกับ102,120เป็น101,100และ100,110 (นับแล้ว) ดังนั้นผลลัพธ์ควรเป็น 6 อินพุต 10 22222222222222222222 เหตุผล มี20 ให้เลือก 10สตริงไบนารีแบบสมดุลของความยาว 20 เอาท์พุต 184756 ผู้ชนะ ผู้ชนะจะเป็นผู้คำนวณการแข่งขันให้เร็วที่สุดและแน่นอนว่าจะปฏิบัติเช่นเดียวกับการใส่ข้อมูลอื่น …

3
แบ่งอย่างรวดเร็วใน Manufactoria
พื้นหลัง Manufactoriaถูกวางตลาดเป็นเกม แต่เราโค้ดนักกอล์ฟสามารถดูได้ว่ามันคืออะไร: ภาษาโปรแกรมสองมิติ ภาษาการเขียนโปรแกรม Manufactoria มีพื้นฐานมาจากคิวเดียวซึ่งมีชุดของเครื่องหมายที่มีสีสัน ตัวชี้คำสั่งเคลื่อนที่ไปรอบ ๆ กระดานเกมโดยใช้สายพานลำเลียงและพบชุดของนักเขียนและกิ่งก้านที่อ่านและเขียนไปยังคิว ภาษานั้นง่ายต่อการเข้าใจดังนั้นวิธีที่เร็วที่สุดในการเรียนรู้คือเล่นสองสามระดับแรกของเกม (เชื่อมโยงด้านบน) ท้าทาย ความท้าทายของคุณคือการสร้างโปรแกรมที่สามารถแบ่งจำนวนหนึ่งด้วยหมายเลขอื่นในเวลาน้อยที่สุด อินพุตไปยังโปรแกรมจะเป็นสตริงของตัวทำเครื่องหมาย X blue ตามด้วยเครื่องหมาย Y แดง เอาต์พุตที่ต้องการจะเป็นสตริงของเครื่องหมายสีแดงที่มีความยาว X / Y บอร์ดเกมที่จะใช้พบได้ในระดับการแข่งขันอย่างเป็นทางการนี้: http://pleasingfungus.com/Manufactoria/?ctm=Divide_and_Conquer;Input_will_be_X_blues_followed_by_Y_reds,_output_X/Y_reds;bbbbbbrr:rrr|bbbrrr:r|bbbbr:rrrr|r:|bbbbbbbbbbbbrrrr:rrr|bbbbbbbbbbbbrrr:rrrr|bbbbbbbbbrrr:rrr|bbbbbbbbbbrr: rrrrr; 13; 3; 0 มันคือ 13x13 (ขนาดสูงสุด) และติดตั้งการทดสอบที่ถูกต้องไว้ล่วงหน้าแล้ว (ดูหัวข้อการให้คะแนน) เกณฑ์การให้คะแนน คะแนนของโปรแกรมคือระยะเวลาทั้งหมดที่ใช้ในการผ่านการทดสอบทั้งหมดในระดับการแข่งขันอย่างเป็นทางการ เวลาทั้งหมดถูกกำหนดบนหน้าจอระดับที่สมบูรณ์ ขณะทำการทดสอบคุณจะต้องใช้ตัวเลื่อนเร่งความเร็ว 50x ที่ด้านล่างซ้ายเพื่อรับผลลัพธ์อย่างรวดเร็ว (การเร่งความเร็วเวลาไม่มีผลต่อคะแนน) นี่คือรายการปัญหาการหารที่เกี่ยวข้องในการทดสอบ: 6/2 = 3 3/3 = 1 4/1 …

16
สุ่มตัวอย่างโดยไม่ต้องเปลี่ยน
สร้างฟังก์ชั่นที่จะส่งออกชุดตัวเลขสุ่มที่แตกต่างจากช่วง ลำดับขององค์ประกอบในชุดนั้นไม่สำคัญ (สามารถเรียงได้) แต่จะต้องเป็นไปได้สำหรับเนื้อหาของชุดจะแตกต่างกันในแต่ละครั้งที่เรียกใช้ฟังก์ชัน ฟังก์ชั่นจะได้รับ 3 พารามิเตอร์ตามลำดับที่คุณต้องการ: จำนวนของตัวเลขในชุดเอาต์พุต ขีด จำกัด ล่าง (รวม) ขีด จำกัด บน (รวม) สมมติว่าตัวเลขทั้งหมดเป็นจำนวนเต็มในช่วง 0 (รวม) ถึง 2 31 (พิเศษ) เอาท์พุทสามารถส่งกลับในแบบที่คุณต้องการ (เขียนถึงคอนโซลเป็นอาร์เรย์ ฯลฯ ) การตัดสิน เกณฑ์รวมถึง 3 R's เวลาทำการ - ทดสอบบนเครื่อง Windows 7 แบบ quad-core ด้วยคอมไพเลอร์สิ่งใดก็ได้ที่เป็นอิสระหรือใช้งานง่าย ความทนทาน - ฟังก์ชั่นการจัดการกรณีมุมหรือมันจะตกอยู่ในวงไม่ จำกัด หรือผลลัพธ์ที่ไม่ถูกต้อง - ข้อยกเว้นหรือข้อผิดพลาดในการป้อนข้อมูลที่ไม่ถูกต้อง การสุ่ม - ควรสร้างผลลัพธ์แบบสุ่มที่ไม่สามารถคาดเดาได้ง่ายด้วยการแจกแจงแบบสุ่ม การใช้ตัวสร้างตัวเลขสุ่มในตัวนั้นใช้ได้ …

12
เขียนฟีโบนักชีที่เร็วที่สุด
นี่เป็นความท้าทายอีกประการเกี่ยวกับตัวเลขฟีโบนักชี เป้าหมายคือการคำนวณตัวเลข Fibonacii ที่ 20'000'000 thให้เร็วที่สุด เอาต์พุตทศนิยมมีขนาดใหญ่ประมาณ 4 MiB มันเริ่มต้นด้วย: 28543982899108793710435526490684533031144309848579 ผลรวม MD5 ของเอาต์พุตคือ fa831ff5dd57a830792d8ded4c24c2cb stdoutคุณต้องส่งโปรแกรมที่คำนวณจำนวนในขณะที่ทำงานและทำให้ผลไปยัง โปรแกรมที่เร็วที่สุดซึ่งวัดจากเครื่องของฉันเองเป็นผู้ชนะ นี่คือกฎเพิ่มเติม: คุณต้องส่งซอร์สโค้ดและไบนารีที่รันได้บน x64 Linux ซอร์สโค้ดจะต้องสั้นกว่า 1 MiB ในกรณีของการประกอบมันยังเป็นที่ยอมรับหากไบนารีนั้นเล็ก คุณต้องไม่รวมจำนวนที่จะคำนวณในไบนารีของคุณแม้จะอยู่ในรูปแบบที่ปลอมแปลง ต้องคำนวณจำนวนที่รันไทม์ คอมพิวเตอร์ของฉันมีสองคอร์ คุณได้รับอนุญาตให้ใช้ขนาน ฉันใช้งานขนาดเล็กจากอินเทอร์เน็ตซึ่งใช้เวลาประมาณ 4.5 วินาที ไม่ควรยากที่จะเอาชนะสิ่งนี้โดยสมมติว่าคุณมีอัลกอริทึมที่ดี

1
นับอาร์เรย์ที่ไม่ซ้ำกันจริงๆ
นี่คือการติดตามขึ้นไปนับอาร์เรย์ที่ทำให้ชุดไม่ซ้ำกัน ความแตกต่างที่สำคัญคือนิยามของความเป็นเอกลักษณ์ พิจารณาอาร์เรย์ของความยาวA nอาร์เรย์มีจำนวนเต็มบวกเท่านั้น A = (1,1,2,2)เช่น ให้เรากำหนดf(A)เป็นชุดของผลรวมของทุกคนที่ไม่ว่างเปล่า subarrays Aต่อเนื่องกันของ ในกรณีf(A) = {1,2,3,4,5,6}นี้ ขั้นตอนในการผลิตf(A) มีดังนี้: subarrays ของAreA จำนวนเงินของตนมี(1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2) ชุดที่คุณได้รับจากรายการนี้จึงเป็น1,1,2,2,2,3,4,4,5,6{1,2,3,4,5,6} เราเรียกอาเรย์ที่A ไม่ซ้ำกันถ้าไม่มีอาเรย์อื่นBที่มีความยาวเท่ากันเช่นนั้นf(A) = f(B)ยกเว้นสำหรับอาเรย์ที่Aกลับด้าน เป็นตัวอย่างf((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}แต่ไม่มีความยาวอื่น ๆ3ที่สร้างชุดของผลรวมเดียวกัน งาน งานสำหรับที่กำหนดnและsจะนับจำนวนอาร์เรย์ที่ไม่ซ้ำกันของความยาวนั้น คุณสามารถสรุปได้ว่าsอยู่ระหว่างและ1 9คุณจะต้องนับอาร์เรย์ที่องค์ประกอบที่มีทั้งจำนวนเต็มรับหรือs s+1เช่นถ้าs=1อาร์เรย์ที่คุณกำลังนับเพียง แต่มีและ1 2อย่างไรก็ตามคำจำกัดความของความเป็นเอกลักษณ์นั้นเกี่ยวข้องกับอาเรย์อื่นที่มีความยาวเท่ากัน ในฐานะที่เป็นตัวอย่างที่เป็นรูปธรรม[1, 2, 2, 2]คือไม่[1, 1, …

2
Quarto มีการจับรางวัลกี่ครั้ง?
บทนำ ความท้าทายนี้คล้ายกับปัญหาของProject Euler ฉันคิดขึ้นมาเพราะเล่นเกมกระดานง่าย ๆ ที่หลอกลวงและไม่สามารถหาวิธีแก้ปัญหาที่มีประสิทธิภาพเพื่อตอบคำถามง่ายๆเกี่ยวกับกลไกของมัน Quartoเป็นเกมที่สนุก 4 เกมติดต่อกัน มันเล่นบนกระดานขนาด 4 x 4 ตัวมี 16 ชิ้นที่ไม่ซ้ำกัน ทุกเทิร์นผู้เล่นแต่ละคนวาง 1 ชิ้นบนกระดาน แต่ละชิ้นมี 4 ลักษณะไบนารี (สั้น / สูง, ดำ / ขาว, สแควร์ / วงกลม, กลวง / ของแข็ง) เป้าหมายคือการทำให้สี่ในแถวทั้งแนวนอนแนวตั้งหรือแนวทแยงมุม 2 สำหรับลักษณะใด ๆ ของสี่! ชิ้นส่วนสีดำ 4 ชิ้นชิ้นส่วนสีขาว 4 ชิ้นชิ้นส่วนสูง 4 ชิ้นชิ้นสั้น 4 ชิ้นชิ้นสี่เหลี่ยมจัตุรัส 4 ชิ้นชิ้นวงกลม …

5
นับจำนวนลำดับระยะทาง Hamming
ระยะ Hammingระหว่างสองสายความยาวเท่ากันคือจำนวนของตำแหน่งที่สัญลักษณ์ที่สอดคล้องกันจะแตกต่างกัน ให้Pเป็นสตริงไบนารีของความยาวnและเป็นสตริงไบนารีของความยาวT 2n-1เราสามารถคำนวณnระยะทาง Hamming ระหว่างPและnสตริงย่อย -length ของTตามลำดับจากซ้ายไปขวาและใส่ลงในอาร์เรย์ (หรือรายการ) ตัวอย่างลำดับระยะทาง Hamming ขอและP = 101 T = 01100ลำดับของ Hamming 2,2,1ระยะทางที่คุณได้รับจากคู่นี้คือ งาน สำหรับการnเริ่มต้นที่เพิ่มขึ้นn=1ให้พิจารณาคู่สายอักขระไบนารีที่มีPความยาวnและTความยาวที่เป็น2n-1ไปได้ทั้งหมด มี2**(n+2n-1)คู่ดังกล่าวและด้วยเหตุนี้จึงมีหลายลำดับของระยะทาง Hamming อย่างไรก็ตามลำดับเหล่านั้นจำนวนมากจะเหมือนกัน nงานคือการหาวิธีการจำนวนมากที่แตกต่างกันสำหรับแต่ละ nรหัสของคุณควรส่งออกจำนวนหนึ่งต่อมูลค่าของ คะแนน คะแนนของคุณคือnรหัสสูงสุดของคุณถึงบนเครื่องของฉันใน 5 นาที nระยะเวลาเป็นเวลาการทำงานรวมเวลาไม่เพียงแค่นั้น ใครชนะ ผู้ที่มีคะแนนสูงสุดจะเป็นผู้ชนะ หากคนสองคนหรือมากกว่านั้นจบลงด้วยคะแนนเดียวกันมันเป็นคำตอบแรกที่ชนะ ตัวอย่างคำตอบ สำหรับการnจาก1ไปคำตอบที่ดีที่สุดที่มี82, 9, 48, 297, 2040, 15425, 125232, 1070553 ภาษาและห้องสมุด คุณสามารถใช้ภาษาและไลบรารี่ที่คุณต้องการได้ หากเป็นไปได้จะเป็นการดีที่จะสามารถเรียกใช้รหัสของคุณได้ดังนั้นโปรดระบุคำอธิบายโดยละเอียดเกี่ยวกับวิธีเรียกใช้ / รวบรวมรหัสของคุณใน Linux หากเป็นไปได้ …

2
นักประวัติศาสตร์ภาษี
บทนำ มีผู้เก็บภาษีที่มีปัญหาในการจัดการภาษีในราชอาณาจักรของเขา: บันทึกทางประวัติศาสตร์ได้ถูกไฟไหม้ครั้งใหญ่ เขาต้องการค้นหาว่ามีอดีตที่เป็นไปได้มากเพียงใดในแง่ที่ว่าเงินในปัจจุบันได้รับมาจากไหน โชคดีที่อาณาจักรของเขาเรียบง่ายมาก ราชอาณาจักรสามารถสร้างแบบจำลองโดยเมทริกบูลีน 2D ซึ่งlหมายถึงคนที่ได้รับมรดกและOเป็นตัวแทนของคนที่ไม่มี ตัวอย่างเช่น: l O l l O O O l l O l O O O O l (มันจะเป็นรูปสี่เหลี่ยมผืนผ้าเสมอ) ในรุ่นต่อไปราชอาณาจักรนั้นเล็กกว่า (หมาป่านั้นแข็งแกร่ง!) รุ่นต่อไปจะมีลักษณะเช่นนี้ซ้อนทับกับรุ่นก่อนหน้า ( xเป็นตัวยึดตำแหน่งสำหรับรุ่นถัดไปในรุ่นถัดไป) l O l l x x x O O O l x x x l O l O x …

4
ขั้นตอนวิธีการวาดเส้นที่รวดเร็ว
งานคือการหาวิธีการวาดเส้นแนวนอนในอาร์เรย์ของจำนวนเต็ม 16 บิต เราสมมติว่าอาร์เรย์พิกเซล 256x192 มี 16 พิกเซลต่อคำ เส้นคือการทำงานที่ต่อเนื่องกันของบิต (1) ชุด บรรทัดสามารถเริ่มต้นตรงกลางของคำใด ๆ ทับซ้อนคำอื่น ๆ และสิ้นสุดในคำใด ๆ พวกเขาอาจเริ่มต้นและสิ้นสุดในคำเดียวกัน พวกเขาอาจไม่ห่อบนบรรทัดถัดไป คำแนะนำ: คำกลางนั้นง่าย - เพียงแค่เขียน 0xffff แต่ขอบจะมีเล่ห์เหลี่ยมเช่นเดียวกับการจัดการเคสสำหรับการเริ่มต้นและสิ้นสุดในคำเดียวกัน ฟังก์ชัน / โพรซีเดอร์ / รูทีนต้องใช้พิกัด x0 และ x1 เพื่อระบุจุดเริ่มต้นและจุดหยุดในแนวนอนรวมถึงพิกัด ay ฉันแยกตัวเองออกจากสิ่งนี้เพราะฉันออกแบบอัลกอริทึมที่เหมือนกันเกือบทั้งหมดสำหรับโปรเซสเซอร์ที่ฝังตัว แต่ฉันอยากรู้ว่าคนอื่นจะทำอย่างไร คะแนนโบนัสสำหรับการใช้งานที่ค่อนข้างรวดเร็ว (ตัวอย่างเช่นการดำเนินการ 64 บิตคูณหรือการดำเนินการจุดลอยตัวจะไม่รวดเร็วในเครื่องที่ฝัง แต่การเปลี่ยนบิตง่าย ๆ )
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.