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

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

1
การจำลองการแข่งขันกรรไกรหินกระดาษ
คุณตัดสินใจจัดแข่งขันชิงแชมป์กรรไกรกระดาษเพื่อค้นหาว่าใครดีที่สุด คุณไม่ต้องการให้โชคดีในการตัดสินผู้ชนะดังนั้นทุกคนจะต้องให้กลยุทธ์ของเขาหรือเธอเป็นลายลักษณ์อักษรก่อนการแข่งขัน คุณชอบสิ่งที่เรียบง่ายดังนั้นการเคลื่อนไหวของคู่แข่ง (แสดงหินกระดาษหรือกรรไกร) จะต้องเป็นไปตามเทิร์นก่อนหน้าเท่านั้น (RvR, RvP, RvS, PvR, PvP, PvS, SvR, SvP หรือ SvS) ในเทิร์นแรกผู้เล่นจะต้องแสดงสัญญาณคงที่ คุณตัดสินใจที่จะเขียนโปรแกรม (หรือฟังก์ชั่น) เพื่อจำลองการแข่งขันชิงแชมป์ รายละเอียดของการแข่งขัน จะมีผู้แข่งขันอย่างน้อย 2 คน ผู้เล่นทุกคนเล่นเกมเดียวกับทุกคน นัดการแข่งขันหนึ่งรอบ 7 ในทุก ๆ รอบผู้ชนะจะได้รับ 2 คะแนนผู้แพ้จะไม่ได้รับ ในกรณีที่เสมอกันผู้เล่นทั้งสองทำคะแนน 1 คะแนน ผู้เล่นที่ทำคะแนนในการแข่งขันคือผลรวมของคะแนนของเขาหรือเธอในรอบการแข่งขัน คะแนนสุดท้ายของผู้เล่นในการแข่งขันคือคะแนนรวมของคะแนนในทุกแมทช์ รายละเอียดของอินพุต: โปรแกรมหรือฟังก์ชั่นของคุณรับNสายอักขระยาว 10 ตัวซึ่งแต่ละตัวสอดคล้องกับกลยุทธ์ของผู้เล่น ตัวละครทุกตัว (ตัวพิมพ์เล็ก) r pหรือsหมายถึงว่าในสถานการณ์ที่กำหนดผู้เล่นจะแสดงกระดาษหรือกรรไกรหิน อักษรตัวแรกรหัสเทิร์นแรก (ในทุกการแข่งขันสำหรับคู่แข่งนั้น) สิ่งที่สองแสดงให้เห็นว่าจะเกิดอะไรขึ้นถ้ารอบสุดท้ายเป็นหินกับหิน ตัวต่อไปคือ RvP, RvS, …

1
Combinator Quines
พื้นหลัง คุณเพิ่งเรียนรู้ว่าตรรกะเชิงการรวมคืออะไร ทึ่งกับ combinators ต่าง ๆ ที่คุณใช้เวลาเรียนรู้เกี่ยวกับพวกเขาสักหน่อย ในที่สุดคุณก็สะดุดกับการแสดงออกนี้: (S I I (S I I)) คุณสังเกตเห็นว่าเมื่อพยายามที่จะลดขนาดให้อยู่ในรูปแบบปกติมันจะลดตัวเองลงหลังจากสามขั้นตอน: (S I I (S I I)) = (I (S I I) (I (S I I))) (1) = (S I I (I (S I I))) (2) = (S I I (S I I)) (3) คุณมุ่งมั่นที่จะค้นหานิพจน์อื่นที่ใช้คุณลักษณะนี้และเริ่มทำงานกับเรื่องนี้ทันที กฎระเบียบ …

2
ความท้าทายการเพิ่มประสิทธิภาพอัลกอริทึมที่เร็วที่สุด
นี่คือการทดลองครั้งแรกของฉันกับความซับซ้อนเชิงซีมโทติคแม้ว่าฉันจะมีความสุขกับคำตอบทั้งหมดในโค้ดตราบใดที่พวกเขามาพร้อมกับคำอธิบายเกี่ยวกับความซับซ้อนของเวลา ฉันมีปัญหาดังต่อไปนี้ พิจารณางาน T_1, ... T_n และ procs M_1, ... , M_m แต่ละงานใช้เวลาในการดำเนินการตามจำนวนที่กำหนด แต่ละงานมีค่าใช้จ่ายจำนวนหนึ่งเพื่อดำเนินการขึ้นอยู่กับ procs งานจะต้องทำในลำดับที่เข้มงวด (พวกเขาไม่สามารถทำได้ในแบบคู่ขนาน) และต้องใช้เวลาในการเปลี่ยนกระบวนการ ไม่สามารถย้ายงานจาก proc หนึ่งไปยังอีก proc หลังจากเริ่มต้น ในที่สุดงานแต่ละงานจะต้องเสร็จสิ้นตามระยะเวลา งาน วัตถุประสงค์คือเพื่อให้อัลกอริทึม (หรือโค้ดบางส่วน) ที่ได้รับห้าตารางของแบบฟอร์มด้านบนลดค่าใช้จ่ายทั้งหมดเพื่อให้งานทั้งหมดเสร็จสมบูรณ์ในขณะที่ทำให้แน่ใจว่างานทั้งหมดจะเสร็จสิ้นตามกำหนดเวลา หากเป็นไปไม่ได้เราเพียงแค่รายงานว่ามันไม่สามารถทำได้ คะแนน คุณควรให้ความซับซ้อนในการแก้ปัญหาของคุณในรูปของตัวแปร n, m และ d, โดยที่ d คือวันสุดท้าย ไม่ควรมีค่าคงที่ไม่จำเป็นในความซับซ้อนของโอ้ใหญ่ของคุณ ตัวอย่างเช่น O (n / 1,000) ควรเขียนเป็น O (n) คะแนนของคุณถูกคำนวณอย่างง่าย ๆ โดยการตั้งค่า …

2
การเปลี่ยนฐานพันธุกรรม
พื้นหลัง ในการท้าทายนี้การแสดงฐานbของจำนวนเต็มnเป็นการแสดงออกของnผลรวมของกำลังbซึ่งแต่ละเทอมเกิดขึ้นได้เกือบทุกb-1ครั้ง ตัวอย่างเช่นการ4เป็นตัวแทนของ2015คือ 4^5 + 3*4^4 + 3*4^3 + 4^2 + 3*4 + 3 ตอนนี้ทางพันธุกรรม base- bตัวแทนของnจะได้รับโดยการแปลงเลขยกกำลังเข้าสู่ base- ของพวกเขาbเป็นตัวแทนแล้วแปลงเลขยกกำลังของพวกเขาและอื่น ๆ ซ้ำ ดังนั้น base- ทางพันธุกรรม4เป็นตัวแทนของ2015มี 4^(4 + 1) + 3*4^4 + 3*4^3 + 4^2 + 3*4 + 3 ในฐานะที่เป็นตัวอย่างที่ซับซ้อนมากขึ้นฐานพันธุกรรม - การ3เป็นตัวแทนของ 7981676788374679859068493351144698070458 คือ 2*3^(3^(3 + 1) + 2) + 3 + …

8
รักษาระยะห่างของคุณบนวงกลม
สิ่งนี้ขึ้นอยู่กับความท้าทายนี้และความคิดของ Geobits / CarpetPython เพื่อปรับปรุง: รักษาระยะห่างของคุณ! สำหรับความท้าทายนี้ระยะห่างระหว่างตัวเลขสองจำนวนจะถูกวัดบนลูปดังนั้นเช่นระยะห่างระหว่าง 0 ถึง 999 คือ 1 สิ่งนี้ควรป้องกันกลยุทธ์เช่นการเลือกหมายเลขต่ำสุดหรือสูงที่สุดเสมอจากการชนะเกือบทุกครั้ง การเปลี่ยนแปลงอื่น ๆ เท่านั้นคือจำนวนต่ำสุดที่สามารถเลือกได้คือ 0 แทน 1 ฉันจะสรุปได้ที่นี่: เขียนฟังก์ชั่นใน Java, Python หรือ Ruby ที่มีอาร์กิวเมนต์สามตัว: จำนวนรอบที่เล่นจนถึง จำนวนผู้เล่น ตัวเลขที่เลือกในรอบก่อนหน้านี้เป็นอาร์เรย์ของสตริงที่คั่นด้วยช่องว่าง มันควรจะกลับจำนวนเต็มตั้งแต่ 0 ถึง 999 รวม คะแนนสำหรับโปรแกรมในแต่ละรอบคือผลรวมของสแควร์รูทของระยะทางไปยังหมายเลขที่แต่ละโปรแกรมอื่นเลือก โปรแกรมที่มีคะแนนสูงสุดหลังจากชนะ 100 รอบ หนึ่งคำตอบต่อคน โปรแกรมควบคุมอยู่ที่นี่: https://github.com/KSFTmh/src/ ลีดเดอร์บอร์ด NumberOne โดย TheBestOne เป็นผู้ชนะ NumberOne - 9700 NumberOnePlusFourNineNine …


3
ดนตรี: คอร์ดนี้ชื่ออะไร?
นี่คือสิ่งที่ตรงกันข้ามของดนตรี: มีอะไรในคอร์ดนี้? ซึ่งจะพิมพ์บันทึกในคอร์ดที่กำหนด เวลานี้อินพุตคือรายการบันทึกย่อในคอร์ดและงานของคุณคือส่งออกว่าเป็นคอร์ดใด โปรแกรมของคุณควรรองรับคอร์ด triadic ต่อไปนี้ ตัวอย่างให้กับรูตซีคอร์ดกับรูทอื่น ๆ เป็นคอร์ดเดียวกันกับโน้ตทั้งหมดที่หมุนดังนั้น C จะกลายเป็นโน้ตรูทนั้นเช่น Dmaj ประกอบด้วย D, F # และ A C C#D D#E F F#G G#A A#B Db Eb Gb Ab Bb Cmaj C E G Cm C D# G Caug C E G# Cdim C D# F# Csus4 C F …

9
การสั่งซื้ออาร์เรย์เชิงลบจำนวนเต็มศูนย์และบวกด้วยการวนซ้ำหนึ่งครั้ง
ใช้อาร์เรย์ของจำนวนเต็มที่มีจำนวนลบจำนวนบวกและเลขศูนย์ จัดกลุ่มมันด้วยการวนซ้ำหนึ่งครั้งและอยู่ในตำแหน่งที่จำนวนลบทั้งหมดมาก่อนตามด้วยศูนย์ทั้งหมดตามด้วยตัวเลขบวกทั้งหมด ตัวอย่าง: Input: 5, 3, 0, -6, 2, 0, 5 Output: -6, 0, 0, 3, 2, 5, 5 โปรดทราบว่าตัวเลขไม่จำเป็นต้องถูกจัดเรียงอย่างสมบูรณ์เพียงแค่เรียงตามเครื่องหมาย ดังนั้นอาร์เรย์สุดท้ายจะมีลักษณะดังนี้: -, -, ..., -, -, 0, 0, ..., 0, 0, +, +, ..., +, + กฎระเบียบ คุณสามารถใช้อาร์เรย์อินพุตและหน่วยความจำเพิ่มเติมจำนวนคงที่เท่านั้น (เช่นคุณไม่สามารถสร้างอาร์เรย์ได้อีก) คุณสามารถใช้หนึ่งวงเท่านั้นซึ่งอาจดำเนินการได้หลายครั้งตามความยาวของอาร์เรย์ คุณไม่สามารถใช้ฟังก์ชั่นในตัวที่ปิดบังการวนลูปได้ทุกชนิด ซึ่งรวมถึงฟังก์ชั่นการเรียงลำดับในตัว ผลลัพธ์ควรอยู่ในรูปแบบที่ฉันอธิบาย ผู้ชนะจะเป็นคนที่จะส่งรหัสที่สั้นที่สุด (นับเป็นไบต์) ที่เปลี่ยนอาร์เรย์เริ่มต้นเป็นรูปแบบที่ถูกต้อง (เช่นที่อธิบายข้างต้น)

4
ภัณฑารักษ์ของภัณฑารักษ์
บทนำ คุณเป็นเพื่อนของภัณฑารักษ์พิพิธภัณฑ์ศิลปะการที่ได้มีความสุขที่ผ่านมาของการได้รับงานศิลปะสมัยใหม่จากสี่ศิลปิน ( ซึ่งบางส่วนอาจจะให้ผู้ดูแลศูนย์ชิ้นงานศิลปะ, วายร้ายหนุ่ม ) เนื่องจากนี่คือศิลปะสมัยใหม่ชิ้นส่วนของศิลปินที่ได้รับจึงมีลักษณะเหมือนกันทุกประการ เพื่อนของคุณต้องการใช้คอมพิวเตอร์เพื่อช่วยตัดสินใจว่าจะสั่งซื้อชิ้นส่วนเหล่านี้ได้อย่างไร ข้อกำหนดของโปรแกรม โปรแกรมของคุณต้องใช้จำนวนเต็มห้าจำนวน (ส่งผ่านไปยังฟังก์ชันหรือป้อนผ่าน stdin (หรืออีกวิธีหนึ่ง)) สี่คนแรกคือจำนวนภาพวาดที่จัดทำโดยศิลปินสี่คนแต่ละคน ค่าสุดท้ายคือดัชนีการเปลี่ยนแปลงi(นับจาก 1 ไม่ใช่ 0) ภัณฑารักษ์มีความประสงค์ที่จะเห็นการiเรียงสับเปลี่ยนลำดับตามคำสั่งของภาพเขียน โปรแกรมต้องออกของคุณเปลี่ยนแปลงนี้ในรูปแบบใด ๆ ที่เหมาะสม: เช่นหรือabbccd [0 1 1 2 2 3]รันไทม์สำหรับการป้อนข้อมูลที่รวมจำนวนภาพน้อยกว่าสิบภาพต้องใช้เวลาน้อยกว่าหนึ่งชั่วโมง (หวังว่าจะไม่มีปัญหา) คุณไม่ได้รับอนุญาตให้ใช้ฟังก์ชั่นใด ๆ ที่สร้างขึ้นเพื่อเปลี่ยนวิธีเรียงสับเปลี่ยน ตัวอย่าง อินพุต: 0 1 2 0 2 เนื่องจากเรามีหนึ่งภาพวาดโดยศิลปิน B และสองโดยศิลปิน C (และพวกเขาทั้งหมดเหมือนกัน), เรียงลำดับตามลำดับคำศัพท์คือ: [ 'สำเนาลับ', ' CBC …

3
ส่วนประกอบที่เชื่อมต่อ 3x3
ความท้าทาย พิจารณากริดคิง 3x3 ดังที่แสดงในกราฟิก ASCII ต่อไปนี้: A--B--C |\/|\/| |/\|/\| D--E--F |\/|\/| |/\|/\| G--H--I คุณจะได้รับรายการอินพุตจำนวนเต็ม -9 ที่เป็นตัวแทนของการติดฉลากของโหนด ตัวอย่างเช่นอินพุต[0,1,1,2,1,0,5,5,1]แสดงถึงการติดฉลากต่อไปนี้: 0--1--1 |\/|\/| |/\|/\| 2--1--0 |\/|\/| |/\|/\| 5--5--1 เอาต์พุตของคุณคือชุดของจำนวนเต็มในอินพุตที่เชื่อมโยงกับชุดโหนด อย่างชัดเจนยิ่งขึ้นเอาต์พุตควรมีจำนวนเต็มnจากอินพุตถ้าหากnเชื่อมต่อชุดของโหนดที่มีเลเบลแล้วเท่านั้น ในตัวอย่างนี้เอาต์พุตที่ยอมรับได้จะเป็น[1,2,5]เพราะทั้งสอง0ไม่ได้เชื่อมต่อ จำนวนไบต์ต่ำสุดชนะ กฎรายละเอียด คุณสามารถเลือกการสั่งซื้อคงที่สำหรับโหนดในรายการอินพุตของคุณและคุณควรระบุสิ่งนี้ในคำตอบของคุณ ใน EFBDHCAGI [1,0,1,2,5,1,0,5,1]การสั่งซื้อการติดฉลากที่ข้างต้นจะได้รับเป็น คุณสามารถเขียนโปรแกรมเต็มหรือฟังก์ชั่น ในกรณีหลังเอาท์พุทสามารถเป็นชุดของจำนวนเต็มถ้าภาษาของคุณสนับสนุนเหล่านั้น รายการผลลัพธ์อาจมีรายการที่ซ้ำกัน แต่ความยาวของรายการต้องไม่เกิน 9 ช่องโหว่มาตรฐานไม่ได้รับอนุญาต กรณีทดสอบ ตัวเลขเหล่านี้มีตัวเลขหลักเดียวที่สอดคล้องกับตาราง ปรับให้เข้ากับคำสั่งที่คุณเลือก 011 210 => 1 2 5 551 010 …

3
รหัสกอล์ฟ“ Atomic” - กำหนดจำนวนของนิวตรอนในไอโซโทป
งานของคุณคือการใช้สายที่มีไอโซโทปขององค์ประกอบเป็นอินพุตเข้ารหัสเหมือนตัวอย่างต่อไปนี้ด้วยหมายเลขอะตอมตามด้วยช่องว่างและสัญลักษณ์ทางเคมี IUPAC สำหรับองค์ประกอบ: 162 Dy และคืนจำนวนนิวตรอนในอะตอมของไอโซโทปนั้น ในตัวอย่างข้างต้น, ดิสโพรเซียม-162 มี 96 นิวตรอน (162 นิวคลีออรวม 66 ลบโปรตอนเพราะมันดิสโพรเซียม) 96ดังนั้นการส่งออกที่ควรจะเป็น คุณอาจสมมติว่าองค์ประกอบที่กำหนดจะเป็นหนึ่งใน 114 องค์ประกอบที่ได้รับชื่อถาวรในปัจจุบันโดย IUPAC (รวมถึง flerovium และ livermorium) และไม่ใช่ชื่อทั่วไปเช่นUus"ununseptium" คุณอาจสมมติว่าเลขอะตอมของไอโซโทปจะต้องไม่เกิน 1,000 หรือน้อยกว่าจำนวนโปรตอนในองค์ประกอบ คุณไม่สามารถใช้บิวด์อินเพื่อดึงข้อมูลเกี่ยวกับจำนวนโปรตอนหรือนิวตรอนขององค์ประกอบหรือใช้ฟังก์ชั่นใด ๆ ภายในโค้ดของคุณที่ประเมินโทเค็นสตริงหรือตัวเลขเป็นรหัสด้วยตัวเอง โปรแกรมที่ใช้โทเค็นน้อยที่สุดเพื่อทำสิ่งนี้ในภาษาใดก็ได้ที่ชนะ อย่างไรก็ตามสำหรับวัตถุประสงค์ของการท้าทายนี้ตัวละครทุกตัวในสตริงหรือชื่อตัวแปรที่ถูกแปลงเป็นสตริงจะนับเป็นโทเค็น รายการองค์ประกอบและหมายเลขอะตอมของพวกเขาสำหรับการอ้างอิง: แสดงตัวอย่างโค้ด { "H": 1, "He": 2, "Li": 3, "Be": 4, "B": 5, "C": 6, "N": 7, …

3
พิมพ์จุดตัดของลำดับ
ลำดับ คุณจะได้รับสี่ลำดับหมายเลขหมายเลขผ่าน14 OEISตำแหน่งของ0เมื่อตัวเลขธรรมชาติแสดงเป็นเลขฐานสอง นี่คือตัวอย่างของวิธีการคำนวณลำดับ: 0,1,10,11,100,101,110,111 ^ ^ ^^ ^ ^ 0 3 78 10 14 การเริ่มต้นของลำดับเป็นดังนี้: 0, 3, 7, 8, 10, 14, 19, 20, 21, 23, 24, 27, 29, 31, 36, 37, 40, 45, 51, ... OEISลำดับนี้รวมถึงหมายเลขธรรมชาติแรกข้ามสองถัดไปจากนั้นรวมสามถัดไปแล้วข้ามสี่ถัดไปและดำเนินการต่อ 0, 3, 4, 5, 10, 11, 12, 13, 14, 21, 22, 23, 24, …

11
ค้นหาคู่ของตัวเลขด้วย LCM และ GCD ที่เจาะจง
ฉันทำงานกับคำถามทางคณิตศาสตร์กับเพื่อนของฉันและเราตัดสินใจที่จะเขียนสคริปต์ที่ค้นหาคำตอบ คำถามเดิมมีดังนี้: ความแตกต่างของจำนวนธรรมชาติสองตัวคือ 2010 และตัวส่วนร่วมที่ยิ่งใหญ่ที่สุดของพวกเขาคือ 2014 มีขนาดเล็กกว่าคูณสามัญต่ำสุดของพวกเขา ค้นหาโซลูชันที่เป็นไปได้ทั้งหมด เราเริ่มเขียนโปรแกรมเป็นอิสระจากกันและเมื่อมันทำงานเราก็ตัดสินใจที่จะตีกอล์ฟขึ้นเพื่อให้ได้จำนวนไบต์น้อยที่สุดที่เราสามารถจัดการได้ เราลงเอยด้วยรหัสที่สวยงามขนาด 89 ไบต์ from fractions import*;print[i for i in range(10**6)if i*(i+2010)/gcd(i,i+2010)**2==2014] เราต้องการที่จะดูว่าใคร ๆ ก็สามารถเขียนโค้ดที่สั้นกว่านี้ได้หรือไม่นั้นนับ 1 ล้านตัวแรกของฉัน หากคุณกล้าพอที่จะแข่งขันคุณอาจใช้ภาษาใดก็ได้ที่คุณชอบ แต่เราอยากให้ Python 2 เปรียบเทียบโค้ดของคุณกับเราได้ ใช้กฎแบบปกติไบต์ที่สั้นที่สุดจะชนะ ใช้ช่องโหว่ของรหัสมาตรฐาน "ช่องโหว่" มาตรฐานซึ่งไม่ตลกอีกต่อไป มีความสุข!
9 code-golf  math 

4
แยกตัวเลขออกเป็นผลรวมของ repdigits
Repdigits เป็นตัวเลขของแบบฟอร์มa * (10^n - 1)/9ด้วย a in [-9,9]\{0}(ในคำอื่น ๆ 111, -3333, 66, ตัวเลขที่ทำโดยการทำซ้ำเพียงหนึ่งหลัก) ประตู:เขียนโปรแกรมหรือฟังก์ชั่นซึ่งจะเป็นจำนวนเต็มบวกเดียวและภาพพิมพ์N N = s_1 + s_2 + ... + s_kควรมีหนึ่งหมายเลขต่อบรรทัดและหมายเลขจะต้องจัดชิดขวา ไม่มีการสรุปสองครั้งควรมีตัวเลขเท่ากันและไม่อนุญาตให้เพิ่มศูนย์ เอาต์พุตควรเรียงลำดับจากน้อยไปมากหรือมากไปน้อย (ตามจำนวนหลัก) ตัวอย่าง: in: 24192 out: 24192 = 22222 + 2222 - 222 - 33 + 3 in: 24192 out: -7 -22 +888 +1111 +22222 …

5
Hole 2 - Prime Quine
ค้นหาหลุม 1 ที่นี่ สร้างควินที่เมื่อรันจะบล็อกเอาต์พุตของซอร์สโค้ดของตัวเองหลายครั้ง ในความเป็นจริงมันจะต้องส่งออกมัน n ครั้งโดยที่ n ในจำนวนเฉพาะถัดไป ฉันคิดว่าตัวอย่างแสดงให้เห็นว่าดีที่สุด [MY QUINE][MY QUINE] [MY QUINE][MY QUINE][MY QUINE] [MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE] [MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE] [MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE] แต่ละโปรแกรมจะส่งออก "บล็อก" ฐานของมัน (ดังนั้น [MY QUINE]) จำนวนเฉพาะครั้งถัดไป …

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