การเขียนโปรแกรมปริศนา & รหัสกอล์ฟ

คำถาม & คำตอบสำหรับผู้ชื่นชอบการเขียนโปรแกรมปริศนา

5
จำนวนทอพอโลยีทั้งหมด
สำหรับ DAG ที่กำหนด (กราฟ acyclic กำกับ) การเรียงลำดับทอพอโลยีแต่ละอันเป็นการเปลี่ยนแปลงของจุดยอดทั้งหมดที่ทุก ๆ ขอบ(u, v)ใน DAG คุณจะปรากฏก่อนvในการเปลี่ยนรูป งานของคุณคือการคำนวณจำนวนโทโพโลยีทั้งหมดของ DAG ที่กำหนด กฎระเบียบ คุณสามารถใช้รูปแบบใดก็ได้เพื่อแสดงกราฟเช่น adjacency matrix, adjacency list หรือ edge list ตราบใดที่คุณไม่มีการคำนวณที่มีประโยชน์ในการเข้ารหัสของคุณ คุณยังสามารถมีสิ่งต่าง ๆ เช่นจำนวนจุดยอดหรือรายการจุดยอดในอินพุตถ้าสิ่งเหล่านั้นมีประโยชน์ คุณสามารถสมมติกราฟในอินพุตได้เสมอ DAG (ไม่มีรอบใด ๆ ) โปรแกรมของคุณควรทำงานในทางทฤษฎีสำหรับการป้อนข้อมูลใด ๆ แต่มันอาจล้มเหลวได้หากมันล้นประเภทจำนวนเต็มพื้นฐานในภาษาของคุณ ชื่อของจุดยอดสามารถเป็นค่าต่อเนื่องในประเภทใดก็ได้ ตัวอย่างเช่น: ตัวเลขเริ่มต้นที่ 0 หรือ 1 (และเฉพาะในกรณีที่คุณไม่ได้เก็บรหัสไว้ในหมายเลขนี้แน่นอน) นี่คือรหัสกอล์ฟ รหัสที่สั้นที่สุดชนะ ตัวอย่าง นี่เป็นอินพุตเดียวกันในรูปแบบที่ต่างกัน โปรแกรมของคุณไม่จำเป็นต้องยอมรับทั้งหมด จุดยอดเป็นจำนวนเต็มเริ่มต้นที่ 0 …

4
การเข้ารหัสตัวเลข Pigpen
การเข้ารหัสตัวเลข Pigpen ภารกิจของคุณเป็นเรื่องง่าย: การเขียนโปรแกรมที่ได้รับข้อความที่เป็น input และเอาท์พุทเป็นตัวแทนของ ASCII ในหมูธรรมดา อินพุต ASCII เท่านั้น (ไม่มี Unicode) อักขระ คุณต้องสามารถจัดการอย่างน้อย 16384 ตัวอักษรและ 256 บรรทัด เอาท์พุต แทนที่อักขระทั้งหมดที่ไม่ใช่บรรทัดใหม่หรือในABCDEFGHIJKLMNOPQRSTUVWXYZหรือabcdefghijklmnopqrstuvwxyzด้วยช่องว่าง เปลี่ยนตัวอักษรแต่ละตัวให้เป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (ดูหัวข้อถัดไป) แทรกช่องว่างต่อท้ายในสามบรรทัดหลังละบรรทัด อักขระที่เข้ารหัสแต่ละตัวเป็นบล็อก 3 * 3 ของศิลปะ ASCII แทนที่ช่องว่างด้วยช่องว่าง 3 * 3 บล็อก อักขระทุกตัวควรอยู่ในสามบรรทัดเดียวกัน (เรียกทั้งสามบรรทัดนี้ว่า pigpen-line) ยกเว้นว่าจะมีบรรทัดใหม่ซึ่งจะเริ่มบรรทัด pigpen ใหม่ เว้นบรรทัดบรรทัดว่างไว้ระหว่าง pigpen-lines รหัส | | | | .| |.| …

3
เขียนล่าม Clem
Clem เป็นภาษาการเขียนโปรแกรมแบบกองซ้อนที่มีฟังก์ชั่นชั้นหนึ่ง จุดประสงค์ของคุณคือการเขียนล่ามสำหรับภาษา Clem มันถูกต้องควรจะดำเนินการตัวอย่างทั้งหมดรวมอยู่ในการดำเนินการอ้างอิงที่มีอยู่ที่นี่ ตามปกติจะใช้ช่องโหว่มาตรฐาน รายการที่น้อยที่สุดด้วยการนับไบต์ชนะ ภาษาเคล็ม Clem เป็นภาษาโปรแกรมสแต็กที่มีฟังก์ชั่นชั้นหนึ่ง วิธีที่ดีที่สุดในการเรียนรู้ Clem คือการใช้clemล่ามโดยไม่มีข้อโต้แย้ง มันจะเริ่มต้นในโหมดโต้ตอบช่วยให้คุณสามารถเล่นกับคำสั่งที่มีอยู่ ในการรันโปรแกรมตัวอย่างให้พิมพ์clem example.clmโดยที่ example คือชื่อของโปรแกรม บทแนะนำสั้น ๆ นี้ควรจะเพียงพอสำหรับคุณในการเริ่มต้น มีฟังก์ชั่นหลักสองประเภท ฟังก์ชั่นอะตอมมิกและฟังก์ชั่นสารประกอบ ฟังก์ชั่นผสมคือรายการที่ประกอบด้วยฟังก์ชั่นอื่น ๆ และฟังก์ชั่นอะตอมมิก โปรดทราบว่าฟังก์ชั่นผสมไม่สามารถมีตัวเอง ฟังก์ชั่นของอะตอม ชนิดแรกของฟังก์ชั่นของอะตอมเป็นคงที่ คงเป็นเพียงค่าจำนวนเต็ม ตัวอย่างเช่น -10 เมื่อล่ามพบค่าคงที่มันจะดันไปที่สแต็ก เรียกใช้clemตอนนี้ พิมพ์-10ที่พรอมต์ คุณควรเห็น > -10 001: (-10) > ค่า001อธิบายถึงตำแหน่งของฟังก์ชันในสแต็กและ(-10) เป็นค่าคงที่ที่คุณเพิ่งป้อน ตอนนี้ป้อน+11ที่พรอมต์ คุณควรเห็น > +11 002: (-10) 001: …

5
ตั้งชื่อมือโป๊กเกอร์ - ฉบับที่ 7 บัตร
ความท้าทาย: ในคำถามนี้: ตั้งชื่อมือโป๊กเกอร์ที่คุณต้องใช้ห้ามือไพ่โป๊กเกอร์และระบุ คำถามนี้คล้ายกันกับสองบิด: ก่อนอื่นเอาต์พุตจะเป็นตัวพิมพ์เล็กทั้งหมด สิ่งนี้จะช่วยให้การตีกอล์ฟมากขึ้นเนื่องจากคุณไม่ต้องกังวลกับการใช้อักษรตัวพิมพ์ใหญ่flushและstraight high card one pair two pair three of a kind straight flush full house four of a kind straight flush royal flush ประการที่สองด้วยความนิยมของ Texas Hold'em และ 7 card Stud เราที่นี่ที่ golf code ควรจะได้คะแนนไพ่โป๊กเกอร์เจ็ดใบในมือใช่ไหม? เมื่อให้คะแนนไพ่เจ็ดใบให้ใช้ไพ่ห้าใบที่ดีที่สุดสำหรับมือของคุณและไม่สนใจไพ่สองใบที่คุณไม่ต้องการ อ้างอิง: รายการมือโป๊กเกอร์: http://en.wikipedia.org/wiki/List_of_poker_hands อินพุต (ยกโดยตรงจากเธรดก่อนหน้า) ไพ่ 7 ใบจากอาร์กิวเมนต์ stdin หรือ …
11 code-golf  game 

8
กรองไฟล์ขนาดใหญ่อย่างรวดเร็ว
ความท้าทายคือการกรองไฟล์ขนาดใหญ่อย่างรวดเร็ว อินพุต: แต่ละบรรทัดมีช่องว่างจำนวนเต็มบวกจำนวนสามช่องว่าง เอาท์พุท: เส้นที่นำเข้าทั้งหมดA B, Tที่ตอบสนองอย่างใดอย่างหนึ่งของเกณฑ์ดังต่อไปนี้ มีอยู่สายป้อนข้อมูลอื่นC, D, Uที่และD = A0 <= T - U < 100 มีอยู่สายป้อนข้อมูลอื่นC, D, Uที่และB = C0 <= U - T < 100 ในการสร้างไฟล์ทดสอบให้ใช้สคริปต์ python ต่อไปนี้ซึ่งจะใช้สำหรับการทดสอบ มันจะสร้างไฟล์ 1.3G แน่นอนคุณสามารถลด nolines สำหรับการทดสอบ import random nolines = 50000000 # 50 million for i in xrange(nolines): print …

18
รหัสย่อที่สร้าง Deadlock
เขียนรหัสที่สั้นที่สุดเพื่อสร้างการหยุดชะงัก การเรียกใช้โค้ดต้องหยุดชั่วคราวดังนั้นจึงไม่ทำงาน public class DeadlockFail extends Thread{ //Java code public static void main(String[]a){ Thread t = new DeadlockFail(); t.start(); t.join(); } //this part is an infinite loop; continues running the loop. public void run(){while(true){}} } มันไม่จำเป็นที่จะต้องแน่ใจว่ารหัสที่จะเข้าสู่การหยุดชะงักเพียงเกือบแน่นอน (ถ้าคุณใช้เวลาอนันต์ก็จะหยุดชะงัก)

6
ฟังก์ชั่นการนับเหตุผล
สร้างฟังก์ชั่นที่รับจำนวนธรรมชาติ (เริ่มต้นจาก 0 รวม) และส่งกลับคู่ของจำนวนเต็มบวกซึ่งเป็นตัวเศษและส่วนตามลำดับ ใช้การสำรวจเส้นทางในแนวทแยง หมายเลขที่นับก่อนหน้านี้จะต้องข้าม (คุณสามารถจดจำชุดของค่าที่ข้ามได้) แผนภาพ: สีแดงเป็นค่าที่ข้าม ค่า: f (0) = 1, 1 f (1) = 2, 1 f (2) = 1, 2 f (3) = 1, 3 f (4) = 3, 1 (สังเกตการข้าม) f (5) = 4, 1 f (6) = 3, 2 f (7) = …

30
องค์ประกอบลำดับ Fibonacci แรก -n
มีคำถามที่รู้จักกันดีที่นี่ซึ่งขอเครื่องกำเนิดลำดับลำดับฟีโบนักชีสั้น ๆ ฉันต้องการที่จะรู้ว่าใครบางคนสามารถสร้างองค์ประกอบ N แรกเท่านั้นจากลำดับฟีโบนักชีในพื้นที่ที่สั้นมาก ฉันพยายามทำมันด้วยไพ ธ อน แต่ฉันสนใจคำตอบสั้น ๆ ในภาษาใด ๆ ฟังก์ชั่น F (N) สร้างองค์ประกอบ N แรกของลำดับทั้งส่งคืนพวกเขาเป็นการกลับมาของฟังก์ชั่นหรือพิมพ์พวกเขา ที่น่าสนใจมันก็ดูเหมือนว่าคำตอบรหัสกอล์ฟเริ่มต้นด้วยแทน1 1 2 0 1 1 2นั่นคือการประชุมในการเขียนโปรแกรมกอล์ฟหรือการเขียนโปรแกรมทั่วไป? (วิกิพีเดียบอกว่าลำดับฟีโบนักชีเริ่มต้นด้วยศูนย์) ตัวอย่าง Python (5 องค์ประกอบแรก): def f(i,j,n): if n>0: print i; f(j,i+j,n-1) f(1,1,5)

7
ใช้การสร้างการแบ่งปันลับของ Shamir
รูปแบบการแบ่งปันความลับของ Shamirเป็นวิธีที่ง่ายในการปกป้องความลับโดยแบ่งออกเป็นหลายส่วนที่จำเป็นในการสร้างใหม่ งานของคุณคือการดำเนินการฟื้นฟูความลับร่วมกันมิร์เหนือจำกัด ฟิลด์1928049029ที่กำหนดโดยนายก หากคุณมีข้อสงสัยเกี่ยวกับความหมายของสิ่งนี้เพียงแค่ถามหรือดูการคำนวณทางคณิตศาสตร์ของ Finite Field & Finite Fieldในวิกิพีเดีย (แหล่งข้อมูลเพิ่มเติมด้านล่าง) อินพุต อินพุตดำเนินการโดยใช้ stdin ก่อนอื่นมาเป็นจำนวนเต็มkจากนั้นตามด้วยเส้น k แต่ละบรรทัดเหล่านี้มีคู่ของจำนวนเต็มที่x yแสดงถึงความลับ กล่าวอีกนัยหนึ่งf(x) = yในพหุนามดั้งเดิมที่ใช้ในการสร้างความลับ จำนวนความลับที่ให้มานั้นเพียงพอที่จะสร้างความลับที่สอดคล้องกันได้เสมอ เอาท์พุต ส่งออกไปยัง stdout ความลับที่สร้างขึ้นใหม่ ตัวอย่าง การป้อนข้อมูล: 5 1 564797566 2 804114535 4 1354242660 6 1818201132 7 503769263 เอาท์พุท: 1234 การป้อนข้อมูล: 7 1 819016192 2 1888749673 3 1737609270 4 …

14
ร้อยละของวันทำงานในหนึ่งเดือน
ให้ปีและเดือนหาเปอร์เซ็นต์ของวันทำงานในเดือนดังกล่าว วันทำงานคือวันจันทร์ถึงวันศุกร์โดยไม่คำนึงถึงวันหยุดหรือสิ่งพิเศษอื่น ๆ ใช้ปฏิทินเกรโกเรียน อินพุต ปีและเดือนในรูปแบบ ISO 8601 (YYYY-MM) ปีจะมีตัวเลขสี่หลักเสมอเดือนจะมีตัวเลขสองหลักเสมอ ปีที่กำหนดจะไม่เป็นก่อนปี 1582 เอาท์พุต เอาท์พุทเป็นร้อยละของวันทำงาน (ตามคำนิยามข้างต้น) ในเดือนที่กำหนดปัดเป็นจำนวนเต็ม ไม่มีเครื่องหมายเปอร์เซ็นต์หรือตัวเลขเศษส่วนตาม ตัวอย่างที่ 1 Input Output 2010-05 68 ตัวอย่างที่ 2 Input Output 2010-06 73 ตัวอย่างที่ 3 Input Output 1920-10 68 ตัวอย่างที่ 4 Input Output 2817-12 68 หนึ่งสัปดาห์ผ่านไปได้รับคำตอบแล้ว สำหรับสิ่งที่อยากรู้ขนาดของผลงานที่เราได้รับในการแข่งขันของเรา: 129 - Z เชลล์ 174 - VB.NET …
11 code-golf  date 

7
การต่อสู้อาร์เรย์ที่มีพลังลับแปลก ๆ
นี่คือความท้าทายของอาร์เรย์สองมิติที่ค่อนข้างง่าย ลองนึกภาพสนามรบของทหารราบ 625 คน คุณสั่งแปลกทหาร แต่โชคร้ายที่ความแข็งแรงของแม้กองกำลังทุกข์ระทมคุณ โชคดีที่ทหารของคุณมีพลังลับ: หากพลังของกองกำลังคี่และกองกำลังพันธมิตรที่ล้อมรอบพวกเขานั้นหารด้วยเลขกำลังลับพวกเขาจะปลดปล่อยการโจมตีขั้นสุดท้ายและชนะ! คุณต้องให้เกียรติทหารที่ชนะแต่ละคน กฎระเบียบ กำหนดอาร์เรย์จำนวนเต็ม 25 x 25 ซึ่งแต่ละองค์ประกอบมีผลิตภัณฑ์ของตำแหน่ง x และ y บวก 1 ให้ส่งคืนพิกัดขององค์ประกอบคี่ "ชนะ" ทุกรายการที่ตรงกับเกณฑ์ต่อไปนี้: ผลรวมของค่าองค์ประกอบและองค์ประกอบคี่ที่อยู่ติดกัน (ขึ้น, ลง, ซ้าย, และขวา) หารด้วยอินพุต (หมายเลขพลังงานลับ) มันจะต้องมีองค์ประกอบที่อยู่ติดกับมันทั้งสี่ด้านและไม่ได้อยู่บนขอบ การส่งสามารถเป็นได้ทั้งฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบที่ต้องการอินพุตเดียว เอาต์พุตสามารถอยู่ในลำดับใดก็ได้ สนามรบ 25 x 25 ของเรามีลักษณะดังนี้: 1, 1, 1, 1,... 1, 2, 3, 4,... 1, 3, 5, 7,... …

2
การเล่นกอล์ฟของเชลล์โกลบ
งานนี้คือการส่งออกเส้นทางที่สั้นที่สุดไปยังไฟล์หลังจากการขยาย glob เปลือกกลมคืออะไร? ในเชลล์ส่วนใหญ่คุณสามารถใช้*อักขระในพา ธ เพื่อแทนอักขระใด ๆ ที่ตำแหน่ง ตัวอย่างเช่นถ้าไดเรกทอรีfooมีไฟล์bar bazและasdfจากนั้นจะขยายไปยังfoo/b*foo/bar foo/baz ตอนนี้สมมติว่าไดเรกทอรีปัจจุบันมีไฟล์ชื่อihavealongnameและไม่มีอะไรอื่น หากฉันต้องการอ้างอิงไฟล์นี้ฉันอาจพิมพ์*ซึ่งจะแสดงเพียงไฟล์เดียวเท่านั้นแทนที่จะพิมพ์ชื่อเต็ม หากไดเรกทอรีมีไฟล์ชื่อialsohavealongnameฉันไม่สามารถทำได้*เพราะมันจะตรงกับไฟล์ทั้งสอง ih*ที่ผมจะต้องทำอย่างน้อย *รูปแบบยังสามารถใช้ได้กับการจับคู่ดังกล่าวข้างต้นไดเรกทอรีไฟล์ฉันกำลังมองหา หากมีเพียงสองไดเรกทอรีfooและbarแต่fooมีเพียงไฟล์bazและbarมีไฟล์asdfผมสามารถจับคู่กับfoo/baz หรือมากยิ่งขึ้นรัดกุม*/baz */b*ถ้าbarว่างเปล่า*/*จะทำงาน งานของคุณ: กำหนดสตริงของเส้นทางที่เป็นตัวแทนของ "ไดเรกทอรีปัจจุบัน" และเส้นทางเป้าหมายเดียวออกสตริงที่สั้นที่สุดที่เป็นไปได้ที่จะขยายไปยังเส้นทางเป้าหมายนั้นหลังจากขยาย * s เส้นทางเป้าหมายสามารถใช้เป็นสตริงของตัวเองเป็นดัชนีในอาร์เรย์ของเส้นทางเป็นรายการแรกในอาร์เรย์ของเส้นทางที่ส่งผ่านหรือวิธีที่สะดวกอื่น ๆ ที่ไม่ได้เข้ารหัสยาก ถามในความคิดเห็นหากไม่แน่ใจ เส้นทางเป้าหมายรับประกันว่าจะมีอยู่ใน "ไดเรกทอรีปัจจุบัน" คุณสามารถสันนิษฐานได้ว่าเส้นทางทั้งหมดมีเพียงตัวอักษรและตัวเลข ASCII (และ/) คุณอาจใช้เป็นเส้นทางอินพุตที่ถูกรูท (เริ่มต้นด้วย/) หรือญาติ (ไม่ได้ขึ้นต้นด้วย/) หากมีความเป็นไปได้สั้น ๆ หลายอย่างเท่ากันให้ส่งคืนสิ่งใดสิ่งหนึ่งหรือทั้งหมด นี่คือ รหัสกอล์ฟไบต์ที่น้อยที่สุดชนะ! กรณีทดสอบขอบคุณเควิน Cruijssen

7
Anagram Quines (เธรดของโจร)
มันคือ ตำรวจและโจรท้าทายเธรดของตำรวจสามารถพบได้ที่นี่ ความท้าทายของคุณในฐานะโจรคือการเอาท์พุทจากเธรดของตำรวจและค้นหาแอนนาแกรมของเอาต์พุตที่เมื่อรันเป็นเอาต์พุตของโปรแกรมเอาต์พุตดั้งเดิมที่จัดเตรียมไว้ให้ ผู้ชนะจะเป็นคนที่มีรอยแตกที่ถูกต้องที่สุดในคำถามนี้ กฎระเบียบ คุณไม่สามารถถอดรหัสคำตอบที่ทำเครื่องหมายว่าปลอดภัยด้วยโปรแกรมที่ให้มา หากตำรวจให้ภาษาที่ทางออกที่ตั้งใจไว้คือคุณต้องถอดรหัสมันในภาษานั้น ๆ หากพวกเขาเลือกที่จะไม่ให้คุณแตกมันในภาษาคู่แข่งใด ๆ ใช้กฎมาตรฐานสำหรับ Quines รอยแตกต้องไม่เป็น Quines ที่สมบูรณ์แบบ เช่นพวกเขาจะต้องไม่ส่งออกแหล่งที่แน่นอนของพวกเขา แต่เรียงลำดับใหม่ของมัน (คำสั่งที่ให้ไว้โดยตำรวจ)

11
ลากนับถอยหลังการแข่งขัน
ท้าทาย: ในสถานการณ์สมมติตัวจับเวลานับถอยหลังสำหรับการแข่งขันมีช่วงเวลาแบบสุ่มระหว่างการนับเพื่อป้องกันการเริ่มต้นก่อนเวลาอันควรเช่น 3 (0.82 seconds pass), 2 (0.67 seconds pass), 1 การป้อนข้อมูล: ไม่มีอะไร เอาท์พุท: เขียนโปรแกรม (หรือฟังก์ชั่น) ที่พิมพ์ตัวเลข 3 จำนวนด้วยช่วงเวลาแบบสุ่มจาก 0.50 วินาทีถึง 1 วินาทีระหว่างแต่ละการนับ บันทึก: โปรแกรมจะต้องแสดงผลแต่ละหมายเลข (3, 2, 1) ด้วยการสุ่ม ( ตัวเลขใด ๆระหว่าง 0.50 ถึง 1 ถึงหนึ่งในร้อยส่วนใด ๆ ไม่มีการเข้ารหัสแบบหนัก) ช่วงเวลาระหว่างแต่ละโปรแกรม ความแม่นยำของช่วงเวลาสุ่มต้องออกไปเป็นร้อย (เช่น: 0.52) คุณไม่จำเป็นต้องส่งออกช่วงเวลานับเฉพาะ @JoKing ชี้แจงแล้วฉันหมายถึงการสุ่มอย่างสม่ำเสมอ (คุณสามารถใช้เครื่องกำเนิดไฟฟ้าแบบหลอกเทียมในภาษาของคุณได้ ตามที่หลาย ๆ คนได้ชี้แจงฉันหมายถึงตัวเลข 2 …
10 code-golf  random 

10
บางช่วงเวลาเหงา
ฉันรู้ฉันรู้ แต่เป็นอีกช่วงเวลาที่ท้าทาย ... ที่เกี่ยวข้อง โดดเดี่ยว A (หรือแยก) ที่สำคัญเป็นจำนวนที่สำคัญpดังกล่าวว่าp-2, p+2, p-4, p+4... p-2k, p+2kสำหรับบางคนkเป็นคอมโพสิตทั้งหมด เราเรียกนายกคนนี้ว่านายกนายกk- โดดเดี่ยวครั้ง ตัวอย่างเช่นนายกที่แยกได้ครั้งที่ 5 คือ211เนื่องจากทั้งหมด201, 203, 205, 207, 209, 213, 215, 217, 219, 221ประกอบด้วยคอมโพสิต ( p-2*5=201, p-2*4=203ฯลฯ ) ท้าทาย ได้รับสองจำนวนเต็มการป้อนข้อมูลn > 3และk > 0การส่งออกที่เล็กที่สุดkที่สำคัญ nTH-ครั้งแยกว่าเป็นอย่างเคร่งครัดมีขนาดใหญ่กว่า ตัวอย่างเช่นสำหรับk = 5ใด ๆ และnในช่วงที่4 ... 210ผลผลิตที่ควรจะเป็น211ตั้งแต่ที่ 5 nครั้งแยกนายกเล็กที่สุดอย่างเคร่งครัดมีขนาดใหญ่กว่าการป้อนข้อมูล ตัวอย่าง n=55 k=1 …

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