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

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

8
ความเท่าเทียมกันของการเปลี่ยนแปลง
พื้นหลัง ความเท่าเทียมกันของการเปลี่ยนแปลง , ตามที่กำหนดโดยวิกิพีเดียเป็นดังนี้ เครื่องหมายหรือการลงลายมือชื่อของการเปลี่ยนแปลงσนั้นแทน sgn (σ) และกำหนดให้เป็น +1 ถ้าσคือ even และ −1 ถ้าσเป็นเลขคี่ เครื่องหมายของการเปลี่ยนแปลงสามารถแสดงอย่างชัดเจนว่า sgn (σ) = (−1) ^ N (σ) โดยที่ N (σ) คือจำนวนผู้รุกรานในσ อีกทางเลือกหนึ่งสัญญาณของการเปลี่ยนแปลงσสามารถกำหนดได้จากการสลายตัวลงในผลิตภัณฑ์ของ transpositions เป็น sgn (σ) = (−1) ^ m โดยที่ m คือจำนวน transpositions ในการย่อยสลาย สำหรับคนที่ไม่ชอบซุปอักษรกรีกในคณิตศาสตร์ของพวกเขาฉันจะลองและทำให้คำจำกัดความง่ายขึ้นด้วยตัวอย่าง (เช่นขโมยมาจากวิกิพีเดีย) ตัวอย่าง พิจารณาอาร์เรย์การป้อนข้อมูลและการเปลี่ยนแปลงของมันสมมติว่า{1, 2, 3, 4, 5} {3, 4, …

2
คุณกำลังรออะไรอยู่? (แก้ปัญหาไพ่นกกระจอก)
ขอบคุณไอเดียที่ @ MartinBüttnerจากการสนทนาในแชท Mahjongเป็นเกมไพ่ที่ได้รับความนิยมอย่างมากในเอเชีย โดยทั่วไปจะเล่นกับผู้เล่นสี่คนและเป้าหมายของเกมคือการเป็นคนแรกที่เล่นไพ่ที่ถูกต้องโดยใช้มือ สำหรับความท้าทายนี้เราจะพิจารณาเกมที่เรียบง่าย - PPCG ไพ่นกกระจอก ใน PPCG ไพ่นกกระจอก, มีสามชุด - m, pและs- และกระเบื้องที่มีเลขจากไป1 9มีสี่สำเนาของไพ่แต่ละใบและไพ่จะถูกแทนด้วยหมายเลขตามด้วยชุดไพ่ (เช่น3m, 9s) ไพ่นกกระจอก PPCG ที่เสร็จสมบูรณ์แล้วประกอบด้วยสี่ชุดสามชุดและคู่รวมเป็น 14 แผ่น ชุดของสามสามารถเป็นได้ทั้ง: ไพ่สามใบเดียวกัน (เช่น4s 4s 4sแต่ไม่ใช่4m 4p 4s) หรือ ลำดับของไพ่สามติดต่อกันในชุดเดียวกัน (เช่น1s 2s 3sหรือ6p 7p 8pแต่ไม่3s 4m 5mหรือ3p 5p 7p) ลำดับไม่ห่อ (ดังนั้นจึง9m 1m 2mไม่ถูกต้อง) คู่คือไพ่สองใบที่เหมือนกัน (เช่น5s 5s) …
14 code-golf  game 

8
เครื่องหมายดาวของคุณคืออะไร?
จงเขียนโปรแกรมที่ใช้วันเดือนปีเกิด (เดือนและวันของเดือน) เป็น input และผลที่สอดคล้องกันลงชื่อเข้าใช้องค์ประกอบและคุณภาพของการราศีตะวันตก สำหรับจุดประสงค์ของการท้าทายนี้สิ่งเหล่านี้ถูกกำหนดไว้อย่างชัดเจนในตารางในหน้าวิกิพีเดียที่เชื่อมโยง: Sign Date Range Element Quality Aries March 21 to April 19 Fire Cardinal Taurus April 20 to May 20 Earth Fixed Gemini May 21 to June 21 Air Mutable Cancer June 22 to July 22 Water Cardinal Leo July 23 to August 22 Fire …

24
แสดงประโยคตามลำดับตัวอักษร
เขียนโปรแกรมที่รับสตริงและส่งออกอักขระทั้งหมดตามลำดับตัวอักษร ช่องว่างและสัญลักษณ์สามารถละเว้นหรือลบได้ แต่ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กจะต้องอยู่ในกรณีเดียวกัน ตัวอย่างอินพุต: Johnny walked the dog to the park. ตัวอย่างผลลัพธ์ aaddeeeghhhJklnnoooprtttwy กฎ: •ภาษาใด ๆ •รหัสที่สั้นที่สุดชนะ
14 code-golf 

11
N Doors, K Monkeys
มีประตู N และลิง K ในขั้นต้นทุกประตูถูกปิด รอบที่ 1:ลิงตัวที่ 1 เข้าชมทุกประตูและสลับประตู (ถ้าประตูปิดมันจะเปิดออกถ้ามันเปิดอยู่ก็จะปิด) รอบ 2 : ลิงตัวที่ 1 เข้าชมทุกประตูและสลับประตู จากนั้นลิงตัวที่สองจะไปที่ประตูทุกบานและสลับประตู . . . . . . รอบ k: ลิงตัวที่ 1 เข้าชมทุกประตูและสลับประตู . . . . . . . . . ลิง kth เข้าเยี่ยมชมทุก ๆ ประตู kth และสลับประตู อินพุต: NK (คั่นด้วยช่องว่างเดียว) เอาท์พุท: หมายเลขประตูที่เปิดอยู่โดยคั่นด้วยช่องว่างเดียว ตัวอย่าง …

30
เขียนโปรแกรมเพื่อพิมพ์ผลรวมของรหัส ASCII ของโปรแกรม
งานของคุณคือการเขียนโปรแกรมเพื่อพิมพ์ผลรวมของรหัส ASCII ของตัวละครของโปรแกรมเอง คุณไม่ได้รับอนุญาตให้เปิดไฟล์ใด ๆ (ห้ามป้อนข้อมูลใด ๆ เช่นอาร์กิวเมนต์บรรทัดคำสั่งอินพุตมาตรฐานหรือไฟล์) โปรแกรมที่พิมพ์หมายเลขต่ำสุด (เช่นมีผลรวมต่ำสุดของรหัส ASCII) ชนะ นี่คือตัวอย่าง (ไม่ใช่ที่สั้นที่สุด) ของโปรแกรมที่เขียนด้วย C: #include <stdio.h> int main(){ printf("4950");/*i*/ return 0; } (ไม่มีบรรทัดใหม่หลังจาก})

2
ฟังก์ชันตัวแปลงตัวเลขโรมัน
สร้างฟังก์ชั่นที่สั้นที่สุดเพื่อแปลงสตริงของตัวเลขโรมันให้เป็นจำนวนเต็ม กฎสำหรับตัวอักษรแต่ละตัวสามารถพบได้ที่หน้าวิกิพีเดีย ตัวอักษรที่สูงกว่า 1,000 จะมีเครื่องหมายวงเล็บล้อมรอบพวกเขาเพื่อให้สัญญาณที่สูงกว่า ที่ต้องการ: ต้องแปลงตัวเลขโรมัน 1 ถึง 500,000 ต้องเสร็จในเวลาไม่ถึงนาที ไม่ใช้ฟังก์ชันในตัวที่สามารถให้ประโยชน์ (เช่น: ฟังก์ชันที่แปลงตัวเลขโรมันเป็นจำนวนเต็ม) เป็นฟังก์ชั่น ฟังก์ชันไม่จำเป็นต้องรองรับเศษส่วน อินพุตที่ไม่ถูกต้องควรส่งคืนหมายเลข 0 ฟังก์ชั่นที่สั้นที่สุดชนะ ในกรณีที่เสมอกันผู้ที่มีคะแนนมากที่สุดชนะ กรณีทดสอบ อินพุต III เอาท์พุต 3 อินพุต IIII เอาท์พุต 0 อินพุต XVI เอาท์พุต 16 อินพุต (C)(D)(L)MMI เอาท์พุต 452001

5
การพิมพ์ แต่ไปทางซ้าย [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 เดือนที่ผ่านมา พื้นหลัง คุณได้รับมอบหมายให้จดบันทึกการประชุม คุณเริ่มพิมพ์บน Google Doc ของคุณ แต่คุณไม่มีเวลาเพียงพอในการประชุมเพื่อดูแป้นพิมพ์ของคุณในขณะที่คุณพิมพ์ โชคดีสำหรับคุณคุณสามารถพิมพ์ได้โดยไม่ต้องดูที่คีย์บอร์ดของคุณ หลังการประชุมคุณตระหนักดีว่าทุกสิ่งที่คุณพิมพ์เป็นกุญแจสำคัญทางซ้าย ความท้าทาย สำหรับความท้าทายนี้คุณจะใช้ตัวอักษรตัวเลขและแป้นเว้นวรรคของรูปแบบแป้นพิมพ์ QWERTY เมื่อได้รับการป้อนข้อความ (จากวิธีการอินพุตมาตรฐาน) ให้ส่งออกข้อความผลลัพธ์โดยที่อักขระทุกตัวถูกย้ายไปทางซ้ายบนคีย์บอร์ด สำหรับส่วนใหญ่ของตัวอักษรที่เพียงแค่มองไปที่ตัวอักษรและแปลตัวอักษรไปทางซ้าย ( cกลายเป็นx, tกลายเป็นr, ฯลฯ ) สำหรับจดหมายqให้แปลเป็นอักขระแท็บตัวอักษร ( \t) สำหรับจดหมายaให้เปิดใช้งานตัวล็อคแคปดังนั้นการโอนเป็นตัวพิมพ์ใหญ่ของสตริงที่เหลือจะถูกย้อนกลับ สำหรับตัวอักษรzพิมพ์ใหญ่ตัวอักษรถัดไปในสตริง ไม่จำเป็นต้องแปลสำหรับแถบพื้นที่ รักษาความเป็นตัวพิมพ์ใหญ่ขณะแปลและคำนึงถึงตัวพิมพ์ใหญ่ (ถ้าเปิดใช้งานตัวล็อคตรวจสอบให้แน่ใจว่าตัวพิมพ์ใหญ่อยู่ตรงกันข้าม) อักขระทั้งหมดในสตริงอินพุตจะเป็นตัวอักษรตัวเลขหรือช่องว่าง ไม่สามารถใช้เครื่องหมายวรรคตอนหรืออักขระอื่น ๆ ได้ กรณีทดสอบ \t เป็นอักขระแท็บตัวอักษร Hello world -> Gwkki qieks Code Golf …

2
สร้างภาพที่บีบอัดได้น้อยที่สุด
"รูปภาพมีค่าหนึ่งพันคำ" - เพื่อให้คำพูดเก่าดำเนินไป คำเฉลี่ยมีความยาวประมาณสี่ตัวอักษรดังนั้นรูปภาพจึงสื่อถึงข้อมูลขนาด 4kB แต่รูปภาพสามารถสื่อความเป็นเอนโทรปีได้อย่างไร งานของคุณคือการสร้างภาพขนาด 4,000 ไบต์และมีค่าเอนโทรปีสูงสุดเท่าที่จะเป็นไปได้ คุณสามารถใช้ภาษาไลบรารีหรือรูปแบบภาพที่คุณเลือกและคุณสามารถส่งออกไปยังคอนโซลหรือไฟล์ตราบใดที่คุณอัพโหลดรูปภาพของคุณที่นี่ เกณฑ์การให้คะแนน คะแนนของคุณคืออัตราส่วนการอัด (4000 ÷บีบอัดขนาด) เมื่อภาพของคุณจะถูกบีบอัดด้วย GNU tarรุ่น 1.28 และgzipรุ่น 1.6 โดยใช้อัลกอริทึมและการตั้งค่าเริ่มต้นยุบ - tar -czvf out.tar.gz imageโดยเฉพาะคำสั่ง อัตราการบีบอัดที่เล็กที่สุดชนะ

30
ผลิตภัณฑ์คาร์ทีเซียนของสองรายการ
งาน ให้รายชื่อตัวละครสองตัวส่งออกผลิตภัณฑ์คาร์ทีเซียนของพวกเขานั่นคือรายการของการจับคู่ของตัวอักษรแต่ละตัวจากรายการแรกที่มีตัวอักษรแต่ละตัวจากรายการที่สอง ตัวอย่าง "123456"และ"abcd"ให้: [["1","a"],["1","b"],["1","c"],["1","d"],["2","a"],["2","b"],["2","c"],["2","d"],["3","a"],["3","b"],["3","c"],["3","d"],["4","a"],["4","b"],["4","c"],["4","d"],["5","a"],["5","b"],["5","c"],["5","d"],["6","a"],["6","b"],["6","c"],["6","d"]] อินพุต รายการอักขระหรือสตริงสองรายการ อักขระที่ใช้จะเป็นตัวอักษรa-z, A-Z, 0-9และตัวเลขและอักขระสามารถเกิดขึ้นได้หลายครั้งและในอินพุตทั้งสองในเวลาเดียวกัน เอาท์พุต ผลิตภัณฑ์คาร์ทีเซียนของรายการอินพุต นั่นคือรายการของแต่ละคู่ที่เป็นไปได้สั่งตัวละครจากรายการแรกและตัวละครจากรายการที่สอง แต่ละคู่เป็นรายการหรือสตริงหรือคล้ายกันของตัวละครสองตัวหรือสองสายยาวหนึ่ง ความยาวของเอาต์พุตจะเท่ากับผลคูณของความยาวของอินพุต คู่จะต้องอยู่ในลำดับ; รายการแรกอักขระแรกของรายการแรกกับรายการแรกของรายการที่สองตามด้วยการจับคู่ทั้งหมดของอักขระแรกของรายการแรก คู่สุดท้ายประกอบด้วยอักขระตัวสุดท้ายของรายการแรกพร้อมกับอักขระตัวสุดท้ายของรายการที่สอง ผลลัพธ์จะต้องเป็นรายการคู่เรียบ ไม่ใช่เมทริกซ์ 2D ที่คู่ถูกจัดกลุ่มตามองค์ประกอบที่หนึ่งหรือสอง กรณีทดสอบ inputs output "123456", "abcd" [["1","a"],["1","b"],["1","c"],["1","d"],["2","a"],["2","b"],["2","c"],["2","d"],["3","a"],["3","b"],["3","c"],["3","d"],["4","a"],["4","b"],["4","c"],["4","d"],["5","a"],["5","b"],["5","c"],["5","d"],["6","a"],["6","b"],["6","c"],["6","d"]] "abc", "123" [["a","1"],["a","2"],["a","3"],["b","1"],["b","2"],["b","3"],["c","1"],["c","2"],["c","3"]] "aa", "aba" [["a","a"],["a","b"],["a","a"],["a","a"],["a","b"],["a","a"]]

13
การสร้างกริดเรือกวาดทุ่นระเบิด
Minesweeperเป็นเกมลอจิกที่พบในระบบปฏิบัติการส่วนใหญ่ เป้าหมายของเกมคือการกำหนดตำแหน่งของระเบิดบนกริดให้ตัวเลขที่ระบุจำนวนเหมืองรอบ ๆ จุดนั้น เมื่อกำหนดขนาดกริดและชุดของเหมืองให้สร้างกริด Minesweeper สำหรับชุดของเหมืองนั้น อินพุต:จำนวนเต็มสองจำนวนที่ระบุขนาดของกริดและจำนวนเต็มที่ไม่ได้กำหนดซึ่งระบุตำแหน่งของทุ่น ตำแหน่งจะได้รับเป็น (ตำแหน่งคอลัมน์ตำแหน่งแถว) และดัชนีจะเริ่มที่แถว 1 เอาต์พุต:ตาราง Minesweeper xหากมีการทำเหมืองแร่รอบบล็อกไม่มีพิมพ์ สำหรับแต่ละแถวใหม่ให้พิมพ์บรรทัดใหม่ *เอาท์พุทโปรดเหมืองทั้งหมดเป็นเครื่องหมายดอกจัน อย่าเว้นช่องว่างระหว่างค่าในแถวเมื่อพิมพ์ กรณีทดสอบ: อินพุต "5 5 1 3 3 5 2 4": xxxxx 11xxx *21xx 2*21x 12*1x อินพุต "3 4 3 1 1 4 2 3 3 2": x2* 13* 2*2 *21 รหัสที่สั้นที่สุดชนะ

8
การรวมภายใต้การเป็นตัวแทนของ Zeckendorf
ทฤษฎีบทของ Zeckendorfแสดงให้เห็นว่าจำนวนเต็มบวกทุกตัวสามารถแสดงอย่างไม่ซ้ำกันได้ว่าเป็นผลรวมของตัวเลขฟีโบนักชีที่ไม่ได้อยู่ติดกัน ในการท้าทายนี้คุณต้องคำนวณผลรวมของตัวเลขสองตัวในการเป็นตัวแทนของ Zeckendorf ให้ F nเป็นหมายเลข Fibonacci ที่n F 1 = 1, F 2 = 2 และ สำหรับทุกk > 2, F k = F k - 1 + F k - 2 การแทน Zeckendorf Z ( n ) ของจำนวนเต็มไม่เป็นลบnคือชุดของจำนวนเต็มบวกเช่นนั้น n = Σ ฉัน ∈ Z ( n ) F …

6
ทฤษฎีบทของไรลีย์
S. Ryley พิสูจน์ทฤษฎีบทต่อไปนี้ใน 1,825: จำนวนตรรกยะทุกตัวสามารถแสดงเป็นผลรวมของสามลูกบาศก์เชิงเหตุผล ท้าทาย ได้รับบางส่วนจำนวนจริงr∈Qr∈Qr \in \mathbb Q หาหมายเลขสามเหตุผล, ข, ค∈ Qเช่นว่าR = 3 + ข3 + ค 3a,b,c∈Qa,b,c∈Qa,b,c \in \mathbb Qr=a3+b3+c3.r=a3+b3+c3.r= a^3+b^3+c^3. รายละเอียด การส่งข้อมูลของคุณควรจะสามารถคำนวณวิธีแก้ปัญหาสำหรับอินพุตที่ให้เวลาและหน่วยความจำได้เพียงพอนั่นหมายความว่าการมีอินสแตนซ์ 32 บิตสองตัวที่intแสดงเศษส่วนไม่เพียงพอ ตัวอย่าง 305230717280142=39829338766813−6366005495153−39775055545463=607029013173+239612924543−619227128653=(12)3+(13)3+(14)3=03+03+03=(12)3+(23)3+(56)3=(1810423509232)3+(−1495210609)3+(−25454944)330=39829338766813−6366005495153−3977505554546352=607029013173+239612924543−6192271286533071728=(12)3+(13)3+(14)30=03+03+031=(12)3+(23)3+(56)342=(1810423509232)3+(−1495210609)3+(−25454944)3 \begin{align} 30 &= 3982933876681^3 - 636600549515^3 - 3977505554546^3 \\ 52 &= 60702901317^3 + 23961292454^3 - 61922712865^3 \\ \frac{307}{1728} &= …

18
วอล์กเกอร์เข้าร่วม! - โลโก้อลันวอล์คเกอร์
คุณอาจรู้จัก Alan Walker จากเพลงยอดนิยม Faded ของเขา ตอนนี้ "ผู้ติดตาม" ของเขาเรียกว่าวอล์กเกอร์และมีโลโก้นี่เป็นเวอร์ชั่นที่เรียบง่าย: \\ \\ //\\ \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // //\\ \\ // \\// // \\ \\// // // \\ \\ //\\ // \\ //\\ \\// …

7
รหัส Huffman!
มิฉะนั้นเขาจะโกรธและพองและระเบิดบ้านของคุณ! นั่นไม่เกี่ยวข้องอย่างสมบูรณ์ ความท้าทายนี้เป็นจริงเกี่ยวกับHuffman การเข้ารหัส ส่วนสำคัญของมันคือความถี่ของตัวละครในข้อความที่กำหนดจะถูกใช้เพื่อทำให้การแสดงสั้นลง กล่าวอีกนัยหนึ่งสมมติว่าตัวอักษรของเราaผ่านไปzและผ่านช่องว่าง นั่นคือ 27 ตัวอักษร แต่ละรหัสสามารถเข้ารหัสได้ใน 5 บิตเพราะ 5 บิตมีพื้นที่เพียงพอสำหรับ 32 อักขระ อย่างไรก็ตามในหลาย ๆ สถานการณ์ (เช่นภาษาอังกฤษหรือภาษาทั่วไป) ตัวละครบางตัวจะบ่อยกว่าตัวละครอื่น ๆ เราสามารถใช้บิตน้อยลงสำหรับอักขระบ่อยขึ้นและ (อาจ) บิตเพิ่มเติมสำหรับอักขระบ่อยน้อย ถูกต้องแล้วมีการประหยัดโดยรวมในจำนวนบิตและข้อความต้นฉบับยังคงสามารถสร้างขึ้นใหม่ได้โดยไม่ซ้ำกัน ลอง "คำถามนี้เกี่ยวกับการเข้ารหัส huffman" เป็นตัวอย่าง ข้อความนี้มีความยาว 37 ตัวอักษรซึ่งปกติจะเป็น 37 * 8 = 296 บิตโดยปกติจะมีเพียง 37 * 5 = 185 บิตหากเราใช้ 5 บิตสำหรับแต่ละอักขระเท่านั้น เก็บไว้ในใจ นี่คือตาราง (sorta) …

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