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

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

13
สูตรสำหรับความสอดคล้อง
จีนที่เหลือทฤษฎีบทจะมีประโยชน์มากในการคำนวณแบบแยกส่วน ตัวอย่างเช่นพิจารณาชุดของความสัมพันธ์ที่สอดคล้องกันดังต่อไปนี้: สำหรับชุดของความสัมพันธ์ที่สอดคล้องกันเช่นนี้ที่ฐานทั้งหมด ( 3, 5, 7ในตัวอย่างนี้) เป็นนายกร่วมกันจะมีจำนวนเต็มหนึ่งเดียวเท่านั้นnระหว่าง1และผลิตภัณฑ์ของฐาน ( 3*5*7 = 105ในตัวอย่างนี้) รวมที่สอดคล้องกับความสัมพันธ์ . ในตัวอย่างนี้จำนวนจะถูก14สร้างโดยสูตรนี้: ที่2, 4, and 0ได้รับจากตัวอย่างข้างต้น 70, 21, 15คือสัมประสิทธิ์ของสูตรและขึ้นอยู่กับฐาน, 3, 5, 7. ในการคำนวณค่าสัมประสิทธิ์ของสูตร ( 70, 21, 15ในตัวอย่างของเรา) สำหรับชุดฐานเราใช้ขั้นตอนต่อไปนี้ สำหรับแต่ละหมายเลขaในชุดฐาน: ค้นหาสินค้าทั้งหมดของฐานอื่น ๆ Pที่แสดงเป็น ค้นหาหลายแรกของPใบที่เหลือของเมื่อหารด้วย1 นี่คือค่าสัมประสิทธิ์ของaa ตัวอย่างเช่นในการคำนวณค่าสัมประสิทธิ์ที่สอดคล้องกับฐาน3เราจะพบผลิตภัณฑ์ของฐานอื่น ๆ ทั้งหมด (เช่น5*7 = 35) จากนั้นหาค่าคูณแรกของผลิตภัณฑ์นั้นที่เหลือเศษของ1เมื่อถูกหารด้วยฐาน ในกรณีนี้35ใบที่เหลือของ2เมื่อหารด้วย3แต่35*2 = 70ใบที่เหลือของ1เมื่อหารด้วย3เพื่อเป็นค่าสัมประสิทธิ์ที่สอดคล้องกันสำหรับ70 3ในทำนองเดียวกัน3*7 = 21ใบที่เหลือของ1เมื่อหารด้วย5และ3*5 …
10 code-golf  math 

3
วิธีรับจำนวน
ได้รับการป้อนข้อมูลของหมายเลขแรกและจำนวนที่สอง (ทั้งจำนวนเต็มบวกศูนย์ exluded) ที่กำหนดในหลายวิธีที่คุณสามารถทำออกมาสองคนแรกที่ใช้การดำเนินการดังต่อไปนี้+1, และ+2 *3การดำเนินการถูกนำไปใช้เพียงแค่จากซ้ายไปขวา ตัวอย่าง: อินพุต: 1 2. ผลลัพธ์: 1. คือคุณทำได้แค่2ทำ+1อย่างเดียว อินพุต: 1 3. ผลลัพธ์: 3. เช่นคุณสามารถรับ 3 โดยทำ+2หรือ+1+1, หรือ*3 อินพุต: 1 4. ผลลัพธ์: 4. อินพุต: 2 6. ผลลัพธ์: 6. อินพุต: 2 7. ผลลัพธ์: 9. อินพุต: 1 10. ผลลัพธ์: 84. ในกรณีที่มีอยู่ไม่มีวิธีเช่น100 100หรือเอาท์พุทเป็น100 800 คุณสามารถป้อนข้อมูลเป็นอาร์เรย์หรือสตริงด้วยตัวคั่นที่สะดวกได้ ทางออกที่สั้นที่สุดชนะ

2
ปกป้องความสามารถของคุณกับชีวิตของคุณ!
ให้เล่น Kick The Can! แม้ว่า Moogie จะเป็นผู้ชนะในปัจจุบันหากใครก็ตามที่สามารถสวมมงกุฎได้เขาก็ควรที่จะทำเช่นนั้น Kick the กระป๋องเป็นเกมสำหรับเด็ก เกี่ยวข้องกับผู้พิทักษ์และผู้โจมตีหลายคน วันนี้มันไม่ใช่เกมอีกต่อไปแล้ว! งานของคุณคือการเขียนบอทที่เล่นเพื่อที่จะชนะสไตล์ของกษัตริย์ ! https://en.wikipedia.org/wiki/Kick_the_can มีความแตกต่างที่สำคัญในเกมนี้ ความแตกต่างที่สำคัญอันดับแรกคือเกมนี้มีผู้เล่นหลายคน (5v5) ความแตกต่างที่สำคัญที่สองคือบอททั้งสองชุดสามารถฆ่าและกำจัดผู้เล่นศัตรูด้วยระเบิดและระเบิด! บอตไม่สามารถมองเห็นเหมืองใด ๆ (โดยไม่คำนึงถึงระยะทาง) หรือผู้เล่นที่อยู่ห่างออกไปเกินห้าช่วงตึก! แผนที่เป็นเขาวงกตดังนี้ เขาวงกตนี้สร้างขึ้นตามขั้นตอนโดยการสร้างเขาวงกตเป็นครั้งแรกโดยใช้อัลกอริทึมย้อนรอยซ้ำแบบย้อนกลับ จากนั้นวางช่องที่แสดงใน (รวมทั้งทำให้เขาวงกต "ไม่สมบูรณ์" มากขึ้นเขาวงกตมีความกว้าง 65x65 บล็อกและมีการจัดทำดัชนีเป็นศูนย์ดังนั้นธงสีฟ้า (สามารถ) ได้ที่ 1,1 และธงแดง (สามารถ) คือ ที่ 63,63. ทีมสีน้ำเงินวางไข่ที่ 2,2 และ 3,3 4,4 เป็นต้นทีมสีแดงวางไข่ที่ 62,62 และ 61,61, 60,60 ฯลฯ …

6
ค้นหาเส้นทาง!
คุณต้องเขียนโปรแกรมหรือฟังก์ชั่น อินพุตเป็น 'แผนที่' ของตัวเลข คุณสามารถเลือกที่จะใช้แผนที่เป็นสตริงที่มีอักขระบรรทัดใหม่ ( \n) หรืออาร์เรย์ของสตริง 2D แผนที่ทั้งหมดเป็น 5 ตัวอักษร 5 ตัวและตัวละครจะเป็นตัวเลขมากกว่า 0 หรือเว้นวรรคเสมอ นี่คือตัวอย่างของแผนที่: 12 45 11233 233 1 2 899 งานของคุณคือการค้นหาส่วนประกอบที่เชื่อมต่อในแผนที่ ส่วนประกอบที่ถูกต้องคือชุดของอย่างน้อยสามแนวนอนและ / หรือแนวตั้ง ( ไม่ใช่แนวทแยงมุม ) ตัวเลขที่เหมือนกันที่เชื่อมต่อ ( ไม่เว้นวรรค ) จากนั้นคุณจะต้องแทนที่อักขระของส่วนประกอบที่เชื่อมต่อที่ถูกต้องด้วยxs และพิมพ์หรือส่งคืนผลลัพธ์นั้น ดังนั้นผลลัพธ์สำหรับตัวอย่างข้างต้นจะเป็น: x2 45 xx2xx 2xx 1 2 899 นี่คืออีกกรณีทดสอบ (ขอบคุณ Martin Ender): Input: …

2
พิสูจน์ว่าตัวเลขเป็นพีชคณิต
ได้รับแรงบันดาลใจจากคำตอบนี้ (เหมืองที่เน้น): เราจะเล่นเกม สมมติว่าคุณมีบางหมายเลขx คุณเริ่มต้นด้วยxจากนั้นคุณสามารถเพิ่ม, ลบ, คูณหรือหารด้วยจำนวนเต็มใด ๆ ยกเว้นศูนย์ คุณยังสามารถคูณด้วยx คุณสามารถทำสิ่งเหล่านี้ได้หลายครั้งตามที่คุณต้องการ หากผลรวมกลายเป็นศูนย์คุณจะชนะ ตัวอย่างเช่นสมมติว่าxคือ 2/3 คูณด้วย 3 แล้วลบ 2 ผลลัพธ์ที่ได้คือศูนย์ คุณชนะ! สมมติว่าxคือ 7 ^ (1/3) คูณด้วยxแล้วโดยxอีกครั้งแล้วลบ 7 คุณชนะ! สมมติว่าxคือ√2 + √3 ที่นี่ไม่ใช่เรื่องง่ายที่จะเห็นว่าจะชนะอย่างไร แต่ปรากฎว่าถ้าคุณคูณด้วยx , ลบ 10, คูณด้วยxสองครั้งแล้วบวก 1 คุณจะชนะ (สิ่งนี้ไม่ควรชัดเจน; คุณสามารถลองกับเครื่องคิดเลขได้) แต่ถ้าคุณเริ่มต้นด้วยx = πคุณจะไม่สามารถชนะได้ ไม่มีวิธีรับจากπถึง 0 หากคุณเพิ่มลบคูณหรือหารด้วยจำนวนเต็มหรือคูณด้วยπไม่ว่าคุณจะทำตามขั้นตอนจำนวนเท่าใดก็ตาม (สิ่งนี้ไม่ควรจะชัดเจนเช่นกันมันเป็นสิ่งที่ยุ่งยากมาก!) ตัวเลขเช่น√2 + √3จากการที่คุณสามารถชนะจะเรียกว่าพีชคณิต …
10 code-golf  math 

16
รหัสกอล์ฟสำหรับคนขี้เกียจ
เป้าหมายของคุณในการเล่นกอล์ฟรหัสนี้คือการรับสองสายlanguageและcode (หากรหัส golfed ที่คุณเขียนสำหรับการนี้คือ multiline ตัวแปรนี้จะเป็นแบบหลายบรรทัด)และจำนวนเต็มหนึ่งbytesตัว พวกเขาเป็นตัวแทนของตัวแปรสำหรับภาษาการเขียนโปรแกรมจำนวนไบต์ที่ใช้และรหัสตัวเอง หลังจากนั้นคุณจะจัดรูปแบบเหมือนที่นักกอล์ฟทำ answerตัวแปรที่ส่งออกเป็นสตริงหลายที่เรียกว่า คุณสามารถใช้สตริงหลายบรรทัดบน: C ++ หลาม Perl JavaScript หากคุณค้นหาStack Overflowคุณควรจะสามารถค้นหาภาษาการเขียนโปรแกรมเพิ่มเติมที่รองรับได้ นี่คือเทมเพลตของ markdown เอาต์พุต codeตัวแปรในการป้องกันรหัสและมีส่วนหัวระดับที่สอง ## {language}, {bytes} bytes {code} นี่คือลักษณะที่เอาต์พุตจะมีลักษณะเมื่อวางลงในตัวแยกวิเคราะห์ Markdown {language}, {bytes} ไบต์ {code} ตัวแปรจะถือว่าถูกกรอกไว้แล้วในขณะที่ภาษาที่คุณเขียนรหัสรายการของคุณกอล์ฟจำนวนไบต์ที่ใช้และรหัสจริงของมัน นี่เป็นอีกตัวอย่างหนึ่งของการส่งออกเป็นรหัสคราวนี้มีตัวแปรกรอก: ## JavaScript, 1337 bytes document.getElementById("foo").innerHTML = bar; นี่คือรุ่นที่เป็นข้อความอ้างอิง: JavaScript, 1337 ไบต์ document.getElementById("foo").innerHTML = bar; สามารถนำไบต์ออกจากรหัสของคุณได้หากคุณใช้วิธีตั้งค่าข้อความของ<p>องค์ประกอบใน HTML …

7
การแข่งขันจำนวนลง
งานของคุณคือการสร้างโปรแกรมที่เพิ่มตัวเลขสุ่มไปยังผลรวมก่อนหน้าในการเปิดไพ่แข่งจำนวนมาก นักแข่งแต่ละคน (คอลัมน์) เริ่มต้นที่ 0 และเพิ่ม 1 หรือ 0 เข้ากับผลรวมก่อนหน้าในแต่ละขั้นตอนของการแข่งขันจนกว่านักแข่งทุกคนจะถึงคะแนนที่จำเป็นในการชนะ ควรเลือก 1 หรือ 0 โดยการสุ่ม (นิยามมาตรฐานของการสุ่มสามารถดูได้ที่นี่ ) ผลลัพธ์จะแสดงผลลัพธ์ของการแข่งขันโดยแต่ละคอลัมน์แสดงถึงนักแข่งหนึ่งคนในรูปแบบนี้: >> racers:5,score needed:2 0 0 0 0 0 # all racers start at 0 + + + + + # add 1 0 0 0 1 # random 1 or 0 = …
10 code-golf 

10
ค้นหาการดำเนินการที่จำเป็นเพื่อให้ได้ผลลัพธ์
เพื่อให้งานนั้นง่ายชุดของตัวเลขและผลลัพธ์คุณต้องค้นหาการดำเนินการที่คุณต้องใช้กับตัวเลขจากอาร์เรย์เพื่อให้ได้ผลลัพธ์ตามที่ร้องขอ มาทำให้เป็นเรื่องง่ายสำหรับการเริ่มต้นและอนุญาตเฉพาะการดำเนินการพื้นฐานเช่น: การบวกการลบการคูณและการหาร ตัวอย่าง: Input : [5,5,5,5,5] 100 Output : 5*5*5-5*5 เพื่อให้ข้อได้เปรียบบางอย่างกับภาษาเช่น Java คำขอคือการใช้ฟังก์ชั่นไม่ใช่โปรแกรมทั้งหมดและผลลัพธ์สามารถส่งคืนผ่านพารามิเตอร์หรือพิมพ์ไปที่คอนโซล โค้ดจะทำคะแนนตามจำนวนไบต์และด้วยความท้าทายของรหัสกอล์ฟคะแนนต่ำสุดชนะ ข้อกำหนดอีกประการหนึ่งคือคุณจะได้รับ -10 คะแนนเพิ่มเติมหากอาร์เรย์มีเพียงดิดไอดีโซลูชั่นสนับสนุนที่คุณสามารถสร้างตัวเลขจากตัวเลขต่อไปนี้ กล่าวคือ Input : [1,2,3,4,5] 0 Output : 12-3-4-5 โปรดทราบว่าเอาต์พุตที่ให้มาเป็นเอาต์พุตที่เสนอบางกรณีอาจมีมากกว่าหนึ่งโซลูชัน ขึ้นอยู่กับคุณว่าคุณจะมอบโซลูชั่นอย่างน้อยหนึ่งอย่างสำหรับงานที่ได้รับ แก้ไข: ผลจะต้องถูกต้องจากมุมมองทางคณิตศาสตร์ดังนั้นการแบ่งเป็นส่วนที่มีเหตุผลไม่ใช่จำนวนเต็มและการดำเนินการที่สำคัญคือเช่นเดียวกับในคณิตศาสตร์คลาสสิก (การคูณครั้งแรกและการหารแล้วบวกและลบ)

3
ร้อยสี่เหลี่ยม!
กลับไปสู่พื้นฐาน ... ในฐานะที่เป็นครูในโรงเรียนประถม (เกรด) คุณต้องมีวิธีสอนตารางเรียนของพวกเขา ในการกำจัดของคุณคุณมีหลายร้อยสี่เหลี่ยมและโหลดปากกาสีแดง คุณจะต้องสามารถแสดงคำตอบที่ถูกต้องในชั้นเรียนได้อย่างรวดเร็ว ตอนนี้คุณฉลาดพอที่จะเขียนโปรแกรมที่สามารถทำไทม์สแควร์ได้ แต่คุณสามารถวาดมันบนร้อยตารางได้หรือไม่? ความท้าทาย เอาท์พุทสี่เหลี่ยมจตุรัสถึง stdout หรือเทียบเท่าโดยใช้รหัส ansi-escapeเพื่อแรเงาเป็นตัวเลขซึ่งเป็นทวีคูณของอินพุต เอาท์พุทกริด 10x10 ที่มีตัวเลข 1-100 ไม่สำคัญว่าจะมีการจัดตำแหน่งตัวเลข 2 หลักในแต่ละช่องตราบใดที่สอดคล้องกัน สำหรับตัวเลข 1 หลักคุณสามารถเลื่อนเป็น 2 หลักและใช้การจัดรูปแบบเดียวกับตัวเลข 2 หลักหรืออยู่กึ่งกลางของกล่อง หากตัวเลขในกล่องเป็นค่าที่ป้อนหลายค่าให้ใส่สีแดงทั้งช่อง นี่หมายความว่าทั้งกล่องไม่ใช่แค่ส่วนที่เป็นตัวเลข ตัวอย่างเช่นเมื่อได้รับการป้อนข้อมูล3ให้พิมพ์ร้อยตารางที่กำหนด นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ!

13
ผลิตภัณฑ์ Dot ของ Diagonals
ความท้าทายนี้ง่ายมาก คุณได้รับเป็นอินพุตเมทริกซ์จตุรัสซึ่งแสดงด้วยวิธีใด ๆ ที่มีสติและคุณต้องส่งออกผลคูณดอทของเส้นทแยงมุมของเมทริกซ์ เส้นทแยงมุมที่เฉพาะเจาะจงคือการวิ่งแนวทแยงมุมจากซ้ายไปขวาล่างและจากบนขวาไปซ้ายล่าง กรณีทดสอบ [[-1, 1], [-2, 1]] -> -3 [[824, -65], [-814, -741]] -> 549614 [[-1, -8, 4], [4, 0, -5], [-3, 5, 2]] -> -10 [[0, -1, 0], [1, 0, 2], [1, 0, 1]] -> 1

4
บล็อกขวางค่าใช้จ่ายขั้นต่ำ
พิจารณาเมทริกซ์บล็อกแนวขวางแบบไบบล็อกซึ่งมีบล็อกสี่เหลี่ยมจัตุรัส 1s บนเส้นทแยงมุมหลักและเป็น 0 ทุกที่ ลองเรียกเมทริกซ์นั้นว่า "ถูกต้อง" ตัวอย่างเช่นต่อไปนี้เป็นเมทริกซ์ 4x4 ที่ถูกต้อง: 1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 1 1 0 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 …

3
RegEx-golf: จับคู่เนื้อหาทั้งหมดในสตริง
งานของคุณคือเขียน RegEx ที่ตรงกับทุกอย่างภายในสตริง สตริงที่ถูกกำหนดให้เป็นทุกอย่างที่ล้อมรอบไปด้วย ( แต่ไม่รวม) "สองใช้ Escape "สามารถหนีออกมาโดย\ที่ยังสามารถหนีออกมาอีกครั้ง Testcases string: ab\c"defg\\\"hi"jkl"mn\\\\"opqrst"" matches: ^^^^^^^^^^ ^^^^^^ ^ (the empty string) เกณฑ์การให้คะแนน ทางออกที่สั้นที่สุดชนะ รายละเอียด โปรดระบุรสชาติที่ใช้ "การป้อนข้อมูลจะมีความสมดุล จะไม่มี\สิ่งนั้นนำหน้าสตริงเริ่มต้น - ตัวคั่นทันที ตัวอย่างเช่นคุณไม่จำเป็นต้องจัดการabc\"def"

1
วิธีการค้นหารายการในรายการที่มี f (รายการ) มีขนาดเล็กที่สุด?
ฉันมีรายชื่อและฟังก์ชั่นl ไม่ได้เพิ่มหรือลดลงอย่างเคร่งครัด ฉันจะค้นหารายการในรายการที่มีขนาดเล็กที่สุดได้อย่างไร ตัวอย่างเช่นสมมติว่ารายการคือ:fff(item) l = [1, 2, 3, 4] และlist(f(x)for x in l)คือ: [2, 9, 0, 3] f(3)เล็กกว่า f ของอันอื่นดังนั้นควรพิมพ์ "3" วิธีที่สั้นที่สุดในการทำเช่นนี้คืออะไร? ตอนแรกฉันพยายาม: min(f(x) for x in l) แต่นี้จะช่วยให้ไม่ได้0 3หากฉันกำลังถ่ายภาพเพื่อความสะดวกในการอ่านไม่กระชับฉันจะทำ: index = 0 smallest = f(l[0]) for i in range(len(l)): value = f(l[i]) if value < smallest: smallest = …
10 code-golf  tips  python 

2
สร้างสะพาน
งานของคุณคือการสร้างสะพานเพื่อเชื่อมต่อหน้าผาสองแห่งที่ให้อินพุตdระยะห่าง dจะเป็นเสมอ อย่างไรก็ตามสะพานต้องการคอลัมน์เพื่อเก็บไว้ แต่ละคอลัมน์สามารถมีช่องว่างได้สูงสุด 6 ช่องในแต่ละด้าน สำหรับตัวอย่างนี้: ________ ________ | | A | | B |----------------------| d = 22 สะพานd = 20ควรมีลักษณะเช่นนี้มีสองคอลัมน์ คอลัมน์จะไม่นับใน d _____|__________|_____ 12345|1234554321|12345 | | กฎ: ต้องมีคอลัมน์เพียงพอที่จะยืนขึ้น ต้องมีจำนวนคอลัมน์ขั้นต่ำที่จำเป็นในการยืน ต้องสมมาตร จำนวนไบต์ที่น้อยที่สุดชนะ ตัวอย่าง: (#s เพียงเพื่อช่วยให้คุณนับช่องว่างไม่ควรรวมในผลลัพธ์ของคุณ) d = 10 _____|_____ 12345|12345 | d = 32 _____|___________|___________|_____ 12345|12345654321| | | | …

12
ชุดเสริม N-Uniquely
โปรดจำไว้ว่าชุดจะไม่มีการเรียงลำดับโดยไม่มีการซ้ำซ้อน นิยามไม่มีสารเติมแต่ง -uniquely ชุดSมีความยาวKเป็นชุดดังกล่าวว่าทุกNมีความยาวย่อยในSรวมกับตัวเลขที่แตกต่างกัน กล่าวอีกนัยหนึ่งผลรวมของชุดย่อยN -length ทั้งหมดของSนั้นแตกต่างกันทั้งหมด วัตถุประสงค์ป.ร. ให้อาร์เรย์ / ชุดเป็น input และตัวเลขNเพื่อฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบในรูปแบบที่เหมาะสมใด ๆ ค้นหาและการกลับมาหรือส่งออก truthy หรือ falsey ค่า (erroring สำหรับ falsey ไม่เป็นไร) แสดงถึงหรือไม่ว่าใส่เป็นN - สารเติมแต่งที่ไม่ซ้ำกัน คุณอาจคิดว่าแต่ละองค์ประกอบจะปรากฏเพียงครั้งเดียวมากที่สุดและแต่ละหมายเลขนั้นอยู่ในประเภทข้อมูลดั้งเดิมของภาษาของคุณ ถ้าจำเป็นคุณอาจสมมติว่าอินพุตถูกเรียงลำดับ 0 < N <= Kสุดท้ายคุณอาจคิดว่า ตัวอย่าง ลองพิจารณาการตั้งค่าและS = {1, 2, 3, 5} N = 2นี่คือผลรวมทั้งหมดของคู่ที่ไม่ซ้ำกันทั้งหมดS(สำหรับรายการที่ไม่ซ้ำกันเป็นรายการเดียวที่น่าสนใจสำหรับผลรวม): 1 + 2 = 3 1 + …

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