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

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

1
สร้างเอ็นจิ้นสำหรับเกมเขาวงกต
นี่คือการติดตามพิมพ์คำถามเขาวงกต หากคุณชอบคำถามนี้โปรดเพิ่มอัลกอริธึมการสร้างเขาวงกตให้มากขึ้น;) สำหรับภารกิจนี้คุณจะต้องสร้างเอ็นจิ้นเกมสำหรับผู้เล่นที่ต้องค้นหาขุมทรัพย์ในเขาวงกตและออกจากคุกใต้ดิน เอ็นจิ้นเริ่มต้นด้วยการอ่านเขาวงกตจากอินพุตมาตรฐานตามด้วยบรรทัดที่มีไฟล์.(dot)ที่กำหนดเป็นอาร์กิวเมนต์ในบรรทัดคำสั่ง ถัดไปผู้เล่น@จะอยู่ในตำแหน่งสุ่มบนแผนที่ จากนั้นเอ็นจิ้นจะเริ่มโต้ตอบกับผู้เล่นผ่านทาง io มาตรฐาน: คำสั่งจากเครื่องยนต์ไปยังผู้เล่น : continue: เกมยังไม่จบ .สภาพแวดล้อมที่จะพิมพ์ตามมาด้วย ผู้เล่นจะถูกแทนด้วย@ตัวละคร ?เซลล์สำรวจโดยมีตัวแทน finished: เกมเสร็จแล้ว จำนวนขั้นตอนจะถูกพิมพ์และเกมหยุด คำสั่งจากผู้เล่นไปยังเครื่องยนต์ : north: เลื่อนผู้เล่นขึ้น south: เลื่อนผู้เล่นลง west: เลื่อนผู้เล่นไปทางซ้าย east: เลื่อนผู้เล่นไปทางขวา คำสั่งที่ไม่ถูกต้องใด ๆ (เช่นการชนกำแพง) จากผู้เล่นจะถูกละเว้น แต่ก็ยังนับ คุณมีอิสระที่จะกำหนดสภาพแวดล้อมตามที่คุณต้องการ คะแนนสำหรับรหัสที่สั้นที่สุด คะแนนสำหรับสภาพแวดล้อมที่ซับซ้อน (เช่นพิมพ์พื้นที่ขนาดใหญ่และแทนที่เซลล์ที่มองไม่เห็น?) ไม่มีคะแนนสำหรับรหัสที่ไม่เป็นไปตามรูปแบบของ io ตัวอย่าง : ในตัวอย่างนี้สภาพแวดล้อมถูกกำหนดให้เป็นเซลล์ 3x3 โดยมีผู้เล่นอยู่ตรงกลาง $ cat maze +-+-+ |#| | …
9 code-golf  maze 

4
ปัญหาของ N-Queens [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Code Golf Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ในหมากรุกราชินีสามารถเคลื่อนที่ได้ไกลที่สุดเท่าที่กระดานจะขยายออกไปในแนวนอนแนวตั้งหรือแนวทแยงมุม ให้กระดานหมากรุกขนาด NxN พิมพ์จำนวนตำแหน่งที่เป็นไปได้ที่ N ควีนสามารถวางบนกระดานและไม่สามารถโจมตีซึ่งกันและกันได้ใน 1 ครั้ง

15
ผลผลิตเฉพาะช่วงเวลาใกล้เคียง
เขียนโปรแกรมที่รับอินพุต (ซึ่งอาจจะใช่หรือไม่ใช่ไพร์ม) และทำรายการไพรม์ทันทีที่ตามมาและนำหน้ามัน อินพุตตัวอย่าง: 1259 ตัวอย่างผลลัพธ์: 1249 1277 โปรแกรมที่สั้นที่สุดชนะ ต้องดำเนินการภายใน 10 วินาทีบนเดสก์ท็อปพีซีที่ทันสมัย อินพุตจะ จำกัด สูงสุด 10,000

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

9
แบ่งคำออกเป็นส่วน ๆ ด้วยคะแนนเท่ากัน
สมมติว่า A = 1, B = 2 ... Z = 26 และค่าของคำคือผลรวมของค่าตัวอักษรเหล่านี้มันเป็นไปได้ที่จะแบ่งคำบางคำออกเป็นสองชิ้นโดยที่พวกเขามีค่าเท่ากัน ตัวอย่างเช่น "wordsplit" สามารถแบ่งออกเป็นสองส่วนดังนี้: ordsl wpit เนื่องจาก o + r + d + s + l = w + p + i + t นี่เป็นความท้าทายที่ครูคอมพิวเตอร์ของเรามอบให้ - มันเป็นความท้าทายของ Lionhead Studios ที่เห็นได้ชัด ฉันได้แก้ไขมันใน Python และจะโพสต์คำตอบของฉันในไม่ช้า ถาม:โปรแกรมที่สั้นที่สุดซึ่งสามารถแยกรายการที่เป็นไปได้ทั้งหมดซึ่งมีคะแนนเท่ากัน โปรดทราบว่าจะต้องมีรายการหนึ่งรายการสำหรับแต่ละกลุ่มของตัวอักษร - ordsl wpit นั้นเหมือนกับ …
9 code-golf  word 

14
ตัวเลขผลรวมผลิตภัณฑ์
เมื่อให้จำนวนเต็มที่ไม่เป็นลบ 20 × 20 ตารางให้หาตารางย่อยแบบ 3 × 3 ซึ่งผลคูณของผลรวมของแต่ละบรรทัดมีค่ามากที่สุด พูดในสูตร: รับตารางย่อย 3 × 3 ฟังก์ชั่นเพื่อเพิ่มเป็น การคำนวณผลรวมต่อบรรทัดและผลรวมแต่ละรายการจะถูกคูณ ตัวอย่าง (เพียง 5 × 5): ส่วนที่เน้นด้วยสีแดงคือส่วนที่ค่าของฟังก์ชั่น ใหญ่ที่สุดสำหรับกริดทั้งหมด: (35 + 272 + 167) ⋅ (163 + 270 + 242) ⋅ (216 + 68 + 266) = 175972500 อินพุต อินพุตได้รับจากอินพุตมาตรฐานและประกอบด้วย 20 บรรทัดแต่ละบรรทัดมี 20 หมายเลขคั่นด้วยอักขระเว้นวรรค (U + …

10
หมายเลขคำไขว้
สร้างโปรแกรมเพื่อกำหนดจำนวนตารางไขว้อย่างถูกต้อง อินพุต อินพุตจะเป็นชื่อของไฟล์ที่แสดงถึงกริดไขว้ ชื่อไฟล์อินพุตอาจถูกส่งผ่านเป็นอาร์กิวเมนต์ในอินพุตมาตรฐานหรือโดยวิธีการทั่วไปอื่นที่ไม่ใช่ฮาร์ดโค้ด รูปแบบไฟล์กริด:ไฟล์ข้อความ บรรทัดแรกประกอบด้วยสองพื้นที่สีขาวแยกจำนวนเต็มคงที่และM Nตามแนวที่มีM แต่ละบรรทัดประกอบด้วยNตัวอักษร (บวกบรรทัดใหม่) [#A-Z ]เลือกจาก ตัวละครเหล่านี้ถูกตีความว่า'#' เป็นสี่เหลี่ยมจัตุรัสที่ถูกบล็อกซึ่ง' 'เป็นสี่เหลี่ยมจัตุรัสเปิดในปริศนาที่ไม่มีเนื้อหาที่รู้จักและตัวอักษรใด ๆ ที่เป็นสี่เหลี่ยมเปิดซึ่งมีตัวอักษรนั้นอยู่ เอาท์พุต เอาต์พุตจะเป็นไฟล์ตัวเลขและอาจถูกส่งไปยังเอาต์พุตมาตรฐานไปยังไฟล์ที่มีชื่อที่ได้มาจากชื่อไฟล์อินพุตไปยังไฟล์ที่ผู้ใช้ระบุหรือไปยังปลายทางทั่วไปอื่น ๆ รูปแบบไฟล์หมายเลขไฟล์ข้อความ บรรทัดที่ขึ้นต้นด้วย '#' จะถูกละเว้นและอาจถูกใช้เพื่อแสดงความคิดเห็น สายอื่น ๆ ทั้งหมดมีแท็บแยกแฝดi, m, nที่iหมายถึงจำนวนที่จะพิมพ์บนตารางและmและnเป็นตัวแทนของแถวและคอลัมน์ของตารางที่มันควรจะพิมพ์ จำนวนทั้งแถวและคอลัมน์เริ่มต้นที่ 1 โครงร่างลำดับเลข กริดตัวเลขที่ถูกต้องมีคุณสมบัติดังต่อไปนี้: การกำหนดหมายเลขเริ่มต้นที่ 1 ไม่มีคอลัมน์หรือช่วงของช่องสี่เหลี่ยมที่เปิดอยู่โดยไม่มีการเรียงลำดับ (คุณอาจคิดว่าไม่มีคำตอบของตัวอักษรเดียวในปัญหา) หมายเลขจะถูกพบในลำดับการนับโดยการสแกนจากแถวบนสุดไปที่ด้านล่างโดยแต่ละแถวจากซ้ายไปขวา (ดังนั้นทุกช่วงแนวนอนจะถูกนับไว้ที่สแควร์ด้านซ้ายสุดและทุกคอลัมน์จะมีหมายเลขที่สแควร์ด้านบนสุด) ทดสอบอินพุตและเอาต์พุตที่คาดหวัง การป้อนข้อมูล: 5 5 # ## # # # ## # เอาท์พุท …

3
เชื่อมต่อบางส่วนที่สังเกตได้ 4
เกม คุณจะได้รับการเล่น (เกือบ) เกมมาตรฐานของการเชื่อมต่อ-4 น่าเสียดายที่มันเป็นเกมการติดต่อทางจดหมายและมีคนวางเทปสีดำลงในแถวที่สองทุก ๆ แถวโดยเริ่มจากด้านล่างเพื่อที่คุณจะได้ไม่เห็นการเคลื่อนไหวของคู่ต่อสู้ในแถวเหล่านี้ การเคลื่อนไหวใด ๆ ภายในคอลัมน์ที่เต็มไปแล้วจะนับว่าผ่านการเทิร์นของคุณและหากเกมใดที่ใช้งานเกินกว่า6 * 7เทิร์นมันจะถูกตัดสินว่าเป็นการเสมอ สเปคท้าทาย โปรแกรมของคุณควรใช้งานในรูปแบบ Python 3 อาร์กิวเมนต์แรกคือ 'มุมมอง' ของกระดานซึ่งแสดงถึงสถานะกระดานที่รู้จักในชื่อ 2D แถวจากล่างขึ้นบนซึ่ง1เป็นการย้ายโดยผู้เล่นคนแรก2การย้ายโดยผู้เล่นคนที่สองและ0ตำแหน่งว่างหรือซ่อน ย้ายโดยฝ่ายตรงข้ามของคุณ อาร์กิวเมนต์ที่สองคือหมายเลขเทิร์นอินที่จัดทำดัชนีจาก0และพาริตีของมันจะบอกคุณว่าคุณเป็นผู้เล่นรายใด อาร์กิวเมนต์สุดท้ายคือสถานะโดยพลการเริ่มต้นNoneที่จุดเริ่มต้นของแต่ละเกมซึ่งคุณสามารถใช้เพื่อรักษาสถานะระหว่างรอบ คุณควรคืนค่า 2 คอลัมน์ของดัชนีคอลัมน์ที่คุณต้องการเล่นและสถานะใหม่ที่จะส่งคืนให้คุณในเทิร์นถัดไป เกณฑ์การให้คะแนน นับเป็นชัยชนะ+1วาดเป็นและสูญเสียเป็น0 -1เป้าหมายของคุณคือเพื่อให้ได้คะแนนสูงสุดโดยเฉลี่ยในทัวร์นาเมนต์ round-robin ฉันจะพยายามวิ่งแข่งให้ได้มากที่สุดเท่าที่จำเป็นเพื่อระบุผู้ชนะที่ชัดเจน กฎระเบียบ ผู้แข่งขันใด ๆ ควรมีบอทที่แข่งขันกันมากที่สุดในแต่ละครั้ง แต่มันก็โอเคที่จะอัพเดทข้อมูลของคุณถ้าคุณทำการปรับปรุง โปรดลอง จำกัด บอตของคุณให้เหลือเวลาคิดประมาณ 1 วินาที การทดสอบ นี่คือซอร์สโค้ดสำหรับคอนโทรลเลอร์พร้อมกับบ็อตตัวอย่างที่ไม่แข่งขันสำหรับการอ้างอิง: import itertools import random def get_strides(board, …

2
Python: ฉันหวังว่าฉันเป็น PHP [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Code Golf Stack Exchange ปิดให้บริการใน3 ปีที่ผ่านมา มีเรื่องราวเก่าแก่เกี่ยวกับช่างหินที่ไม่เคยพอใจกับสิ่งที่เขาเป็น เขาหวังว่าเขาจะกลายเป็นดวงอาทิตย์ได้และเขาก็เป็นเช่นนั้น ถูกบล็อกโดยเมฆเขาต้องการที่จะ - และกลายเป็น - เมฆ เมื่อลมพัดเขาต้องการให้ตัวเองเป็นลม หยุดด้วยภูเขาเขาต้องการเป็นภูเขาและกลายเป็นหนึ่ง อย่างไรก็ตามในไม่ช้าเขาก็ถูกแฮ็คโดยช่างหินและประสงค์จะเป็นช่างหิน ในทำนองเดียวกันงานของคุณคือการเขียนโปรแกรมที่ไม่เคยพอใจกับภาษาที่ใช้อยู่โปรแกรมของคุณต้องส่งออกชุดการแทนที่ regex เพื่อเปลี่ยนเป็นภาษาอื่น และอื่น ๆ กฎระเบียบ เขียนโปรแกรมในภาษาที่คุณเลือก โปรแกรมควรส่งออกชุดอย่างน้อยสองส่วน ส่วนคือข้อความจำนวนมากคั่นด้วยเครื่องหมายอัฒภาค อย่างไรก็ตามหากมีเครื่องหมายอัฒภาคอยู่ใน regex การแยกมันออกจะทำให้ไวยากรณ์ไม่ถูกต้อง แต่จะไม่แยกเซกเมนต์ ดูตัวอย่าง ส่วนแรกเป็นรูปแบบการค้นหา regex และส่วนที่สองคือรูปแบบการทดแทน รูปแบบที่สามเป็นรูปแบบ "ค้นหา" อีกรูปแบบและรูปแบบที่สี่คือรูปแบบ "แทนที่" เป็นต้น ใช้รูปแบบ regex กับโปรแกรม แทนที่รูปแบบในส่วนแรกด้วยหนึ่งในสอง; แทนที่รูปแบบที่สามด้วยรูปแบบในสี่และอื่น ๆ ผลลัพธ์ควรเป็นโปรแกรมในภาษาอื่นซึ่งตัวเองปฏิบัติตามกฎ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.