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

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

14
การขยายไบนารีไบนารี่
โดยปกติเราจะแยกตัวเลขออกเป็นเลขฐานสองโดยการกำหนดด้วยกำลังของ 2 ด้วยสัมประสิทธิ์ของ0หรือ1สำหรับแต่ละเทอม: 25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1 ทางเลือกของ0และ1ก็คือ ... ไม่ได้เป็นแบบไบนารีมาก เราจะทำการขยายฐานสองจริงโดยขยายด้วยพลัง 2 แต่ด้วยสัมประสิทธิ์1หรือ-1แทน: 25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1 ตอนนี้ดูเป็นเลขฐานสอง ด้วยจำนวนที่เป็นบวกใด ๆ คุณควรเห็นว่า: ทุกเลขคี่จะมีการขยายไบนารีจริงจำนวนมากอย่างไม่ จำกัด เลขคู่ทุกตัวไม่มีการขยายไบนารีที่แท้จริง ดังนั้นสำหรับการขยายแบบไบนารีที่แท้จริงที่จะกำหนดไว้อย่างดีเราจำเป็นต้องมีการขยายตัวให้น้อยที่สุดนั่นคือด้วยความยาวที่สั้นที่สุด รับค่าบวกเลขจำนวนเต็มคี่ใด ๆnส่งคืนการขยายไบนารีที่แท้จริงจากตัวเลขที่สำคัญที่สุดไปยังตัวเลขที่มีนัยสำคัญน้อยที่สุด (หรือในลำดับที่กลับกัน) กฎ: เช่นนี้คือ รหัสกอล์ฟคุณควรตั้งเป้าหมายให้เป็นไบต์ที่สั้นที่สุด อนุญาตให้สร้างเครื่องได้ เอาต์พุตใด ๆ ที่สามารถเป็นตัวแทนและแสดงรายการสัมประสิทธิ์เป็นที่ยอมรับได้: อาเรย์สตริงของสัมประสิทธิ์ที่มีตัวคั่น …

3
โทรศัพท์ไร้สายเก่า
ฉันต้องโทรหาเพื่อน ๆ แต่ปุ่มของโทรศัพท์ไร้สายทำงานไม่ถูกต้อง ปุ่มเดียวที่ฉันสามารถกดได้คือ [ขึ้น], [ลง] และ [โทร] สามารถใช้ [ขึ้น] และ [ลง] เพื่อนำทางในสายล่าสุดของฉันและสามารถใช้ [โทร] เพื่อโทรหาชื่อที่เลือกได้ โทรศัพท์ของฉันมีรายการที่มีNการโทรล่าสุดและฉันรู้ว่าเพื่อนทุกคนที่ฉันต้องการโทรอยู่ในรายการนี้ งาน: คุณจะได้รับหมายเลขNและรายชื่อL: N คือจำนวนการโทรล่าสุดที่โทรศัพท์ของฉันจำได้ L มีชื่อตามลำดับที่ฉันต้องการโทร คุณต้องส่งออกจำนวนกดปุ่มที่ฉันต้องการในการจัดเรียงที่ดีที่สุดของรายการโทรล่าสุด ตัวอย่าง: -> อินพุต: โทรหาแอนนาบ็อบแล้วก็แอนนาอีกครั้ง ด้วยรายการโทรล่าสุดขนาด 5 5 Anna Bob Anna -> เอาท์พุท: การจัดเรียงที่เหมาะสมที่สุดที่เป็นไปได้: Anna, Foo, Bar, Foobar, Bob 5 # Key presses: [Call] Anna, [Up] + [Call] …

3
ใช้ตัวอักษรที่จะทำให้ตัวเลขสั้น
ท้าทาย ใช้ตัวเลขและเอาท์พุทด้วยตัวเลข 4 หลักหรือน้อยกว่าโดยใช้ตัวอักษรและตัวเลข ตัวอย่างเช่น; จะกลายเป็น270,030270K สำคัญ พันล้าน -> B ล้าน -> M พัน -> K กฎระเบียบ คุณอาจเลือกที่จะยอมรับหมายเลขอินพุตที่มีเครื่องหมายจุลภาคคั่นทศนิยมสามตำแหน่ง (เช่น123,456,789) ปัดเศษเป็นครึ่งหนึ่งที่ใกล้ที่สุด ตัวเลขจะขึ้นไป999,499,999,999เท่านั้น ส่วน mantissa ของคำตอบควรมีอย่างน้อย 1 ตัวอักษรทั้งหมดจะต้องเป็นตัวพิมพ์ใหญ่และตามที่ระบุไว้ข้างต้น ผลลัพธ์ต้องเป็นตัวเลข 4 หลักหรือน้อยกว่า (รวมทั้งตัวอักษรเช่นB, KและM) ผลลัพธ์จะต้องมีความแม่นยำทางคณิตศาสตร์มากที่สุด ตัวอย่าง: 15,480-> 20K ไม่ตกลง 15,480-> 15.5K ดีมาก หากมีเอาต์พุตจำนวนมากที่มีความแม่นยำทางคณิตศาสตร์เหมือนกันให้ส่งคืนหนึ่งรายการ ตัวอย่าง: 1000-> 1000 ดีมาก 1000-> 1K ดีมาก ตัวอย่าง: 1,234,567 -> …
9 code-golf 

30
เอาต์พุตที่มีจำนวนหลักของ pi เท่ากันกับความยาวของโค้ด
ความท้าทายของคุณคือการพิมพ์ xตัวเลขของปี่ที่xมีความยาวรหัสของคุณ ตัวอย่าง: Source code (length) -> output foo! (4) 3.141 foobar (6) 3.14159 kinda long (10) 3.141592653 +++++ (5) 3.1415 123456789 (9) 3.14159265 คุณสามารถใช้ได้ floor(π/10 * 10code_length) / 10code_length - 1เพื่อกำหนดจำนวนหลักที่คุณต้องการพิมพ์ โปรดทราบว่าจุดทศนิยมไม่นับเป็นหลักของไพ - ดังนั้นโค้ดของความยาว 3 ควรมีเอาต์พุต3.14, ของความยาว 4 กฎ: ความยาวรหัสของคุณจะต้องมากกว่าสามตัว คุณไม่สามารถใช้ช่องโหว่มาตรฐานใด ๆ คุณสามารถใช้วิธีการส่งออกมาตรฐานที่ได้รับอนุญาต คุณไม่สามารถอ่านซอร์สของคุณเพื่อกำหนดความยาวโค้ด คุณไม่สามารถใช้ค่าคงที่บิวด์อินได้ Pi จะต้องแม่นยำอย่างสมบูรณ์และไม่ใกล้เคียง จำเป็นต้องมีจุดทศนิยมในเอาต์พุต หากคุณเลือกที่จะส่งออกผ่านทางค่าตอบแทนคุณจะต้องกลับจำนวนเต็มทศนิยม …

4
สลับกล่อง!
กำหนดสตริงที่อาจมีกล่องในสลับกล่อง สิ่งนี้จะชัดเจนขึ้นในกรณีทดสอบและคำอธิบาย อินพุต / เอาต์พุต รูปแบบอินพุต อินพุตจะเป็นสตริงเดี่ยวคั่นด้วย CR, LF หรือ CRLF หรือรายการสตริง รูปแบบอินพุตขึ้นอยู่กับคุณที่จะตัดสินใจ รูปแบบผลลัพธ์ รูปแบบเอาต์พุตต้องอยู่ในรูปแบบเดียวกับอินพุต คำอธิบาย + ตัวอย่าง ลองมาดูสตริงบรรจุกล่องเป็นตัวอย่าง: +-------------+ |Hello, World!| +-------------+ ในการสลับกล่องเราจะลบแถวแรกและแถวสุดท้ายและคอลัมน์แรกและคอลัมน์สุดท้าย คุณอาจคิดว่าจะไม่มีช่องว่างต่อท้ายหลังบรรทัดสุดท้าย (พร้อมบรรทัดใหม่ที่เป็นตัวเลือกที่ท้ายบรรทัดสุดท้าย) และไม่มีช่องว่างต่อท้ายบนบรรทัดใด ๆ ไม่นับบรรทัดใหม่ของหลักสูตร นี่จะกลายเป็น: Hello, World! วิธีอื่น ๆ หากสตริงไม่ได้อยู่ในกล่องให้เพิ่มกล่องลงไป มันค่อนข้างง่าย เติม+---...---+เส้นของตัวเองด้วยkเครื่องหมายขีดคั่นโดยที่kความยาวของบรรทัดที่ยาวที่สุดและจากนั้นสำหรับแต่ละบรรทัดให้วางด้วยช่องว่างต่อท้ายเพื่อจับคู่ความยาวของบรรทัดที่ยาวที่สุดจากนั้นเติมและผนวกอักขระไพพ์ ( "|") ในที่สุดผนวกบรรทัดที่มีการ+---...---+ตั้งค่าเช่นเดียวกับบรรทัดแรก ตัวอย่างเช่น: Hello, World! กลายเป็น: +-------------+ |Hello, World!| +-------------+ คุณอาจจะสมมติไม่มีเส้นในการป้อนข้อมูลที่จะมีช่องว่างต่อท้าย ตัวอย่างของสตริงที่ควรมีกล่องวางไว้รอบ …

5
แผนที่เกม ASCII 2D
ปัญหา รับอินพุตaโดยที่ a คือกริดของอักขระในรูปแบบอินพุตใด ๆ ตราบใดที่มีองค์ประกอบเดียวสำหรับ 'บล็อก' ของเอาต์พุตแต่ละรายการ และใส่bที่ B aคือตารางของตัวเลขที่มีขนาดเดียวกับการป้อนข้อมูล ถนนมีสองประเภทคือ 1 หมายถึงถนนหินที่มีเครื่องหมายกำกับไว้@และ 2 หมายถึงถนนลูกรังที่มีเครื่องหมาย# @ถนนเป็นศูนย์กลางในการป้องกันและคือขนาด 6x6 ถ้าเป็นถนนที่อยู่ติดกันด้านที่จะขยายไปยังชายแดนเซลล์ตาราง #ถนนเป็นศูนย์กลางในการป้องกันคือขนาด 4x4 ถ้าเป็นถนนที่อยู่ติดกันด้านที่จะขยายไปยังชายแดนเซลล์ตาราง เอาท์พุทกริดออฟเซ็ตตามหมายเลขบรรทัด 8x8 ของอักขระ ASCII ในอินพุตaและวางซ้อน 'ถนน' จากอินพุตbเช่น อินพุต a=[[a,b,a],[b,a,b],[a,b,a]] b=[[1,1,1],[2,0,1],[2,0,0]] เอาท์พุท: ขั้นตอนที่ 1: กริด (การแสดงอินพุต 8x8 a) aaaaaaaabbbbbbbbaaaaaaaa aaaaaaaabbbbbbbbaaaaaaaa aaaaaaaabbbbbbbbaaaaaaaa aaaaaaaabbbbbbbbaaaaaaaa aaaaaaaabbbbbbbbaaaaaaaa aaaaaaaabbbbbbbbaaaaaaaa aaaaaaaabbbbbbbbaaaaaaaa aaaaaaaabbbbbbbbaaaaaaaa bbbbbbbbaaaaaaaabbbbbbbb bbbbbbbbaaaaaaaabbbbbbbb bbbbbbbbaaaaaaaabbbbbbbb …

2
Word Chain โหลดซ้ำ
นี่คือตัวแปรของPlay the word chainและการสร้างเชนของคำที่ยาว ข้อมูลที่ป้อนเป็นรายการที่ไม่ว่างของคำที่ไม่ซ้ำอย่างน้อย 2 ตัวอักษรที่ทำจากอักขระใน [az] คุณต้องแสดงความยาวของสายโซ่ที่ยาวที่สุดเท่าที่จะเป็นไปได้โดยที่แต่ละคำที่ตามมาเริ่มต้นด้วยตัวอักษรสุดท้ายของคำก่อนหน้า คุณสามารถเริ่มต้นด้วยคำใด ๆ ในรายการ การบิดอีกอย่างหนึ่งคือคุณได้รับอนุญาตให้ทำซ้ำคำใด ๆ ในรายการ อย่างไรก็ตามคุณไม่สามารถทำซ้ำบล็อกสองคำใด ๆ ตัวอย่างเช่น cat->tac->catได้รับอนุญาต แต่cat->tac->cat->tacไม่ใช่เพราะคุณทำซ้ำบล็อกสองคำ ( cat->tac) นอกจากนี้คุณไม่สามารถใช้คำเดียวกันสองครั้งในแถว (เช่นeye->eye) ตัวอย่าง: cat dog tree egg => 3 (cat-> tree-> egg) new men ten whim => 5 (ten-> new-> whim-> men-> new) truth fret heart his => …

22
สลับลำดับ
งานของคุณคือการเขียนรหัสบางอย่างที่ส่งออกลำดับ OEIS และมีชื่อของลำดับในรหัส ( A______) ง่ายพอใช่ไหม นี่คือการจับรหัสของคุณจะต้องส่งออกลำดับที่สองแยกเมื่อชื่อของลำดับในรหัสเปลี่ยนเป็นชื่อของลำดับที่สอง อินพุตเอาต์พุต รหัสของคุณอาจเป็นฟังก์ชั่นหรือโปรแกรมที่สมบูรณ์ที่ใช้nผ่านวิธีการป้อนข้อมูลมาตรฐานและส่งออกคำที่nของลำดับตามดัชนีโดยดัชนีที่ให้ไว้ในหน้า OEIS คุณต้องสนับสนุนค่าทั้งหมดที่มีให้ในไฟล์ OEIS b สำหรับลำดับนั้นหมายเลขใด ๆ ที่ไม่ได้อยู่ในไฟล์ b ไม่จำเป็นต้องได้รับการสนับสนุน เกณฑ์การให้คะแนน นี่คือ รหัสกอล์ฟ. คะแนนของคุณจะเป็นจำนวนไบต์ในรหัสของคุณโดยน้อยกว่าจะดีกว่า ตัวอย่าง นี่คือตัวอย่างใน Haskell ที่ใช้งานได้กับ A000217 และ A000290 f x|last"A000217"=='0'=x^2|1>0=sum[1..x] ลองออนไลน์!

15
ฉันชื่ออะไร?
ระบุรหัสผู้ใช้ PPCG ให้แสดงชื่อผู้ใช้ปัจจุบันของผู้ใช้ ตัวอย่าง Input -> Output 61563 -> MD XF 2 -> Geoff Dalgas 12012 -> Dennis foo -> -3 -> กฎระเบียบ อินพุต / เอาต์พุตสามารถดำเนินการผ่านวิธีการที่อนุญาต ผลลัพธ์จะต้องเป็นชื่อผู้ใช้เต็มรูปแบบที่มีตัวพิมพ์ใหญ่และการเว้นวรรคที่เหมาะสมไม่มีอะไรมากและไม่น้อยไปกว่านี้ หากอินพุตไม่ใช่ ID ผู้ใช้ที่ถูกต้องหรือผู้ใช้ไม่มีอยู่โปรแกรมของคุณจะไม่แสดงผลอะไรหรือแสดงข้อผิดพลาด โปรแกรมของคุณจะต้องใช้งานได้สำหรับผู้ใช้ที่ถูกต้องแม้กระทั่งผู้ที่สร้างขึ้นหลังจากการท้าทายนี้ โปรแกรมของคุณไม่จำเป็นต้องทำงานให้กับผู้ใช้ชุมชน โปรแกรมของคุณไม่จำเป็นต้องทำงานกับผู้ใช้ที่ถูกลบ ตัวย่อ URL ไม่ได้รับอนุญาต เกณฑ์การให้คะแนน รหัสสั้นที่สุดในแต่ละภาษาชนะ

4
จำนวนสูงสุดของสตริงย่อยที่แตกต่างกัน
ลักษณะ เมื่อกำหนดความยาวnและขนาดตัวอักษรk>0โปรแกรมของคุณจะต้องกำหนดจำนวนสตริงด้วยพารามิเตอร์เหล่านั้นซึ่งมีจำนวนสตริงย่อยสูงสุด ในกรณีของการk=2นี้สร้าง OEIS A134457 ตัวอย่าง ตัวอย่างเช่น2210มีสตริง , 2, 22, 221, 2210, 2, 21, 210, 1, 10และ0รวม 11 แต่2ปรากฏขึ้นเป็นครั้งที่สองจึงมีเพียง 10 สตริงที่ไม่ซ้ำกัน นี่คือมากที่สุดเท่าที่เป็นไปได้สำหรับสตริงความยาว 4 มี 3 สัญลักษณ์ที่แตกต่างกัน แต่ความสัมพันธ์กับ 35 สายอื่น ๆ รวมเป็น 36 สาย tieing รวมทั้ง0012, และ2101 0121ดังนั้นสำหรับn=4และk=3โปรแกรมของคุณควรส่งออก 36 กรณีทดสอบ n k output 0 5 1 1 3 3 5 1 …

3
ค้นหาตัวเลขที่สร้างจำนวนเต็ม mod q
พิจารณาจำนวนเต็มแบบโมดูโลqที่qเป็นนายกกำเนิดเป็นจำนวนเต็มใด ๆ1 < x < qเพื่อให้x^1, x^2, ..., x^(q-1)ครอบคลุมทั้งหมดq-1ของจำนวนเต็มระหว่างและ1 q-1ตัวอย่างเช่นพิจารณาจำนวนเต็มโมดูโล 7 (ซึ่งเราเขียนเป็นZ_7) จากนั้น3, 3^2 mod 7 = 2, 3^3 = 27 mod 7 = 6, 3^4 = 81 mod 7 = 4, 3^5 = 243 mod 7 = 5, 3^6 = 729 mod 7 = 1ครอบคลุมค่า3, 2, 6, 4, 5, …

11
สร้างผู้อนุญาต
สำหรับความท้าทายนี้คุณจะต้องสร้างฟังก์ชั่น (ฟังก์ชั่นของคุณอาจเป็นโปรแกรมที่สมบูรณ์) ที่รับรายการเป็นอินพุตและส่งกลับค่าการเรียงสับเปลี่ยนของรายการนั้น ฟังก์ชั่นของคุณจะต้องปฏิบัติตามข้อกำหนดดังต่อไปนี้ มันจะต้องกำหนดขึ้น การเขียนฟังก์ชั่นของคุณด้วยตัวเองจำนวนครั้งของตัวแปรควรจะสามารถรับรายการจากการเรียงลำดับใด ๆ นี่เป็นคำถามเกี่ยวกับรหัสกอล์ฟดังนั้นคำตอบจะได้คะแนนเป็นไบต์โดยไบต์น้อยจะดีขึ้น กฎเพิ่มเติม คุณอาจจะใช้วิธีใดรายการ ( [Integer], [String], [[Integer]]) ตราบใดที่มัน ต้องไม่ว่างเปล่า สามารถมีวัตถุที่แตกต่างอย่างน้อย 16 ค่าที่เป็นไปได้ (คุณไม่สามารถใช้ Haskell [()]และอ้างสิทธิ์การทำงานของคุณได้id) สามารถมีวัตถุที่ซ้ำกัน (ไม่มีชุด) คุณอาจเขียนโปรแกรมหรือฟังก์ชั่น แต่ต้องเชื่อฟังมาตรฐาน IO

5
การเพิ่มพาร์ติชัน Goldbach
การคาดคะเนของ Goldbach ระบุว่า: ทุกเลขคู่ที่มากกว่า 2 คือผลรวมของสองช่วง เราจะพิจารณาพาร์ทิชัน Goldbach ของจำนวนnจะเป็นคู่ของทั้งสองช่วงเวลาการเพิ่มn เรามีความกังวลกับตัวเลขคือการเพิ่มขึ้นของพาร์ทิชัน Goldbach เราทำการวัดขนาดของพาร์ติชั่น Goldbach ของตัวเลขด้วยขนาดของไพรม์ที่เล็กที่สุดในพาร์ติชันของตัวเลขนั้นทั้งหมด จำนวนคือการเพิ่มพาร์ติชันถ้าขนาดนี้มากกว่าขนาดของตัวเลขที่เล็กกว่าทั้งหมด งาน รับจำนวนเต็มคู่n> 2พิจารณาว่าnเป็นการเพิ่มพาร์ติชัน Goldbach และส่งออกค่าที่ไม่ซ้ำกันสองค่าหนึ่งค่าถ้าเป็นและหนึ่งค่าหากไม่ได้ นี่คือ รหัสกอล์ฟดังนั้นคุณควรตั้งเป้าหมายที่จะลดจำนวนไบต์ลงในซอร์สโค้ดของคุณ OEIS A025018

6
การพิมพ์กากบาดของสองสาย
รับชุดของสองสายรับประกันเป็นระยะเวลาเดียวกันให้พิมพ์ของพวกเขาข้ามกาก ข้ามกากของสองสายจะได้รับดังต่อไปนี้ ให้อักขระตัวที่สองของสตริงที่สองจากนั้นอักขระตัวแรกของสตริงแรก ให้ผลอักขระแรกของสตริงที่สองจากนั้นอักขระที่สองของสตริงแรก ละทิ้งอักขระตัวแรกของแต่ละสตริง หากสตริงมีอักขระมากกว่าหนึ่งตัวให้กลับไปที่ขั้นตอนที่ 1 ตัวอย่างเช่นถ้าทั้งสองสายเป็น Truck Tower ข้ามกากคือ oTTrwroueuwcrcek ดังแสดงในแผนภาพต่อไปนี้ แต่ละสีแสดงถึงการวนซ้ำที่แตกต่างกัน ตัวเลขแสดงดัชนีของตัวละครที่เกี่ยวข้องในการส่งออก

8
คุณชอบเทควันโดไหม?
Choi Hong Hiเสียชีวิตในวันที่ 15 มิถุนายน 2002 ในวัย 83 เกียรติเขาก่อตั้งเทควันโด 15 ปีหลังจากการตายของเขาฉันอยากเป็นอาจารย์เทควันโด นี่เป็นเวลาของฉันที่จะเปล่งประกาย! งาน รับสตริงคุณควรส่งออกเวอร์ชันเทควันโด กฎระเบียบ คุณจะได้รับสตริง / ประโยคที่ไม่ว่างเปล่าโดยอินพุตที่ถูกต้องใด ๆ คุณต้องแทนที่แต่ละชื่อเรื่อง (ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) โดยเทียบเท่าการแปลแบบโรมัน คุณต้องเพิ่ม, *side kick*ตอนท้ายของประโยคเพราะฉันชอบที่จะเตะด้านข้าง คุณต้องแสดงผลประโยคที่เปลี่ยนแปลงนี้เป็นสตริง นี่คือ รหัสกอล์ฟ คุณควรตั้งเป้าหมายที่จะลดจำนวนคำตอบให้เหลือน้อยที่สุด ตัวอย่าง "I am a Student and I do Taekwondo twice a week" => "I am a Geup and I do Taekwondo …

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