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

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

4
การปรับแต่งสตริง
งาน เขียนโปรแกรมเพื่อตรวจสอบบันทึกที่ฟังพร้อมกับจำนวนเซ็นต์ที่ไม่ถูกต้องของสตริงที่ปรับให้เป็นความถี่ที่กำหนดและกดลงที่จุดที่กำหนด เพื่อประโยชน์ของความเรียบง่ายสมมติว่าความถี่ของเสียงที่ผลิตและความยาวของสายไปทางขวาของที่มันถูกกดเป็นสัดส่วนผกผัน หมายเหตุ: งานนี้เกี่ยวข้องเฉพาะกับน้ำเสียงพื้นฐานเท่านั้นและไม่ใช่ด้วยเสียงหวือหวา / เสียงประสานอื่น ๆ อินพุต โปรแกรมของคุณได้รับข้อมูลสองส่วน: สตริงที่มีความยาวไม่แน่นอนซึ่งแสดงถึงสตริงที่เป็นปัญหา สายนี้จะถูกทำเครื่องหมายด้วย X ที่สตริงจะถูกค้างไว้ [-----] is a string divided in six sections (five divisions). [--X--] is a string pressed at the exact center of the string. [X----] is a string pressed at 1/6 the length of the string. (Length used …

3
คำนวณจำนวนลูกบาศก์ที่สามารถตัดได้หนึ่งลูกบาศก์
ลองนึกภาพก้อนที่เราสามารถตัดเป็นก้อนเล็กโดยไม่เหลือชิ้น ค้นหาจำนวนคิวบ์ที่สามารถตัดได้หนึ่งลูกบาศก์ ตัวอย่างเช่นลูกบาศก์สามารถตัดเป็น 8, 27 (พลังที่ 3 อย่างชัดเจนของจำนวนเต็ม) และ 20 (19 ก้อนเล็กบวกหนึ่งแปดเท่าของขนาดอื่นดูภาพ) ดูความช่วยเหลือบางส่วนได้ที่นี่: http://mathworld.wolfram.com/CubeDissection.html โปรแกรมควรใช้เป็นจำนวนเต็มเข้าn( 0 <= n <= 1 000) และพิมพ์ตัวเลขทั้งหมดน้อยกว่าหรือเท่ากับเพื่อnให้สามารถตัดคิวบ์ลงในจำนวนคิวบ์นั้น สมมติว่าลูกบาศก์นั้นสามารถตัดเป็น 1 ลูกบาศก์และไม่สามารถกลายเป็น 0 ลูกบาศก์ได้ คุณสามารถใช้ประเภทข้อมูลที่ครบถ้วนเท่านั้น (ไม่มีอาร์เรย์, วัตถุอื่น ๆ ) ที่มีขนาดไม่เกิน 64 บิต รหัสที่สั้นที่สุดชนะ

6
การเปลี่ยนหมายเลข
ความท้าทาย สำหรับชุดจำนวนเต็ม n จำนวนที่กำหนดให้เขียนโปรแกรมที่จะส่งออกดัชนี lexicographic กฎระเบียบ อินพุตจะต้องเป็นชุดของจำนวนเต็มที่ไม่เป็นลบเท่านั้นคั่นด้วยช่องว่าง คุณควรส่งออกดัชนี lexicographic (ช่วง 0 ถึง n! -1 รวม) ของการเปลี่ยนแปลง ไม่สามารถใช้ไลบรารีการเปลี่ยนแปลงหรือการแปลงร่างภายในได้ คุณไม่สามารถสร้างชุดการเรียงสับเปลี่ยนหรือชุดย่อยของการเรียงสับเปลี่ยนของอินพุตเพื่อช่วยคุณค้นหาดัชนี นอกจากนี้คุณยังไม่สามารถเพิ่มหรือลดการเปลี่ยนแปลงที่ให้กับการเปลี่ยนลำดับถัดไป / ก่อนหน้า (การทำพจนานุกรม) คะแนนโบนัส (-10 ไบต์) หากคุณพบวิธีที่จะทำให้เสร็จโดยไม่ต้องใช้แฟกทอเรียล รันไทม์ควรน้อยกว่า 1 นาทีสำหรับ n = 100 รหัสที่สั้นที่สุดนับเป็นไบต์ชนะ ผู้ชนะที่ได้รับเลือกวันอังคาร (22 กรกฎาคม 2014) เพิ่มเติมเกี่ยวกับการเรียงสับเปลี่ยน http://www.monkeyphysics.com/articles/read/26/numbering_permutations.html การดำเนินการกลุ่มการเปลี่ยนแปลง http://lin-ear-th-inking.blogspot.com/2012/11/enumerating-permutations-using.html ตัวอย่าง 0 1 2 --> 0 0 2 1 …

6
ค้นหาโหนดที่ลึกที่สุดของต้นไม้ไบนารี
เขียนโปรแกรมที่รับต้นไม้ไบนารีเป็นอินพุทและเอาท์พุทโหนดที่ลึกที่สุดและความลึกของมัน หากมีเน็คไทให้พิมพ์ปมที่เกี่ยวข้องทั้งหมดรวมถึงความลึก แต่ละโหนดจะแสดงเป็น: T(x,x) T(x) T โดยที่Tเป็นตัวระบุของตัวอักษรและตัวเลขอย่างน้อยหนึ่งตัวและแต่ละตัวxเป็นโหนดอื่น นี่คือคำจำกัดความง่ายๆของต้นไม้ไบนารี: ที่หัวของต้นไม้ไบนารีเป็นโหนด โหนดในต้นไม้ไบนารีมีลูกสองคนมากที่สุด ยกตัวอย่างเช่นการป้อนข้อมูลA(B(C,D(E)))(ด้านล่าง) 3:Eจะเอาท์พุท ในขณะที่ต้นไม้ต่อไปนี้มีการผูกสามทางระหว่าง 5, 11, และ 4 และความลึกของมันคือ 3 (เริ่มจาก 0): การป้อนข้อมูล2(7(2,6(5,11)),5(9(4)))(ด้านล่าง) 3:5,11,4จะเอาท์พุท นี่คือรหัสกอล์ฟดังนั้นโค้ดที่สั้นที่สุดที่วัดเป็นไบต์จะชนะ

5
ค้นหานายกที่เก่งที่สุด
Intro พิจารณากระบวนการรับจำนวนเต็มบวกnในบางฐานbและแทนที่แต่ละหลักด้วยการเป็นตัวแทนในฐานของตัวเลขไปทางขวา ถ้าหลักไปทางขวาเป็น 0 ใช้ฐานข ถ้าหลักไปทางขวาเป็น 1 ใช้เอกด้วย 0 เป็นเครื่องหมายนับ หากไม่มีตัวเลขทางด้านขวา (เช่นคุณอยู่ในตำแหน่งที่ถูกต้อง) ให้วนรอบตัวเลขที่สำคัญที่สุด ตามตัวอย่างให้n = 160 และb = 10 การรันโปรเซสมีลักษณะดังนี้: The first digit is 1, the digit to the right is 6, 1 in base 6 is 1. The next digit is 6, the digit to the right is 0, …

2
สร้างตัวแปลง EBCDIC โดยใช้ประตูตรรกะ NAND
ในคำถามนี้การทำแผนที่ถูกกำหนดระหว่าง EBCDIC และชุดของ ISO-8859-1 งานของคุณคือการสร้างเครือข่ายของประตู NAND แบบอินพุตสองช่องที่จะรับแปดอินพุตที่A1, A2, A4, ..., A128แสดงถึงตัวอักษร EBCDIC และส่งกลับเอาต์พุตแปดช่องที่แสดงถึงอักขระB1, B2, B4, ..., B128"ISO-8859-1" ที่สอดคล้องกันตามการแมปนั้น เพื่อทำให้สิ่งต่าง ๆ ง่ายขึ้นคุณสามารถใช้ประตู AND, OR, NOT และ XOR ในแผนภาพของคุณด้วยคะแนนที่สอดคล้องกันดังต่อไปนี้: NOT: 1 AND: 2 OR: 3 XOR: 4 แต่ละคะแนนเหล่านี้สอดคล้องกับจำนวนประตู NAND ที่ใช้ในการสร้างประตูที่สอดคล้องกัน วงจรลอจิกที่ใช้เกต NAND ที่น้อยที่สุดในการดำเนินการตามข้อกำหนดทั้งหมดข้างต้นชนะอย่างถูกต้อง

4
ค้นหาเวลา“ น่าสนใจ” ต่อไป
ฉันบังเอิญมองดูนาฬิกาวันนี้เวลา 11:11:11 (และวันนี้คือ 1/11; แย่มากที่ไม่ใช่ 2011) และนั่นทำให้ฉันคิดว่า: ฉันรู้! ฉันควรถามคำถามเกี่ยวกับกอล์ฟจากนี้! ฉันเป็นคนโง่ อย่างไรก็ตามความท้าทายของคุณคือใช้เวลาหนึ่งชั่วโมงนาทีและวินาทีเป็นอินพุตและส่งออกในเวลา "น่าสนใจ" ถัดไป ที่นี่ฉันจะกำหนดสิ่งที่น่าสนใจตามขั้นตอนเหล่านี้: ต่อชั่วโมงนาทีและวินาทีเข้าด้วยกัน (ตัวอย่างเช่นที่ 4:14:14 นี่จะเป็น 41414) ตรวจสอบกลุ่มติดต่อกันหนึ่ง, สองหรือสามที่ขยายความยาวของสตริงทั้งหมด ตัวอย่างเช่นฉันสามารถค้นหาได้[41][41][4]ในเวลาตัวอย่าง (หากกลุ่มไม่สามารถเข้าถึงผ่านสตริงได้ให้ตัดออกเหมือนที่ฉันทำในตัวอย่างนี้) อีกตัวอย่างหนึ่ง: เวลาในตัวอย่างแรกของฉันที่จุดเริ่มต้นของคำถามที่ว่ามันจะเป็น[1][1][1][1][1][1], หรือ[11][11][11][111][111] มีกลุ่มที่ต่อเนื่องกันตลอดเส้นทาง? ถ้าเป็นเช่นนั้นเวลาน่าสนใจ! มิฉะนั้นจะไม่ อินพุตสามารถอยู่ในรูปแบบที่สมเหตุสมผลแต่ต้องไม่ฮาร์ดโค้ด เอาต์พุตยังสามารถอยู่ในรูปแบบที่สมเหตุสมผลและไม่จำเป็นต้องอยู่ในรูปแบบเดียวกับอินพุต หากคุณใช้การเข้าถึงเครือข่ายด้วยเหตุผลบางอย่างไบต์ทั้งหมดที่ดาวน์โหลดจากเครือข่ายจะนับเป็นคะแนนของคุณ นี่คือ รหัสกอล์ฟ; รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
9 code-golf  date 

24
สร้างตารางกลุ่มสำหรับ Z_n
กลุ่มเป็นโครงสร้างที่ใช้กันอย่างแพร่หลายในวิชาคณิตศาสตร์และมีการใช้งานในวิทยาการคอมพิวเตอร์ ความท้าทายรหัสนี้เป็นเรื่องเกี่ยวกับ # น้อยที่สุดของตัวละครเพื่อสร้างตารางกลุ่มสำหรับกลุ่มสารเติมแต่ง Z n วิธีสร้างตาราง: สำหรับ Z nองค์ประกอบคือ {0, 1, 2, ... , n-1} ตารางจะมี n แถวและคอลัมน์ n สำหรับรายการ ij-th ของตารางค่าคือ i + j mod n ตัวอย่างเช่นใน Z 3รายการ 1-2 (แถวที่ 2 คอลัมน์ที่ 3 หากคุณนับแถว / คอลัมน์เริ่มต้นเป็น 1) คือ (1 + 2)% 3 = 0 (ดูตัวอย่างผลลัพธ์) อินพุต:จำนวนเต็มบวก, n …

13
นับตัวอักษรเปลี่ยนเป็นตัวเลข
ปัญหา: คุณต้องสร้างโปรแกรมที่ทำสิ่งต่อไปนี้: ใช้สตริงตัวพิมพ์เล็กจำนวนมากและนับจำนวนการเกิดทั้งหมดของตัวอักษรแต่ละตัว จากนั้นคุณใส่ตัวอักษรตามลำดับจากมากไปน้อย จากนั้นคุณนำรายการนั้นและเปลี่ยนเป็นตัวเข้ารหัส / ตัวถอดรหัสสำหรับข้อความ จากนั้นเข้ารหัสข้อความด้วยตัวเลขนั้น ยากที่จะเข้าใจ? ดูตัวอย่างนี้: ตัวอย่าง: ข้อความที่ป้อน: Lorem ipsum dolor sit amet, consipetur adipiscing elit. Nunc sed dui at nisi euismod pellentesque ac sed enim. ไม่มีใครรู้ว่าเพียงแค่คุณเป็นคนดี, eu fringilla เป็น porttitor. Pellentesque vel pharetra nisl Vestgulum สวมบทบาท ultrices magna a fringilla นักเขียนที่น่าสนใจ, ผู้ที่ชื่นชอบการถ่ายภาพฉากหลัง, สิ่งอำนวยความสะดวกอื่น ๆ , …
9 code-golf 

15
สุ่มโดยไม่มีเวลา [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา คอมพิวเตอร์ไม่ได้ไม่มีที่ไหนเลยในการสร้างตัวเลขสุ่มโดยไม่มีพื้นฐานเนื่องจากเวลาส่วนใหญ่เป็นพื้นฐานของการสุ่ม ฉันต้องการให้คุณสร้างรหัสที่สร้างตัวเลขสุ่มด้วยกฎเหล่านี้: เวลาไม่ได้รับอนุญาตให้เป็นพื้นฐาน ณ จุดใด ๆ ของโปรแกรม ไม่อนุญาตให้ใช้ฟังก์ชั่นแบบสุ่ม / แบบหลอกที่กำหนดไว้ล่วงหน้า ตัวเลขที่สร้างสามารถอยู่ในช่วงใดก็ได้ อย่างน้อยสองจำนวนเต็ม: D ตัวเลขจะถูกสะท้อน

2
Backtickify ตัวอย่างรหัสในการแลกเปลี่ยนสแต็ค
เป้าหมายของคุณคือการป้อนข้อความโดยพลการใด ๆ เช่น: This is some text และเอาท์พุทข้อความที่จัดรูปแบบเป็นรหัสสำหรับการโพสต์ (SE-flavored Markdown) และความคิดเห็น (mini-Markdown) บน Stack Exchange เช่น: `This is some text` `This is some text` อย่างไรก็ตามมันยากขึ้น พิจารณาอินพุต: Perl has a variable called $` ผลลัพธ์จะต้องเป็น `` Perl has a variable called $` `` `Perl has a varaible called $\`` กฎเต็มรูปแบบสำหรับการจัดรูปแบบคือ: โพสต์แบบเต็ม (Markdown …
9 code-golf 

8
Missy Elliot, XKCD และ ASCII Bytes
แรงบันดาลใจจากการ์ตูน XKCD ต่อไปนี้: ใน Missy Elliot's "ทำงานมัน" ส่วนหนึ่งของคอรัสจะเป็นดังนี้: Is it worth it, let me work it I put my thing down, flip it and reverse it จำไว้ว่าในใจฉันขอเสนอการแข่งขันกอล์ฟรหัสต่อไปนี้: สร้างรหัสตามลำดับ: รับอินพุต ASCII 8 บิตจาก STDIN เช่นn(Hex 6E หรือ Bin 01101110) เลื่อน 8 บิตของแต่ละไบต์ลงไปในระดับ 1 บิต (ฉันเชื่อว่ามันเรียกว่าการเลื่อนบิตล่าง) เช่น01101110จะกลายเป็น00110111("วางสิ่งที่ฉันลง"); แปลงบิตของแต่ละไบต์เช่น00110111กลายเป็น11001000("พลิก"); ฝืนบิตสำหรับแต่ละไบต์เช่น11001000กลายเป็น00010011 ("ย้อนกลับ"); หากค่าของไบต์น้อยกว่า 32 …

2
ตรวจสอบว่าแก้ปริศนา 15 ข้อได้หรือไม่
ตัวต่อสิบห้าตัวนั้นมีลักษณะแปลกประหลาดเพียงครึ่งเดียวเท่านั้นที่สามารถแก้ไขได้ หากคุณพลิกกระเบื้อง 14 และ 15 ไม่มีวิธีที่คุณสามารถเลื่อนบล็อกเพื่อให้พวกเขาพลิกกลับ งานของคุณคือการสร้างโปรแกรมที่ยอมรับรายการจำนวนเต็มในรูปแบบที่คุณเลือก (ประกอบด้วยหนึ่งอินสแตนซ์ของแต่ละหมายเลขตั้งแต่ 0 ถึง 15 โดยที่ 0 เป็นพื้นที่ว่าง) แสดงสถานะของการจัดเรียงของไพ่ใน กริด 4x4 และส่งออกค่าบูลีนเดี่ยวเพื่อพิจารณาว่ากริดสามารถแก้ไขได้หรือไม่ รหัสที่สั้นที่สุดที่จะทำในภาษาใดก็ได้ชนะ

5
การจัดรูปแบบสตริงสไตล์ printf
ท้าทาย เขียนฟังก์ชั่นที่ใช้การprintfจัดรูปแบบสตริงC- style กฎระเบียบ คุณจะต้องดำเนินการอย่างน้อย%%, %c, %s, และ%d%f คุณต้องไม่ใช้วิธีการจัดรูปแบบสตริงในตัว คุณต้องไม่เรียกใช้โปรแกรมภายนอกหรือเชื่อมต่ออินเทอร์เน็ตจากโปรแกรมของคุณ มันขึ้นอยู่กับคุณที่จะตัดสินใจว่าจะจัดการกับอินพุตที่ไม่ถูกต้อง แต่โปรแกรมของคุณจะต้องไม่หยุดอย่างผิดปกติ คุณควรเขียนฟังก์ชัน Variadicถ้าเป็นไปได้ คำสำคัญ "ต้อง", "ไม่ต้อง", "จำเป็นต้องใช้", "ไม่ควร", "ไม่ควร", "ไม่ควร", "ไม่ควร", "แนะนำ", "อาจ" และ "ตัวเลือก" ในเอกสารนี้ จะตีความตามที่อธิบายในRFC 2119

9
เขียนตัวเลขเป็นผลรวมฟีโบนักชี
ให้เรากำหนดลำดับฟีโบนักชีเป็น F(1) = 1 F(2) = 2 F(n) = F(n - 2) + F(n - 1) ดังนั้นเราจึงมีลำดับไม่สิ้นสุด1,2,3,5,8,13,... เป็นที่ทราบกันดีว่าเลขจำนวนเต็มบวกใด ๆ สามารถเขียนเป็นผลรวมของตัวเลขฟีโบนักชีบางส่วนได้ ข้อแม้เดียวคือการรวมนี้อาจไม่ซ้ำกัน มีอย่างน้อยหนึ่งวิธีในการเขียนตัวเลขเป็นผลรวมของตัวเลขฟีโบนักชี แต่อาจมีอีกมากมาย ความท้าทายของคุณคือการเขียนโปรแกรมที่สมบูรณ์ซึ่งใช้ stdin จะใช้จำนวนเต็มบวกระหว่างหนึ่งถึงหนึ่งล้านรวมแล้วเอาท์พุทโดยใช้ stdout การสรุปที่เป็นไปได้ทั้งหมดของหมายเลขฟีโบนักชีซึ่งรวมถึงอินพุต ในการสรุปหมายเลขฟีโบนัชชีต้องไม่ซ้ำและรวมถึงหมายเลข1นั้น ในการสรุปใด ๆ หาก1มีอยู่จะต้องแสดงเพียงครั้งเดียวเท่านั้นเนื่องจากในคำจำกัดความของลำดับข้างต้น1ปรากฏเพียงครั้งเดียว การสรุปที่มีคำศัพท์เพียงอย่างเดียวนั้นจะถูกต้องดังนั้นหากหมายเลขอินพุตคือหมายเลขฟีโบนักชีเองดังนั้นตัวเลขนั้นจึงเป็นผลรวมที่ถูกต้องและต้องพิมพ์ หากผลรวมหลายค่าระหว่างสองจำนวนใด ๆ จะต้องมีบรรทัดว่างเพื่อแยกความแตกต่างระหว่างพวกเขาได้อย่างง่ายดาย นี่คือตัวอย่างบางส่วน ./myfib 1 1 มีเพียงผลรวมเดียวและมีคำศัพท์เพียงอย่างเดียวนั่นคือทั้งหมดที่พิมพ์ออกมา ./myfib 2 2 โปรดทราบว่านี่1+1ไม่ใช่ผลรวมที่ถูกต้องเพราะ1ซ้ำ ./myfib 3 1+2 3 สองจำนวนเงินและพวกเขาทั้งสองพิมพ์ด้วยบรรทัดว่างในระหว่าง …

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