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

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

9
สร้างเกม 'Snake' ขึ้นใหม่ในคอนโซล / เทอร์มินัล
เกมสนุก codegolf นี้ที่นี่สนุกมากฉันต้องสร้างเวอร์ชันสำหรับเกมคลาสสิคอื่น ๆ ที่มีความซับซ้อนเหมือนกัน วิธีที่สั้นที่สุดในการสร้างเกม Space Invaders ขั้นพื้นฐานใน Python อย่างไรก็ตามในครั้งนี้พยายามที่จะสร้างเกม 'งู' คลาสสิกขึ้นมาใหม่ซึ่งคุณเริ่มต้นด้วยรูปร่างที่เล็กและเคลื่อนไหวอย่างต่อเนื่องเพื่อเก็บสะสมชิ้นส่วนเพื่อเพิ่มคะแนนของคุณ เมื่อคุณรวบรวมชิ้นส่วน 'หาง' ของคุณจะเติบโตซึ่งตามเส้นทางที่คุณทำ วัตถุประสงค์คือการอยู่ได้นานที่สุดโดยไม่ชนเข้ากับหางของคุณหรือเข้าไปในกำแพง คุณสมบัติผู้สมัคร: คุณตัวละครที่ประกอบขึ้นเป็นหางผนังและชิ้นส่วนที่คุณรวบรวมทั้งหมดควรเป็นตัวละครที่แตกต่างกัน แสดง HUD ด้วยคะแนน คะแนนเพิ่มขึ้น 1 คะแนนสำหรับแต่ละชิ้นที่คุณสะสม ผู้เล่นเสียเมื่อชนกับหางหรือกำแพง วางไข่ชิ้นหนึ่งในพื้นที่สุ่มทันทีหลังจากรวบรวมชิ้นส่วนไม่ต้องพูดถึงตอนเริ่มเกม ความเร็วของเกมไม่สำคัญตราบใดที่มันสอดคล้องกัน 'เซลล์' ควรเป็นอักขระ 2x1 เนื่องจากความสูงของอักขระบล็อกคือ ~ สองเท่าของความกว้างสามารถเป็น 1x1 ได้เนื่องจาก 2x1 นั้นน่าเกลียดและฉันไม่คิดอย่างนั้น ปุ่มสำหรับเปลี่ยนทิศทางควรเป็นawsd, ซ้าย, ขึ้น, ลง, ขวาตามลำดับ ทิศทางเริ่มต้นควรขึ้น คุณต้องแสดงขอบของกำแพง คะแนนอาจทับผนัง รหัสสั้นที่สุดที่ตรงกับเกณฑ์ด้านบนชนะ คะแนนโบนัสจินตนาการสำหรับความคิดสร้างสรรค์
25 code-golf  game 

30
เขียนชิ้นส่วนของรหัสเพื่อส่งออกหมายเลขบรรทัดของคำสั่งพิมพ์ / ส่งออกเอง (ในรูปแบบ“ Hello World, จากบรรทัด X!”)
ความท้าทาย เขียนโปรแกรมที่แสดงผลHello World, from line X!ซึ่งXเป็นหมายเลขบรรทัดในซอร์สโค้ดของคำสั่งพิมพ์จริง กฎระเบียบ ในบริบทนี้เราต้องการแรกหมายเลขบรรทัดของคำสั่งที่ออกผลลัพธ์สตริงที่จะแสดงให้stdout คุณควรหลีกเลี่ยงการค้นหาจากซอร์สโค้ดของคุณเป็นสตริง (ทั้งไฟล์หรือควินิน) เพื่อค้นหาหมายเลขบรรทัด หากมีการเพิ่มช่องว่างหรือคำสั่งเพิ่มเติมใด ๆ(ซึ่งไม่ได้ขัดขวางการไหลของรหัส) จะถูกเพิ่มลงในซอร์สโค้ดมันควรจะสะท้อนให้เห็นในเวลาทำงาน (หลังจากรวบรวมถ้ามี) ข้อเสนอแนะ หากให้บริการโดยภาษาคุณอาจใช้การยกเว้น / ติดตามสแต็คเพื่อให้บรรลุเป้าหมายนี้ ลองใช้รหัสที่พกพาได้ดีที่สุดในระบบ / การใช้งานที่แตกต่างกัน แต่โปรดทราบว่านี่ไม่ใช่ข้อกำหนด การใช้ตัวแปรที่กำหนดเช่น__LINE__ถึงแม้จะได้รับอนุญาตจากกฎแล้วก็ตาม ผู้ชนะ นี่คือการประกวดความนิยม (สิ้นสุดวันที่ 10 มิถุนายน 2014) ซึ่งคำตอบที่ได้รับคะแนนสูงสุดจากชุมชนจะได้รับการประกาศว่าเป็นผู้ชนะโดยพิจารณาจากคะแนนปัจจุบันในขณะนั้น เมื่อลงคะแนนโปรดพิจารณาความคิดสร้างสรรค์ของคำตอบของใครบางคนละเอียดหรือน่าสนใจแค่ไหน และความยากลำบาก / ข้อ จำกัด ของภาษาการเขียนโปรแกรมที่ใช้

13
ROT คืออะไร - ถอดรหัส ROT-n
นี่คือตัวอักษรของตัวอักษรภาษาอังกฤษตามลำดับความถี่: e t a o i n s h r d l c u m w f g y p b v k j x q z นั่นคือeเป็นจดหมายที่ใช้บ่อยที่สุดและzเป็นจดหมายที่พบน้อยที่สุด (ข้อมูลจากWikipedia ) ความท้าทายของคุณคือการใช้ข้อความ ROT-n'd เช่น: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz นี่คือข้อความ "นี่คือทุกสิ่งที่ส่งมาถึงความพึงพอใจของคุณปลอดภัย" ซึ่ง "เข้ารหัส" ผ่าน ROT-21 (ครึ่งหนึ่งของ 42) โปรแกรมของคุณที่ใช้ตารางความถี่ด้านบนควรสามารถกำหนดได้ว่าอักขระแต่ละตัวถูกหมุนและข้อความต้นฉบับเท่าใด (หากคุณไม่คุ้นเคยกับ ROT-n มันจะเปลี่ยนอักขระแต่ละตัวเป็นหลักnเช่นใน ROT-2,. a -> c, …

30
เขียนผลกระทบโดมิโน
ใช้อักขระ Unicode ที่น้อยที่สุดเขียนฟังก์ชันที่ยอมรับพารามิเตอร์สามตัว: จำนวนโดมิโนทั้งหมด nโดมิโนที่ได้รับผลกระทบ th โค่นทิศทางของโดมิโนที่ได้รับผลกระทบ ( 0หรือLทางซ้าย1หรือRทางขวา) เมื่อโดมิโนถูกโค่นล้มมันจะต้องโค่นล้มโดมิโนที่เหลือในทิศทางเดียวกัน คุณควรส่งออกโดมิโนโดย|แสดงโดมิโนที่ยืนอยู่และ\และ/แสดงโดมิโนที่โค่นล้มไปทางซ้ายและขวาตามลำดับ ตัวอย่าง 10, 5, 1ควรกลับ||||////// 6, 3, 0ควรกลับ\\\|||

18
พิมพ์ 1 ถึง 1,000 ใน C ++ โดยไม่มีเซมิโคลอน
ทำตามคำถามยอดนิยมนี้นำเสนอวิธีแก้ปัญหาของคุณซึ่งพิมพ์ตัวเลข 1 ถึง 1,000 (ทั้งหมดนี้ไม่ใช่สตริงคำต่อคำ "1 ถึง 1,000" หรือสิ่งที่ตลก) ใน C ++ โดยไม่ต้องใช้เซมิโคลอนใด ๆ ต่างจากคำถามเดิมคุณอาจใช้เงื่อนไขและลูป โซลูชันที่ไม่ต้องการแฟล็กคอมไพเลอร์เป็นที่ต้องการ โปรดพูดถึงสิ่งที่คุณใช้หากคุณทำสิ่งนี้ อนุญาตการทำงานที่ไม่ได้กำหนดอนุญาตดังนั้นโปรดระบุคอมไพเลอร์และเวอร์ชันที่คุณใช้ การตั้งค่าจะได้รับการแก้ปัญหาที่ฉลาด นี่ไม่ใช่การประกวดรหัสที่สั้นที่สุด (ฉันมีวิธีแก้ปัญหาซึ่งฉันจะโพสต์ใน 24 ชั่วโมงหากไม่มีวิธีแก้ไขปัญหาคล้ายกันก่อนหน้านี้)

30
การแปลงสตริงเป็นตัวพิมพ์เล็ก (โดยไม่ต้องมีฟังก์ชั่นบิวท์อินถึงตัวต่ำกว่า!)
เป้าหมายของ code-golf นี้คือการสร้างรหัสที่อนุญาตให้ผู้ใช้ป้อนสตริง ASCII (มีอักขระ ASCII ที่พิมพ์ได้เท่านั้น) และโปรแกรมของคุณจะแสดงตัวแปรตัวพิมพ์เล็กของสตริงนี้ สำคัญ: คุณไม่ได้รับอนุญาตให้ใช้ฟังก์ชันในตัวที่แปลงสตริง (หรืออักขระเพียงตัวเดียว) เป็นตัวพิมพ์เล็ก (เช่นToLower()ใน. NET, strtolower()ใน PHP, ... )! อย่างไรก็ตามคุณได้รับอนุญาตให้ใช้ฟังก์ชั่นในตัวอื่น ๆ ทั้งหมด หมายเหตุสำคัญอื่น:สตริงอินพุตไม่มีอักขระตัวพิมพ์ใหญ่เท่านั้น สายป้อนเป็นส่วนผสมของอักขระตัวพิมพ์ใหญ่ตัวอักษรตัวพิมพ์เล็กตัวเลขและอื่น ๆASCII พิมพ์ตัวอักษร โชคดี!

30
วาดผลลัพธ์ลูกเต๋าใน ASCII
แสดงผลการสุ่มของทอยลูกเต๋าหากทำด้วยด็อกรูปทรงลูกบาศก์ใน ASCII $ dice ควรส่งผลให้หนึ่งใน ----- | | | o | | | ----- ----- |o | | | | o| ----- ----- |o | | o | | o| ----- ----- |o o| | | |o o| ----- ----- |o o| | o | |o o| ----- ----- |o …

30
เรียงลำดับรายการหมายเลข [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา เกี่ยวกับ Code-Bowling: ในสนามกอล์ฟคุณพยายามได้คะแนนต่ำสุด (แอพพลิเคชั่นที่เล็กที่สุดสง่างามที่สุด ฯลฯ ) ใน Bowling คุณพยายามทำคะแนนสูงสุด ดังนั้นหากคุณทำตามเป้าหมายของการท้าทายการใช้รหัสคือการทำให้รหัสที่ใหญ่ที่สุดถูกทิ้งร้างมากที่สุดและยากที่สุดในการรักษารหัสที่ยังคงเป็นไปตามข้อกำหนดของความท้าทาย อย่างไรก็ตามไม่มีจุดใดที่จะทำให้แหล่งข้อมูลนั้นนานขึ้นเพื่อประโยชน์ของมัน มันต้องดูเหมือนความยาวที่เพิ่มขึ้นนั้นมาจากการออกแบบไม่ใช่แค่การขยาย ความท้าทาย: สร้างโปรแกรมที่เรียงลำดับรายการตัวเลขตามลำดับจากน้อยไปหามาก ตัวอย่าง: อินพุต: 1, 4, 7, 2, 5 เอาต์พุต: 1, 2, 4, 5, 7 รหัส:เห็นได้ชัดว่านี่จะไม่ใช่คำตอบที่ดีเนื่องจากมี WTF ไม่มากนัก function doSort(array $input) { sort($input); return $input; } กฎ: ไม่มีกฎจริง ตราบใดที่ฟังก์ชั่นของโปรแกรมมีอยู่! ข้อควรจำ:นี่เป็นโบว์ลิ่งรหัสไม่ใช่กอล์ฟ เป้าหมายคือการทำให้โค้ดที่แย่ที่สุดและเลวร้ายที่สุดที่คุณสามารถทำได้! …

21
เป็นฉากที่มีความหลากหลายของจิมมี่
ในขณะที่คุณอาจจะรู้ว่ามีได้หลาย ที่น่ารัก จิมมี่ ความท้าทาย เมื่อเร็ว ๆ นี้โผล่ขึ้นมา ในความท้าทายเหล่านี้คุณถูกท้าทายด้วยทักษะการแสดงกายกรรมของเพื่อนอันเป็นที่รักของเรา ตอนนี้เรามีความท้าทายที่แตกต่างสำหรับคุณ วันนี้คุณจะระบุประเภทต่างๆของ Jimmys! คำอธิบาย Jimmys มีสามประเภท: คนแคระกายกรรมและนักเพาะกาย This is dwarf Jimmy: o This is acrobat Jimmy: /o\ This is bodybuilder Jimmy: /-o-\ Jimmys เหล่านี้เป็นเพื่อนที่ดีและพวกเขาชอบที่จะยืนอยู่บนบรรทัดเดียวกันกับคนอื่น ๆ งานของคุณคือให้ฉากจิมมี่เป็นเช่น: o /o\ o /-o-\/-o-\ o /o\ เอาท์พุทจำนวนของคนแคระกายกรรมและนักเพาะกายในบรรทัดตามลำดับ ความท้าทาย รับอินพุตในรูปแบบที่สมเหตุสมผลเช่นฉาก Jimmy ดังแสดงในตัวอย่างด้านบน สตริงอินพุตควรเป็นหนึ่งบรรทัดและมีทางเลือกสามอย่างของ Jimmys และช่องว่างทางเลือก สตริงไม่จำเป็นต้องมีหลากหลายของ Jimmy …

27
เดือนละกี่วัน
รับการแสดงข้อความ (ชื่อเต็มตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่หรือตัวย่อ 3 ตัว) ของเดือนส่งคืนจำนวนวันในเดือน ตัวอย่างเช่นdecember, DECและdecทุกคนควรจะกลับมาวันที่ 31 กุมภาพันธ์สามารถมีได้ทั้ง 28 หรือ 29 วัน สมมติว่าอินพุตเป็นเดือนในหนึ่งในรูปแบบที่ถูกต้อง

24
Combinatorics: คำนวณค่า Subfactorial
ตัวเลขsubfactorialหรือrencontres ( A000166 ) เป็นลำดับของตัวเลขที่คล้ายกับตัวเลข factorial ซึ่งแสดงใน combinatorics ของพีชคณิต โดยเฉพาะอย่างยิ่งที่subfactorial ลำดับที่n ! nให้จำนวนderangementsของชุดองค์ประกอบn Derangement เป็นการเปลี่ยนแปลงที่ไม่มีองค์ประกอบใดอยู่ในตำแหน่งเดียวกัน สามารถกำหนด subfactorial ผ่านความสัมพันธ์การเกิดซ้ำดังต่อไปนี้: !n = (n-1) (!(n-1) + !(n-2)) ในความเป็นจริงความสัมพันธ์ที่เกิดซ้ำกันนั้นมีไว้สำหรับปัจจัย แต่สำหรับ subfactorial เราเริ่มต้นจาก: !0 = 1 !1 = 0 (สำหรับแฟคทอเรียลที่เรามีแน่นอน1! = 1 ) งานของคุณคือการคำนวณ! nให้n กฎระเบียบ เช่นเดียวกับแฟคทอเรียล subfactorial นั้นเติบโตอย่างรวดเร็ว มันเป็นเรื่องปกติถ้าโปรแกรมของคุณสามารถจัดการปัจจัยการผลิตnเช่นนั้น! nสามารถแสดงโดยแบ่งตามชนิดจำนวนพื้นเมืองภาษาของคุณ อย่างไรก็ตามอัลกอริทึมของคุณจะต้องทำงานในทฤษฎีสำหรับnเอง นั่นหมายความว่าคุณอาจสันนิษฐานได้ว่าผลลัพธ์ที่สมบูรณ์และค่ากลางสามารถแสดงด้วยภาษาของคุณได้อย่างแม่นยำ โปรดทราบว่าสิ่งนี้จะไม่รวมค่าคงที่eหากเก็บหรือคำนวณด้วยความแม่นยำแน่นอน ผลลัพธ์ต้องเป็นจำนวนเต็มที่แน่นอน …

30
ซึ่งกันและกันของจำนวน (1 / x)
ท้าทาย รับตัวเลข (ทศนิยม - ทศนิยม /) กลับตอบแทนซึ่งกันและกันเช่น 1 หารด้วยจำนวน ผลลัพธ์จะต้องเป็นตัวเลขทศนิยม / ทศนิยมไม่ใช่แค่จำนวนเต็ม ข้อกำหนดรายละเอียด คุณจะต้องได้รับการป้อนข้อมูลในรูปแบบของตัวเลขทศนิยม / ทศนิยม ... ... ซึ่งมีความแม่นยำอย่างน้อย 4 หลักที่สำคัญ (ถ้าจำเป็น) เพิ่มเติมดีกว่า แต่ไม่นับคะแนน คุณต้องแสดงผลด้วยวิธีการแสดงผลที่ยอมรับได้ ... ... ส่วนกลับของจำนวน สิ่งนี้สามารถกำหนดเป็น 1 / x, x⁻¹ คุณต้องส่งออกด้วยความแม่นยำอย่างน้อย 4 หลักที่สำคัญ (ถ้าจำเป็น) อินพุตจะเป็นค่าบวกหรือลบโดยมีค่าสัมบูรณ์ในช่วง [0.0001, 9999] คุณจะไม่ได้รับมากกว่า 4 หลักผ่านจุดทศนิยมหรือมากกว่า 4 เริ่มต้นจากตัวเลขที่ไม่ใช่ศูนย์แรก เอาต์พุตจะต้องมีความถูกต้องถึงหลักที่ 4 จากตัวเลขที่ไม่ใช่ศูนย์แรก (ขอบคุณ @MartinEnder) …

1
นักกอล์ฟแบทช์อัตโนมัติ
ฉันรัก BATCH แม้จะไม่มีคำสั่งที่ใช้งานได้อย่างน่าตกใจแม้ว่าจะเป็นเพราะขาดการสนับสนุนที่ไม่ใช่จำนวนเต็มก็ตาม ทำไม? เพราะสิ่งนี้ได้ผล: SET var=SET %var% i=0 สิ่งนี้จะประเมินว่า: SET var=SET SET i=0 เยี่ยมเลยใช่มั้ย ฉันเคยใช้เทคนิคนี้ในโปรแกรม BATCHมาก่อนเพราะมันช่วยประหยัดไบต์! ความท้าทายของคุณคุณควรยอมรับมันคือโปรแกรม "กอล์ฟ" BATCH ด้วยวิธีนี้ คุณจะต้องลดขนาดไบต์ของโปรแกรม BATCH อินพุตโดยการรวมSETคำสั่งที่จะประเมินเป็นส่วนของโปรแกรมและไม่มีทางแก้ไขโปรแกรม (สิ่งนี้ไม่อนุญาตให้พูดการเปลี่ยนชื่อตัวแปรเป็นชื่อที่สั้นกว่าโปรดจำไว้ว่า BATCH นอกเหนือจากตัวแปรนั้นไม่คำนึงถึงขนาดตัวพิมพ์) คะแนนของคุณจะถูกคำนวณดังนี้: score = # of characters in your program + 5*(net result bytes in test cases below) ฉันขอสงวนสิทธิ์ในการเพิ่มกรณีทดสอบเพิ่มเติมเพื่อขัดขวางการทำงานเพื่อเพิ่มประสิทธิภาพโปรแกรมสำหรับกรณีทดสอบ เพื่อประโยชน์ของความท้าทายนี้, คุณSETงบไม่สามารถมีตัวควบคุม ( |, <, …
25 string  metagolf 

3
สร้างโปรแกรมด้วย GOTO ง่ายๆ
งานของคุณคือการสร้างโปรแกรมที่ใหญ่ที่สุดที่คุณสามารถใช้ GOTO หนึ่งตัวโดยไม่ต้องใช้โปรแกรมทั้งหมด (หรืออย่างน้อยก็ชิ้นใหญ่) คะแนนจะถูกนับเป็นจำนวนของข้อความในรหัสของคุณที่เปลี่ยนสถานที่หรือมีการนำมาใช้ใหม่ (การลบข้อความไม่ได้เพิ่มคะแนนของคุณ) เมื่อรหัสนั้นได้รับการปรับโครงสร้างใหม่โดยไม่ต้องมี GOTO (คนอื่น ๆ สง่างามหนึ่ง) เช่นนี้เป็นโบว์ลิ่งรหัสคะแนนสูงสุดชนะ หมายเหตุ: ฉันไม่ได้เรียกร้องความรับผิดใด ๆ สำหรับการโจมตีศาสนโดยพยายามท้าทายนี้

7
ล่ามแปลภาษาด้วยตนเอง
จากความคิดเห็นของ George Edison สำหรับคำถามนี้ให้เขียนล่ามแปลภาษาที่เล็กที่สุดด้วยตนเอง คุณอาจใช้ภาษาที่คุณเลือก ภาษาที่ว่างเปล่าจะไม่ถูกนับ โปรแกรมของคุณต้องมีอักขระอย่างน้อยสองตัว โปรแกรมไม่จำเป็นต้องแปลทั้งภาษาเพียงคุณสมบัติย่อยของทัวริงที่สมบูรณ์ (ซึ่งมีตัวแปลภาษา) Quines จะไม่นับ อย่าใช้evalฟังก์ชั่นในตัวหรือเทียบเท่า กันไปเพื่อapplyฯลฯ

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