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

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

4
เคล็ดลับการตีกอล์ฟในโลโก้
โลโก้เป็นภาษาการเขียนโปรแกรมที่ได้รับการออกแบบย้อนกลับไปในปี 1967 ที่มีศักยภาพที่ดีในการสร้างกราฟิกในไม่กี่ไบต์เมื่อเทียบกับภาษาอื่น โลโก้เป็นภาษาโปรแกรมการศึกษาที่ใช้เต่ากราฟิก มีการนำโลโก้ไปใช้งานที่น่าสนใจมากมายรวมถึง: โลโก้ Apple โลโก้อาตาริ LibreLogo (ส่วนตัวที่ฉันชอบ) โลโก้ Texas Instruments UCBLogo และอื่น ๆ อีกมากมาย ... นอกจากนี้ยังสามารถพบล่ามโลโก้ได้หลายทางออนไลน์ หน้านี้มีจุดประสงค์เพื่อเป็นศูนย์กลางในการเล่นโค๊ดกอล์ฟ เคล็ดลับ เกี่ยวกับการใช้ภาษาเขียนโปรแกรมโลโก้ ที่มา: The Great Logo Adventure (1998) โดย Jim Muller
9 code-golf  tips 

15
ใช้วิธีของออยเลอร์
เป้าหมายของความท้าทายนี้คือการใช้วิธีการของออยเลอร์เพื่อประมาณวิธีแก้ปัญหาของสมการเชิงอนุพันธ์ของรูปแบบ f (n) (x) = c † อินพุตจะเป็นรายการของจำนวนเต็มซึ่งค่าn th แสดงถึงค่าของ f (n) (0) เลขจำนวนเต็มแรกคือ f (0) ตัวที่สองคือ f '(0) และอื่น ๆ จำนวนเต็มสุดท้ายในรายการนี้คือค่าคงที่และจะยังคงเหมือนเดิมเสมอ นอกจากนี้ยังเป็น input จะเป็นบวก (ไม่ใช่ศูนย์) จำนวนเต็มxซึ่งหมายถึงค่าเป้าหมาย (คุณกำลังพยายามที่จะประเมิน f (x)) ขนาดขั้นตอนสำหรับวิธีของออยเลอร์จะเป็น 1 เสมอดังนั้นคุณจะต้องรวมxขั้นตอนทั้งหมด หากคุณเป็น unfamliar ด้วยวิธีออยเลอร์นี่เป็นตัวอย่างที่มีคำอธิบายรายละเอียดสำหรับการป้อนข้อมูลที่[4, -5, 3, -1], x = 8 x f(x) f'(x) f''(x) f'''(x) 0 4 -5 …

6
ย้อนหลังไปข้างหน้าและพูดได้หลายภาษาควิน!
คุณต้องให้พูดได้หลายภาษาที่ผลรหัสต้นฉบับในภาษาหนึ่งและรหัสที่มาของมันย้อนกลับอีก แตกต่างจากกฎปกติคุณได้รับอนุญาตให้อ่านไฟล์ปัจจุบันหรือใช้ builtin เพื่อรับซอร์สโค้ดของการส่งของคุณและย้อนกลับในภาษาเดียว ซอร์สโค้ดของคุณต้องไม่เป็นแบบ palindrome ตัวอย่างเช่นหากซอร์สโค้ดของคุณabcxyzต้องเป็นเอาต์พุตabcxyzในภาษาหนึ่งและzyxcbaอีกภาษาหนึ่ง หากรหัสของคุณเป็นรหัสที่abcxyzyxbcaไม่ถูกต้องเพราะเป็นรูปเล่ม โชคดี!

22
สร้างสัญญาณรูปสามเหลี่ยม
งาน: ดัชนีตัวอย่างที่กำหนด, x, คำนวณค่าตัวอย่าง f (x) ของคลื่นสามเหลี่ยมที่มีระยะเวลา 4 ตัวอย่างและแอมพลิจูด 1 ค่าออฟเซ็ตอาจเป็นค่าลบและค่าตัวอย่างอาจเป็น {0, 1, -1} กรณีทดสอบ: -5 -> -1 -4 -> 0 -3 -> 1 -2 -> 0 -1 -> -1 0 -> 0 1 -> 1 2 -> 0 3 -> -1 4 -> 0 5 -> 1 โดยส่วนตัวฉันรู้สองแนวทางใน C …

5
คอร์ดเปียโนบนคีย์สีขาว
Backstory [ซึ่งไม่เป็นความจริง] มีการตั้งเปียโนดังนี้: อย่างไรก็ตามบนเปียโนของฉันปุ่มสีดำทั้งหมดเสีย! ฉันยังต้องการที่จะเล่นคอร์ดบางอย่างบนเปียโนที่หักของฉัน ในดนตรีคอร์ดคือกลุ่มของโน้ตที่เล่นด้วยกัน เพื่อให้สามารถป้อนข้อมูลของคอร์ดฉันจะกำหนดสิ่งที่เป็นเสียงดนตรี semitone คืออะไร? semitone เป็นระยะทางที่เล็กที่สุดในดนตรีตะวันตก หากคุณดูที่ส่วนบนของเปียโนคุณจะเห็นว่าโดยปกติคุณสามารถย้ายจากคีย์สีดำไปเป็นคีย์สีขาวหรือในทางกลับกัน อย่างไรก็ตามระหว่างBและCกับEและFไม่มีคีย์สีดำ คอร์ดคืออะไร สำหรับจุดประสงค์ของการท้าทายนี้เราได้กำหนดคอร์ดให้เป็นโน้ตซึ่งมีเซมิโคลอนจำนวนหนึ่งคั่นอยู่ ตัวอย่างเช่นลองเอา4-3-3คอร์ดเริ่มต้นที่C(สำหรับคนดนตรีนี่คือ V 7 chord ใน F major) Cเราเริ่มต้นที่ เรานับเพิ่มขึ้น 4 C#semitones: D, D#, E, ทราบต่อไปคือEและเรานับ 3 semitones Fขึ้นหลังจากที่: F#, G, ทราบต่อไปคือGและเรานับ 3 semitones G#ขึ้นหลังจากที่: A, Bb, C-E-G-Bbดังนั้นเราจะได้รับ เย้! แต่เดี๋ยวก่อน ... Bbเป็นกุญแจดำและมันก็พัง ... อย่างไรก็ตามถ้าเราเริ่มต้นGเราจะได้G-B-D-F! เย้! อินพุต …

14
ประเมินดัชนีของพิกัดหลายมิติ
มีการรวบรวมชุดพิกัด N ขนาดไว้ ตัวอย่างด้านล่าง: {2,3,4} นี่อาจเป็นอาร์เรย์ 3 มิติที่มี 2x's, 3y และ 4z's; อาจมีจำนวนมิติใด ๆ ในตัวอย่างมีทั้งหมด 24 โหนด แต่ละโหนดสามารถทำดัชนีโดยใช้ {x, y, z} ในการเข้าถึงโหนดลำดับที่ 5 ดัชนีที่ระบุจะเป็น {0, 1, 0} ตามตารางด้านล่าง ## | x y z 0 1 2 ----------- 0 | 0 0 0 1 | 0 0 1 2 | 0 …

4
“ ตรวจสอบ” ภาพ
ปัญหา: ความท้าทายนี้มาจากปัญหาจริงที่ฉันมี ฉันมีการตั้งค่าจอภาพสองจอในที่ทำงานและฉันต้องการใช้ภาพต่อไปนี้เป็นวอลล์เปเปอร์ของฉัน: อย่างไรก็ตามจอมอนิเตอร์ของฉันมีเบ็ซแซลค่อนข้างสำคัญและเมื่อฉันตั้งค่าพื้นหลังของฉันมันจะเป็นแบบนี้ที่ซึ่งท่าเรือปรากฏ (แอปพลิเคชัน?) จะแตก: ฉันสามารถแก้ปัญหานี้ได้ด้วยการสร้างภาพโดยที่จุดศูนย์กลางตัดออกแล้วยืดกลับไปเป็นขนาดดั้งเดิมตามที่แสดงในภาพด้านล่าง: ความท้าทาย: เขียนโปรแกรมที่ถ่ายภาพและ "ตรวจสอบ" เพื่อใช้กับการตั้งค่าจอภาพสองจอ (เช่นลบส่วนตรงกลางของภาพที่มีเบแซลอยู่) กฎมีดังนี้: ต้องเป็นโปรแกรมเต็มรูปแบบที่ยอมรับรูปภาพไม่ว่าจะเป็นพา ธ (อาร์กิวเมนต์สตริง ฯลฯ ) หรือในรูปแบบของกล่องโต้ตอบตัวเลือกไฟล์ โปรแกรมจะต้องป้อนข้อมูลเป็นจำนวนเส้นแนวตั้ง (ความกว้างหนึ่งพิกเซล) เพื่อครอบตัดออกจากกึ่งกลางของภาพ การปลูกพืชจะต้องมาจากศูนย์กลาง (กว้างไวด์) ของภาพต้นฉบับ รูปภาพผลลัพธ์ต้องถูกปรับสัดส่วนกลับเป็นขนาดดั้งเดิมของภาพอินพุตอีกครั้ง (แบ่งครึ่งสามารถเป็นรายบุคคลและจากนั้นตัดแบ่งหรือตัดแบ่งแล้วปรับขนาดแล้วการปรับขนาดเป็นการสร้างภาพ / เอฟเฟกต์ที่ดีขึ้น แต่แทบจะไม่สังเกตเห็นได้ในโลกแห่งความเป็นจริง) โดยทั่วไปแล้วภาพพื้นหลังจะทำให้การท้าทายนี้ง่ายขึ้นรูปภาพอินพุตจะมีจำนวนพิกเซลเท่ากันและจำนวนบรรทัดที่จะลบก็จะเท่ากัน ความท้าทายนี้เป็นโค้ดกอล์ฟ - โค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ โชคดี!

10
สวัสดีชาวโลกที่จัดการข้อผิดพลาด
เขียนโปรแกรมหรือฟังก์ชั่นด้วยฟังก์ชั่นต่อไปนี้: โปรแกรม / ฟังก์ชั่นครั้งแรกพยายามที่จะเขียนสตริงHello, world!ไปยังกระแสออกมาตรฐาน (ไม่มีรูปแบบอื่น ๆ ของการส่งออกเป็นที่ยอมรับสำหรับความท้าทายนี้เนื่องจากการมุ่งเน้นเป็นอย่างมากกับ I / O มากกว่าพฤติกรรมเล็กน้อยของโปรแกรมเอง) ขึ้นอยู่กับว่ามันประสบความสำเร็จ: ถ้ามันประสบความสำเร็จในการส่งHello, world!ออกโปรแกรม / ฟังก์ชั่นออกโดยไม่มีพฤติกรรมใด ๆ เพิ่มเติม หากไม่สามารถสร้างเอาต์พุตที่ถูกต้องเนื่องจากข้อผิดพลาดโปรแกรม / ฟังก์ชันจะพยายามเขียนสตริงError writing "Hello, world!"ลงในสตรีมข้อผิดพลาดมาตรฐาน (สำหรับวัตถุประสงค์ของการท้าทายนี้คุณไม่จำเป็นต้องจัดการข้อผิดพลาดเพื่อจัดการข้อผิดพลาดเอง) ชี้แจง โปรแกรม / ฟังก์ชั่นของคุณจะทำงานโดยไม่มีการป้อนข้อมูล (เว้นแต่จะเขียนด้วยภาษาที่ต้องใช้อินพุตในการทำงานซึ่งในกรณีนี้มันจะทำงานด้วยอินพุตที่เป็นไปได้ง่ายที่สุด) เมื่อสร้างเอาต์พุตคุณอาจสร้างบรรทัดใหม่ขึ้นหนึ่งบรรทัดหากคุณต้องการ แต่การทำเช่นนั้นไม่จำเป็น คำจำกัดความของ "การเขียนข้อผิดพลาดไปยังเอาต์พุตมาตรฐาน" ที่โปรแกรมของคุณดำเนินการต้องปฏิบัติอย่างน้อยกรณีต่อไปนี้เป็นข้อผิดพลาด: เอาต์พุตมาตรฐานไม่มีอยู่ (เช่นstdoutfilehandle ปิดไม่มีไฟล์ descriptor 1 อยู่หรืออย่างไรก็ตามกรณีเหล่านั้นแปลเป็นภาษาและระบบปฏิบัติการที่คุณใช้) เอาต์พุตมาตรฐานอ้างถึงไฟล์บนดิสก์ที่ไม่มีพื้นที่ว่างเหลือ เอาต์พุตมาตรฐานเชื่อมต่อกับโปรแกรมอื่นซึ่งปิดการเชื่อมต่อไปแล้ว และจะต้องปฏิบัติอย่างน้อยที่สุดกรณีต่อไปนี้เป็นความสำเร็จ (เช่นไม่ใช่ข้อผิดพลาด): เอาต์พุตมาตรฐานเชื่อมต่อกับเทอร์มินัลและHello, world!แสดงบนหน้าจอ เอาต์พุตมาตรฐานเชื่อมต่อกับไฟล์และHello, world!เขียนลงในไฟล์ …

4
คำสั่งของชุด Mia
เกมลูกเต๋าMiaเปิดตัวชุดสองขนาดที่ไม่สำคัญ: {3,1} < {3,2} < {4,1} < {4,2} < {4,3} < {5,1} < {5,4} < {6,1} < {6,5} < {1,1} < {2,2} < {6,6} < {1,2} โดยทั่วไปการสั่งซื้อภายในขอบเขตของไม่สำคัญ{x,y}={y,x}, {1,2}มีค่ามากกว่าสิ่งอื่นใดคู่มากกว่าคู่บุหรี่และค่าตัวเลขตัดสินใจในกรณีที่มีการผูก ตอนนี้สมมติว่าคุณต้องการใช้nลูกเต๋า นอกจากนี้ลูกเต๋ายังมีmใบหน้า ตัวอย่าง: {1,5,3,4} < {1,2,6,3} ตั้งแต่ 5431 <6321 {1,2,3,5} < {1,1,5,6} < {1,1,5,5}, {1,1,6,6} < {1,1,1,3} < {2,2,2,3} < {1,1,1,1} < …

2
โซ่ Quine แบบสองทิศทาง
PPCG ยังไม่ได้รับผลตอบรับที่เพียงพอ ... ท้าทาย: งานของคุณคือการสร้างโปรแกรม "A0" เมื่อโปรแกรมนี้รันโดยไม่มีอินพุตมันจะไม่มีผลใด ๆ เมื่อโปรแกรมนี้ทำงานด้วยอินพุตมันจะส่งออก "A1" เมื่อเรียกใช้ "A1" โดยไม่มีอินพุตอินพุตจะส่งเอาต์พุต "A0" เมื่อ "A1" ทำงานด้วยอินพุตมันจะส่งออก "A2" ค่อนข้างมาก "A (k)" จะส่งออก "A (k-1)" เมื่อเรียกใช้โดยไม่มีอินพุตและจะส่งออก "A (k + 1)" เมื่อเรียกใช้ด้วยอินพุต รายละเอียด ฉันเชื่อว่าความท้าทายนี้ง่ายพอ ไม่มีกฎอื่น ๆ จริงๆ ทุกโปรแกรมจะต้องมีอย่างน้อย 1 ไบต์โดยวิธีการ คุณอาจสันนิษฐานว่าข้อมูลที่ป้อนจะประกอบด้วยอักขระ ASCII เท่านั้นและคุณอาจละเว้นช่องว่างหากคุณต้องการ แต่คุณไม่สามารถระบุอินพุตเฉพาะ เอาต์พุตอาจเป็น STDOUT หรือ STDERR แต่โปรแกรมทั้งหมดของคุณจะต้องแสดงผลลัพธ์เป็นแบบเดียวกัน อีกอันหนึ่งอาจมีข้อความ (ดังนั้นคุณอาจส่งออกไปยัง STDOUT …

3
ส่วนจินตภาพของ Zeroes Riemann ที่ไม่สำคัญ
บทนำ ตามที่Riemann สมมุติฐาน , ศูนย์ทั้งหมดของฟังก์ชั่นซีตา Riemannเป็นจำนวนเต็มเชิงลบอย่างใดอย่างหนึ่งแม้ (เรียกว่าเลขเล็กน้อย ) หรือตัวเลขที่ซับซ้อนของรูปแบบ1/2 ± i*tสำหรับจริงบางอย่างtคุ้มค่า (เรียกว่าเลขไม่น่ารำคาญ ) สำหรับความท้าทายนี้เราจะพิจารณาเฉพาะศูนย์ที่ไม่น่าสนใจซึ่งส่วนจินตภาพเป็นบวกและเราจะสมมติว่าสมมติฐานของรีมันน์เป็นจริง เลขศูนย์ที่ไม่สำคัญเหล่านี้สามารถสั่งได้ด้วยขนาดของชิ้นส่วนจินตภาพ 0.5 + 14.1347251i, 0.5 + 21.0220396i, 0.5 + 25.0108576i, 0.5 + 30.4248761i, 0.5 + 32.9350616iไม่กี่ครั้งแรกจะอยู่ที่ประมาณ ความท้าทาย รับจำนวนเต็มNเอาท์พุทส่วนจินตภาพของศูนย์ที่Nไม่น่าสนใจของฟังก์ชันซีตารีมันน์ถูกปัดเศษเป็นจำนวนเต็มที่ใกล้ที่สุด (ปัดครึ่งขึ้น - ดังนั้น13.5จะปัดเป็น14 ) กฎระเบียบ อินพุตและเอาต์พุตจะอยู่ในช่วงจำนวนเต็มที่สามารถแทนได้สำหรับภาษาของคุณ ตามที่ระบุไว้ก่อนหน้านี้สำหรับวัตถุประสงค์ของการท้าทายนี้สมมติฐานของรีมันน์ถือว่าเป็นจริง คุณสามารถเลือกได้ว่าจะให้อินพุทเป็นศูนย์ดัชนีหรือหนึ่งดัชนี กรณีทดสอบ กรณีทดสอบต่อไปนี้เป็นหนึ่งดัชนี 1 14 2 21 3 25 4 30 …

5
นับจำนวนลำดับระยะทาง Hamming
ระยะ Hammingระหว่างสองสายความยาวเท่ากันคือจำนวนของตำแหน่งที่สัญลักษณ์ที่สอดคล้องกันจะแตกต่างกัน ให้Pเป็นสตริงไบนารีของความยาวnและเป็นสตริงไบนารีของความยาวT 2n-1เราสามารถคำนวณnระยะทาง Hamming ระหว่างPและnสตริงย่อย -length ของTตามลำดับจากซ้ายไปขวาและใส่ลงในอาร์เรย์ (หรือรายการ) ตัวอย่างลำดับระยะทาง Hamming ขอและP = 101 T = 01100ลำดับของ Hamming 2,2,1ระยะทางที่คุณได้รับจากคู่นี้คือ งาน สำหรับการnเริ่มต้นที่เพิ่มขึ้นn=1ให้พิจารณาคู่สายอักขระไบนารีที่มีPความยาวnและTความยาวที่เป็น2n-1ไปได้ทั้งหมด มี2**(n+2n-1)คู่ดังกล่าวและด้วยเหตุนี้จึงมีหลายลำดับของระยะทาง Hamming อย่างไรก็ตามลำดับเหล่านั้นจำนวนมากจะเหมือนกัน nงานคือการหาวิธีการจำนวนมากที่แตกต่างกันสำหรับแต่ละ nรหัสของคุณควรส่งออกจำนวนหนึ่งต่อมูลค่าของ คะแนน คะแนนของคุณคือnรหัสสูงสุดของคุณถึงบนเครื่องของฉันใน 5 นาที nระยะเวลาเป็นเวลาการทำงานรวมเวลาไม่เพียงแค่นั้น ใครชนะ ผู้ที่มีคะแนนสูงสุดจะเป็นผู้ชนะ หากคนสองคนหรือมากกว่านั้นจบลงด้วยคะแนนเดียวกันมันเป็นคำตอบแรกที่ชนะ ตัวอย่างคำตอบ สำหรับการnจาก1ไปคำตอบที่ดีที่สุดที่มี82, 9, 48, 297, 2040, 15425, 125232, 1070553 ภาษาและห้องสมุด คุณสามารถใช้ภาษาและไลบรารี่ที่คุณต้องการได้ หากเป็นไปได้จะเป็นการดีที่จะสามารถเรียกใช้รหัสของคุณได้ดังนั้นโปรดระบุคำอธิบายโดยละเอียดเกี่ยวกับวิธีเรียกใช้ / รวบรวมรหัสของคุณใน Linux หากเป็นไปได้ …

4
การคว้าน แต่ด้วยไฟล์ Windows!
เขียนควินที่เมื่อทำงานจะสร้างตัวเองในไดเรกทอรีปัจจุบันในไฟล์ต้นฉบับที่ชื่อตัวเอง เราจะใช้ Windows ในการนี้ดังนั้นชื่อไฟล์ (และดังนั้นควินิน) จะต้องมีข้อ จำกัด ดังต่อไปนี้: ไม่มีตัวละครเหล่านี้ \ / : ? * < > | น้อยกว่า211 255 ตัวอักษร ข้อ จำกัด และสมมติฐาน รหัสของคุณจะต้องเป็นโปรแกรมเต็มรูปแบบ (มันจะถูกเรียกใช้หลังจากทั้งหมด) ไม่มีการคัดลอกจากไฟล์ต้นฉบับ คุณสามารถสมมติว่าไม่มีไฟล์อื่นที่มี Quine ของคุณเป็นชื่อของมัน (เพราะมันจะสร้างQuine (1)) อนุญาตให้มีข้อผิดพลาดได้ (ตราบใดที่ไม่ได้อยู่ในซอร์สโค้ด นี่คือ รหัสกอล์ฟรหัสสั้นที่สุดเป็นไบต์ชนะ! แก้ไข บางทีฉันอาจจะไม่ชัดเจนไฟล์ที่มีชื่อของควินินจะต้องมีการควินจริง ความผิดฉันเอง.

8
แปลง AWG เป็นนิ้ว
AWG (American Wire Gauge)เป็นวิธีการทั่วไปในการระบุขนาดลวด งานของคุณในการท้าทายนี้คือการแปลงจากมาตรวัดที่กำหนดเป็นเส้นผ่านศูนย์กลางของเส้นลวดเป็นนิ้ว ขนาดเป็นนิ้วสำหรับเกจวัดจาก4/0ถึง40แสดงในตารางด้านล่าง: ตารางเกจเป็นนิ้ว | AWG | Diameter (Inches) | |-----|-------------------| | 4/0 | 0.46 | | 3/0 | 0.4096 | | 2/0 | 0.3648 | | 1/0 | 0.3249 | | 1 | 0.2893 | | 2 | 0.2576 | | 3 | 0.2294 | | …

3
The Eratosthenes Shuffle
ท้าทาย เขียนฟังก์ชั่นหรือโปรแกรมที่รับสายอินพุตดำเนินการสลับอย่างเฉพาะเจาะจงและคุ้นเคยอย่างมากกับตัวอักขระและส่งผลลัพธ์ออกมา การสับที่ต้องการสามารถอธิบายได้โดยใช้อัลกอริทึมต่อไปนี้: ติดป้ายอักขระแต่ละตัวในอินพุตด้วยดัชนี 1 ฐาน เขียนอักขระหมายเลข 1 เป็นเอาต์พุต เริ่มต้นด้วยหมายเลขอักขระ 2 เขียนอักขระอื่น ๆ ไปยังเอาต์พุตตามลำดับยกเว้นอักขระ 2 เอง กล่าวอีกนัยหนึ่งเขียนอักขระ 4, 6, 8, 10 และอื่น ๆ เป็นเอาต์พุต เริ่มต้นด้วยหมายเลขอักขระถัดไป n ที่ยังไม่ได้เขียนเป็นเอาต์พุตเขียนอักขระทุกตัวที่ n ไปยังเอาต์พุตยกเว้นตัวอักษร n และยกเว้นอักขระอื่น ๆ (ตามป้ายกำกับตัวเลข) ที่คุณอาจเขียนไปยังเอาต์พุต ทำซ้ำขั้นตอนที่ 4 ตราบใดที่ยังคงเพิ่มอักขระใหม่ไปยังเอาต์พุต เขียนตัวอักษรที่เหลือเพื่อออกตามลำดับ ตัวอย่าง ติดฉลากอักขระ 1 2 3 4 5 6 7 8 9 10 …
9 code-golf 

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