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

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

27
การเปลี่ยนสับเปลี่ยนบิตกลับ
เป้าหมายของคุณคือการสร้างฟังก์ชั่นหรือโปรแกรมที่จะย้อนกลับบิตในช่วงของจำนวนเต็มให้จำนวนเต็มn กล่าวอีกนัยหนึ่งคุณต้องการค้นหาการเปลี่ยนรูปบิตกลับรายการช่วง 2 nรายการซึ่งไม่มีดัชนี และนี่ก็เป็นลำดับ OEIS A030109 กระบวนการนี้มักใช้ในการคำนวณ Fast Fourier Transforms เช่นอัลกอริทึม Cooley-Tukey ในสถานที่สำหรับ FFT นอกจากนี้ยังมีความท้าทายสำหรับการคำนวณ FFT สำหรับลำดับที่ความยาวคือพลังของ 2 กระบวนการนี้กำหนดให้คุณทำซ้ำในช่วง [0, 2 n -1] และแปลงแต่ละค่าเป็นไบนารีและแปลงบิตในค่านั้น คุณจะได้รับการรักษาแต่ละค่าเป็นnจำนวน -digit ในฐาน 2 ซึ่งหมายถึงการกลับรายการจะเกิดขึ้นในหมู่สุดท้ายnบิต ตัวอย่างเช่นถ้าn = 3 [0, 1, 2, 3, 4, 5, 6, 7]ช่วงของจำนวนเต็มคือ เหล่านี้คือ i Regular Bit-Reversed j 0 000 000 0 …

8
เห็นภาพตัวหารร่วมมาก
พื้นหลัง ตัวหารทั่วไปที่ยิ่งใหญ่ที่สุด ( gcdสำหรับระยะสั้น) เป็นฟังก์ชันทางคณิตศาสตร์ที่สะดวกเนื่องจากมีคุณสมบัติที่มีประโยชน์มากมาย หนึ่งในนั้นคือเอกลักษณ์ของเบซู : ถ้าd = gcd(a, b)แล้วมีอยู่ integers xและเช่นว่าy d = x*a + y*bในความท้าทายนี้งานของคุณคือการเห็นภาพคุณสมบัตินี้ด้วยศิลปะ ASCII แบบง่าย อินพุต อินพุตของคุณเป็นจำนวนเต็มบวกสองจำนวนaและbกำหนดในรูปแบบที่เหมาะสม คุณยังสามารถรับอินพุตแบบยูนารี (การทำซ้ำอักขระ ASCII ที่พิมพ์ได้เดียวที่คุณเลือก) แต่คุณจะต้องสอดคล้องและใช้รูปแบบเดียวกันสำหรับอินพุตทั้งสอง อินพุตอาจอยู่ในลำดับใดก็ได้และอาจเท่ากัน เอาท์พุต ผลลัพธ์ของคุณคือสตริงที่มีsความยาวlcm(a, b) + 1( lcmหมายถึงตัวคูณสามัญต่ำสุด) ตัวละครของsแทนจำนวนเต็มจากไป0 lcm(a, b)ตัวละครs[i]เป็นตัวพิมพ์เล็กoถ้าiเป็นหลายaหรือbและเป็นระยะเวลา.อื่น โปรดทราบว่าศูนย์เป็นจำนวนมากของทุกหมายเลข ตอนนี้เพราะเอกลักษณ์ของเบซูจะมีอย่างน้อยหนึ่งคู่ของตัวละครoในที่มีระยะทางตรงs gcd(a, b)คู่ซ้ายสุดดังกล่าวจะถูกแทนที่ด้วยตัวพิมพ์ใหญ่Os นี่คือผลลัพธ์สุดท้าย ตัวอย่าง พิจารณาปัจจัยการผลิตและa = 4 b = 6แล้วเรามีgcd(a, b) …

12
เงินปันผลหนึ่งศูนย์
คำอธิบายการท้าทาย สำหรับทุกจำนวนเต็มบวกnมีอยู่เป็นจำนวนมากที่มีรูปแบบของ111...10...000ที่หารด้วยnเช่นตัวเลขทศนิยมที่เริ่มต้นด้วยทั้งหมด1's และสิ้นสุดที่มีทั้งหมด0ของ นี่เป็นเรื่องง่ายมากที่จะพิสูจน์: ถ้าเราใช้n+1จำนวนตัวเลขที่แตกต่างกันในรูปของ111...111(ทั้งหมด1) จากนั้นอย่างน้อยสองคนจะให้ส่วนที่เหลือเหมือนกันหลังจากการหารด้วยn(ตามหลักการของนกพิราบ) ความแตกต่างของตัวเลขสองตัวนี้จะหารด้วยnและจะมีรูปแบบที่ต้องการ www.games501.com ฟรีเป้าหมายของคุณคือการเขียนโปรแกรมที่พบหมายเลขนี้ คำอธิบายอินพุต จำนวนเต็มบวก คำอธิบายผลลัพธ์ ตัวเลขpในรูปแบบของ111...10...000เช่นนั้นp ≡ 0 (mod n)เช่นว่าหากคุณพบมากกว่าหนึ่ง - แสดงใด ๆ ของพวกเขา (ไม่จำเป็นต้องเล็กที่สุด) หมายเหตุ โปรแกรมของคุณจะต้องให้คำตอบในเวลาที่เหมาะสม ซึ่งหมายความว่าไม่อนุญาตให้ใช้กำลังเดรัจฉาน: p = 0 while (p != 11..10.00 and p % n != 0) p++ ไม่เป็นอย่างนี้: do p = random_int() while (p != 11..10.00 and p …

30
เครื่องคิดเลขการดำเนินการจำนวนเต็มง่าย
ใช้เครื่องคิดเลขแบบสคริปต์การดำเนินการจำนวนเต็มอย่างง่าย แนวคิด ตัวสะสมเริ่มต้นที่ 0 และมีการดำเนินการกับมัน ในตอนท้ายของโปรแกรมเอาท์พุทค่าของการสะสม การดำเนินงาน: +เพิ่ม1การสะสม -ลบออก1จากตัวสะสม * คูณตัวสะสมด้วย 2 / หารตัวสะสมด้วย 2 สคริปต์ตัวอย่าง การป้อนข้อมูลที่ควรให้การส่งออก++**--/3 ตัวอย่างการนำไปใช้ def calc(s) i = 0 s.chars.each do |o| case o when '+' i += 1 when '-' i -= 1 when '*' i *= 2 when '/' i /= 2 end end …

23
สรุปผลด้วยสามเหลี่ยมดิจิทัล
เอาไปรวมกันจริงๆ เขียนโปรแกรมหรือฟังก์ชั่นที่รับรายการเลขจำนวนเต็มฐานสิบ (0-9) ที่ไม่มีข้อยกเว้นและส่งออก "สามเหลี่ยม" ที่ชี้ลงของตัวเลขพร้อมรายการอินพุตที่ด้านบนซึ่งทุกหลักหลังจากบรรทัดแรกคือผลรวมของตัวเลขสองหลัก ด้านบนมันโมดูโล 10 ตัวอย่างเช่นอินพุต[7, 5, 0, 9]มีเอาต์พุต 7 5 0 9 2 5 9 7 4 1 เพราะ2เป็น(7 + 5) mod 10, 5คือ(5 + 0) mod 10, 9เป็น(0 + 9) mod 10เป็นต้นไปทางความเป็นอยู่1(7 + 4) mod 10 หากรายการมีเพียงหนึ่งรายการดังนั้นผลลัพธ์จะตรงกับอินพุต เช่นการป้อนข้อมูลของความ[4]ประสงค์ 4 นี่คือตัวอย่างเพิ่มเติม: [0] 0 [1, 2] 1 …

18
เป็นหรือไม่เป็น
ในไบต์ที่น้อยที่สุดที่เป็นไปได้ตรวจสอบว่าค่าสองค่าที่กำหนดให้แต่ละคู่ตรงกันอย่างใดอย่างหนึ่งต่อไปนี้: ค่าแรก 2 string or integer - whichever you prefer to case insensitive too case insensitive two case insensitive t0 case insensitive (t zero) ค่าที่สอง b case insensitive be case insensitive bee case insensitive b3 case insensitive ตัวอย่าง 2 'Bee' true '2' 'b' true 'not to' 'be' false 'that is' …
28 code-golf  string 

25
ดัชนีของอาร์เรย์หลายมิติ
ภาษาระดับต่ำกว่าเช่น C และ C ++ จริง ๆ แล้วไม่มีแนวคิดของอาร์เรย์หลายมิติ (นอกเหนือจากเวกเตอร์และอาร์เรย์แบบไดนามิก) เมื่อคุณสร้างอาร์เรย์หลายมิติด้วย int foo[5][10]; นี้เป็นจริงเพียงแค่น้ำตาลประโยค สิ่งที่ C ทำจริงๆคือสร้างอาเรย์เดี่ยวที่ต่อเนื่องกันขององค์ประกอบ5 * 10 นี้ foo[4][2] ยังเป็นน้ำตาล syntactic นี่หมายถึงองค์ประกอบที่ 4 * 10 + 2 หรือองค์ประกอบที่ 42 โดยทั่วไปดัชนีขององค์ประกอบ[a][b]ในอาร์เรย์foo[x][y]อยู่ที่ a * y + b แนวคิดเดียวกันนี้ใช้กับอาร์เรย์ 3 มิติ ถ้าเรามีfoo[x][y][z]และเราเข้าถึงองค์ประกอบ[a][b][c]เราเข้าถึงองค์ประกอบจริงๆ: a * y * z + b * z + …

30
ค้นหาจำนวนที่เล็กที่สุดที่ใหญ่กว่าอินพุทที่มีผลรวมดิจิตอลเป็นอินพุท
"ผลรวมดิจิตอล" หมายถึงผลรวมของตัวเลขทั้งหมดในจำนวน ยกตัวอย่างเช่นผลรวมดิจิตอล1324เป็นเพราะ101+3+2+4 = 10 ความท้าทายคือการเขียนโปรแกรม / ฟังก์ชั่นเพื่อคำนวณจำนวนที่เล็กที่สุดที่ใหญ่กว่าอินพุทที่มีผลรวมดิจิตอลเป็นอินพุท ตัวอย่างที่มีคำแนะนำแบบ ยกตัวอย่างเช่นใช้ตัวเลข9เป็นอินพุต: 9 = 1+8 -> 18 9 = 2+7 -> 27 9 = 3+6 -> 36 ... 9 = 8+1 -> 81 9 = 9+0 -> 90 18เอาท์พุทที่ถูกต้องจะเป็นจำนวนที่น้อยที่สุดดังกล่าวข้างต้นซึ่งเป็น รายละเอียด โปรดทราบว่า9ไม่ใช่เอาต์พุตที่ถูกต้องสำหรับตัวอย่างนี้เนื่องจากหมายเลขที่กลับจะต้องมากกว่าจำนวนเดิม โปรดทราบว่าอินพุตจะเป็นค่าบวก การทดสอบกรณี: 2 => 11 (2 = 1 + 1) 8 …

30
ไบต์ / ตัวอักษร
งาน รับสตริง UTF-8 (โดยวิธีการใด ๆ ) คำตอบ (โดยวิธีการใด ๆ ) รายการเทียบเท่าที่ทุกองค์ประกอบเป็นจำนวนไบต์ที่ใช้ในการเข้ารหัสตัวอักษรที่สอดคล้องกัน ตัวอย่าง ! → 1 Ciao → 1 1 1 1 tʃaʊ → 1 2 1 2 Adám → 1 1 2 1 ĉaŭ→ 2 1 2(ตัวอักษรเดียว) ĉaŭ→ 1 2 1 1 2(ใช้การรวมภาพซ้อนทับ) チャオ → 3 3 3 (อินพุตว่าง) → …

3
สี่ก้าวไปทางซ้าย: งูพิษ สี่ก้าวไปทางขวา: หน้าผา อย่าตาย!
บทนำ สมมติว่าช่วงเวลาที่งูพิษและหน้าผาอยู่ห่างออกไปเพียงสองก้าวแทนที่จะเป็นสามขั้น o --- Hsss! | ';;' ___ /_\ ___ _ | น่าเสียดายที่คุณเป็นเชลยของผู้ทรมานซาดิสต์ คุณจะต้องเดินไปทางซ้ายหรือขวาทุกก้าว ถ้าคุณทำไม่ได้พวกเขาจะยิงคุณตายทันที คุณได้รับอนุญาตให้วางแผนขั้นตอนของคุณล่วงหน้า แต่เมื่อคุณทำตามขั้นตอนแรกคุณจะไม่สามารถเปลี่ยนแผนได้ (และไม่มีเสียงดังอืดอาดเช่นกันพวกมันจะยิงคุณ) ทันใดนั้นความคิดที่สดใสก็มาถึงใจ ... Ah! ฉันสามารถสลับก้าวไปทางซ้ายและขวาได้! ขั้นตอนที่ถูกต้องขั้นตอนที่เหลือขั้นตอนที่ถูกต้องขั้นตอนที่เหลือและอื่น ๆ ... อ่าอาไม่เร็วนัก อย่างที่ฉันพูดผู้ทรมานนั้นเป็นพวกซาดิสต์ พวกเขาจะเลือกไม่ว่าคุณจะทำทุกขั้นตอนหรือทุกขั้นตอนที่สองหรือทุกขั้นตอนที่สามเป็นต้น ดังนั้นหากคุณเลือกอย่างไร้เดียงสาลำดับแล้วพวกเขาสามารถบังคับให้คุณใช้เวลาทุกขั้นตอนที่สองซึ่งจะเริ่มต้นด้วยRLRLRL... LLเอ่อโอ้! คุณถูกงูพิษกัด! ความมืดปกคลุมคุณและทุกอย่างก็จางหายไป ... ที่จริงแล้วคุณยังไม่ตาย คุณยังต้องเกิดขึ้นกับแผนของคุณ หลังจากคิดถึงเรื่องนี้สักครู่คุณก็ตระหนักว่าคุณกำลังถูกลงโทษ ไม่มีวิธีการวางแผนขั้นตอนต่าง ๆ ที่จะรับประกันความอยู่รอดของคุณ RLLRLRRLLRRดีที่สุดที่คุณสามารถขึ้นมามี 1สิบเอ็ดขั้นตอนที่ปลอดภัยและไม่มาก หากขั้นตอนที่สิบสองคือRTorturer จะทำให้คุณทำทุกขั้นตอนและจากนั้นสามขั้นตอนสุดท้ายจะส่งคุณออกจากหน้าผา หากขั้นตอนที่สิบสองคือLผู้ทรมานจะทำให้คุณทำทุกขั้นตอนที่สาม ( LRLL) ซึ่งจะทำให้คุณถูกต้องในฝูงของงูพิษและกัดกัดตายของพวกเขา คุณเลือกRเป็นขั้นตอนที่สิบสองหวังที่จะชะลอการตายให้นานที่สุด ด้วยเสียงคำรามในหูของคุณคุณสงสัยในตัวเอง ... …

19
สร้างบันได ASCII
ได้รับการป้อนข้อมูลของจำนวนเต็มnและม.เอาท์พุทบันได ASCII ของความยาว nและขนาดเมตร นี่คือบันได ASCII ของความยาว 3 และขนาด 3: o---o | | | | | | +---+ | | | | | | +---+ | | | | | | o---o นี่คือบันได ASCII ที่มีความยาว 5 และขนาด 1: o-o | | +-+ | | +-+ | | +-+ | | …

11
ค้นหาช่องว่างที่ใหญ่ที่สุดระหว่างช่วงเวลาที่ดี
ตามประเพณีของคำถามที่ดีเช่นค้นหานายกที่ใหญ่ที่สุดที่มีความยาวยอดรวมและผลงานที่ยอดเยี่ยมนี่เป็นตัวแปรสำหรับความท้าทายที่ยิ่งใหญ่ที่สุด อินพุต รหัสของคุณไม่ควรป้อนข้อมูลใด ๆ คำนิยาม เราบอกว่านายกpคือgoodถ้าp-1มี2ปัจจัยสำคัญแตกต่างกันอย่างแน่นอน เอาท์พุต รหัสของคุณควรส่งออกแตกต่างแน่นอนระหว่างช่วงเวลาที่ดีต่อเนื่องqและpเพื่อให้|q-p|มีขนาดใหญ่ที่สุดเท่าที่เป็นไปได้และเป็นที่ดีที่เล็กที่สุดที่สำคัญมีขนาดใหญ่กว่าq pคุณสามารถส่งออกจำนวนคู่ที่ดีใด ๆ และผลลัพธ์สุดท้ายของคุณจะถูกนำมาเป็นคะแนน ตัวอย่าง ลำดับแรก 55 ช่วงเวลาที่ดีคือhttps://oeis.org/A067466 คะแนน คะแนนของคุณเป็นเพียง|q-p|สำหรับคู่ที่ดีที่คุณส่งออก ภาษาและห้องสมุด คุณสามารถใช้ภาษาหรือไลบรารีใด ๆ ที่คุณชอบ (ที่ไม่ได้ออกแบบมาสำหรับความท้าทายนี้) ยกเว้นฟังก์ชั่นห้องสมุดใด ๆ สำหรับการทดสอบแบบดั้งเดิมหรือการแยกจำนวนเต็ม อย่างไรก็ตามเพื่อจุดประสงค์ในการให้คะแนนฉันจะเรียกใช้รหัสของคุณบนเครื่องของฉันดังนั้นโปรดให้คำแนะนำที่ชัดเจนเกี่ยวกับวิธีการเรียกใช้บน Ubuntu My Machineเวลาของฉันจะทำงานบนเครื่องของฉัน นี่คือการติดตั้ง Ubuntu แบบมาตรฐานบนโปรเซสเซอร์ AMD FX-8350 Eight-Core 8GB นี่ก็หมายความว่าฉันต้องสามารถเรียกใช้รหัสของคุณได้ รายละเอียด ฉันจะฆ่าโค้ดของคุณหลังจาก 2 นาทีจนกว่าจะหมดหน่วยความจำก่อนหน้านั้น ดังนั้นควรตรวจสอบผลลัพธ์ก่อนที่จะตัดออก คุณไม่สามารถใช้แหล่งที่มาภายนอกของช่วงเวลาใดก็ได้ คุณอาจใช้วิธีการทดสอบความน่าจะเป็นที่สำคัญแม้ว่าฉันจะบอกโดย Mego ว่าด้วยตารางที่ดี Miller-Rabin สามารถทดสอบได้สูงสุด 341,550,071,728,321 (หรือสูงกว่า) …

10
Heterograms, Palindromes, โอ้!
(ความท้าทายแรกโปรดแจ้งให้เราทราบหากมีปัญหาใด ๆ กับมัน) heterogramเป็นคำที่ตัวอักษรไม่เกิดขึ้นมากกว่าหนึ่งครั้งและpalindromeเป็นวลีที่เป็นไปข้างหลังเหมือนกันและไปข้างหน้า ความท้าทายที่นี่คือการเขียนโค้ดที่ใช้คำ (ตัวอักษร) เป็นอินพุตและแสดงผลว่าเป็น heterogram (ความจริง / เท็จ) หรือไม่ สิ่งที่จับได้คือโปรแกรมจะต้องเป็นแบบ palindrome - อ่านย้อนหลังและไปข้างหน้าเหมือนกัน การใช้อักษรตัวพิมพ์ใหญ่ไม่สำคัญที่นี่ดังนั้นเพื่อให้ heterogram มีความถูกต้องจะต้องไม่มีทั้ง q และ Q ไม่อนุญาตให้มีความคิดเห็นและคุณไม่สามารถวางสตริงที่มีรหัสของคุณ (หรือส่วนสำคัญของรหัสของคุณ) เพื่อพยายามทำให้ส่วน palindrome ง่าย: P นี่คือรหัส - กอล์ฟดังนั้นรหัสที่สั้นที่สุดจึงชนะ โชคดี! แก้ไข: Parens วงเล็บหรือสัญลักษณ์อื่น ๆ ที่มีรูปแบบซ้ายและขวาจะต้องกลับรายการที่น่ากลัวสำหรับส่วน palindrome ดังนั้น (helloolleh) คือ palindrome แต่ (helloolleh (ไม่ใช่) เห็นได้ชัดว่านี่เรียกว่า palindrome ที่สะดวก แก้ไข 2: …

30
ย้อนกลับสตริงในขณะที่รักษาตัวพิมพ์ใหญ่ในที่เดียวกัน
เป้าหมายที่นี่คือการย้อนกลับสตริงด้วยการหมุนเพียงครั้งเดียว: รักษาตัวพิมพ์ใหญ่ให้อยู่ในที่เดียวกัน ตัวอย่างอินพุต 1: Hello, Midnightas เอาต์พุตตัวอย่าง 1:SathginDim ,olleh ตัวอย่างอินพุต 2: .Q Exmaple เอาต์พุต 2:q. กฎระเบียบ : เอาต์พุตไปยัง STDOUT อินพุตจาก STDIN ผู้ชนะจะถูกเลือกวันที่ 13 กรกฎาคมใน GMT + 3 12:00 (หนึ่งสัปดาห์) อินพุตอาจประกอบด้วยสัญลักษณ์ ASCII เท่านั้นทำให้โปรแกรมที่ไม่ใช้การเข้ารหัสที่มีอักขระที่ไม่ใช่ ASCII ได้ง่ายขึ้น เครื่องหมายวรรคตอนใด ๆ ที่สิ้นสุดในตำแหน่งที่มีตัวอักษรตัวพิมพ์ใหญ่ต้องถูกละเว้น
28 code-golf  string 

15
แสดงให้เห็นถึงสแควร์ของทวินาม
ได้รับ (โดยวิธีการใด ๆ ) สองจำนวนธรรมชาติที่แตกต่างกัน (ขนาดใด ๆ ที่เหมาะสม), เอาท์พุท (โดยวิธีการใด ๆ ) กำลังสองของผลรวมของพวกเขาดังในตัวอย่างด้านล่าง: รับ 4 และ 3 ผลลัพธ์: 12 12 12 12 9 9 9 12 12 12 12 9 9 9 12 12 12 12 9 9 9 16 16 16 16 12 12 12 16 16 16 16 …

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