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

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

9
รูปแบบไพ่ในมือ
สำรับไพ่เป็นผลิตภัณฑ์ของคาร์ทีเซียนที่มีทั้งSชุดสูทและRอันดับ เกมไพ่ส่วนมากใช้ไม่ได้S=4และR∊{6,8,13}ทั้งหมด ไพ่หนึ่งHใบแจกจากเด็ค การจัดจำหน่ายหรือที่รู้จักกันในชื่อ "รูปแบบมือ" เป็นอาร์เรย์ที่อธิบายจำนวนไพ่ที่คุณได้รับจากชุดแต่ละชุดโดยไม่สนใจคำสั่งชุดสูท ได้รับการกระจายDความพึงพอใจlen(D)=S, 1≤sum(D)=H≤S×R, 0≤D[i]≤R, D[i]≥D[i+1], พบน่าจะเป็นของมันที่เกิดขึ้น การป้อนข้อมูล: จำนวนเต็มและอาร์เรย์RD เอาท์พุท: ความน่าจะเป็นอย่างน้อย 5 หลักหลังเครื่องหมายทศนิยม; ศูนย์ต่อท้ายอาจถูกข้ามไป; สัญลักษณ์ทางวิทยาศาสตร์ก็โอเค ต้องห้ามช่องโหว่ ชนะสั้นที่สุด แบบทดสอบ: R D probability 13 4 4 3 2 -> 0.2155117564516334148528314355068773 13 5 3 3 2 -> 0.1551684646451760586940386335649517 13 9 3 1 0 -> 0.0001004716813294328274372174524508 13 13 0 0 …

11
พิมพ์มาตราส่วน
ไม่นะ! ฉันมีการทดสอบทางทฤษฎีในไม่ช้าและฉันยังจำเครื่องชั่งไม่ได้! ช่วยฉันจำเครื่องชั่งน้ำหนักหลักได้โดยการพิมพ์ดังต่อไปนี้: 7♯ - C♯ D♯ E♯ F♯ G♯ A♯ B♯ C♯ 6♯ - F♯ G♯ A♯ B C♯ D♯ E♯ F♯ 5♯ - B C♯ D♯ E F♯ G♯ A♯ B 4♯ - E F♯ G♯ A B C♯ D♯ E 3♯ - A B C♯ D E …

8
เลือกรายการให้เรียบ
พิจารณากระบวนการ "เลือก" รายการที่ซ้อนกัน การเลือกมีการกำหนดดังนี้: หากอาร์กิวเมนต์เป็นรายการให้นำองค์ประกอบจากรายการโดยการสุ่ม (สม่ำเสมอ) แล้วเลือกจากสิ่งนั้น หากการโต้แย้งไม่ใช่รายการเพียงแค่ส่งคืน ตัวอย่างการนำไปใช้ใน Python: import random def pick(obj): if isinstance(obj, list): return pick(random.choice(obj)) else: return obj เพื่อความง่ายเราจะสมมติว่ารายการแบบซ้อนมีเพียงจำนวนเต็มหรือรายการแบบซ้อน หากมีรายการใด ๆ ก็เป็นไปได้ที่จะสร้างเวอร์ชันที่แบนราบซึ่งไม่สามารถแยกออกได้pickเช่นการเลือกจากรายการนั้นให้ผลลัพธ์ที่เหมือนกันโดยมีความน่าจะเป็นเหมือนกัน ตัวอย่างเช่น "pick-flattening" รายการ [1, 2, [3, 4, 5]] ให้ผลผลิตรายการ [1, 1, 1, 2, 2, 2, 3, 4, 5] . เหตุผลที่เรียบง่ายไม่ถูกต้องเนื่องจากองค์ประกอบของรายการย่อยมีความน่าจะเป็นต่ำกว่าที่จะถูกเลือกเช่นในรายการ[1, [2, 3]]1 มีโอกาสที่จะถูกเลือก 2/4 …

16
ตัวเลขที่ไม่ดี
ถ้าเป็นจำนวนเต็มบวกมีปัจจัย (อย่างเคร่งครัด) นายกน้อย (โดยไม่นับ multiplicities) มากกว่าทายาทและบรรพบุรุษของมันเราจะเรียกมันว่าจำนวนปัจจัยที่น่าสงสารN&gt;2N&gt;2N > 2 ในคำอื่น ๆและω ( N ) &lt; ω ( N + 1 )ที่ω ( N )คือจำนวนของปัจจัยสำคัญที่เป็นเอกลักษณ์ของNω(N)&lt;ω(N−1)ω(N)&lt;ω(N−1)\omega(N) < \omega(N - 1)ω(N)&lt;ω(N+1)ω(N)&lt;ω(N+1)\omega(N) < \omega(N + 1)ω(N)ω(N)\omega(N)NNN งาน คุณสามารถเลือกระหว่างรูปแบบ I / O ต่อไปนี้: รับจำนวนเต็มและเอาท์พุทN THจำนวนปัจจัยที่น่าสงสาร ในกรณีที่คุณเลือกอันนี้N สามารถเป็นดัชนีได้ 0 หรือ 1NNNNthNthN^{\text{th}}NNN ใช้เป็นจำนวนเต็มบวกและผลผลิตครั้งแรกยังไม่มีตัวเลขปัจจัยที่น่าสงสารNNNNยังไม่มีข้อความN พิมพ์ลำดับไปเรื่อย ๆ คุณสามารถรับอินพุตและให้เอาต์พุตผ่านวิธีมาตรฐานใด ๆในภาษาการเขียนโปรแกรมใด ๆในขณะที่รับทราบว่าช่องโหว่เหล่านี้เป็นสิ่งต้องห้ามตามค่าเริ่มต้น …

18
สามเหลี่ยมหกเหลี่ยม
สมมติว่าการเรียงต่อกันของ hexagons ประกอบด้วย|/\อักขระ / \ / \ / \ / \ | | | | | \ / \ / \ / \ / etc. | | | | \ / \ / \ / ป.ร. ให้n &gt; 0ไว้เอาท์พุทส่วนที่เป็นรูปสามเหลี่ยมของกระเบื้องที่แสดงในตัวอย่างด้านล่างยึดด้วย_ในช่วงกลางของหกเหลี่ยม: n=1 \_/ n=2 \/ \/ \_/ n=3 \ | / \/ …

23
ค้นหาความแตกต่าง BCD ของตัวเลข
ความแตกต่าง BCD กำหนดจำนวนเต็ม n ให้แปลงเป็น BCD ( ทศนิยมทศนิยมด้วยรหัสไบนารี ) โดยแทนที่ทศนิยมแต่ละหลักด้วยการแทนเลขฐานสอง 4 หลัก 234 -&gt; 0 0 1 0 0 0 1 1 0 1 0 0 จากนั้นหมุนรายการของเลขฐานสองเพื่อหาจำนวนที่มากที่สุดและน้อยที่สุดซึ่งสามารถแทนได้โดยรายการนี้โดยไม่มีการจัดเรียงใหม่ max: 1 1 0 1 0 0 0 0 1 0 0 0 (the entire list rotated left 6 times) min: 0 0 …

16
การเรนเดอร์แบบง่าย
มีหลายวิธีในการสร้างส่วนหัวในโพสต์บนเครือข่ายกองซ้อนแลกเปลี่ยน รูปแบบที่ใช้บ่อยที่สุด1บน PPCG น่าจะเป็น: # Level one header ## Level two header ### Level three header สังเกตช่องว่างหลังเครื่องหมายแฮช นอกจากนี้โปรดทราบว่าเครื่องหมายแฮชต่อท้ายจะไม่รวมอยู่ ท้าทาย: ใช้สตริง (อาจเป็นหลายบรรทัด) เป็นอินพุตและเอาต์พุตสตริงในรูปแบบต่อไปนี้: หากส่วนหัวเป็นระดับ 1 ให้เอาท์พุทแต่ละตัวอักษร 4 - 4-4 ครั้ง หากส่วนหัวเป็นระดับ 2 ให้เอาท์พุทแต่ละตัวอักษร 3-by-3 หากส่วนหัวเป็นระดับ 3 ให้เอาท์พุทตัวอักษรแต่ละตัว 2 คูณ 2 หากบรรทัดไม่ใช่ส่วนหัวให้เอาท์พุทตามที่เป็นอยู่ เพื่อแสดง: --- Level 1 --- # Hello --- Output--- HHHHeeeelllllllloooo …

30
ตัวเลขรูปสามเหลี่ยม
จำนวนสามเหลี่ยมเป็นจำนวนที่สามารถแสดงเป็นผลรวมของจำนวนเต็มบวกติดต่อกันเริ่มต้นที่ 1 พวกเขายังสามารถแสดงออกด้วยสูตรn(n + 1) / 2ที่nเป็นจำนวนเต็มบวกบาง คู่ที่เป็นตัวเลขดิจิตอลของตัวเลขถูกคำนวณด้วยวิธีต่อไปนี้: แบ่งตัวเลขออกเป็นอาเรย์ของตัวเลขเช่น 613 =&gt; [6 1 3] สำหรับแต่ละหมายเลขในอาร์เรย์ให้คำนวณnจำนวนสามเหลี่ยมที่สาม[6 1 3] =&gt; [21 1 6] รวมอาร์เรย์ผลลัพธ์ [21 1 6] =&gt; 28 งานของคุณคือรับจำนวนเต็มnคำนวณnคู่ของรูปสี่เหลี่ยมจัตุรัสซ้ำ ๆจนกระทั่งผลลัพธ์เท่ากับ 1 แล้วส่งออกค่าทั้งหมดที่คำนวณ คุณสามารถส่งออกค่าในลำดับใด ๆ และด้วยการรวมตัวเลือกของหมายเลขเดิมที่จุดเริ่มต้นของอาร์เรย์ นี่คือรหัสกอล์ฟเพื่อให้รหัสที่สั้นที่สุดชนะ กรณีทดสอบ 23 =&gt; 9 45 25 18 37 34 16 22 6 21 4 10 …
20 code-golf  math 

30
สลับ Endianness
เป็นที่สุดของคุณอาจจะรู้ (ไบต์แอดเดรส) ความทรงจำฮาร์ดแวร์สามารถแบ่งออกเป็นสองประเภท - น้อย endianและbig- ในความทรงจำเล็ก ๆ น้อย ๆ bytes จะถูกกำหนดหมายเลขเริ่มต้นด้วย 0 ที่จุดสิ้นสุด (สำคัญน้อยที่สุด) และในทางกลับกันขนาดใหญ่ ข้อเท็จจริงที่สนุกสนาน : ข้อตกลงนี้มีพื้นฐานมาจากหนังสือGulliver's Travels ของJonathan Swiftที่ซึ่งกษัตริย์ Lilliputian สั่งให้ประชาชนของเขาทำลายไข่ของพวกเขาในตอนจบเล็ก ๆ การแลกเปลี่ยนทำงานอย่างไร สมมติว่าเรามีจำนวนเต็มไม่ได้ลงนาม (32 บิต) 12648430ในหน่วยความจำในเครื่องขนาดใหญ่ที่อาจมีลักษณะดังนี้: addr: 0 1 2 3 memory: 00 C0 FF EE โดยการกลับคำสั่ง byte เราได้รับจำนวนเต็มฐานสิบหก0xEEFFC000ซึ่งเป็น4009738240ทศนิยม งานของคุณ เขียนโปรแกรม / ฟังก์ชั่นที่ได้รับจำนวนเต็ม 32 บิตที่ไม่ได้ลงนามเป็นทศนิยมและส่งออกจำนวนเต็มผลลัพธ์เมื่อสลับ endianness …

13
Binary Square Sequence Sequence
ลำดับไบนารีสี่เหลี่ยมจัตุรัสเส้นทแยงมุมถูกสร้างขึ้นดังนี้ ใช้ลำดับของจำนวนธรรมชาติเป็นบวก: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ... แปลงตัวเลขแต่ละตัวเป็นไบนารี: 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000, 10001, ... เรียงต่อกัน: 11011100101110111100010011010101111001101111011111000010001 ... เริ่มต้นด้วยn=1สร้างสี่เหลี่ยมด้วยการเพิ่มความยาวด้านnซึ่งเติมจากซ้ายไปขวา, จากบนลงล่างด้วยองค์ประกอบของลำดับข้างต้น:11 0 1 11 0 0 1 …

20
ทำให้ตัวเลขสองหมายเลขเป็นค่าร่วมขณะที่รักษาค่าสามัญน้อยที่สุด
กำหนดจำนวนเต็มบวกสองค่าaและแสดงbผลจำนวนเต็มบวกสองค่าcและdเช่น: c แบ่ง a d แบ่ง b cและdเป็นนายกร่วม ตัวคูณร่วมน้อยของcและdเท่ากับตัวคูณร่วมน้อยของและab หากมีคำตอบมากกว่าหนึ่งคำตอบคุณสามารถส่งออกได้หนึ่งหรือทั้งหมดเท่านั้น กรณีทดสอบ: a b c d 12 18 4 9 18 12 9 4 5 7 5 7 3 6 1 6 or 3 2 9 9 9 1 or 1 9 6 15 2 15 or 6 5 1 1 …

22
สร้างกระดานหมากรุก
สำหรับความท้าทายนี้คุณจะพิมพ์พิกัดและสีของแต่ละชิ้นในตอนเริ่มเกมหมากฮอส ป้อน x และ y (คั่นด้วยเครื่องหมายจุลภาค) สำหรับทุกตาราง (ทำดัชนี 0-7) บนกระดานหมากรุกตามด้วย "r" หรือ "b" (สำหรับสีแดงหรือสีดำ) ที่ด้านบนของกระดาน (ใกล้กับ y = 0 ) เป็นสีแดงและด้านล่างเป็นสีดำ ต้องขึ้นบรรทัดใหม่ระหว่างชิ้นส่วนและไม่จำเป็นต้องเว้นวรรค นี่คือcode-golfดังนั้นคำตอบจะได้คะแนนเป็นไบต์ด้วยจำนวนไบต์ที่น้อยกว่านั้นจะดีกว่า ขึ้นบรรทัดใหม่ที่ได้รับอนุญาต แต่ไม่จำเป็นและการสั่งซื้อจะต้องตรงกับด้านล่าง ผลลัพธ์ที่ต้องการ: 0,0r 0,2r 0,4r 0,6r 1,1r 1,3r 1,5r 1,7r 2,0r 2,2r 2,4r 2,6r 5,1b 5,3b 5,5b 5,7b 6,0b 6,2b 6,4b 6,6b 7,1b 7,3b 7,5b 7,7b

30
นับการเปลี่ยนแปลงในอาร์เรย์
งานของคุณในวันนี้คือการเขียนโปรแกรมหรือฟังก์ชั่นที่ใช้อาร์เรย์จำนวนเต็มและนับจำนวนครั้งโดยอ่านจากซ้ายไปขวาว่าค่าเปลี่ยนไป นี่เป็นตัวอย่างที่แสดงได้ง่ายกว่า:[1 1 1 2 2 5 5 5 5 17 3] =&gt; [1 1 1 **2** 2 **5** 5 5 5 **17** **3**] =&gt; 4 กรณีทดสอบ: Input | Output [] | 0 [0] | 0 [0 1] | 1 [0 0] | 0 [1 2 3 17] | 3 …

23
รายการแบ่งได้หรือไม่
แรงบันดาลใจ (ที่มีคำอธิบายที่ถูกขโมย) จากนี้ พื้นหลัง สมมติว่าคุณมีสองรายการA = [a_1, a_2, ..., a_n]และB = [b_1, b_2, ..., b_n]จำนวนเต็ม เรากล่าวAคืออาจ-หารโดยBหากมีการเปลี่ยนแปลงของBที่ทำให้a_iหารด้วยทั้งหมดb_i iปัญหาคือ: มันเป็นไปได้ที่จะเรียงลำดับใหม่ (เช่นเรียงสับเปลี่ยน) Bเพื่อให้a_iหารด้วยb_iทั้งหมดiหรือไม่? ตัวอย่างเช่นถ้าคุณมี A = [6, 12, 8] B = [3, 4, 6] แล้วคำตอบจะเป็นTrueเช่นBสามารถที่จะจัดลำดับใหม่B = [3, 6, 4]และจากนั้นเราจะมีที่a_1 / b_1 = 2, a_2 / b_2 = 2และa_3 / b_3 = 2ซึ่งทั้งหมดเป็นจำนวนเต็มดังนั้นอาจเป็น-หารด้วยAB เป็นตัวอย่างที่ควรส่งออกFalseเราอาจมี: …

25
เก็บ / วาง / เพิ่มลำดับ
นี่คือลำดับที่ฉันพูดถึง: {1, 4, 5, 9, 10, 11, 16, 17, 18, 19, 25, 26, 27...} เริ่มต้นจาก 1 เก็บ 1 ลดลง 2 ถัดไปเก็บ 2 ถัดไปลดลง 3 เก็บ 3 และอื่น ๆ ใช่มันอยู่ในOEIS (A064801)ด้วย! ความท้าทาย รับจำนวนเต็มn&gt;0หาคำที่ n ของลำดับข้างต้น กรณีทดสอบ Input -&gt; Output 1-&gt;1 22-&gt;49 333-&gt;683 4444-&gt;8908 12345-&gt;24747 นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ! โชคดี!

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