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

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

2
ลำดับปริศนา Mondrian
แบ่งพาร์ติชันn X nสี่เหลี่ยมออกเป็นสี่เหลี่ยมหลายด้านที่ไม่สมภาคกัน a(n)มีความแตกต่างน้อยที่สุดระหว่างพื้นที่ที่ใหญ่ที่สุดและเล็กที่สุด ___________ | |S|_______| | | | L | | |_|_______| | | | | | |_____|___| |_|_________| (fig. I) สี่เหลี่ยมผืนผ้าที่ใหญ่ที่สุด ( L) มีพื้นที่2 * 4 = 8และสี่เหลี่ยมเล็กที่สุด ( S) 1 * 3 = 3มีพื้นที่ 8 - 3 = 5ดังนั้นความแตกต่างคือ รับจำนวนเต็มn>2ส่งออกความแตกต่างน้อยที่สุด ค่าที่ทราบทั้งหมดของลำดับในขณะที่ทำการโพสต์: 2, 4, 4, 5, 5, …

10
แมวตัวนี้มีข้อบกพร่อง? จริงๆ?
ท้าทาย: อ่านอินพุต (ภายในช่วง ASCII ที่มองเห็นได้) และเอาต์พุตพร้อมการแก้ไขเล็กน้อย: ในแต่ละชุดของอักขระ 10 ตัวของอินพุตสุ่ม (50/50): แทนที่หนึ่งอักขระ * (ด้วยการสุ่ม ** หนึ่งตัวในช่วง ASCII ที่มองเห็นได้) (เช่นlumberjackกลายเป็นlumbeZjack) หรือลบอักขระหนึ่งตัว (เช่นlumberjackกลายเป็นlmberjack) * หากชุดมีอักขระน้อยกว่า 10 ตัวคุณไม่จำเป็นต้องแก้ไข แต่คุณสามารถทำได้ ** ตัวละครอาจเหมือนกับอินพุตหนึ่งตราบใดที่ยังสุ่ม ตัวอย่าง: อินพุต: Go home cat! You're drunk! เอาต์พุต: Go hom cat! YouLre drunk! (เป็นเพียงตัวอย่างเนื่องจากเอาต์พุตอาจเป็นแบบสุ่มไม่ได้ใช้เป็นกรณีทดสอบ) กฎ: รหัสกอล์ฟตัวละครน้อยชนะ!

7
ผลรวมตัวเลขจนถึง Square
รับเป็นจำนวนเต็มใด ๆ x> 0 และฐานใด ๆ y> 3 รวมตัวเลขทั้งหมดของ x (ถ้าเขียนในฐานตั้ง) ทวีคูณด้วยจำนวนสูงสุดที่เป็นไปได้ (เสมอbase -1) ทำซ้ำจนกว่าค่านี้จะเป็น (y - 1) ^ 2 การค้นหาคือจำนวนครั้งของการวนซ้ำและขั้นตอนต่างๆ ตัวอย่างที่ 1: x= 739 y= 7 searched: (7 - 1) ^ 2 = 36 based: (b7)2104 sum: (dec)7 mul: (dec)42 based: (b7)60 sum: (dec)6 mul: (dec)36 2 steps needed …

18
Fibonacci Exponents
สำหรับความท้าทายนี้คุณจะต้องแสดงผลลัพธ์ของผลรวมของตัวเลขบางจำนวน ตัวเลขเหล่านี้คืออะไร? คุณได้รับอินพุต ( a, b) ซึ่งเป็นจำนวนเต็ม (บวกลบหรือศูนย์) a != bและa < bและแต่ละจำนวนเต็มภายในaและb(รวมถึงพวกเขา) จะมีเลขชี้กำลังตามตัวเลขฟีโบนักชี นี่เป็นตัวอย่างที่สับสน: Input: (-2, 2) Output: -2**1 + (-1**1) + 0**2 + 1**3 + 2**5 = -2 + -1 + 0 + 1 + 32 = 30 ระบุว่าหมายเลข Fibonacci แรกถูกแทนด้วยf(0)สูตรคือ: a**f(0) + ... + b**f(b-a+1) อินพุต, การประมวลผล, …

2
พิกัดหกเหลี่ยม: ขั้วโลกกับคาร์ทีเซียน
Wikipedia พูดเกี่ยวกับพิกัดเชิงขั้ว : ในวิชาคณิตศาสตร์ระบบพิกัดเชิงขั้วเป็นระบบพิกัดสองมิติซึ่งแต่ละจุดบนระนาบจะถูกกำหนดโดยระยะทางจากจุดอ้างอิงและมุมจากทิศทางอ้างอิง ดูเหมือนว่าสมบูรณ์แบบสำหรับการอธิบายกริดหกเหลี่ยม ใช้ตารางหกเหลี่ยมดังต่อไปนี้: A B C D E F G H I J K L M N O P Q R S จุดอ้างอิงของเราจะเป็นจุดศูนย์กลางของรูปหกเหลี่ยม ('J') และมุมอ้างอิงของเราจะอยู่ที่มุมซ้ายบนของรูปหกเหลี่ยม ('A') อย่างไรก็ตามเราจะอธิบายมุมในแง่ของจำนวนขั้นตอนตามเข็มนาฬิการอบด้านนอกของรูปหกเหลี่ยมจากจุดนี้ไม่ใช่มุม ดังนั้นเราจะเรียกมันว่า "หมายเลขขั้นตอน" แทนที่จะเป็นมุม ตัวอย่างเช่น 'C' อยู่ที่ (2, 2) เนื่องจากมีรัศมี 2 (เนื่องจากมีวงแหวนสองวงอยู่ห่างจากศูนย์กลาง 'J') และหมายเลขขั้นตอนที่ 2 (2 ตามเข็มนาฬิกาไปข้างหน้าจาก 'A ') ในทำนองเดียวกัน 'O' …

4
CUSRS - ระบบ Refactoring String ที่ไร้ประโยชน์อย่างสมบูรณ์!
บทนำ ฉันเป็นแฟนตัวยงของ SBU (สั้น แต่ไม่เหมือนใคร) ที่ท้าทายความสามารถในการเพาะปลูก PPCG ตลอดเวลา CUSRS เป็นระบบที่ออกแบบมาเพื่อ refactor สตริงฟังก์ชั่น CUSRS ใช้เวลา 2 พารามิเตอร์และเอาท์พุท 1 สตริง ท้าทาย จัดทำโปรแกรมฟังก์ชั่นแลมบ์ดาหรือทางเลือกที่ยอมรับได้เพื่อทำสิ่งต่อไปนี้: รับString inputและString refactor(เป็นตัวอย่าง) refactor inputใช้refactorดังนี้: refactorString จะอยู่ในรูปแบบของ((\+|\-)\w* *)+(regex) ตัวอย่างเช่น: +Code -Golf -lf +al แต่ละส่วนคือการกระทำที่ refactoring inputเพื่อดำเนินการเกี่ยวกับ แต่ละโปรแกรมยังมีตัวชี้ + จะแทรกคำต่อท้าย (โดยไม่มีเครื่องหมายบวก) ที่ตัวชี้ตำแหน่งปัจจุบันในสตริงแล้วรีเซ็ตตัวชี้เป็น 0 แต่ละการดำเนินการควรถูกนำไปใช้กับinputString และควรส่งคืนผลลัพธ์ ตัวอย่าง: input: Golf +Code //pointer location: …
11 code-golf  string 

7
มันเป็นต้นไม้เชิงเส้น (ฉบับที่กว้างแรก)
พื้นหลัง ต้นไม้ที่ไม่มีป้ายกำกับอาจมีลักษณะเช่นนี้: o / | \ o o o | / \ o o o ในการทำให้ต้นไม้นี้เป็นเส้นตรงเราต้องติดป้ายแต่ละโหนดoด้วยจำนวนของโหนดลูก: 3 / | \ 1 0 2 | / \ 0 0 0 จากนั้นเขียนตัวเลขลงในรายการในลักษณะลมหายใจก่อนหมายถึงบรรทัดต่อบรรทัดและจากซ้ายไปขวา: [3, 1, 0, 2, 0, 0, 0] นี่คือการแสดงที่ไม่เหมือนใครและไม่ซ้ำใครของต้นไม้ด้านบนซึ่งหมายความว่าไม่มีต้นไม้บริสุทธิ์ที่แตกต่างกันสองตัวที่จะมีเส้นตรงเหมือนกันและเราสามารถสร้างต้นไม้ดั้งเดิมขึ้นใหม่จากรายการ แม้ว่าต้นไม้แต่ละต้นจะสอดคล้องกับรายการจำนวนเต็มจำนวนหนึ่ง แต่ไม่ใช่รายการจำนวนเต็มแต่ละรายการที่แสดงถึงต้นไม้เชิงเส้นที่ถูกต้อง: ตัวอย่างเช่น[2, 0, 0, 0]ไม่ได้เป็นตัวแทนของต้นไม้ที่ถูกต้องถ้าเราพยายามที่จะทำให้เป็นเส้นตรง [2,0,0,0] -> 2 [0,0,0] -> 2 …

2
ขอย่อตัวเลขเหล่านั้น! ตอนนี้ย้อนกลับ?
บทนำ: เช่น Twitter และ Instagram และอื่น ๆ ผมอยากจะแสดงผลตัวเลขเหมือน1.2Kและ3.8 Mแทนหรือ1,2223,823,456 แต่นั่นไม่ใช่ทั้งหมด! อย่างที่เราทุกคนรู้ว่าอาจมีมนุษย์บางคนที่ไม่ชอบตัวย่อเหล่านี้อย่างแน่นอนและจะพยายามที่จะกลับพวกเขา ดังนั้น1.2kจะกลายเป็น1,200และจะกลายเป็น3.8 M3,800,000 งาน: งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่แปลงรายการของตัวเลข ( ซึ่งได้รับเป็นสตริง ) เป็นคู่ตัวย่อและในทางกลับกัน ตัวอย่างเช่นหากรายการอินพุต (หรือใด ๆSTDIN) เป็น['1.4k', '1,234,567', '7.99M']เช่นนั้นคุณควรส่งออก: ['1,400', '1.2M', '7,990,000'] คุณสามารถทำตามสคีมาต่อไปสำหรับตัวย่อ: 10 3 -> หนึ่งกิโลกรัม -> K 10 6 -> หนึ่งล้าน -> M 10 9 -> หนึ่งพันล้าน -> B รหัสของคุณอาจถือว่าเป็นตัวพิมพ์เล็กทั้งหมดตัวพิมพ์ใหญ่ทั้งหมดตัวพิมพ์ผสมหรือตัวพิมพ์เล็กที่ไม่ได้กำหนดสำหรับการป้อนข้อมูลและใช้สิ่งเหล่านี้เพื่อการส่งออก แต่ควรสอดคล้องกัน กฎและข้อ …
11 code-golf 

7
การรื้อถอนอาคาร
ท้าทาย เขียนโปรแกรม / เต็มฟังก์ชั่นที่จะรื้อถอนอาคารที่ได้รับในอัตรา1 ชั้นต่อวินาที INPUT อินพุตคือสิ่งปลูกสร้างผ่านSTDIN (หรืออะไรก็ตามที่ถูกเรียกในภาษาของคุณ) หรือผ่านฟังก์ชั่น ARGUMENT t = 0 วิ | |#| {#} |# #| |# # #| |# # #| |# # #| TTTTTTT การป้อนข้อมูลประกอบด้วย: | เครื่องหมายเริ่มต้นและสิ้นสุดของพื้น {, }เครื่องหมายชั้นกับวัตถุระเบิด # เป็นหน้าต่างที่ใช้สำหรับตกแต่ง คือพื้นที่ซึ่งมีอยู่ทุกหนทุกแห่งภายในชั้นที่#ไม่มี T ทำเครื่องหมายพื้นดิน (ไม่สามารถทำลายได้) * ทำเครื่องหมายพื้นระเบิด กฎการป้อนข้อมูล: สิ่งปลูกสร้างเริ่มจากด้านบนหนึ่ง|และสิ้นสุดบนพื้นดิน (โดยไม่มี ( T) = no ( …

1
ลำดับการสลับ
Intro ลำดับการสลับถูกกำหนดดังนี้: เริ่มต้นด้วยnคนที่ยืนเป็นวงกลม ( 6สำหรับตัวอย่างนี้) 1 2 6 3 5 4 เริ่มต้นจากบุคคล1บุคคลที่อยู่ทางด้านซ้ายของบุคคล "ที่เลือก" จะถูกลบออก 1 6 3 5 4 บุคคลที่ถูกลบสามารถ "เปลี่ยน" วิธีการกำจัดได้: หากบุคคลที่ถูกลบออกเป็นเลขคู่ (ซึ่งเป็นในกรณีนี้) บุคคลที่ถูกลบออกคนถัดไปจะอยู่ทางขวาของบุคคล "ที่ถูกเลือก" ถัดไป หากบุคคลที่ถูกลบออกเป็นเลขคี่บุคคลที่ถูกลบออกคนถัดไปจะอยู่ทางซ้ายของบุคคล "ที่เลือก" ถัดไป บุคคลที่ถูกเลือกถัดไปจะขึ้นอยู่กับบุคคลที่ถูกลบไปก่อนหน้านี้ด้วย หากบุคคลที่ถูกลบออกเป็นเลขคู่บุคคลที่ถูกเลือกถัดไปจะอยู่ทางขวาของบุคคลที่เลือกก่อนหน้า หากบุคคลที่ถูกลบออกเป็นเลขคี่ให้ดูด้านบน แต่แทนที่ "ขวา" ด้วย "ซ้าย" 6ดังนั้นบุคคลที่ได้รับการแต่งตั้งต่อไปคือแล้ว ตอนนี้เราลบบุคคลไปทางขวาของ6ซึ่งก็คือ5: 1 6 3 4 เพราะ5แปลกแล้วบุคคลที่ถูกลบจะอยู่ทางซ้าย 1บุคคลที่ได้รับการแต่งตั้งใหม่คือ ตอนนี้เราลบ3: 1 6 4 เรายังคงกระบวนการนี้จนกว่าเราจะเหลือ …

3
พิมพ์ค่าเฉพาะใน Wythoff matrix modulo 2
Wythoff เมทริกซ์เป็นเมทริกซ์อนันต์ประกอบด้วยหมายเลขใจแคบของแต่ละตารางบนกระดานหมากรุกในเกม Wythoff ของ แต่ละรายการในเมทริกซ์นี้เท่ากับจำนวน nonnegative ที่เล็กที่สุดซึ่งไม่ปรากฏที่ใดก็ได้ด้านบนไปทางซ้ายหรือทิศตะวันตกเฉียงเหนือของแนวทแยงมุมของตำแหน่งของรายการ สี่เหลี่ยมจัตุรัสขนาด 20 คูณ 20 ด้านซ้ายบนมีลักษณะดังนี้: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 2 0 4 5 3 7 8 6 10 11 9 13 14 12 16 17 15 …

4
จัดทำตาราง!
การบรรยายสรุป คุณเป็นบอตในตาราง 2 มิติที่ขยายอย่างไม่สิ้นสุดในทั้งสี่ทิศเหนือใต้ตะวันออกและตะวันตก เมื่อกำหนดตัวเลขคุณจะต้องย้ายบอทเพื่อให้ได้ไปยังหมายเลขเป้าหมาย นี่คือวิธีการทำงานของกริด: คุณสามารถย้ายใน 4 ทิศทาง: เหนือ, ใต้, ตะวันออกหรือตะวันตก เมื่อคุณย้ายออกจากเซลล์คุณจะไม่ได้รับอนุญาตให้กลับไปที่เซลล์นั้นอีกครั้ง (อย่างมีประสิทธิภาพจะถูกลบออกจากแผนที่) มี "เคาน์เตอร์" ซึ่งเป็นไป1234567890(จึงไปจาก1ไป2... ทุกทางไป9แล้ว0จากนั้นก็กลับไป1อีกครั้ง) ซึ่งการเปลี่ยนแปลงทุกครั้งที่คุณย้าย นอกจากนี้คุณยังมี "ค่า" ซึ่งเริ่มต้นที่ 0 เมื่อคุณย้ายไปในทิศทางใดการดำเนินการทางคณิตศาสตร์จะเกิดขึ้นขึ้นอยู่กับทิศทางที่คุณเคลื่อนที่: ทิศเหนือ: มูลค่าของคุณเพิ่มขึ้นตามเคาน์เตอร์ ( value += counter) ตะวันออก: ค่าของคุณลดลงโดยเคาน์เตอร์ ( value -= counter) ทิศใต้: มูลค่าของคุณถูกคูณด้วยตัวนับ ( value *= counter) ตะวันตก: ค่าของคุณถูกหารด้วยตัวนับ ( value /= counter) 5/2 -> …

14
ช่วยฉันฉันหลงทางในมหาสมุทร!
บทนำ วันนี้ฉันไปตกปลาตามลำพังกับเรือแคนูโชคไม่ดีที่ฉันหลับไปและกระแสน้ำก็พาฉันออกไปฉันทำพายหายตอนนี้คืนและฉันก็หายไปในมหาสมุทร! ฉันไม่สามารถเห็นชายฝั่งดังนั้นฉันต้องอยู่ไกล! ฉันมีโทรศัพท์มือถือของฉัน แต่ใช้งานไม่ได้เพราะมันเปียกด้วยน้ำทะเลเค็มฉันไม่สามารถพูดคุยหรือได้ยินอะไรเพราะไมค์และลำโพงโทรศัพท์เสีย แต่ฉันสามารถส่ง SMS ถึงเพื่อนที่อยู่บนชายหาดของชายฝั่ง! เพื่อนของฉันมีไฟฉายที่ทรงพลังมากและเขายกมันขึ้นบนต้นไผ่เพื่อแสดงให้ฉันเห็นทิศทางที่ถูกต้อง แต่ฉันไม่สามารถเข้าแถวได้เพราะฉันไม่มีพายดังนั้นฉันต้องบอกเขาว่าฉันเป็นใคร จับฉัน! เพื่อนของฉันบอกฉันว่าเขาเก็บคบเพลิงไว้ที่ 11.50 เมตรบนระดับน้ำทะเลและฉันเห็นแสงเหนือขอบฟ้า ตอนนี้ฉันจำได้แค่จากโรงเรียนว่ารัศมีของโลกควรอยู่ที่ 6371 กม. ที่ระดับน้ำทะเลและฉันนั่งในเรือแคนูของฉันเพื่อให้คุณคิดว่าตาของฉันอยู่ที่ระดับน้ำทะเลเช่นกัน งาน เพื่อนของฉันกำลังคบเพลิงเป็นครั้งคราว (ตอนนี้อยู่ที่ 12.30 เมตร) โปรดเขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบที่จะช่วยฉันคำนวณระยะทางจากตำแหน่งของเพื่อนฉัน! นี่คือแผนภาพ (ไม่ปรับขนาด): จุดสีส้มที่มีชื่อว่าMฉันจุดสีแดงที่มีป้ายกำกับTคือไฟฉาย เส้นสีเขียวคือระยะเชิงเส้นระหว่างMถึงT อินพุต ใช้ความสูงคบเพลิงเป็นhเมตรที่ระดับน้ำทะเลซึ่งฉันเห็นอยู่ด้านบนของขอบฟ้าในรูปแบบของจำนวนจุดลอยตัวที่มีความแม่นยำทศนิยมสองตำแหน่ง (ที่มีความแม่นยำ 1 เซนติเมตรหรือ 0.01 เมตร) ใน รวมตั้งแต่ 0 ถึง 100 เอาท์พุต คุณควรคืนความยาวยูคลิดของเส้นสีเขียวด้วยความแม่นยำ 1 ซม. ตัวอย่างเช่นถ้าคุณส่งออกเป็นเมตรควรมีทศนิยมสองตำแหน่ง (อย่างน้อย) เอาต์พุตสามารถเป็นได้ทั้งเมตรหรือกิโลเมตร แต่เคารพความถูกต้อง กรณีทดสอบ: ค่าทั้งหมดเป็นเมตร …

3
สั่งซื้อล่วงหน้า + โพสต์ตามสั่งในการสั่งซื้อ
งาน รับการสำรวจเส้นทางการสั่งซื้อล่วงหน้าและการสั่งซื้อสินค้าของต้นไม้ไบนารีเต็มรูปแบบให้ส่งคืนการสำรวจเส้นทางตามลำดับ การสำรวจเส้นทางจะถูกแสดงเป็นสองรายการซึ่งทั้งคู่ประกอบด้วยnจำนวนเต็มบวกที่แตกต่างกันโดยแต่ละโหนดจะระบุเฉพาะ โปรแกรมของคุณอาจใช้รายการเหล่านี้และออกผลลัพธ์การส่งผ่านตามลำดับโดยใช้รูปแบบ I / O ที่สมเหตุสมผล คุณอาจถือว่าข้อมูลที่ป้อนนั้นถูกต้อง (นั่นคือรายการจริง ๆ แล้วเป็นตัวแทนการสำรวจเส้นทางของต้นไม้บางต้น) นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ คำนิยาม ต้นไม้ไบนารีเต็มรูปแบบเป็นโครงสร้างที่ จำกัด ของโหนดแทนนี่โดยจำนวนเต็มบวกที่ไม่ซ้ำกัน ต้นไม้ไบนารีเต็มรูปแบบคือใบไม้ซึ่งประกอบด้วยโหนดเดียว: 1 หรือสาขาที่ประกอบด้วยหนึ่งโหนดที่มีสองsubtrees (เรียกว่าsubtrees ซ้ายและขวา ) ซึ่งแต่ละอันก็เป็นต้นไม้ไบนารีเต็มรูปแบบ: 1 / \ … … นี่คือตัวอย่างเต็มของต้นไม้ไบนารีเต็ม: 6 / \ 3 4 / \ / \ 1 8 5 7 / \ 2 9 การสำรวจเส้นทางการสั่งซื้อล่วงหน้าของต้นไม้ไบนารีเต็มถูกกำหนดแบบเรียกซ้ำดังนี้: สำรวจเส้นทางการสั่งซื้อล่วงหน้าของใบมีโหนดnรายการ [ …

2
ตีความการทำซ้ำ!
ความท้าทายนี้เป็นครั้งแรกในซีรีส์สองความท้าทายเกี่ยวกับการทำซ้ำ วินาทีจะเพิ่มขึ้นในไม่ช้า ในภาษาที่เรียกว่า Repetition (สิ่งที่ฉันเพิ่งสร้างขึ้น) ประกอบด้วยสตริงที่ไม่มีที่สิ้นสุดของที่12345678901234567890...มีการ1234567890ทำซ้ำตลอดไป ไวยากรณ์ต่อไปนี้มีให้สำหรับหมายเลขเอาต์พุต: +-*/: สิ่งนี้จะแทรกโอเปอเรเตอร์ในสตริงของตัวเลขที่ซ้ำกัน ตัวอย่าง: +-> 1+2= 3( +แทรก+ระหว่าง1และ2) +*-> 1+2*3= 1+6= 7(เหมือนข้างบนยกเว้นใช้ตัวดำเนินการสองตัวในขณะนี้) /-> 1/2= 0(การทำซ้ำใช้การหารจำนวนเต็ม) //-> 1/2/3= 0/3= 0(การทำซ้ำใช้ "การเชื่อมโยงด้านซ้าย" พร้อมการลบและการหารหลายรายการ) ผู้ให้บริการแต่ละรายจะถูกแทรกเพื่อให้มีหนึ่งหลักทางด้านซ้ายยกเว้นว่ามีc(ดูด้านล่าง) c: เชื่อมต่อกับตัวเลขถัดไปในสตริง ตัวอย่าง: c+-> 12+3= 15( c"ต่อไป" 1และเชื่อมต่อกับตัวเลขถัดไป2เพื่อจัดรูปแบบ12) +c-> 1+23=24 ccc -> 1234 (): วงเล็บสำหรับการประมวลผลหมายเลข ตัวอย่าง: (c+)*-> (12+3)*4= 15*4= 60(การทำซ้ำใช้ลำดับของการดำเนินการ) (c+)/c-> (12+3)/45= …

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