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

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

30
นั่นเป็นลิงจำนวนมาก
ทฤษฎีบทลิงอนันต์กล่าวว่าให้เวลาที่ไม่มีที่สิ้นสุด, เครื่องส่งกระแสที่ไม่รู้จบของตัวอักษรแบบสุ่มจะพิมพ์ข้อความใด ๆ ที่กำหนด ฟังดูแล้วเหมือนความคิดที่ดีสำหรับความท้าทาย กระบวนการ เพื่อให้ลิงมีขนาดสตริง A ควรทำตามขั้นตอนต่อไปนี้: ใช้สตริงที่ว่างเปล่า เราจะเรียกสตริงนี้ว่า B เลือกอักขระ ASCII แบบสุ่มที่พิมพ์ได้อย่างสม่ำเสมอ (อักขระที่อยู่ในช่วง0x20ถึง0x7E) และเพิ่มอักขระนั้นเป็น B ถ้า A เป็นสตริงย่อยของ B, B เป็นสตริงลิงตัวเรา มิฉะนั้นให้ทำซ้ำขั้นตอนที่ 2 จนกว่า A จะเป็นสตริงย่อยของ B กระบวนการนี้เป็นเพียงตัวอย่างเท่านั้นอาจมีวิธีที่ง่ายกว่านี้ขึ้นอยู่กับภาษาของคุณ คุณไม่จำเป็นต้องทำตามวิธีการนี้อย่างแน่นอนตราบใดที่การกระจายของผลลัพธ์ที่ได้เท่ากันสำเร็จ ความท้าทาย เขียนโปรแกรมหรือฟังก์ชั่นที่ให้สตริงที่ไม่ว่างในรูปแบบที่เหมาะสมส่งคืนเวอร์ชันลิงของสตริงนั้น โปรแกรมของคุณใช้งานได้จริงกับอินพุตที่มีความยาว 3 หรือน้อยกว่าเท่านั้น สำหรับอินพุตที่ยาวกว่าจะอนุญาตให้ยกเลิกก่อนโดยมีหรือไม่มีเอาต์พุตใด ๆ ตัวอย่าง น่าเสียดายที่มันยากที่จะสร้างตัวอย่างสำหรับคำถามนี้เนื่องจากลักษณะแบบสุ่มของมันและเอาต์พุตขนาดใหญ่ อย่างไรก็ตามฉันสามารถจัดหาตัวอย่างเดียวสำหรับอินพุตhiบน Hastebin เกณฑ์การให้คะแนน ตั้งแต่นี้เป็นโค้ดกอล์ฟการส่งที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ

6
เห็นภาพทฤษฎีบท Nicomachus
ทฤษฎีบทของ Nichomachus เชื่อมโยงกับผลบวกของผลรวมของลูกบาศก์: และมีการสร้างภาพทางเรขาคณิตที่สวยงาม: ถาม: สร้างส่วนที่ 2d ของการสร้างภาพข้อมูลนี้ใน ascii คุณจะต้องตรวจสอบให้แน่ใจว่าแผนภาพของคุณมีการแบ่งเขตด้วยภาพทั้งหมด วิธีนี้ง่ายที่สุดที่จะทำได้ด้วย "สี่สี" แม้ว่าจะเป็นไปได้ที่จะทำได้ด้วยสามสีเท่านั้น (ดูตัวอย่างด้านล่างสำหรับวิธีการ) ด้วยสี่สีคุณสามารถใช้สองสีเพื่อแยกความแตกต่างระหว่างภูมิภาคภายใน "สตริป" (เช่นส่วนต่าง ๆ ที่ประกอบเป็นคิวบ์เดียว) และสองสีเพื่อแยกความแตกต่างระหว่างแถบที่อยู่ติดกัน คุณสามารถใช้สีได้มากกว่าสี่สีหากต้องการ หากสิ่งใดทำให้เกิดความสับสนตัวอย่างผลลัพธ์ด้านล่างควรชี้แจง อินพุต / เอาต์พุต อินพุตเป็นจำนวนเต็มเดียวที่มากกว่า 0 เอาท์พุทเป็นตาราง ASCII คล้ายกับตัวอย่างด้านล่างซึ่งสอดคล้องกับกริดแบนสำหรับหมายเลขอินพุตนั้นในภาพด้านบน ช่องว่างนำหน้าและต่อท้ายก็โอเค นี่คือรหัสกอล์ฟที่มีกฎมาตรฐาน ตัวอย่างผลลัพธ์ N = 1 # N = 2 #oo o@@ o@@ N = 3 #oo+++ o@@+++ o@@+++ +++### …

24
Plus Primes vs Minus Primes
พวกเราส่วนใหญ่รู้ว่า ... ว่าช่วงเวลาทั้งหมดp>3อยู่ในรูปแบบ แต่Plus Primes ( 6n+1) จำนวนเท่าไหร่และMinus Primes ( 6n-1) จำนวนเท่าไหร่ในช่วงใดช่วงหนึ่ง ความท้าทาย ได้รับจำนวนเต็มk>5, นับจำนวนprimes<=kเป็นPlusPrimesและวิธีการหลายมีMinusPrimes ตัวอย่าง เพราะk=100เรามี [5, 11, 17, 23, 29, 41, 47, 53, 59, 71, 83, 89] 12 MinusPrimes และ [7, 13, 19, 31, 37, 43, 61, 67, 73, 79, 97] 11 PlusPrimes เพราะk=149เรามี [5, 11, 17, 23, …

30
#OctothorpeAsciiArt
Octothorpe (เรียกว่าสัญญาณจำนวนกัญชาหรือแฮชแท็กหรือเครื่องหมายปอนด์)เป็นอักขระ ASCII ต่อไปนี้: # นั่นไม่ใช่เรื่องสนุกหรอกเหรอ? ช่วยสร้างเวอร์ชั่นที่ใหญ่กว่า! นี่คือความท้าทายของคุณ: กำหนดจำนวนเต็มบวกN , เอาท์พุท hashtag ASCII ขนาดN ตัวอย่างเช่นแฮชแท็ก ASCII ขนาด1มีลักษณะดังนี้: # # ##### # # ##### # # อนุญาตให้ใช้ช่องว่างต่อท้ายในแต่ละบรรทัดได้ แต่ไม่จำเป็น อินพุตจะเป็นจำนวนเต็มบวกที่ถูกต้องเสมอดังนั้นคุณไม่จำเป็นต้องจัดการกับตัวเลขที่ไม่ใช่เชิงลบหรือ 0 เอาต์พุตของคุณอาจอยู่ในรูปแบบที่เหมาะสมดังนั้นจึงส่งออกไปยัง STDOUT ส่งคืนรายการสตริงหรือสตริงด้วย การขึ้นบรรทัดใหม่, เมทริกซ์ 2 มิติของตัวอักษร, การเขียนไปยังไฟล์, ฯลฯ นั้นใช้ได้ กรณีทดสอบ 2: ## ## ## ## ########## ########## ## ## ## …

26
ทำตัวให้เฉียบสุด ๆ
พื้นหลัง เฉลิมฉลองการเปิดตัว Dyalog APL 16.0โดยที่การแก้ไขปัญหานี้คือ{⊢⌺(≢⍵)⊢⍵}คำอธิบาย งาน กำหนดสตริง ASCII พิมพ์ความยาวแปลก n , ทำให้n × nตารางกับสตริงศูนย์กลางแนวนอนซ้ำจะเป็นศูนย์กลางในแนวตั้งและมี acrostics ของสายเดียวกันในแต่ละแถวและคอลัมน์ โปรดทราบว่าทั้งหมด แต่สตริงศูนย์กลางจะถูกตัดออกเพื่อให้ขนาดของตารางn × n คำอธิบายรหัสของคุณจะได้รับการชื่นชมมาก กฎระเบียบ คุณอาจมีช่องว่างต่อท้ายและบรรทัดใหม่ (รวมถึงสามเหลี่ยมล่างขวา) คุณอาจส่งคืนรายการสตริง ตัวอย่างการใช้สตริงABXCD: nคือ 5. ก่อนอื่นเราวาดสองเส้นกลาง, หนึ่งแนวนอนและแนวตั้งหนึ่ง: ┌─────┐ │ A │ │ B │ │ABXCD│ │ C │ │ D │ └─────┘ (เพิ่มขอบเขต 5 × 5 เพื่อความชัดเจน) …
35 code-golf  string 

30
สายนี้เป็นตัวอักษรที่ทำกงเกวียนหรือไม่?
แรงบันดาลใจท้าทายคือสิ่งที่ฉันเห็นที่ไหนสักแห่ง: คำว่า "แม่ชี" เป็นเพียงตัวอักษรnกำลังทำกงล้อ ความท้าทายของคุณคือการใช้สายและตรวจสอบว่ามันเป็นตัวอักษรตัวแรกที่ทำล้อ กฎระเบียบ สตริงเป็นตัวอักษรที่ทำล้อเลียนถ้า: ตัวอักษรตัวแรกเหมือนกับตัวอักษรตัวสุดท้าย (จดหมายไม่สามารถตกลงบนหัวของมันได้) สตริงจะสลับระหว่างตัวอักษรของวงล้อหมุนทุกตัวละครหนึ่งตัว ตัวอักษร cartwheeling มีnและu, mและw, และb qโปรดทราบว่าnและwร่วมกันไม่ได้ cartwheeling ตัวอักษรและไม่เป็นและwb คุณจะใช้สายอักขระโดยใช้วิธีการอินพุตมาตรฐานของเรา คุณจะส่งออกค่าความจริงหากสตริงเป็นตัวอักษรการหมุนวนและค่าเท็จถ้าไม่ได้ เอาต์พุตสามารถทำได้โดยใช้วิธีเอาต์พุตมาตรฐานใด ๆ กฎเพิ่มเติม: เฉพาะอักษรตัวพิมพ์เล็กกงเกวียนn/ u/ m/ w/ b/ qจำเป็นที่จะต้องได้รับการจัดการ คุณอาจคิดว่าอินพุตไม่เคยว่างเปล่า สตริงอักขระหนึ่งตัวไม่ใช่รถเข็นที่ถูกต้อง กรณีทดสอบ Input -> Output nun -> truthy nunun -> truthy nunununu -> falsy wmw -> truthy wmwun -> falsy …

17
ลองทำ“ enciph5r47g” กันบ้าง
นี่คือสิ่งที่ตรงกันข้ามของLet's do "deciph4r4ng" ในความท้าทายนี้งานของคุณคือการเข้ารหัสสตริง โชคดีที่อัลกอริทึมนั้นค่อนข้างง่าย: การอ่านจากซ้ายไปขวาอักขระการเขียนทั่วไปแต่ละตัว (ASCII ช่วง 32-126) จะต้องถูกแทนที่ด้วยตัวเลขN (0-9) เพื่อระบุว่ามันเหมือนกับตัวอักษรN + 1ตำแหน่งก่อนหน้า ข้อยกเว้นคือเมื่อตัวละครไม่ปรากฏภายใน 10 ตำแหน่งก่อนหน้าในสตริงเดิม ในกรณีนี้คุณควรพิมพ์อักขระอีกครั้ง อย่างมีประสิทธิภาพคุณควรจะสามารถย้อนกลับการดำเนินการจากความท้าทายเดิม ตัวอย่าง สตริงอินพุต"Programming"จะถูกเข้ารหัสด้วยวิธีนี้: "Prog2am0in6"ดังนั้นการส่งออกที่คาดว่าจะเป็น คำอธิบายและกฎ สตริงอินพุตจะมีอักขระ ASCII ในช่วง 32 - 126 เท่านั้น คุณสามารถสันนิษฐานได้ว่ามันจะไม่มีวันว่างเปล่า สายเดิมรับประกันว่าจะไม่มีตัวเลขใด ๆ เมื่อตัวละครได้รับการเข้ารหัสมันอาจจะถูกอ้างอิงโดยตัวเลขที่ตามมา ยกตัวอย่างเช่นควรได้รับการเข้ารหัสเป็น"alpaca""alp2c1" การอ้างอิงจะไม่ล้อมรอบสตริง: สามารถอ้างอิงอักขระก่อนหน้าเท่านั้น คุณสามารถเขียนโปรแกรมเต็มรูปแบบหรือฟังก์ชั่นซึ่งพิมพ์หรือส่งออกผลลัพธ์ นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดเป็นไบต์ชนะ ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม กรณีทดสอบ Input : abcd Output: abcd Input : aaaa Output: …

15
11 = (1 + 2 + 3 + 4 + 5) - (1 + 2 + 3) + (6) - (4)
รับจำนวนเต็มบวกNงานของคุณคือส่งคืนจำนวนขั้นตอนที่ต้องการโดยอัลกอริทึมต่อไปนี้เพื่อไปถึงN : หาจำนวนที่น้อยที่สุดสามเหลี่ยมT ฉันเช่นว่าT ฉัน ≥ N สร้างรายการที่สอดคล้องกันL = [1, 2, ... , ผม] ในขณะที่ผลรวมของเงื่อนไขของLมากกว่าNให้ลบคำแรกออกจากรายการ หากผลรวมของเงื่อนไขของLน้อยกว่าNให้เพิ่มค่าiและผนวกเข้ากับรายการ ดำเนินการต่อด้วยขั้นตอนที่ 2 เราจะหยุดทันทีที่Nถึง เฉพาะขั้นตอนแรกเท่านั้นที่ดำเนินการอย่างเป็นระบบ ขั้นตอนที่ # 2 และ # 3 อาจไม่ได้รับการดำเนินการเลย ตัวอย่าง ด้านล่างนี้เป็นตัวอย่างสำหรับN = 11 : ดังนั้นการส่งออกคาดว่าN = 11คือ4 ตัวอย่างอื่น ๆ : N = 5 - เราเริ่มต้นด้วย T 3 = 1 + 2 + …

11
รหัสกอล์ฟสำหรับเพื่อนแท้ของฉัน
... และกอล์ฟจริงสำหรับเพื่อนรหัสของฉัน นี่เป็นความท้าทายบนพื้นฐานของการ์ตูน XKCD อายุหนึ่งปีซึ่งส่วนใหญ่ประกอบด้วยขนมปังปิ้ง (ล้อเลียนของการ์ตูนเรื่องแรก) ตามรูปแบบที่แตกต่างกัน แต่มีการเปลี่ยนแปลงเล็กน้อย งานของคุณคือการเขียนโปรแกรม (หรือฟังก์ชั่น) ที่ใช้ครึ่งแรกของขนมปังจากการ์ตูน (ทุกอย่างจนถึงและรวมถึงfriends) เป็นอินพุต (ผ่าน stdin หรืออาร์กิวเมนต์ของฟังก์ชัน) และผลลัพธ์ (หรือส่งคืน) ข้อความที่แม่นยำของ ครึ่งหลัง คุณไม่ต้องจัดการกับอินพุตที่ไม่ถูกต้องใช้ช่องโหว่มาตรฐานรหัสที่สั้นที่สุดเป็นไบต์ชนะ ตัวอย่าง เพื่อช่วยเหลือผู้ที่ไม่ต้องการคัดลอกขนมปังปิ้งจากที่อื่นนี่คือทั้งหมดของพวกเขาแยกออกเป็นอินพุทและเอาท์พุท Input: Champagne for my real friends Output: and real pain for my sham friends! Input: Pseudopods for my real friends Output: and real pods for my pseudo-friends! …

22
สโนว์บอลต่อสู้ KoTH!
ผลลัพธ์ (22 พฤษภาคม 2560 21:40:37 UTC) Masterได้รับรางวัล 18 รอบแพ้ 2 รอบและผูก 0 รอบ Save Oneชนะ 15 รอบแพ้ 3 รอบและผูก 2 รอบ Machine Gunชนะ 14 รอบแพ้ 3 รอบแพ้ 3 รอบและผูก 3 รอบ Monte Botชนะ 14 รอบแพ้ 3 รอบและผูก 3 รอบ Amb Botชนะ 12 รอบแพ้ 8 รอบและผูก 0 รอบ Cowardชนะ 11 รอบแพ้ …

5
ตัวอักษร, ตัวเลข, สัญลักษณ์, ช่องว่าง, ทำซ้ำ
มีอักขระ ASCII 97 ตัวที่ผู้คนพบเป็นประจำ พวกเขาแบ่งออกเป็นสี่ประเภท: ตัวอักษร (ทั้งหมด 52 ตัว) ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ตัวเลขหรือตัวเลข (10 ทั้งหมด) 0123456789 สัญลักษณ์และเครื่องหมายวรรคตอน (32 ทั้งหมด) !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ พื้นที่ว่าง (ทั้งหมด 3 รายการ) พื้นที่ แท็บและการขึ้นบรรทัดใหม่\t \n(เราจะใช้รูปแบบอักขระขึ้นบรรทัดใหม่เหมือน\r\nตัวละครตัวหนึ่ง) เพื่อความกระชับเราจะเรียกหมวดหมู่เหล่านี้ว่า L, N, S และ W ตามลำดับ เลือกพีชคณิต 24 ตัวที่LNSWคุณต้องการและทำซ้ำไปเรื่อย ๆ เพื่อสร้างเทมเพลตการเขียนโปรแกรมสำหรับตัวคุณเอง ตัวอย่างเช่นคุณอาจเลือกการเรียงสับเปลี่ยนNLWSดังนั้นเทมเพลตการเขียนโปรแกรมของคุณจะเป็น: NLWSNLWSNLWSNLWSNLWS... คุณต้องเขียนโปรแกรมหรือฟังก์ชั่นตามเทมเพลตนี้โดยที่: ทุกคนLจะถูกแทนที่ด้วยตัวอักษรใด ๆ ( ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz) ทุกคนNจะถูกแทนที่ด้วยหมายเลขใด ๆ ( 0123456789) ทุกคนSจะถูกแทนที่ด้วยสัญลักษณ์ใด ๆ …

30
ฉันต้องเขียนเท่าไหร่
การเขียนตัวเลขเป็นส่วนหนึ่งของโลกแห่งการเขียนโปรแกรมสวัสดีซึ่งมักจะเป็นตัวเลข 1-10 ฉันต้องการเขียนตัวเลขจำนวนมาก! จำนวนมากจำนวนมาก แต่ฉันต้องเขียนตัวเลขกี่ตัว? งาน กำหนดอินพุตจำนวนเต็มให้ตัวเลขเป็นเอาท์พุทที่จะให้ฉันจำนวนหลักที่จะอยู่ในสตริงที่มีตัวเลขจำนวนเต็มทั้งหมดในช่วงจาก 0 ถึงอินพุตรวม ตัวระบุการปฏิเสธ ("-") นับเป็นอักขระเดียว ตัวอย่าง I / Os อินพุต: 8 เขียนออก: 0,1,2,3,4,5,6,7,8 เอาต์พุต: 9 ป้อนข้อมูล: 101 เขียนออก: 0,1,2,3 .... , 99,100,101 เอาท์พุท: 196 อินพุต: 102 เขียนออก: 0,1,2,3 .... , 100,101,102 ผลลัพธ์: 199 อินพุต -10 เขียนออก: 0, -1, -2, -3, -4, -5, -6, …

20
รวมพลังที่จะ
ความท้าทายที่เรียบง่าย แต่ไม่หวังว่าจะเป็นเรื่องเล็กน้อย: เขียนโปรแกรมหรือฟังก์ชั่นที่เพิ่มขึ้นkอำนาจ TH nหารตัวเลข โดยเฉพาะอย่างยิ่ง: อินพุต: จำนวนเต็มบวกสองค่าnและk(หรือคู่จำนวนเต็มสั่งซื้อ) เอาท์พุท: ผลรวมของตัวหารnที่เป็นบวกทั้งหมดนั่นคือkพลังของจำนวนเต็ม ตัวอย่างเช่น 11! = 39916800 มีหกตัวหารที่มีก้อนคือ 1, 8, 27, 64, 216, และ 1728. ปัจจัยการผลิตที่กำหนดดังนั้น39916800และโปรแกรมที่ควรกลับผลรวมของพวกเขา32044 กรณีทดสอบอื่น ๆ : {40320, 1} -> 159120 {40320, 2} -> 850 {40320, 3} -> 73 {40320, 4} -> 17 {40320, 5} -> 33 {40320, 6} -> 65 …

30
วาดส่วนโค้งของลูกบอล
วาดวิถีพาราโบลาของลูกบอลโยน vอินพุตคือความเร็วขึ้นลูกที่เริ่มต้นเป็นจำนวนเต็มบวก ทุกวินาทีลูกบอลเคลื่อนที่ไป1ทางขวาและvช่องว่างในแนวตั้งจากนั้นvลดลง1เนื่องจากแรงโน้มถ่วง ดังนั้นความเร็วสูงขึ้นในที่สุดขั้นตอนที่ลงมาจากvไป0และลงไป-vในที่สุดก็ตกกลับลงไปที่ความสูงเริ่มต้น ตำแหน่งของลูกบอลติดตามพาราโบลา ที่ตำแหน่งแนวนอนxความสูงของมันคือy=x*(2*v+1-x)/2โดย(0,0)ตำแหน่งเริ่มต้นของลูกบอลที่ด้านล่างซ้าย เอาท์พุท ASCII ศิลปะของวิถีลูกด้วยOพิกัดของมันที่เคยครอบครอง เอาต์พุตควรเป็นข้อความแบบหลายบรรทัดเดี่ยวไม่ใช่ภาพเคลื่อนไหวของเส้นทางเมื่อเวลาผ่านไป เอาต์พุตไม่ควรมีการขึ้นบรรทัดใหม่นำหน้าและขึ้นบรรทัดใหม่ไม่เกินหนึ่งบรรทัด บรรทัดล่างควรล้างด้วยขอบด้านซ้ายของหน้าจอนั่นคือไม่มีช่องว่างนำหน้า ช่องว่างต่อท้ายตกลง คุณอาจสันนิษฐานว่าความกว้างของบรรทัดเอาต์พุตในเทอร์มินัลผลลัพธ์ v = 1 OO O O v = 2 OO O O O O v = 3 OO O O O O O O v = 4 OO O O O O O O O O …

30
การนับที่มีประสิทธิภาพ
เมื่อฉันยังเป็นเด็กและต้องการนับเงินดอลลาร์ในการออมชีวิตของฉันฉันจะนับดัง ๆ : หนึ่งสองสามสี่ห้าหกเจ็ดแปดเก้าสิบ; สิบเอ็ด, สิบสาม, สิบสาม, สิบสี่, สิบห้า, สิบหก, สิบเจ็ด, สิบแปด, สิบแปด, สิบเก้า, ยี่สิบ; ยี่สิบเอ็ด, ยี่สิบสอง, ยี่สิบสาม, ยี่สิบสี่, ยี่สิบห้า ... ในที่สุดฉันก็เบื่อที่จะออกเสียงแต่ละพยางค์เหล่านี้ ด้วยความคิดทางคณิตศาสตร์ฉันได้สร้างวิธีการนับที่มีประสิทธิภาพมากขึ้น: หนึ่งสองสามสี่ห้าหกเจ็ดแปดเก้าสิบ; หนึ่ง, สอง, สาม, สี่, ห้า, หก, เจ็ด, แปด, เก้า, ยี่สิบ; หนึ่ง, สอง, สาม, สี่, ห้า, หก, เจ็ด, แปด, เก้า, สามสิบ ... อย่างที่คุณเห็นฉันจะออกเสียงเฉพาะตัวเลขที่เปลี่ยนไปจากตัวเลขก่อนหน้า นี่เป็นข้อได้เปรียบที่เพิ่มเติมว่ามีความซ้ำซ้อนมากกว่าชื่อภาษาอังกฤษสำหรับตัวเลขดังนั้นจึงต้องใช้พลังสมองน้อยในการคำนวณ ท้าทาย เขียนโปรแกรม / …
35 code-golf  number 

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