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

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

7
สร้างเทมเพลต Markdown สำหรับโพสต์ของคุณ
งานของคุณง่ายมาก: เขียนโปรแกรม (หรือฟังก์ชั่น) ที่ไม่ใช้อินพุตและเอาท์พุตดังนี้: ## *name*, *length* bytes *code* ในกรณีที่*name*เป็นชื่อของภาษาที่คุณกำลังใช้*length*เป็นจำนวนไบต์ในรหัสของคุณและ*code*เป็นโปรแกรมของรหัสที่มา หาก*code*มีหลายบรรทัดมันจะมีช่องว่างสี่ช่องก่อนแต่ละบรรทัด นี่คือตัวอย่างการนำ 124- ไบต์ใน Python 3: s = "## Python 3, 124 bytes{2} s = {1}{0}{1}{2}print(s.format(s,chr(34),chr(10)))" print(s.format(s,chr(34),chr(10))) ผลลัพธ์คือ: ## Python 3, 124 bytes s = "## Python 3, 124 bytes{2} s = {1}{0}{1}{2}print(s.format(s,chr(34),chr(10)))" print(s.format(s,chr(34),chr(10))) ซึ่งใน Markdown คือ: Python 3, 124 …
19 code-golf  quine 

4
รับแผนผัง, ค้นหา X
ค้นหา X ฉันได้รับแรงบันดาลใจจากคำถามทางคณิตศาสตร์ที่ขอให้ "Find X" สำหรับรูปร่างที่กำหนด ในขั้นต้นฉันเพิ่งจะได้รับความท้าทายคือการพิมพ์ตำแหน่ง x และ y ของตัวละคร 'x' ในสตริง แต่ฉันคิดว่ามันจะง่ายเกินไป ดังนั้นฉันจึงพิจารณาบริบทที่ปกติแล้วและตัดสินใจหาความยาวของบรรทัดถัดจาก x ที่เหมาะสม รับอินพุตสตริงที่มีไดอะแกรมของ ascii 'lines' รวมถึง 'x' ตัวเดียวและอักขระขยะที่อาจเกิดขึ้นพิมพ์ความยาวของบรรทัดเดียวที่มี 'x' อยู่ติดกันโดยตรง ตัวอย่าง การป้อนข้อมูล: | | |x | | ouput: 5 การป้อนข้อมูล: |\ | \x | \ |___\ เอาท์พุท: 4 การป้อนข้อมูล: Diagram of a Wobbly Line: IRRELEVANTTEXT____ …

10
ระบบตัวเลขอย่างง่าย
ฉันจะบอกคุณเกี่ยวกับระบบตัวเลขอย่างง่าย (ซึ่งฉันทำขึ้นสำหรับความท้าทายนี้) ระบบนี้มีฟังก์ชั่น(), [], และ{}<> 1 () เมื่อจะได้รับการขัดแย้งใดก็ประเมิน()0 เมื่อ()ได้รับหนึ่งหรือมากกว่าข้อโต้แย้งมันจะประเมินผลรวมของข้อโต้แย้ง 2 [] เมื่อจะได้รับการขัดแย้งใดก็ประเมิน[]-1 เมื่อ[]ได้รับหนึ่งหรือมากกว่าข้อโต้แย้งมันจะประเมินข้อโต้แย้งแรกด้วยผลรวมของข้อโต้แย้งอื่น ๆ 3 {} เมื่อจะได้รับการขัดแย้งใดก็ประเมิน{}1 เมื่อ{}ได้รับหนึ่งหรือมากกว่าข้อโต้แย้งมันจะประเมินผลของข้อโต้แย้งเหล่านั้น 4 <> เมื่อจะได้รับการขัดแย้งใดก็ประเมิน<>1 เมื่อ<>ได้รับหนึ่งหรือมากกว่าข้อโต้แย้งมันจะประเมินเป็นจำนวนเต็มอาร์กิวเมนต์แรกหารด้วยผลิตภัณฑ์ของข้อโต้แย้งอื่น ๆ งานของคุณ รับสตริงที่มีตัวเลขที่ถูกต้อง (นั่นหมายถึงวงเล็บเหลี่ยมมีความสมดุลไม่มีการหารด้วย 0s ฯลฯ ) ในระบบตัวเลขอย่างง่ายนี้พิมพ์ค่าของมัน กรณีทดสอบ () -> 0 (()()) -> 0 ([][]) -> -2 ({}<>) -> 2 ({}[]) -> 0 [] -> -1 [[][]] …

3
การจับคู่รูปแบบตัวอักษร
เรามีความท้าทายเกี่ยวกับตัวอักษรมากมาย สำหรับความท้าทายนี้คุณกำลังผ่านการส่งออกNของความท้าทายที่ตัวอักษรและคุณจำเป็นต้องส่งออกรูปแบบปรับขนาดให้ขนาด ตัวอย่างเช่นถ้าN=5และคุณผ่านL-phabet : ABCDEFGHIJKLMNOPQRSTUVWXYZ BBCDEFGHIJKLMNOPQRSTUVWXYZ CCCDEFGHIJKLMNOPQRSTUVWXYZ DDDDEFGHIJKLMNOPQRSTUVWXYZ EEEEEFGHIJKLMNOPQRSTUVWXYZ FFFFFFGHIJKLMNOPQRSTUVWXYZ GGGGGGGHIJKLMNOPQRSTUVWXYZ HHHHHHHHIJKLMNOPQRSTUVWXYZ IIIIIIIIIJKLMNOPQRSTUVWXYZ JJJJJJJJJJKLMNOPQRSTUVWXYZ KKKKKKKKKKKLMNOPQRSTUVWXYZ LLLLLLLLLLLLMNOPQRSTUVWXYZ MMMMMMMMMMMMMNOPQRSTUVWXYZ NNNNNNNNNNNNNNOPQRSTUVWXYZ OOOOOOOOOOOOOOOPQRSTUVWXYZ PPPPPPPPPPPPPPPPQRSTUVWXYZ QQQQQQQQQQQQQQQQQRSTUVWXYZ RRRRRRRRRRRRRRRRRRSTUVWXYZ SSSSSSSSSSSSSSSSSSSTUVWXYZ TTTTTTTTTTTTTTTTTTTTUVWXYZ UUUUUUUUUUUUUUUUUUUUUVWXYZ VVVVVVVVVVVVVVVVVVVVVVWXYZ WWWWWWWWWWWWWWWWWWWWWWWXYZ XXXXXXXXXXXXXXXXXXXXXXXXYZ YYYYYYYYYYYYYYYYYYYYYYYYYZ ZZZZZZZZZZZZZZZZZZZZZZZZZZ คุณจะต้องส่งออก: ABCDE BBCDE CCCDE DDDDE EEEEE เพื่อจุดประสงค์ในการอธิบายฉันจะใช้อย่างเดียวABCDแทนตัวอักษรเต็ม คุณต้องสามารถจับคู่ L-phabet (ด้านบน) และรูปแบบต่อไปนี้: บรรทัดเดียว: ABCD or A B C D บรรทัดเดียวซ้ำหลายNครั้ง ABCD …

9
วงเล็บเหลี่ยมสมดุล
"วงเล็บสามเหลี่ยม" (ที่ฉันทำขึ้นสำหรับความท้าทายนี้) เป็นหนึ่งในสิ่งต่อไปนี้: (...+...) [...:...] {...|...} <...-...> สตริงวงเล็บเหลี่ยม triplet สมดุล (BTBS สำหรับช่วงสั้น ๆ ) เป็นสตริงว่างเปล่า, สอง BTBSes ที่ต่อกันหรือหนึ่งในวงเล็บสามด้านบนซึ่งแต่ละอัน...ถูกแทนที่ด้วย BTBS งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่ตรวจสอบว่าสตริงที่ประกอบด้วยเพียง(+)[:]{|}<->นั้นมีความสมดุลหรือไม่ รหัสที่สั้นที่สุดชนะ ตัวอย่าง โปรแกรมของคุณควรกลับมาเป็นจริงสำหรับสตริงต่อไปนี้: (+)(+)(+) [[[:]:]:(+(+))]{<->|<(+)->[:]}(+) <<<<<<<<<<<<->->->->->->->->->->->-> {|(+[:<-{|(+[:<->])}>])} [[[:]:[:]]:[[:]:[:]]] {[:](+)|<->{|}}[(+)<->:{|}(+)] โปรแกรมของคุณควรคืนค่าเท็จสำหรับสตริงต่อไปนี้: :[ <|> (+(+) [:][:](+[[:]):] {|{|{|(+{|{|{|}}}}}+)}[:]{|} {{||}} <<->-<->-<->> [(+):((+)+)+(+(+))] <<<<<->->->->->->

24
ตารางรหัส ASCII Golf Golf
ท้าทาย สร้างโปรแกรมที่สั้นที่สุดที่ตรงตามข้อกำหนด ความต้องการ รหัสจะต้องสร้างตาราง 5x5 ของ 0s เช่น: 00000 00000 00000 00000 00000 รหัสจะต้องยอมรับอินพุต (คอลัมน์, แถว, ตัวอักษร) ตารางจะต้องเปลี่ยนตาม: ราคาเริ่มต้น: 00000 00000 00000 00000 00000 การป้อนข้อมูล: (2,5,*) เอาท์พุท: 0*000 00000 00000 00000 00000 (หมายเหตุ: มุมซ้ายล่างคือตำแหน่ง 1,1) โปรแกรมจะต้องส่งคืนข้อความแสดงข้อผิดพลาดอื่นที่ไม่ใช่ตารางถ้าอินพุต / แถวไม่ใช่ 1,2,3,4 หรือ 5 นี่อาจเป็นข้อความที่คุณเลือก (ตราบใดที่ไม่ใช่ตาราง) ดังนั้นจึง0เป็น ข้อผิดพลาดเอาท์พุทที่ยอมรับได้ โปรแกรมต้องทำงานกับอักขระ ASCII ที่พิมพ์ได้ทั้งหมด (ของแป้นพิมพ์สหรัฐฯ) ผู้ชนะ …

30
แสดงภูเขาลูกโซ่ที่มีเลขคี่อยู่ด้านบน!
บรรทัดแรกทำด้วยceil(n/2)องค์ประกอบที่แต่ละองค์ประกอบคือ:<space><odd-number><space> บรรทัดที่สองทำด้วยceil(n/2)องค์ประกอบ แต่แต่ละองค์ประกอบมี/ \เพียง คุณอาจจะสมมติและn >= 0n <= 10 ตัวอย่าง อินพุต: 3 1 3 / \/ \ อินพุต: 10 1 3 5 7 9 / \/ \/ \/ \/ \ ตัวอย่างใน Python 3, 103 ไบต์: lambda a:print("".join([" "+str(i)+" "for i in range(1,a+1,2)]+["\n"]+["/ \\"for i in range(1,a+1,2)])) รหัสที่สั้นที่สุดเป็นไบต์ชนะ :)

22
สร้างพีระมิดตัวอักษร
วันนี้เรากำลังจะสร้างพีระมิดจากตัวอักษร! นี่คือตัวอย่างพีระมิดสำหรับอักษร 5 ตัวแรก: เขียนตัวอักษร 5 ตัวแรกโดยมีช่องว่างคั่นระหว่างจากน้อยไปมากและจากมากไปน้อย A B C D E D C B A ทำสิ่งเดียวกันสำหรับตัวอักษรสี่ตัวแรกในบรรทัดด้านบน แต่มีช่องว่างนำหน้าสองช่อง: A B C D C B A A B C D E D C B A ทำซ้ำขั้นตอนเดียวกันจนกระทั่งบรรทัดสุดท้ายเป็นเพียง 'A' A A B A A B C B A A B C D C …

13
วาด Dragon Curve
วันนี้คุณทำงาน: วาดเส้นโค้งมังกร! ในกรณีที่คุณไม่ทราบว่า Dragon Curve คืออะไรนี่เป็นวิดีโอแนะนำ ViHart (เจ๋งจริง ๆ โปรดดู!) งานของคุณ: วาดรูปโค้งมังกรซ้ำอย่างน้อย 9 ครั้ง คุณไม่จำเป็นต้องแสดงการวนซ้ำตั้งแต่ 1 ถึง 9 คุณเพียงแค่ต้องแสดงกราฟโค้งสุดท้ายที่เกิดขึ้นหลังจากการทำซ้ำ 9 ครั้ง (อย่างน้อย) เส้นโค้งต้องวาดเป็นเส้นตรงที่เชื่อมต่อจุดต่างๆบนเส้นโค้ง ผลลัพธ์ควรตรงกับหนึ่งในภาพด้านล่างที่แสดงการวนซ้ำ 9 ครั้งขึ้นไป (มากถึงการสะท้อนการหมุนการปรับสเกลและการแปรผันของความกว้างของเส้นสีของเส้นและสีพื้นหลัง) ผลลัพธ์ของคุณจะต้องมีขนาดใหญ่พอที่แต่ละบรรทัดและ "กล่อง" ที่รูปแบบสามารถแยกออกจากกันได้ หากสองบรรทัดไม่ตัดกันในส่วนโค้งพวกเขาไม่ควรใช้พิกเซลเดียวกันหรือพิกเซลที่อยู่ติดกันในเอาต์พุต (ควรมีอย่างน้อยหนึ่งพิกเซลของพื้นหลังที่มองเห็นได้ระหว่างพวกเขา) คุณสามารถแสดงภาพไปที่หน้าจอหรือบันทึกภาพเป็นไฟล์ได้ ผลลัพธ์จะต้องเป็นกราฟิก - มันไม่สามารถเป็นศิลปะ ASCII ได้ รหัสที่สั้นที่สุดในหน่วยไบต์ชนะแต่รวมถึงคำสั่งสำหรับไลบรารีไม่ควรรวมอยู่ในจำนวนไบต์และคุณสามารถใช้ไลบรารีกราฟิกหรือไลบรารีอื่น ๆ ที่เขียนขึ้นสำหรับภาษาที่คุณเลือกหากถูกเขียนก่อนการโพสต์ โปรดรวมภาพของผลลัพธ์ของโปรแกรมของคุณ ข้ามย่อหน้านี้หากคุณดูวิดีโอ:สำหรับคนที่ตัดสินใจไม่ดูวิดีโอจะมีการแสดง 12 รอบแรกของเส้นโค้งมังกรตามด้านล่าง สำหรับวัตถุประสงค์ของงานนี้เส้นโค้งมังกรเป็นเส้นโค้งที่สร้างโดยกฎต่อไปนี้: ใช้จุดสิ้นสุดของเส้นโค้งปัจจุบันสร้างเส้นโค้งที่สองหมุน 90 องศารอบจุดสิ้นสุดนั้นเพื่อให้จุดสิ้นสุดของต้นฉบับ เส้นโค้งเป็นจุดเริ่มต้นของเส้นโค้งใหม่และเข้าร่วมทั้งสองโค้งเป็นโค้งเดียวที่พวกเขาพบ …

6
ชื่อเรื่องสตริงรูปแบบภาพยนตร์
ท้าทาย เคยเห็นตัวอย่างภาพยนตร์ (เช่น Martian, Interstellar และอื่น ๆ ) ที่พวกเขามีช่องว่างขนาดใหญ่อยู่ระหว่างตัวอักษรที่กระจายออกไปอย่างช้าๆ? ความท้าทายคือการสร้างเอฟเฟกต์นี้ใหม่โดยใช้สตริงตัวคูณช่องว่างและทิศทางโดยใส่จำนวนช่องว่างที่เหมาะสมระหว่างตัวอักษร ตัวอย่าง อินพุต : 'INTERSTELLAR', ตัวคูณช่องว่าง: 1.0, ทิศทาง: การเพิ่มเข้าด้านใน Output: I N T E R S T E L L A R ระยะห่างคือ: [1, 2, 3, ... , 3, 2, 1]; แทนที่ช่องว่างด้วย '.' เพื่อแสดงระยะห่างที่ดีขึ้น: I.N..T...E....R.....S......T.....E....L...L..A.R อินพุต : 'INTERSTELLAR', ตัวคูณช่องว่าง: 0.5, ทิศทาง: …

27
8 ควรเป็นอนันต์ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ลองมาดูในลูปทั่วไปซึ่งโดยปกติจะทำซ้ำ 8: for (int x=0; x<8; ++x); คุณต้องทำให้มันไม่มีที่สิ้นสุด! เป็นการประกวดความนิยมสำหรับทุกภาษาที่สนับสนุนรูปแบบการforวนซ้ำดังกล่าว ดังนั้นการแก้ปัญหาด้วยคะแนนสูงสุด (upvotes ลบด้วย downvotes) ชนะ หากภาษาของคุณมีforวงวนรูปแบบอื่นแต่คุณแน่ใจคุณสามารถสร้างอะไรที่เจ๋ง ๆ ให้กับมันโพสต์คำตอบและทำเครื่องหมายว่าไม่ใช่การแข่งขัน ฉันขอสงวนสิทธิ์ในการขยายขอบเขตของสิ่งปลูกสร้างและภาษาที่มีอยู่ แต่จะไม่มีการย่อขนาดดังนั้นอย่ากลัวที่จะวางโซลูชันที่ถูกต้องไว้ก่อนหน้านี้ ทางออกคืออะไร? โซลูชันประกอบด้วยสองโปรแกรม โปรแกรมแรกคือการทำความสะอาดโปรแกรม เป็นโปรแกรมทั่วไปในภาษาของคุณด้วยการforวนซ้ำ 8 รอบ ควรเป็นโปรแกรมปกตินักพัฒนาสามารถเขียนได้ ไม่มีแฮ็กพิเศษเพื่อการเตรียมการ ตัวอย่างเช่น: int main() { for (int x=0; x<8; ++x); return 0; } โปรแกรมที่สองถูกเพิ่ม โปรแกรมนี้ควรมีรหัสทั้งหมดจากโปรแกรมที่สะอาดและบางรหัสเพิ่มเติม มีจุดขยายจำนวน จำกัดดูรายละเอียดในส่วนกฎที่สมบูรณ์ …

30
พิมพ์รูทดิจิทัล
สิ่งนี้แตกต่างจากMy Word ที่สามารถเอาชนะ Word ของคุณได้เนื่องจากมีความซับซ้อนน้อยกว่าและต้องการให้คุณคำนวณเท่านั้นและไม่เปรียบเทียบมัน ในการค้นหารูทดิจิทัลใช้ตัวเลขทั้งหมดของตัวเลขเพิ่มและทำซ้ำจนกว่าคุณจะได้รับตัวเลขหนึ่งหลัก ตัวอย่างเช่นถ้าตัวเลขเป็น12345คุณจะต้องเพิ่ม1, 2, 3, 4และได้รับ5 15จากนั้นคุณจะเพิ่ม1และให้คุณ56 งานของคุณ ได้รับจำนวนเต็มN (0 <= N <= 10000) ผ่านSTDINพิมพ์รากดิจิตอลN กรณีทดสอบ 1 -> 1 45 -> 9 341 -> 8 6801 -> 6 59613 -> 6 495106 -> 7 จำไว้ว่านี่คือcode-golfดังนั้นโค้ดที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ

16
(ของ KevinC) ลำดับ DeciDigits รูปสามเหลี่ยม
การป้อนข้อมูล: เป็นจำนวนเต็มบวกn1 <= n <= 25000ซึ่งเป็น เอาท์พุท: ในขั้นตอนนี้เราเริ่มต้นด้วยเลขทศนิยม 1 / n จากนั้นเราก็นำผลรวมของตัวเลขจนถึงหลักที่nหลังเครื่องหมายจุลภาค (ดัชนี 1 รายการ); ตามด้วยผลรวมของตัวเลขจนถึง ( n -1) 'th จากนั้น ( n -2)' th เป็นต้นดำเนินการต่อจนถึงnคือ 1 ผลลัพธ์คือผลรวมของสิ่งเหล่านี้รวมกัน ตัวอย่างเช่น: n = 7 1/7 = 0.1428571428... 7th digit-sum = 1+4+2+8+5+7+1 = 28 6th digit-sum = 1+4+2+8+5+7 = 27 5th digit-sum = …

9
วาดกล่อง ASCII บางกล่อง
รับจำนวนเต็มสองรายการที่ไม่เป็นลบและส่งออกกล่อง ASCII ตามที่กำหนดไว้ด้านล่าง มุมและทางแยกเป็น pluses: +(ASCII-code 43) เส้นแนวตั้งคือแท่ง|(ASCII-code 124) เส้นแนวนอนเป็น minuses -(รหัส ASCII 45) รายการอินพุตแรกระบุจำนวน minuses ระหว่างแต่ละเครื่องหมายบวกในทิศทางแนวนอน รายการอินพุตที่สองระบุจำนวนของแท่งระหว่างแต่ละเครื่องหมายบวกในทิศทางแนวตั้ง ง่ายต่อการอธิบายด้วยตัวอย่างบางส่วน: 0 // No minuses between each + sign 0 // No bars between + signs ++ ++ ------------------ 1 2 // First a single minus, then two minuses 1 2 // …

30
จำนวนเต็มที่มีตัวเลขในช่วงที่เฉพาะเจาะจง
โปรแกรมที่ควรจะใส่หมายเลขที่เริ่มต้นของช่วงและจุดสิ้นสุดของช่วงและเอาท์พุทว่าหลายจำนวนเต็มจำนวนปรากฏขึ้นระหว่างการเริ่มต้นและจุดสิ้นสุดของช่วงรวม อนุญาตทั้งโปรแกรมและฟังก์ชั่น อินพุตตัวอย่าง ตัวอย่างเช่น: //Input example 1 3,1,100 //Input example 2 3 1 100 //Input example 3 3 1 100 //Input example 4 a(3, 1, 100); ตัวอย่างอินพุตทั้งสี่ข้างต้นถูกต้องและทั้งหมดหมายความว่า3เป็นตัวเลขในคำถาม1คือจุดเริ่มต้นของช่วงและ100จุดสิ้นสุดของช่วง และจากนั้นโปรแกรมจะส่งออกกี่ครั้งที่3ปรากฏในช่วงจาก1การรวม100 3ปรากฏในจำนวนเต็ม3, 13, 23, 30, 31, 32, 33, ... , 93รวมจำนวนทั้งสิ้น 19 ครั้ง ดังนั้นโปรแกรมควรเอาท์พุท19เอาท์พุทเพราะนั่นเป็นวิธีที่หลายต่อหลายครั้ง3ที่ปรากฏในช่วงจากไป1100 กฎระเบียบ อนุญาตทั้งโปรแกรมและฟังก์ชั่น ตัวเลขทั้งหมดจะเป็นจำนวนเต็มซึ่งหมายความว่าจะมีไม่ใด ๆfloatหรือdoubles หมายเหตุ: จำนวนที่ต้องการจะอยู่ในช่วง0≤x≤127เสมอ จะไม่มีกรณีที่จะอยู่นอก0≤x≤127ช่วงนี้ ในขณะที่ตัวอย่างแรกกับกรณีที่เป็น33จำนวน3จะถูกนับเป็นปรากฏเพียงครั้งเดียว , …

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