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

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

20
ถอดรหัสรหัสไปที่รหัสล็อคแบบผสม
ได้รับรหัสล็อคแบบมาตรฐานเช่นเดียวกับที่อยู่ในรูปภาพ วิธีการปลดล็อคคือการจัดตำแหน่งหมายเลข 4 ในรหัสบนบรรทัดการรวมกัน หลังจากหลายปีของการบริการที่ซื่อสัตย์คุณถูกไล่ออกจากโรงงานล็อคและตัดสินใจที่จะแก้แค้นโดยไม่ทำตัวล็อคก่อนที่จะส่งพวกเขาออกไปดังนั้นปล่อยให้ล็อคทุกตัวมีการรวมกันเพื่อปลดล็อคในบรรทัดรวม คุณรู้ด้วยว่าเมื่อดูที่คำสั่งของตัวเลขในบรรทัดอื่นคุณสามารถคำนวณได้ว่าตัวเลขใดที่ต้องอยู่ในบรรทัดการรวม (ดังนั้นจึงเป็นการรวมกันเพื่อปลดล็อก) ถ้าบรรทัดล็อคทุกคนจะได้รับหมายเลขเริ่มต้นจากบรรทัด 0 สำหรับสายการรวมกัน (บรรทัดที่ปลดล็อคล็อค) กับสาย 9. ตัวอย่างเช่นถ้าตัวเลขบนสาย 4 มีแล้วรวมกันเพื่อปลดล็อคมันจะเป็น53361992 โชคไม่ดีที่ล็อคนั้นได้รับการบรรจุแล้วและมุมมองของการล็อคแต่ละครั้งของคุณนั้นถูกบดบังดังนั้นคุณจะเห็นเฉพาะตัวเลขบนเส้นต่าง ๆ ของการล็อค ความท้าทาย รับ 4 คู่หลักที่ตัวเลขแรกของจำนวนเต็มแสดงหมายเลขบรรทัดและตัวเลขที่สองหมายถึงจำนวนที่ปรากฏบนบรรทัดนั้นผลงานการรวมกันเพื่อล็อค ตัวอย่างเช่นถ้าคุณป้อน: 57 23 99 45 จากนั้นก็ควรส่งออก: 2101 หรือ 25 78 63 15 และ 3174 สมมติว่าอินพุตจะเป็นจำนวนเต็มบวก 4 เสมอในรูปแบบ `25 64 72 18 นี่คือรหัสกอล์ฟดังนั้นโปรแกรมที่สั้นที่สุดในจำนวนไบต์ชนะ นี่เป็นคำถามแรกของฉันดังนั้นคำติชมใด ๆ ก็ได้รับการชื่นชม
22 code-golf 

7
Family Tree Solver
นี่คือหนึ่งในความท้าทายหลายประการที่ชุมชนของคาลวินต้องทำ ใช้ไฟล์ "แผนภูมิต้นไม้อธิบาย" ด้วยบรรทัดของแบบฟอร์ม: [ID] [mother ID] [father ID] [gender] [full name] เช่นนี้ซึ่งอธิบายถึงแผนภูมิต้นไม้ครอบครัวแรกที่http://en.wikipedia.org/wiki/Cousin : 1 ? ? M Adam 2 ? ? F Agatha 3 ? ? M Bill 4 2 1 F Betty 5 2 1 M Charles 6 ? ? F Corinda 7 3 4 M David 8 …

5
โลก IPv6 วัน 2014
เพื่อทำเครื่องหมายครบรอบของวัน IPv6 โลกสังคมอินเทอร์เน็ตมีการเผยแพร่แคมเปญไปปิด IPv4 วันที่ 6 มิถุนายน 2014 วันหนึ่ง ที่อยู่ IPv6 อาจแสดงในรูปแบบที่ยาวของพวกเขาเป็นค่าเลขฐานสิบหก 16 บิตที่คั่นด้วยโคลอน ขึ้นอยู่กับที่อยู่พวกเขาอาจย่อให้สั้นตามที่อธิบายไว้ในรายการที่ 2 ของส่วนที่ 2.2 การแสดงข้อความของที่อยู่ RFC 3513 : เพื่อให้การเขียนที่อยู่ที่มีศูนย์บิตง่ายขึ้นจะมีไวยากรณ์พิเศษให้บีบอัดศูนย์ การใช้ "::" บ่งชี้หนึ่งหรือมากกว่าหนึ่งกลุ่มของศูนย์ 16 บิต "::" สามารถปรากฏได้เพียงครั้งเดียวเท่านั้นในที่อยู่ "::" ยังสามารถใช้ในการบีบอัดนำหน้าหรือต่อท้ายศูนย์ในที่อยู่ รายการที่ท้าทายนี้จะเป็นโปรแกรมที่ยอมรับที่อยู่ IPv6 หนึ่งที่จัดรูปแบบทั้งในรูปแบบยาวหรือสั้นและจะแสดงที่อยู่เดียวกันทั้งในรูปแบบยาวและสั้นตามลำดับนั้น อินพุตอาจมาจากอาร์กิวเมนต์บรรทัดคำสั่ง STDIN หรือแหล่งอินพุตอื่น ๆ ที่เหมาะสมกับภาษาที่คุณเลือก ไลบรารี่หรือยูทิลิตี้เฉพาะสำหรับการแยกที่อยู่ IPv6 ถูกแบน (เช่นinet_ {ntop, pton} () ) หากที่อยู่อินพุตไม่ถูกต้องผลลัพธ์จะว่างเปล่า (หรือข้อความแสดงข้อผิดพลาดที่เหมาะสมที่ระบุว่าที่อยู่ไม่ถูกต้อง …

4
ลดขนาด Brainfuck
ความท้าทายของคุณคือการย่อขนาดโค้ดBrainfuckตามกฎเหล่านี้: +-><[].,อะไรที่ลบไม่ได้เป็นหนึ่ง สำหรับกลุ่มที่ต่อเนื่องกัน+หรือ-ตัวอักษรใด ๆหากจำนวน+s และ-s เท่ากันให้ลบออก ทำเช่นเดียวกันกับข้างต้น แต่ด้วยและ>< ลบลำดับของ+-><อักขระหากไม่ทำอะไรเลย +>-<->+<ตัวอย่างเช่นคุณควรลบ (นี่อาจเป็นสิ่งที่ยุ่งยากและยากที่สุดที่จะนำมาใช้) ตรวจสอบให้แน่ใจว่าคุณไม่ได้รับผลบวกที่ผิดพลาดเช่น+>-<+>-<ซึ่งไม่ควรลบออก กรณีทดสอบ: อินพุต ++++++[->++++++<]>. prints a $ [-]< resets tape >,[>,]<[.<] reverses NUL terminated input string ++-->><< does nothing เอาท์พุต ++++++[->++++++<]>.[-],[>,]<[.<] อินพุต Should disappear: ++>>+<+++<->-->-<<->-< Should disappear: +++>-<--->+< Should stay: +++>-<+>---< เอาท์พุต +++>-<+>---< คุณอาจยอมรับอินพุตและเอาต์พุตอย่างไรก็ตามคุณต้องการ - stdin / stdout, ฟังก์ชั่น …

9
ฟังก์ชั่น totient เร็วสุด
เป้าหมายคือง่าย ๆ : คำนวณฟังก์ชั่น totientสำหรับตัวเลขให้มากที่สุดเท่าที่จะทำได้ใน10 วินาทีและรวมตัวเลข คุณต้องพิมพ์ผลลัพธ์ของคุณในตอนท้ายและคุณจะต้องคำนวณผลจริง ไม่อนุญาตให้ใช้ฟังก์ชัน totient อัตโนมัติ แต่มีไลบรารี bignum คุณต้องเริ่มต้นที่ 1 และนับจำนวนเต็มทั้งหมดอย่างต่อเนื่อง คุณไม่ได้รับอนุญาตให้ข้ามหมายเลข คะแนนของคุณคือจำนวนตัวเลขที่โปรแกรมของคุณสามารถคำนวณบนเครื่องของคุณ / วิธีการหลายโปรแกรมของฉันสามารถคำนวณบนเครื่องของคุณ รหัสของฉันเป็นโปรแกรมอย่างง่ายใน C ++ (ปิดการปรับให้เหมาะสม) หวังว่าคุณจะสามารถรันได้ คุณสมบัติที่สำคัญที่คุณสามารถใช้ได้! ถ้า gcd(m,n) = 1, phi(mn) = phi(m) * phi(n) ถ้าpเป็นนายกphi(p) = p - 1(สำหรับp < 10^20) ถ้าnเป็นเช่นนั้นphi(2n) = 2 phi(n) อื่น ๆ ที่ระบุไว้ในลิงค์แรก รหัสของฉัน #include …

6
การประกวด Bloatware: ผลิต 100+ MiB ที่ปฏิบัติการได้ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Code Golf Stack Exchange ปิดให้บริการใน3 ปีที่ผ่านมา สร้างซอร์สโค้ดแบบย่อในภาษาที่คุณชื่นชอบซึ่งรวบรวมเป็นไฟล์ปฏิบัติการขนาดใหญ่ (ไม่น้อยกว่า 104857600 ไบต์) โปรแกรมต้องสามารถรันได้ (สมมติว่ามีหน่วยความจำว่าง 1GB) และสามารถทำอะไรก็ได้ (ต้องการสิ่งที่เรียบง่ายเหมือนโลกสวัสดี) สนับสนุนการใช้เทคนิคที่ไม่ชัดเจน ตัวอย่างที่น่าเบื่อใน C: int a[1024*1024*25] = { 1 }; int main(){} คะแนนโบนัสหากสามารถ "อธิบาย" ได้ว่าเหตุใดจึงไม่สามารถลดขนาดของการปฏิบัติการได้ (เช่นการขยายตัวทั้งหมดจะถูกใช้จริง)

4
ตัวแปร Quine เข้ารหัสลับ
สร้างโปรแกรมที่พิมพ์ผลรวม MD5 ของแหล่งที่มาในรูปแบบ: MD5 sum of my source is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ไม่มีการโกง - คุณไม่สามารถอ่านไฟล์ต้นฉบับและคำนวณผลรวมได้ โปรแกรมจะต้องไม่อ่านข้อมูลภายนอกใด ๆ แน่นอนคุณสามารถใช้ห้องสมุด MD5 ที่มีให้สำหรับภาษาของคุณ

29
ค้นหาหมายเลข palindromic ที่ใกล้เคียงที่สุด
รับตัวเลขNเอาต์พุต / return Xดังนั้นN + Xคือ palindrome โดยที่| X | จะต้องมีขนาดเล็กที่สุด Palindrome:ตัวเลขคือ palindrome หากลำดับของตัวเลขเหมือนกันเมื่ออ่านจากซ้ายไปขวาเหมือนกับเมื่ออ่านจากขวาไปซ้าย 95359และ6548456มีความสมมาตร123และ2424ไม่ใช่ ตัวเลขที่มีเลขศูนย์นำหน้าเช่น020palindrome การป้อนข้อมูลเป็นจำนวนเต็มบวกที่มีขนาดเล็กกว่า 10 15 อ่านจาก stdin เป็น method-parameter อะไรก็ได้ เอาท์พุทจะต้องเป็นจำนวนเต็ม (บวกหรือลบ) และควรเป็น 0 ถ้าอินพุตนั้นเป็นพาลินด์มาแล้ว คุณสามารถเขียนผลลัพธ์ของคุณไปยัง stdout ส่งคืนจากฟังก์ชั่นหรือสิ่งที่คุณต้องการ หากมี 2 ตัวเลข (เช่น2และ-2) ที่ตรงตามข้อกำหนดให้ส่งออกเพียงหนึ่งในนั้น ตัวอย่าง: Input Output 3 0 234 -2 1299931 -10 126 5 or -5 …

5
เติมลงในทะเลสาบ 2D
รุ่นหนึ่งมิติของปัญหานี้ก็สวยง่ายดังนั้นนี่คือรุ่น 2D ยาก คุณได้รับอาร์เรย์ความสูงของดิน 2 มิติจากอินพุตมาตรฐานและคุณต้องหาจุดที่ทะเลสาบจะก่อตัวเมื่อฝนตก แผนที่ความสูงเป็นเพียงรูปสี่เหลี่ยมผืนผ้าของตัวเลข 0-9 เท่านั้น 8888888888 5664303498 6485322898 5675373666 7875555787 *คุณต้องเอาท์พุทอาร์เรย์เดียวกันการเปลี่ยนสถานที่ทั้งหมดที่จะเป็นใต้น้ำด้วย 8888888888 566*****98 6*85***898 5675*7*666 7875555787 น้ำสามารถหลบหนีได้ในแนวทแยงดังนั้นจะไม่มีทะเลสาบในการกำหนดค่านี้: 888 838 388 รหัสที่สั้นที่สุดชนะ รหัสของคุณต้องจัดการขนาดได้กว้างถึง 80 และสูง 24 อีกสามตัวอย่าง: 77777 77777 75657 7*6*7 75757 => 7*7*7 77677 77677 77477 77477 599999 599999 933339 9****9 936639 => 9*66*9 935539 9*55*9 …

7
ย้อนกลับสถิติการสำรวจความคิดเห็นของวิศวกร
บทนำ เมื่อได้รับชุดเปอร์เซ็นต์ของตัวเลือกในการสำรวจให้คำนวณจำนวนขั้นต่ำของผู้ลงคะแนนที่จะต้องมีในการสำรวจเพื่อสร้างสถิติเหล่านั้น ตัวอย่าง: สัตว์เลี้ยงตัวโปรดของคุณคืออะไร? หมา: 44.4% แมว: 44.4% เมาส์: 11.1% เอาต์พุต: 9(จำนวนผู้ลงคะแนนต่ำสุดที่เป็นไปได้) รายละเอียด นี่คือข้อกำหนดสำหรับโปรแกรม / ฟังก์ชั่นของคุณ: คุณจะได้รับอาร์เรย์ของค่าร้อยละเป็นอินพุต (บน stdin, เป็นฟังก์ชั่นการโต้แย้ง ฯลฯ ) ค่าเปอร์เซ็นต์แต่ละค่าจะถูกปัดเศษเป็นทศนิยมหนึ่งตำแหน่ง (เช่น, 44.4 44.4 11.1) คำนวณจำนวนผู้ลงคะแนนขั้นต่ำที่เป็นไปได้ในการสำรวจความคิดเห็นซึ่งผลลัพธ์จะให้เปอร์เซ็นต์ที่แน่นอนเมื่อปัดเศษเป็นทศนิยมหนึ่งตำแหน่ง (บน stdout หรือค่าส่งคืนฟังก์ชัน) โบนัส : -15 ตัวอักษรหากคุณสามารถแก้ปัญหาได้ในแบบ "ไม่สำคัญ" (กล่าวคือไม่เกี่ยวข้องกับการวนซ้ำของจำนวนผู้มีสิทธิเลือกตั้งที่เป็นไปได้ทั้งหมดจนกว่าคุณจะพบคนแรกที่ทำงาน) ตัวอย่าง >./pollreverse 44.4 44.4 11.1 9 >./pollreverse 26.7 53.3 20.0 15 >./pollreverse 48.4 …

4
ฉากหิมะเคลื่อนไหว ASCII
จงเขียนโปรแกรมที่สั้นที่สุดที่จะทำให้ชิ้นส่วนของศิลปะ ASCII ใด ๆ ลงในฉากหิมะเคลื่อนไหวที่จะเริ่มขึ้นในรูปแบบจากหิมะตก ( ตัวอย่างที่ไม่แข็งแรงเล่นกอล์ฟ JavaScriptปรับปรุงล่าสุด 2011/12/19) ข้อมูลจำเพาะของการป้อนข้อมูล : โปรแกรมของคุณจะต้องยอมรับช่องว่าง, เครื่องหมายดอกจันและการขึ้นบรรทัดใหม่โดยพลการ อินพุตจะมีได้สูงสุด 23 บรรทัดและ 80 อักขระต่อบรรทัด จะไม่มีบรรทัดว่างเปล่า แต่บรรทัดอาจประกอบด้วยช่องว่างเท่านั้น ขึ้นบรรทัดใหม่ที่ต่อท้ายเดียวจะรวมอยู่และจะต้องละเว้น เอาต์พุต : อักขระ ASCII เอาต์พุต (ช่องว่าง, เครื่องหมายดอกจัน) และรหัสควบคุม (carriage return, linefeeds, รหัสหลบหลีก ANSI ฯลฯ ) สำหรับคอนโซลข้อความของระบบปฏิบัติการหรือเทอร์มินัลอีมูเลเตอร์จนกว่าผู้ใช้จะยกเลิกโปรแกรมด้วยตนเอง คุณอาจถือว่าหน้าต่างเทอร์มินัลคือ 80x24 ตัวอักษรหากระบบปฏิบัติการของคุณอนุญาตการตั้งค่านั้น กฎ : ภาพเคลื่อนไหวจะต้องราบรื่นและรวดเร็ว (ต้องการ 15 fps) ความหนาแน่นของหิมะจะต้องอยู่ระหว่าง 5% ถึง 15% …

30
โปรแกรมที่ลบตัวเอง
หากใช้ภาษาที่คอมไพล์โปรแกรมจะต้องลบไฟล์ที่ประมวลผลได้ (แต่ไม่จำเป็นต้องลบไฟล์ต้นฉบับ) หากใช้ภาษาที่ตีความแล้วโปรแกรมจะต้องลบไฟล์ต้นฉบับ ราคาเปิดของฉัน: Python (29 ตัวอักษร) import os;os.remove(__file__) แก้ไข: เพื่อป้องกันการแก้ไขปัญหาเช่นrm -rf / , โปรแกรมจะต้องไม่ลบสิ่งใดนอกจากไฟล์เรียกทำงานหรือซอร์สไฟล์ html,body{margin:0;padding:0;height:100%;overflow:hidden} <iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=19355" width="100%" height="100%" style="border:none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe> เรียกใช้ข้อมูลโค้ดHide resultsขยายตัวอย่างข้อมูล

9
ชื่อมือโป๊กเกอร์
ชื่อมือโป๊กเกอร์ ให้ไพ่ห้าใบส่งชื่อมือโป๊กเกอร์ซึ่งจะเป็นหนึ่งใน: High card One pair Two pair Three of a kind Straight Flush Full house Four of a kind Straight flush Royal Flush หากมีข้อสงสัยโปรดดูกฎที่http://en.wikipedia.org/wiki/List_of_poker_hands อินพุต ไพ่ 5 ใบจากอาร์กิวเมนต์ stdin หรือ commandline การ์ดเป็นสตริงตัวอักษรสองตัวบนแบบฟอร์มRSโดยที่ R คืออันดับและ S เป็นชุด การจัดอันดับคือ2- 9(ไพ่ตัวเลข), T(สิบ), J(แจ็ค), Q(ราชินี), K(ราชา), A(Ace) ชุดมีS, D, H, Cสำหรับจอบ, เพชร, หัวใจและคลับตามลำดับ …
22 code-golf  game 

11
การประมาณเหตุผลที่ดีของ pi
เขียนโปรแกรมที่พิมพ์การประมาณเหตุผลที่ดีทั้งหมดของ pi ด้วยตัวส่วน <1000000 เพื่อเพิ่มลำดับตัวส่วน a/bคือ "เหตุผลประมาณดี" ของพี่ถ้ามันเป็นความใกล้ชิดกับปี่กว่าที่อื่น ๆ bที่มีเหตุผลกับตัวหารไม่ใหญ่กว่า ผลลัพธ์ควรมีทั้งหมด 167 บรรทัดและเริ่มต้นและสิ้นสุดดังนี้: 3/1 13/4 16/5 19/6 22/7 179/57 ... 833719/265381 1146408/364913 3126535/995207 โปรแกรมที่สั้นที่สุดชนะ

10
Meta Golf Challenge
ในการท้าทายนั้นคุณจะต้องแก้ปัญหานั้น การประกวดจบแล้ว! ตรวจสอบจุดสิ้นสุดของคำถาม รายละเอียด: เขียนรหัสที่เล็กที่สุด (ทุกภาษา *) คะแนนของคำตอบคือผลรวมของ: ความยาวของรหัสโดยไม่ต้องเว้นวรรค จำนวนคำตอบโดยใช้ภาษาเดียวกันนั้นกำลังสอง ความยาวของชื่อภาษาที่ยิ่งใหญ่ที่สุดในการแข่งขันลบความยาวของภาษาของคุณ Downvotes ลบ Upvotes (ลบด้วยจำนวนโหวตทั้งหมด) เขียนตำแหน่งของผู้ใช้และคะแนน ผู้ใช้แต่ละคนสามารถเขียนได้คำตอบเดียวเท่านั้น คะแนนต่ำสุดชนะ การทดสอบ: ดังนั้นเมื่อสิ้นสุดการแข่งขันข้อมูลที่เป็นไปได้อาจเป็น (STDIN): คอลัมน์คือ: ชื่อผู้ใช้ภาษาความยาวโค้ด (โดยไม่มีช่องว่าง) และ TotalVotes UserA Python 100 1 UserB Perl 30 2 UserC Java 500 3 UserD Brainfuck 499 4 UserE Perl 29 5 หากชื่อผู้ใช้ของคุณมีช่องว่างเช่น "ชื่อผู้ใช้ของฉัน" มันจะกลายเป็น "MyUserName" …

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