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

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

4
ปัญหา Ender ที่มีความสุข
ปัญหาสิ้นสุดความสุข (ที่จริงทฤษฎีบท) ระบุว่า ชุดของห้าจุดใด ๆ ในเครื่องบินในตำแหน่งทั่วไปมีเซตย่อยของสี่จุดที่ก่อให้เกิดจุดยอดของรูปสี่เหลี่ยมนูน ปัญหานี้ได้รับการตั้งชื่อโดย Paul Erd'sเมื่อนักคณิตศาสตร์สองคนที่ทำงานเกี่ยวกับปัญหานี้เป็นครั้งแรก Ester Klein และ George Szekeres เริ่มหมั้นและแต่งงานกันในภายหลัง ชี้แจง: ตำแหน่งทั่วไปที่นี่หมายความว่าไม่มีจุดสามจุดใด ๆ รูปสี่เหลี่ยมที่เกิดขึ้นจากจุดยอดทั้งสี่จะได้รับการพิจารณาว่าไม่ตัดกันโดยไม่คำนึงถึงลำดับของคะแนน ตัวอย่างเช่นกำหนดสี่จุด[1 1], [1 2], [2 1], [2 2]รูปสี่เหลี่ยมตั้งใจเป็นตารางที่ไม่ได้ผูกโบว์: รูปสี่เหลี่ยมที่ไม่ตัดกันนั้นจะนูนถ้าไม่มีมุมภายในเกินกว่า 180 องศา; หรือเท่ากันถ้า diagonals ทั้งสองอยู่ภายในรูปสี่เหลี่ยม ความท้าทาย ให้ 5 คะแนนพร้อมพิกัดจำนวนเต็มบวกเอาท์พุท 4 ของคะแนนเหล่านั้นที่เป็นรูปสี่เหลี่ยมนูน กฎระเบียบ หากมีหลายวิธี (นั่นคือ 4 ชุดหลายชุด) คุณสามารถเลือกที่จะส่งออกหนึ่งหรือทั้งหมด รูปแบบอินพุตและเอาต์พุตมีความยืดหยุ่นตามปกติ (อาร์เรย์รายการรายการของรายการสตริงที่มีตัวคั่นเหมาะสม ฯลฯ ) รหัสกอล์ฟน้อยที่สุดที่จะชนะ …

14
Array Escape - ออกไปจากที่นั่น
วันหนึ่งคุณตื่นเท่านั้นที่จะพบว่าตัวเองติดอยู่ในอาเรย์ คุณพยายามที่จะเดินออกไปจากที่นั่นรับดัชนีหนึ่งครั้ง แต่ดูเหมือนว่ามีกฎอื่น ๆ : อาเรย์นั้นเต็มไปด้วยจำนวนธรรมชาติ หากคุณพบว่าตัวเองอยู่ในดัชนีnคุณไปที่ดัชนีarray[n]ยกเว้น: หากคุณพบว่าตัวเองอยู่ในดัชนีnซึ่งเป็นจำนวนเฉพาะคุณทำarray[n]ตามขั้นตอน ตัวอย่าง: คุณเริ่มต้นกับดัชนี4ในอาร์เรย์นี้ (ดัชนีเริ่มต้นคือ 0): array = [1,4,5,6,8,10,14,15,2,2,4,5,7]; -----------------^ you are here เนื่องจากค่าของฟิลด์ที่คุณอยู่คือ8คุณไปที่ดัชนี8เป็นขั้นตอนแรก 2เขตที่ดินคุณมีค่า จากนั้นคุณไปที่ดัชนี2เป็นขั้นตอนที่สองของคุณ ในฐานะที่2เป็นหมายเลขเฉพาะคุณจะย้อนกลับไป 5 ก้าวซึ่งเป็นขั้นตอนที่สามของคุณ เนื่องจากไม่มีดัชนี-3คุณจึงหลีกเลี่ยงอาร์เรย์ในขั้นตอนทั้งหมด 3 ขั้นตอน งานของคุณคือ: ในการเขียนโปรแกรมหรือฟังก์ชั่นซึ่งยอมรับอาร์เรย์และดัชนีเริ่มต้นเป็นพารามิเตอร์และส่งออกจำนวนขั้นตอนเพื่อหนีอาร์เรย์ ถ้าคุณไม่สามารถหลบหนีอาร์เรย์ (เช่น[2,0,2]กับการเริ่มต้นดัชนี2=> คุณอย่างต่อเนื่องไปจากดัชนี2การ0) การส่งออกมีมูลค่า falsy คุณอาจใช้การจัดทำดัชนีแบบอิงดัชนีหรือใช้ดัชนีแบบอิงศูนย์ แต่โปรดระบุว่าคุณใช้อะไร กรณีทดสอบ การป้อนข้อมูล: [2,5,6,8,1,2,3], 3 เอาท์พุท: 1 การป้อนข้อมูล: [2, 0, 2], 2 เอาท์พุท: false …

12
สร้างเปียของปาสคาล
นี่คือการถักเปียของปาสกาล: 1 4 15 56 209 780 2911 10864 40545 151316 564719 1 3 11 41 153 571 2131 7953 29681 110771 413403 1542841 1 4 15 56 209 780 2911 10864 40545 151316 564719 ฉันทำมันทั้งหมด Blaise Pascal ไม่ได้ถักเปียเท่าที่ฉันสามารถบอกได้และถ้าเขาทำมันอาจจะทำจากผมแทนที่จะเป็นตัวเลข มันกำหนดไว้ดังนี้: คอลัมน์แรกมีคอลัมน์เดียวที่1อยู่ตรงกลาง คอลัมน์ที่สองมี1ด้านบนและด้านล่าง ตอนนี้เราสลับกันระหว่างการใส่ตัวเลขที่อยู่ตรงกลางหรือสองสำเนาของตัวเลขที่ด้านบนและล่าง หากตัวเลขไปที่ด้านบนหรือด้านล่างมันจะเป็นผลรวมของตัวเลขสองตัวที่อยู่ติดกัน (เช่น56 = 15 + 41) หากคุณเอียงศีรษะเล็กน้อยนี่เป็นขั้นตอนหนึ่งในสามเหลี่ยมปาสคาล …

30
ลำดับของ Sylvester
ลำดับของ Sylvester OEIS A000058เป็นลำดับเลขจำนวนเต็มที่กำหนดดังนี้: สมาชิกแต่ละคนเป็นผลิตภัณฑ์ของสมาชิกก่อนหน้าทั้งหมดรวมหนึ่ง สมาชิกคนแรกของลำดับคือ 2 งาน สร้างโปรแกรมที่เล็กที่สุดเท่าที่จะเป็นไปได้ซึ่งใช้ n และคำนวณคำที่ n ของลำดับของ Sylvester ใช้อินพุตอินพุตเอาต์พุตและช่องโหว่มาตรฐาน เนื่องจากผลลัพธ์เติบโตอย่างรวดเร็วคุณไม่ได้คาดหวังที่จะใช้คำใด ๆ ซึ่งผลลัพธ์จะทำให้เกิดการล้นในภาษาที่คุณเลือก กรณีทดสอบ คุณสามารถใช้ดัชนีหรือศูนย์ก็ได้ (ที่นี่ฉันใช้การจัดทำดัชนีเป็นศูนย์) >>0 2 >>1 3 >>2 7 >>3 43 >>4 1807

5
แก้ไขย่อหน้า
ด้วยจิตวิญญาณของPatch the Imageนี่เป็นความท้าทายที่คล้ายกัน แต่มีข้อความ ท้าทาย Bit rot ทำให้ข้อความที่มีค่าของคุณทรมาน! ด้วยย่อหน้าที่ประกอบด้วยอักขระ ASCII โดยที่มีรูสี่เหลี่ยมอยู่ที่ไหนสักแห่งโปรแกรมของคุณควรพยายามเติมข้อความที่เหมาะสมลงในหลุมเพื่อให้ย่อหน้านั้นกลมกลืนที่สุดเท่าที่จะทำได้ คำจำกัดความเพิ่มเติม หลุมจะเป็นรูปสี่เหลี่ยมผืนผ้าเสมอและอาจขยายหลายบรรทัด จะมีเพียงรูเดียวเท่านั้น โปรดทราบว่ารูไม่จำเป็นต้องตกอยู่ในขอบเขตของคำ หลุมจะมีอย่างน้อยที่สุด 25% ของย่อหน้าอินพุต แต่อาจทับซ้อนหรือขยายผ่านข้อความ "สิ้นสุด" ของข้อความ "ปกติ" (ดูตัวอย่างของ Euclid หรือ Badger ด้านล่าง) เนื่องจากการค้นหาหลุมไม่ใช่ประเด็นหลักของการท้าทายนี้จะประกอบด้วยเครื่องหมายแฮชเพียงอย่างเดียว#เพื่อให้สามารถระบุตัวตนได้ง่าย ไม่มีตำแหน่งอื่นในย่อหน้าอินพุตจะมีเครื่องหมายแฮช รหัสของคุณไม่สามารถใช้ข้อความ "ปกติ" ในตัวอย่างด้านล่าง - มันจะได้รับและประมวลผลข้อความด้วยรูที่อยู่ในนั้น อินพุตสามารถเป็นสตริงแบบหลายบรรทัดเดียวเป็นอาร์เรย์ของสตริง (หนึ่งองค์ประกอบต่อบรรทัด) เป็นไฟล์และอื่น ๆ - คุณเลือกสิ่งที่สะดวกที่สุดสำหรับภาษาของคุณ หากต้องการสามารถป้อนข้อมูลเพิ่มเติมที่เป็นตัวเลือกโดยละเอียดรายละเอียดพิกัดของหลุมได้ (เช่น tuple ของพิกัดหรือสิ่งที่คล้ายกัน) โปรดอธิบายอัลกอริทึมของคุณในการส่งของคุณ การออกเสียง ผู้มีสิทธิเลือกตั้งจะถูกขอให้ตัดสินรายการตามวิธีที่อัลกอริธึมเติมเต็มในรูข้อความ ข้อเสนอแนะบางอย่างรวมถึงต่อไปนี้: พื้นที่ที่เติมเต็มตรงกับการกระจายตัวของช่องว่างและเครื่องหมายวรรคตอนโดยประมาณเป็นส่วนที่เหลือของย่อหน้าหรือไม่ พื้นที่เติมเต็มมีไวยากรณ์ที่ผิดพลาดหรือไม่? …

5
ทำตัวเอียงศิลปะ ASCII
เมื่อกำหนดอินพุตของรูปภาพศิลปะ ASCII ให้ส่งออกศิลปะ ASCII ที่ทำเป็นตัวเอียง หากต้องการเอียงศิลปะ ASCII ให้ทำดังนี้: แทรกศูนย์เว้นวรรคก่อนบรรทัดสุดท้ายหนึ่งช่องว่างก่อนบรรทัดที่สองสุดท้ายช่องว่างสองช่องก่อนบรรทัดที่สามสุดท้าย ฯลฯ ลบช่องว่างนำหน้าพิเศษใด ๆ ที่อาจสร้างขึ้น นั่นคือถ้าแต่ละบรรทัดมีnช่องว่างก่อนหน้านั้นอย่างน้อยให้ลบnช่องว่างออกจากจุดเริ่มต้นของแต่ละบรรทัด แทนที่ทั้งหมด\s กับ|ทุก|วินาทีที่มี/และทุกวินาทีกับ/ _รักษาที่มีอยู่_เดิม อินพุตรับประกันว่ามีเฉพาะอักขระ\|/_และช่องว่าง ตัวอย่างเช่นการป้อนข้อมูล /\/\/\ /\/\/\ /\/\/\ /\/\/\ /\ /\ /\ /\ /\ /\ /\/\/\ /\/\/\ /\ /\ /\/\ /\ /\ /\ /\ /\ /\ /\ /\/\/\ /\/\/\ จะต้องส่งออก _|_|_| _|_|_| _|_|_| _|_|_| _| _| …

13
เห็นภาพการทอผ้าบิต
ความชั่วร้ายของการเขียนโปรแกรมภาษาลึกลับมีการดำเนินการที่น่าสนใจเกี่ยวกับค่าไบต์ซึ่งเรียกว่า "การทอผ้า" มันคือการเปลี่ยนรูปแบบของบิตที่แปดของไบต์ (มันไม่สำคัญว่าเราจะเริ่มนับจากจุดสิ้นสุดเนื่องจากรูปแบบสมมาตร): บิต 0 ถูกย้ายไปที่บิต 2 บิต 1 ถูกย้ายไปที่บิต 0 ย้ายบิต 2 ไปเป็นบิต 4 บิต 3 ถูกย้ายไปยังบิต 1 บิต 4 ถูกย้ายไปยังบิต 6 ย้ายบิต 5 ไปเป็นบิต 3 บิต 6 ถูกย้ายไปยังบิต 7 ย้ายบิต 7 ไปเป็นบิต 5 เพื่อความสะดวกนี่เป็นอีกสองแนวทางของการเปลี่ยนแปลง เป็นวงจร: (02467531) และเป็นรายการคู่ของแผนที่: [[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]] งานของคุณคือเพื่อให้มองเห็นการเปลี่ยนแปลงนี้โดยใช้ตัวอักษรที่กล่องวาดภาพ─, │, …

30
ตัวแปลงไบนารีเป็นทศนิยม
ตัวแปลงไบนารีเป็นทศนิยม เท่าที่ฉันเห็นเราไม่มีการแปลงเลขฐานสองเป็นทศนิยมแบบธรรมดา เขียนโปรแกรมหรือฟังก์ชั่นที่รับจำนวนเต็มเลขฐานสองบวกและส่งออกค่าทศนิยม คุณไม่ได้รับอนุญาตให้ใช้ฟังก์ชันการแปลงฐานในตัวใด ๆ ฟังก์ชันจำนวนเต็มถึงทศนิยม (เช่นฟังก์ชันที่เปลี่ยน101010เป็น[1, 0, 1, 0, 1, 0]หรือ"101010") ได้รับการยกเว้นจากกฎนี้และอนุญาตให้ใช้ กฎ: รหัสจะต้องรองรับตัวเลขไบนารี่ถึงค่าตัวเลขสูงสุดที่ภาษาของคุณรองรับ คุณอาจเลือกที่จะมีศูนย์นำหน้าในการเป็นตัวแทนไบนารี เอาต์พุตทศนิยมอาจไม่มีศูนย์นำหน้า รูปแบบอินพุตและเอาต์พุตเป็นตัวเลือก แต่จะไม่มีตัวคั่นใด ๆ ระหว่างตัวเลข (1,0,1,0,1,0,1,0)ไม่ใช่รูปแบบอินพุตที่ถูกต้อง แต่ทั้งสองอย่าง10101010และ(["10101010"])เป็น คุณจะต้องป้อนข้อมูลในทิศทาง "ปกติ" 1110คือไม่ได้147 กรณีทดสอบ: 1 1 10 2 101010 42 1101111111010101100101110111001110001000110100110011100000111 2016120520371234567 ความท้าทายนี้จะเกี่ยวข้องกับความท้าทายอื่น ๆ ไม่กี่เช่นนี้ , นี้และนี้

30
ฉันจะได้รับ repdigit ได้อย่างไร
เพื่อเป็นเกียรติแก่ตัวแทนเท่าที่ฉันมีหลายชั่วโมงที่ผ่านมาเมื่อฉันคิดถึงความท้าทายนี้เป็นครั้งแรก: เบอร์เช่นนี้ที่จะทำขึ้นของตัวเลขหลักเดียวซ้ำจะเรียกว่าrepdigits Repdigits สนุก! ร่างกายทุกคนจะมีความสุขมากขึ้นถ้าปริมาณของตัวแทนพวกเขามีความเป็น repdigit ¹แต่ผมใจร้อนดังนั้นคุณจึงจำเป็นที่จะช่วยฉันหาวิธีที่เร็วที่สุดที่จะได้รับ repdigit นี่คือความท้าทายของคุณ: รับจำนวนเต็มบวกที่เป็นตัวแทนของชื่อเสียงส่งออกจำนวนตัวแทนขั้นต่ำที่พวกเขาต้องการเพื่อรับไปยัง repdigit ตัวอย่างเช่นในขณะที่เขียนความท้าทายนี้ผู้ใช้Martin Enderมีตัวแทน 102,856 คน หมายเลขตัวแทนที่ใกล้ที่สุดคือ 111,111 ดังนั้นเขาจะต้องได้รับ: 8255 ตัวแทนจะต้องเป็น repdigit เนื่องจากคนไม่ชอบการสูญเสียตัวแทนเราจะพิจารณาเฉพาะการเปลี่ยนแปลงที่ไม่เป็นลบ ซึ่งหมายความว่าตัวอย่างเช่นหากใครบางคนอยู่ที่ 12 ตัวแทนแทนที่จะเสีย 1 ตัวแทนโซลูชันจะได้รับ 10 ตัวแทน สิ่งนี้อนุญาตให้ '0' เป็นเอาต์พุตที่ถูกต้องเนื่องจากใครก็ตามที่มี 111 rep อยู่ที่ repdigit แล้ว อินพุตและเอาต์พุตสามารถอยู่ในรูปแบบที่เหมาะสมและเนื่องจากเป็นไปไม่ได้ที่จะมีน้อยกว่า 1 ตัวแทนในไซต์ Stack Exchange ใด ๆ คุณจึงสามารถสรุปได้ว่าไม่มีอินพุตใดจะน้อยกว่า 1 หนึ่ง Cornercase ที่ควรทราบ: หากผู้ใช้มีตัวแทนน้อยกว่า …
32 code-golf  math  number 

5
ปฏิกิริยาลูกโซ่ของระเบิด
บทนำ: ก่อนงานนี่คือสิ่งที่ทุกองค์ประกอบทำบนแผนที่: ที่ดินเปล่า ( X): มันไม่ทำอะไรเลย Destroyed ที่ดิน ( -): นี่เป็นดินแดนเดียวกัน แต่ถูกทำลายด้วยระเบิด The bomb ที่ใช้งานอยู่ ( !): บนแผนที่สิ่งนี้จะทำลายทุกอย่างในพื้นที่ 3x3: XXXXX XXXXX XXXXX X---X XX!XX > will become > X---X XXXXX X---X XXXXX XXXXX The Passive bomb ( @): ไม่ทำอะไรเลยจนกว่าจะมีการระเบิดด้วยระเบิดอีกครั้ง นี่ก็มีรัศมีการระเบิด 3 x 3 : XXXXX XXXXX XXXXX XXXXX XX@XX > …

9
ลบวงเล็บที่ไม่จำเป็นออก
0123456789+*()คุณจะได้รับสตริงประกอบกับตัวละคร คุณสามารถสันนิษฐานได้ว่าสตริงนั้นเป็นนิพจน์ทางคณิตศาสตร์ที่ถูกต้องเสมอ งานของคุณคือการลบวงเล็บที่ไม่จำเป็นโดยสมมติว่าการคูณนั้นมีลำดับความสำคัญสูงกว่าการเพิ่ม ควรลบวงเล็บออกเฉพาะเมื่อไม่จำเป็นต้องมีโครงสร้าง : เนื่องจากการคูณมีลำดับความสำคัญสูงกว่า: 3+(4*5)=>3+4*5 เนื่องจากการคูณหรือการเพิ่มการเชื่อมโยง: 3*(4*5)=>3*4*5 เมื่อพวกเขาซ้ำซ้อนรอบการแสดงออก: 3*((4+5))=>3*(4+5) ควรเก็บวงเล็บไว้เมื่อสามารถทำให้ง่ายขึ้นเนื่องจากค่าตัวเลขเฉพาะ: 1*(2+3) ไม่ควรทำให้ง่ายขึ้น 1*2+3 0*(1+0) ไม่ควรทำให้ง่ายขึ้น 0*1+0 ตัวอย่าง: (4*12)+11 ==> 4*12+11 (1+2)*3 ==> (1+2)*3 3*(4*5) ==> 3*4*5 ((((523)))) ==> 523 (1+1) ==> 1+1 1*(2*(3+4)*5)*6 ==> 1*2*(3+4)*5*6 1*(2+3) ==> 1*(2+3) 0*(1+0) ==> 0*(1+0) (((2+92+82)*46*70*(24*62)+(94+25))+6) ==> (2+92+82)*46*70*24*62+94+25+6

30
มันเป็นชุดฟรี
ชุดไม่มีผลรวมหากไม่มีองค์ประกอบสอง (ไม่จำเป็นต้องแตกต่างกัน) เมื่อรวมเข้าด้วยกันเป็นส่วนหนึ่งของชุดตัวเอง ตัวอย่างเช่นไม่มี{1, 5, 7}ผลรวมเนื่องจากสมาชิกทั้งหมดเป็นเลขคี่และสองเลขคี่เมื่อรวมเข้าด้วยกันจะเป็นเลขคู่เสมอ ในทางกลับกัน{2, 4, 9, 13}ไม่มีผลรวมเป็น2 + 2 = 4หรือ4 + 9 = 13เพิ่มเข้าด้วยกันเป็นสมาชิกของชุด เขียนโปรแกรมหรือฟังก์ชั่นที่รับชุดเป็นอินพุตและส่งออกค่า Truthy หากชุดนั้นไม่มีผลรวมและเป็นเท็จอย่างอื่น ตัวอย่าง: Sum-free: {} {4} {1, 5, 7} {16, 1, 4, 9} Not sum-free: {0} {1, 4, 5, 7} {3, 0} {16, 1, 4, 8}

6
โอเอกซ์ด้วยการข้ามเท่านั้น
บทนำ ทุกคนรู้เกมโอเอกซ์ แต่ในความท้าทายนี้เราจะแนะนำการบิดเล็กน้อย เราจะใช้ไม้กางเขนเท่านั้น คนแรกที่ข้ามสามในแถวแพ้ ข้อเท็จจริงที่น่าสนใจคือจำนวนข้ามสูงสุดก่อนที่ใครบางคนจะสูญเสียเท่ากับ6 : X X - X - X - X X นั่นหมายความว่าสำหรับบอร์ด 3 x 3 จำนวนสูงสุดคือ 6 ดังนั้นสำหรับ N = 3 เราต้องเอาท์พุท 6 อีกตัวอย่างหนึ่งสำหรับ N = 4 หรือบอร์ด 4 x 4: X X - X X X - X - - - - X X …

9
หมุนตัวต้านเส้นทแยงมุม
พื้นหลัง ในภาษาการเขียนโปรแกรมที่เหมาะสมที่สุดมันง่ายมากที่จะหมุนแถวหรือคอลัมน์ของอาร์เรย์ 2D ในการท้าทายนี้งานของคุณคือหมุนตัวต้านเส้นทแยงมุมแทน โปรดจำไว้ว่าการต้านเส้นทแยงมุมของอาเรย์ 2 มิตินั้นเป็น 1D สไลซ์ในทิศทางตะวันออกเฉียงเหนือ↗ อินพุต อาร์เรย์ 2D สี่เหลี่ยมที่ไม่ว่างเปล่าของตัวเลขหลักเดียวในรูปแบบที่เหมาะสม โปรดทราบว่าอาเรย์อาจจะไม่ใช่รูปสี่เหลี่ยมจัตุรัส เอาท์พุต อาเรย์เดียวกัน แต่มีการต่อต้านในแนวทแยงหมุนหนึ่งขั้นตอนไปทางขวา ตัวอย่าง พิจารณา3x4อินพุตอาร์เรย์ 0 1 2 3 4 5 6 7 8 9 0 1 การต่อต้านแนวทแยงมุมของอาเรย์นี้คือ 0 4 1 8 5 2 9 6 3 0 7 1 เวอร์ชันที่หมุนได้ของพวกเขาคือ 0 1 4 2 8 …

4
ป้อนชื่อของคุณผ่าน D-pad
ปริศนา: พิจารณาเกมคอนโซล / มือถือที่มี d-pad ที่คุณจะต้องป้อนชื่อแปลก ๆ สิ่งนี้ปรากฏในเกมรุ่นเก่าหลายเกมก่อนที่จะใช้ QWERTY เป็นที่นิยมในคอนโซล (เช่นฉันเชื่อว่า Wii ใช้รูปแบบแป้นพิมพ์ QWERTY สำหรับป้อนข้อมูล) โดยทั่วไปแป้นพิมพ์บนหน้าจอจะมีผลกับ *: ค่าเริ่มต้น: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V …
32 code-golf 

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