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

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

30
การทดแทนในภายหลัง
ภาษาส่วนใหญ่จะมีบิวด์อินเพื่อค้นหาสตริงสำหรับการเกิดขึ้นทั้งหมดของซับสตริงที่กำหนดและแทนที่ด้วยสตริงอื่น ฉันไม่รู้ภาษาใด ๆ ที่ทำให้แนวคิดนี้เป็นจริง (ไม่จำเป็นต้องต่อเนื่องกัน) นั่นคือภารกิจของคุณในการท้าทายนี้ การป้อนข้อมูลจะประกอบด้วยสามสายA, BและCที่BและCมีการรับประกันที่มีความยาวเดียวกัน หากBปรากฏเป็น subsequence ในมันควรจะถูกแทนที่ด้วยA Cนี่คือตัวอย่างง่ายๆ: A: abcdefghijklmnopqrstuvwxyz B: ghost C: 12345 มันจะถูกประมวลผลเช่นนี้: abcdefghijklmnopqrstuvwxyz || | || abcdef12ijklmn3pqr45uvwxyz หากมีหลายวิธีในการค้นหาBให้เป็นลำดับคุณควรแทนที่ด้านซ้ายสุดอย่างโลภ: A: abcdeedcba B: ada C: BOB Result: BbcOeedcbB and NOT: BbcdeeOcbB เช่นเดียวกันหากBพบได้ในหลาย ๆ ที่: A: abcdeedcbaabcde B: ed C: 12 Result: abcd1e2cbaabcde and NOT: abcd112cbaabc2e …

27
ความแตกต่างของจำนวนเต็มสามจำนวน
ใช้ฟังก์ชั่นต่างที่รับเป็นจำนวนเต็มสามจำนวนเต็ม x, y และ z มันควรกลับว่าการลบหนึ่งในจำนวนเหล่านี้จากอันอื่นให้อันที่สามหรือไม่ Test cases: diff(5, 3, 2) yields True because 5 - 3 = 2 diff(2, 3, 5) yields True because 5 - 3 = 2 diff(2, 5, 3) yields True because 5 - 3 = 2 diff(-2, 3, 5) yields True because 3 - 5 …

28
ย่อยสลายเลขฐานสองเป็นชุดย่อยสลับกัน
สิ่งนี้ได้รับแรงบันดาลใจจากปัญหาที่ 13 - ไบนารีที่ไม่ซ้ำของการแข่งขันล่าสุดของHP CodeWars ลองใส่ตัวเลขทศนิยมแบบสุ่มพูด 727429805944311 และดูที่การเป็นตัวแทนไบนารี: 10100101011001011111110011001011101010110111110111 ตอนนี้แยกการเป็นเลขฐานสองนั้นออกเป็นอนุกรมที่ตัวเลข0และ1ทางเลือก 1010 010101 10 0101 1 1 1 1 1 10 01 10 0101 1 1010101 101 1 1 1 101 1 1 และแปลงแต่ละลำดับกลับเป็นทศนิยม 10 21 2 5 1 1 1 1 1 2 1 2 5 1 85 5 1 …

17
เบอร์ Motzkin
หมายเลข Motzkin ที่ n คือจำนวนเส้นทางจาก (0, 0) ถึง (n, 0) โดยที่แต่ละขั้นตอนเป็นรูปแบบ (1, -1), (1, 0) หรือ (1, 1) และเส้นทาง ไม่เคยต่ำกว่า y = 0 นี่คือภาพประกอบของเส้นทางเหล่านี้สำหรับ n = 1, 2, 3, 4, จากลิงค์ด้านบน: ลำดับที่ต้องการเป็นOEIS A001006 OEIS มีลักษณะของลำดับอื่น ๆ คุณจะได้รับจำนวนเต็มบวก n เป็นอินพุต คุณควรส่งออกหมายเลข Motzkin ที่ n นี่คือหมายเลข Motzkin 1 ถึง 10: 1, 2, …

1
การตั้งชื่อโซ่คาร์บอนที่ไม่เป็นวงกลม
(ฉันไม่ใช่นักเคมี! ฉันอาจจะผิดบางอย่างฉันเขียนสิ่งที่ฉันเรียนรู้ในโรงเรียนมัธยม) อะตอมของคาร์บอนมีคุณสมบัติพิเศษ: พวกมันสามารถผูกกับอะตอมอื่นอีก 4 อะตอม (ซึ่งไม่ได้เป็นพิเศษนั้น) และพวกมันจะมีความเสถียรแม้ในโซ่ยาวซึ่งเป็นเอกลักษณ์มาก เนื่องจากพวกเขาสามารถถูกล่ามโซ่และรวมกันได้หลายวิธีเราจึงจำเป็นต้องมีการตั้งชื่อแบบแผนการตั้งชื่อพวกเขา นี่เป็นโมเลกุลที่เล็กที่สุดที่เราสามารถสร้าง: CH4 มันเรียกว่ามีเธน ประกอบด้วยอะตอมของคาร์บอนเพียงหนึ่งเดียวและไฮโดรเจน 4 อะตอม สิ่งต่อไปคือ: CH3 - CH3 นี่เรียกว่าอีเธน มันประกอบไปด้วยคาร์บอน 2 อะตอมและไฮโดรเจน 6 อะตอม 2 ต่อไปคือ: CH3 - CH2 - CH3 CH3 - CH2 - CH2 - CH3 พวกเขาเป็นโพรเพนและบิวเทน ปัญหาเริ่มต้นด้วยโซ่ที่มีอะตอมของคาร์บอน 4 ตัวเนื่องจากสามารถสร้างขึ้นได้ 2 วิธี อันหนึ่งถูกแสดงไว้ด้านบนและอีกอันคือ: CH3 - CH - …

7
ฉันจะร้อยสายและอะแดปเตอร์ทั้งหมดเข้าด้วยกันได้หรือไม่
สมมติว่าวันหนึ่งคุณขุดผ่านสายคอมพิวเตอร์และอะแดปเตอร์ขนาดใหญ่ที่ไม่ได้ใช้ (USB เป็น USB mini, VGA กับ DVI, ฯลฯ ) มีสายพันกันทุกที่ทำให้เกิดความยุ่งเหยิงและคุณสงสัยว่าคุณสามารถทำให้สิ่งต่าง ๆ ง่ายขึ้นหรือไม่โดยการรวมสายทั้งหมดเข้าด้วยกันในสายยาวเส้นเดียวแล้วก็กลิ้งมันขึ้นมา คำถามคือมันเป็นไปได้ไหมที่จะเชื่อมต่อสายไฟและอะแดปเตอร์ทั้งหมดของคุณในสายยาว ๆ แบบนี้? เห็นได้ชัดว่ามันเป็นไปไม่ได้เสมอไปเช่นหากคุณมีสายไฟสองเส้นที่มีปลั๊กที่แตกต่างกันโดยสิ้นเชิง แต่ถ้าคุณมีสายที่สามที่สามารถเชื่อมต่อกับทั้งสองสายได้คุณสามารถร้อยสายทั้งหมดเข้าด้วยกัน คุณไม่สนใจว่าปลั๊กชนิดใดที่อยู่บนปลายของสายไฟทั้งหมด พวกเขาไม่จำเป็นต้องเสียบเข้าด้วยกันเพื่อสร้างวง คุณแค่อยากรู้ว่าการทำสายไฟทั้งหมดนั้นเป็นไปได้หรือไม่และถ้าเป็นเช่นนั้นจะทำอย่างไร ท้าทาย เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในสตริงหลายบรรทัดโดยที่ทุกบรรทัดแสดงหนึ่งในสายที่คุณเป็นเจ้าของ สายไฟประกอบด้วยเส้นประอย่างน้อยหนึ่งเส้น ( -) พร้อมปลั๊กที่ปลายทั้งสองด้าน ปลั๊กเป็นหนึ่งใน 8 ตัวอักษร()[]{}<>เสมอ ดังนั้นนี่คือบางส่วนสายที่ถูกต้อง: >-> (--[ }-{ <-----] (---) แต่นี่ไม่ใช่: --> (-- )-- [{ --- เมื่อเชื่อมต่อสายเชื่อมต่อเท่านั้นที่สามารถใช้ตัวยึดประเภทเดียวกันได้ ดังนั้นนี่คือการเชื่อมต่อสายไฟที่ถูกต้อง: ...---((---... ...---))---... ...---]]---... ...---{{---... ...---<<---... และสิ่งเหล่านี้ไม่ถูกต้อง: …
30 code-golf  string 

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

24
ลำดับ RATS
งานของคุณคือการสร้างคำที่ n ของลำดับ RATS โดยที่ n คืออินพุต ลำดับ RATS ยังเป็นที่รู้จักในลำดับกลับเพิ่มเรียงแล้ว ลำดับนี้ยังสามารถพบได้ที่นี่: http://oeis.org/A004000 กรณีทดสอบ: 0 > 1 1 > 2 2 > 4 3 > 8 4 > 16 5 > 77 6 > 145 7 > 668 ตัวอย่างเช่นผลลัพธ์สำหรับ 5 คือ 77 เพราะ 16 + 61 = 77 หลังจากนี้ 77 จะเรียงลำดับ …

17
แสดงคะแนนความคิดเห็นห้าอันดับแรกใน SE Post
สแต็กแลกเปลี่ยนสคริปต์กำหนดความคิดเห็นห้าข้อสำหรับคำถามหรือคำตอบในตอนแรกที่เห็นบนหน้าหลักของเว็บไซต์ผ่านจำนวน upvotes ที่พวกเขา; ห้าความคิดเห็นที่มีจำนวนคะแนนสูงสุดจะปรากฏขึ้น งานของคุณคือสร้างพฤติกรรมนี้ใหม่ เขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบโดยรับอินพุตผ่าน STDIN, บรรทัดคำสั่งหรืออาร์กิวเมนต์ของฟังก์ชันและพิมพ์หรือส่งคืนคะแนนความคิดเห็นห้าอันดับแรก การป้อนข้อมูลจะเป็นอาร์เรย์ของจำนวนเต็มแทนจำนวน upvotes ในความคิดเห็นของบางโพสต์ ตัวอย่างเช่นอินพุตของ 0, 2, 5, 4, 0, 1, 0 หมายความว่าความคิดเห็นแรกไม่มีการลงคะแนนเสียงความคิดเห็นที่สองมีสองคะแนนที่สามมีห้าคะแนนที่สี่มีสี่คะแนนลำดับของคะแนนความคิดเห็นควรยังคงเหมือนเดิมในผลลัพธ์ หากอินพุตมีคะแนนข้อคิดเห็นอย่างน้อยห้าคะแนนผลลัพธ์จะไม่มีสิ่งใดเกินกว่าที่ได้รับ หากคะแนนความคิดเห็นตั้งแต่สองคะแนนขึ้นไปเหมือนกันคะแนนแรกควรปรากฏขึ้น คุณอาจสมมติว่าอาร์เรย์ข้อมูลเข้าจะมีคะแนนความคิดเห็นอย่างน้อยหนึ่งคะแนน ตัวเลขในเอาต์พุตควรแยกความแตกต่างได้ง่าย (ดังนั้น 02541 สำหรับกรณีที่ 1 ไม่ถูกต้อง) มิฉะนั้นจะไม่มีข้อ จำกัด ในรูปแบบเอาต์พุต ตัวเลขอาจคั่นด้วยช่องว่างหรือขึ้นบรรทัดใหม่หรืออาจอยู่ในรูปแบบรายการเป็นต้น กรณีทดสอบ: [0, 2, 5, 4, 0, 1, 0] -> [0, 2, 5, 4, 1] [2, 1, 1, …

3
ช่วยด้วย! เครื่องคิดเลขของฉันพัง! (เปลี่ยนนิพจน์จำนวนเต็มเป็นการกดปุ่มเครื่องคิดเลข)
บทนำ ช่วยด้วย! ฉันเผลอทิ้งเครื่องคิดเลข TI-84 ของฉันออกไปนอกหน้าต่าง (ไม่ต้องถามว่าทำอย่างไร) และมันก็พัง ฉันมีการทดสอบทางคณิตศาสตร์ในวันพรุ่งนี้และเครื่องคิดเลขเพียงตัวเดียวที่ฉันพบคือปุ่มที่มี: 7 8 9 + 4 5 6 - 1 2 3 * 0 = / แบบทดสอบคณิตศาสตร์ของฉันคือแบบทดสอบทบทวนการประเมินผลนิพจน์ ฉันต้องการโปรแกรมเพื่อแสดงออกเช่น1+(5*4)/7และแปลงเป็นการกดแป้นที่จำเป็นในการแก้ปัญหาในเครื่องคิดเลขสำรองของฉัน (และในกรณีที่คุณสงสัยสิ่งนี้เกิดขึ้นกับฉันจริง ๆ ) ท้าทาย ได้รับสายเข้าไม่ว่างเปล่าที่มีเพียงตัวละคร0-9, (, ), +, -, *และ/การส่งออกการกดแป้นพิมพ์ในสตริงพื้นที่แยกออกจากกัน (เช่น. 1 + 3 / 3 =) จะต้องมีเครื่องหมายเท่ากับเสมอในตอนท้ายของเอาต์พุต ไม่อนุญาตช่องโหว่มาตรฐาน ตัวอย่าง: อินพุต: 1+(5*4)/7, เอาต์พุต:5 * 4 …

1
เวทมนตร์: กอล์ฟการต่อสู้ที่รวบรวม
Magic: the Gatheringเป็นเกมไพ่ที่ผู้เล่นเล่นไพ่ที่เป็นตัวแทนของสิ่งมีชีวิตซึ่งสามารถโจมตีผู้เล่นอื่นหรือป้องกันการโจมตีของผู้เล่นคนอื่นโดยการปิดกั้น ในการท้าทายรหัสกอล์ฟโปรแกรมของคุณจะอยู่ในตำแหน่งของผู้เล่นเวทย์มนตร์ตัดสินใจว่าจะบล็อกในการต่อสู้อย่างไร สัตว์แต่ละตัวมีคุณสมบัติที่เกี่ยวข้องสองประการ ได้แก่ พลังและความทนทาน พลังของสิ่งมีชีวิตคือปริมาณของความเสียหายที่สามารถจัดการในการต่อสู้และความทนทานของมันคือปริมาณของความเสียหายที่จำเป็นในการทำลาย พลังอยู่เสมออย่างน้อย 0 และความเหนียวอยู่เสมออย่างน้อย 1 ระหว่างการต่อสู้ในเวทย์มนตร์ผู้เล่นที่มีเทิร์นจะประกาศสิ่งมีชีวิตบางส่วนของพวกเขาที่จะโจมตีฝ่ายตรงข้าม จากนั้นผู้เล่นคนอื่นที่รู้จักกันในชื่อผู้เล่นป้องกันอาจกำหนดสิ่งมีชีวิตของพวกเขาเป็นบล็อค สิ่งมีชีวิตอาจบล็อกสิ่งมีชีวิตเดียวต่อการต่อสู้ แต่สิ่งมีชีวิตหลายคนอาจบล็อกสิ่งมีชีวิตเดียวกัน หลังจากบล็อกเกอร์ถูกประกาศผู้เล่นที่โจมตีจะทำการตัดสินใจสำหรับสิ่งมีชีวิตที่ถูกโจมตีแต่ละตัวที่ถูกบล็อกวิธีการกระจายความเสียหาย (เท่ากับพลังของมัน) ที่สิ่งมีชีวิตนั้นเกี่ยวข้องกับสิ่งมีชีวิตที่ปิดกั้น จากนั้นความเสียหายจะได้รับการจัดการ สัตว์แต่ละตัวจะสร้างความเสียหายเท่ากับพลังของมัน โจมตีสัตว์ที่ถูกปิดกั้นสร้างความเสียหายตามมา สัตว์ที่ไม่ได้รับการปลดบล็อกจะสร้างความเสียหายให้กับผู้เล่นที่ป้องกัน การปิดกั้นสิ่งมีชีวิตสร้างความเสียหายให้กับสิ่งมีชีวิตที่พวกเขาบล็อก สิ่งมีชีวิตที่เป็นของผู้เล่นที่ป้องกันซึ่งไม่ได้บล็อกจะไม่ได้รับความเสียหายใด ๆ (ไม่จำเป็นต้องบล็อกสิ่งมีชีวิต) ในที่สุดสิ่งมีชีวิตใด ๆ ที่สร้างความเสียหายเท่ากับหรือมากกว่าความทนทานของมันจะถูกทำลายและถูกลบออกจากสนามรบ จำนวนความเสียหายใด ๆ ที่น้อยกว่าความทนทานของสัตว์ไม่มีผล นี่คือตัวอย่างของกระบวนการนี้: สิ่งมีชีวิตที่มีพลัง P และความทนทาน T แสดงเป็น P/T Attacking: 2/2, 3/3 Defending player's creatures: 1/4, 1/1, 0/1 Defending …

1
วาดล้อหมุนได้
จำ pinwheels ที่สนุกที่คุณระเบิดและหมุนไปรอบ ๆ รหัสหนึ่งกันเถอะ! ตะไลจะมีชุดของตัวละครที่\ | / _วาดศูนย์กลางและแขนของมัน หนึ่งล้อเลื่อนที่เป็นไปได้อาจมีลักษณะเช่นนี้: | | |_ ___ ___|_| | | | แต่ตะไลนั้นไม่หมุนอะไร ไม่สนุก! เราสามารถทำให้มันหมุนได้โดยจัดเรียงสัญลักษณ์ใหม่: / \ / \ / \/\ \/\ / \ / \ / ความท้าทายคือการสร้างโปรแกรมที่ใช้จำนวนเต็มสามจำนวนและส่งออกตะไลตามที่ระบุด้านล่าง ครั้งแรกของเหล่านี้คือจำนวนของแขนที่มีที่สองคือความยาวของแขนของตะไลและที่สามคือจำนวนครั้งที่มันจะหมุนหนึ่งในแปดของการหมุนตามเข็มนาฬิกา คุณสามารถสมมติสิ่งต่อไปนี้: จำนวนแขนจะเป็น 0, 1, 2, 4 หรือ 8 เสมอ แขนทุกอันจะเว้นระยะห่างเท่ากันจากกัน ตำแหน่งเริ่มต้นของตะไลจะมีจุดศูนย์กลางอยู่ที่: _ |_| หากจำนวนแขนเท่ากับ 1 …

7
ตัวละครเพื่อนคนไหนเป็นเพื่อนที่ดีที่สุด?
นักแสดงหลักหกคนของซิทคอมเพื่อนชาวอเมริกันทุกคนเห็นพ้องต้องกันว่าพวกเขาจะได้รับเงินเดือนเดียวกันตลอดระยะเวลาของซีรีส์ (หลังจบฤดูกาลที่ 2 อย่างน้อย) แต่นั่นไม่ได้หมายความว่าพวกเขาทุกคนมีเวลาออกอากาศเท่ากันหรือพวกเขามีปฏิสัมพันธ์บนหน้าจอกันในปริมาณเท่ากัน ในการท้าทายนี้คุณจะเขียนโปรแกรมที่สามารถช่วยตัดสินว่าเพื่อนของเพื่อนคนไหนดีที่สุด ติดตั้ง ลองพิจารณาดูตอนหรือฉากของเพื่อนและจดบันทึกว่าใครอยู่บนหน้าจอระหว่างที่กล้องถ่ายรูปแต่ละนัดและนานเท่าใด เราจะย่อชื่อตัวละครแต่ละตัว: Cสำหรับแชนด์เลอร์ Jสำหรับโจอี้ Mสำหรับโมนิก้า PสำหรับPhoebe Rสำหรับราเชล Sสำหรับรอสส์ จากนั้นสำหรับทุกช็อตของกล้อง (หรือทุกครั้งที่ตัวละครเข้า / ออกจากช็อต) เราจะแสดงว่ามีใครอยู่บนหน้าจอ ตัวอย่างเช่น: 504 CRS 200 J 345 MP 980 2000 CJMPRS นี่เป็นการบอกว่า: สำหรับ 504ms, Chandler, Rachel และ Ross อยู่บนหน้าจอ จากนั้นเป็นระยะเวลา 200 มิลลิวินาทีโจอี้เป็น จากนั้นสำหรับ 345ms, Monica และ Phoebe อยู่ จากนั้นสำหรับ 980ms ไม่มีตัวละครหลักทั้ง …

30
ใช้“ แทค”: พิมพ์บรรทัดจากไฟล์ย้อนกลับ
ระหว่างคำถามลูกแมวและเห็นคำถามนี้ที่ U & Lเกี่ยวกับบางsedมายากลวิธีการเกี่ยวกับการดำเนินการtac? วัตถุประสงค์ ใช้โปรแกรมที่จะย้อนกลับและพิมพ์บรรทัดในไฟล์ อินพุต ไฟล์ที่ระบุเป็นชื่อหรือผ่านอินพุตมาตรฐาน เอาท์พุต เส้นกลับด้านเพื่อออกมาตรฐาน เกณฑ์การให้คะแนน ไบต์ของซอร์สโค้ด
30 code-golf  string 

30
จัดเรียงตัวเลขที่ไม่ซ้ำกันในตารางการคูณ
ความท้าทายง่ายๆวันนี้: เขียนโปรแกรมหรือฟังก์ชั่นที่รับจำนวนเต็มบวก N แล้วพิมพ์หรือส่งกลับรายการเรียงลำดับของตัวเลขเฉพาะที่ปรากฏในตารางสูตรคูณซึ่งแถวและคอลัมน์ทวีคูณทั้งช่วงจาก 1 ถึง N รวม รายการอาจเรียงลำดับจากน้อยไปหามาก (น้อยไปหามากที่สุด) หรือเรียงจากมากไปหาน้อย (มากที่สุดไปหาน้อยที่สุด) และอาจถูกเรียงลำดับในรูปแบบที่เหมาะสม รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ! ตัวอย่าง เมื่อ N = 4 ตารางสูตรคูณจะมีลักษณะดังนี้: 1 2 3 4 ----------- 1| 1 2 3 4 | 2| 2 4 6 8 | 3| 3 6 9 12 | 4| 4 8 12 16 1, 2, …

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