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

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

1
วิธีที่ดีกว่าในการอ่านหลาย int ใน C กว่า scanf
ฉันกำลังพยายามอ่าน ints 4 ตัวใน C ในการแข่งขันกอล์ฟและฉันก็กังวลกับความยาวของรหัสที่ฉันต้องแก้ไข: scanf("%d%d%d%d",&w,&x,&y,&z) นั่นคือ 29 ตัวอักษรซึ่งมีขนาดใหญ่มากเมื่อพิจารณาว่าขนาดรหัสทั้งหมดของฉันคือ 101 ตัวอักษร ฉันสามารถกำจัด int แรกได้เนื่องจากฉันไม่ต้องการมันดังนั้นฉันจึงได้รหัสนี้: scanf("%*d%d%d%d",&x,&y,&z) อันไหนคือ 27 ตัวอักษร แต่มันก็ยังคงยาว ดังนั้นคำถามของฉันคือมีวิธีอื่น (เทคนิคฟังก์ชั่นสิ่งของ K&R) เพื่ออ่าน ints ที่ฉันไม่ทราบว่าสามารถช่วยลดรหัสบิตนี้ได้หรือไม่ ขอบคุณมาก. แก้ไข: ผู้ใช้บางคนรายงานว่าคำถามของฉันคล้ายกับเคล็ดลับสำหรับการเล่นกอล์ฟใน C ในขณะที่หัวข้อนี้มีข้อมูลที่เป็นประโยชน์มากมายในการย่อรหัส C แต่ก็ไม่เกี่ยวข้องกับกรณีการใช้งานจริงของฉันเนื่องจากไม่มีวิธีที่ดีกว่าในการอ่านอินพุต ฉันไม่รู้ว่าจริง ๆ แล้วมีวิธีที่ดีกว่า scanf ในการอ่านจำนวนเต็ม (นั่นเป็นเหตุผลที่ฉันถามคำถามตั้งแต่แรก) แต่ถ้ามีฉันคิดว่าคำถามของฉันเกี่ยวข้องและแตกต่างจากทั่วโลกอย่างเพียงพอ เคล็ดลับและลูกเล่น หากไม่มีวิธีที่ดีกว่าคำถามของฉันยังคงมีประโยชน์ในอนาคตอันใกล้หากมีคนหาทางออกที่ดีกว่า EDIT2: ฉันกำลังมองหาโปรแกรมเต็มรูปแบบ (จึงไม่มีฟังก์ชั่นเคล็ดลับ) และ librairies ทั้งหมดที่เป็นไปได้ มันต้องเป็น C …
17 code-golf  tips 

19
จำนวนมากที่สุดในช่วงเมื่อผลรวมของสแควร์สของปัจจัยสำคัญถูกลบออก
สูตรสำเร็จ ยกตัวอย่างเช่นหมายเลข 300 ปัจจัยสำคัญของ 300 คือ[2, 3, 5](ตัวเลขเฉพาะที่เป็นปัจจัยของ 300 และนายกรัฐมนตรี) กำลังสองจำนวนเหล่านั้นจะให้คุณ [4, 9, 25] การรวมรายการนั้นจะทำให้คุณ 4 + 9 + 25 = 38 สุดท้ายลบผลรวมนั้น (38) จากหมายเลขเดิมของคุณ300-38 = 262(นี่คือผลลัพธ์) อินพุต ข้อมูลที่คุณป้อนจะเป็นจำนวนเต็มบวกมากกว่า 2 คุณต้องตรวจสอบตัวเลขทั้งหมดตั้งแต่ 2 ถึงค่าอินพุต (รวม) และค้นหาหมายเลขที่ให้ผลลัพธ์มากที่สุดด้วยสูตรด้านบน เอาท์พุต ผลลัพธ์ของคุณจะเป็นตัวเลขสองตัวคั่นด้วยช่องว่างเครื่องหมายจุลภาคขึ้นบรรทัดใหม่หรืออะไรก็ตามที่คุณอนุญาตให้ใช้ภาษา สิ่งเหล่านี้สามารถส่งออกไปยังไฟล์ stdout หรือสิ่งที่ภาษาของคุณใช้ เป้าหมายของคุณคือค้นหาตัวเลขในช่วงที่สร้างเอาต์พุตสูงสุดเมื่อเรียกใช้ผ่านสูตรด้านบน หมายเลขแรกที่แสดงควรเป็นหมายเลขเริ่มต้น (เช่น 300) และหมายเลขที่สองควรเป็นผลลัพธ์ที่สูตรที่สร้าง (เช่น 262) กรณีทดสอบ Input: 3 …

10
บีบอัดรหัสของคุณในภาพ
นี่คือรูปแบบควิน บทนำ เราทุกคนเขียนโค้ดสั้น ๆ เพราะเหตุผลบางอย่างที่คลุมเครือแต่ไม่ว่าเราจะทำอะไรจะใช้เวลาอย่างน้อย 144 พิกเซล / ไบต์ (ด้วยตัวอักษร 12px) แต่จะเกิดอะไรขึ้นถ้าเราจะเข้ารหัสรหัสของเราในภาพ? นี่คืองานของคุณวันนี้ ท้าทาย งานของคุณคือการอ่านในซอร์สโค้ดของคุณเอง (อนุญาตให้ใช้ควินส์ที่ไม่เหมาะสมเช่นการอ่านไฟล์ต้นฉบับ) และสร้างภาพออกมาโดยการตั้งค่าส่วนประกอบสีแดงสีเขียวและสีน้ำเงินของพิกเซลตาม ASCII ค่าของตัวละคร ตัวอย่าง: เรามีสตริง "Hello world!" Hello world! มาแปลงค่านี้เป็นค่า ASCII: 72 101 108 108 111 32 119 111 114 108 100 33 จับคู่ค่า RGB กับมัน (หากความยาวของซอร์สโค้ดไม่สามารถหารด้วย 3 ให้ใช้ 0 เป็นตัวอักษรที่เหลือ): __________________________________________________ | R …

10
สี่เหลี่ยมที่ปนเปื้อน
บทนำ ลองสังเกตจตุรัสต่อไปนี้ซึ่งประกอบไปด้วยตัวเลขเท่านั้น0 - 9: 1034 4167 8414 3542 เปลือกนอกของตารางนี้คือ: 1034 4 7 8 4 3542 มันมีค่าศูนย์ดังนั้นเราจำเป็นต้องลอกเปลือกนอกออกจาก: 16 41 เปลือกนอกของตารางนี้คือ: 16 41 มันไม่ได้มีศูนย์ใด ๆ และดังนั้นจึงเป็นตารางที่ไม่ปนเปื้อน โดยทั่วไปคำจำกัดความของสี่เหลี่ยมจัตุรัสที่ไม่มีการปนเปื้อนคือเมื่อเปลือกด้านนอกของสี่เหลี่ยมไม่มีศูนย์ งาน ให้สี่เหลี่ยมสองหลัก (มีเฉพาะจำนวนเต็มไม่เป็นลบ) ในรูปแบบที่เหมาะสมส่งออกสี่เหลี่ยมที่ไม่ปนเปื้อนที่ใหญ่ที่สุดโดยปอกเปลือกนอกออกอย่างต่อเนื่องในรูปแบบที่เหมาะสม กรณีทดสอบ กรณีทดสอบ 1: Input Output 1234 1234 2345 2345 3456 3456 4567 4567 กรณีทดสอบ 2: Input Output 123 123 204 204 …
17 code-golf  number 

1
ลองใช้สามเหลี่ยมทดลองนี้
สตริงที่มีความยาวคือตัวเลขสามเหลี่ยมบวก(1, 3, 6, 10, 15 ... ) สามารถจัดเรียงเป็น "สามเหลี่ยมข้อความรูปสามเหลี่ยมด้านเท่า" โดยการเพิ่มช่องว่างและบรรทัดใหม่ (และเก็บไว้ในลำดับการอ่านเดียวกัน) ตัวอย่างเช่นความยาว 10 สตริงABCDEFGHIJกลายเป็น: A B C D E F G H I J เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในสตริงเช่นยกเว้นจะมีเพียงตัวละครและ0 1(คุณอาจสมมติว่าอินพุตถูกต้อง) สำหรับผลลัพธ์ "สามเหลี่ยมข้อความด้านเท่ากันหมด" ผลลัพธ์ (พิมพ์หรือส่งคืน) หนึ่งในสี่หมายเลขที่แสดงถึงประเภทของสมมาตรที่จัดแสดง: เอาท์พุท2ถ้าสามเหลี่ยมมีสมมาตรทวิภาคี นั่นคือมันมีเส้นสมมาตรจากมุมหนึ่งไปยังจุดกึ่งกลางของฝั่งตรงข้าม ตัวอย่าง: 0 1 1 1 0 1 0 0 1 0 1 0 1 1 1 1 …

4
จำนวนเต็ม Metagolf จริง ๆ
พื้นหลัง ที่จริงแล้ว (ตัวตายตัวแทนอย่างจริงจัง ) เป็นภาษากอล์ฟบังคับตามสแต็คที่ฉันสร้างขึ้นในเดือนพฤศจิกายนปี 2015 เช่นเดียวกับภาษากอล์ฟอื่น ๆ อีกมากมายมันมีคำสั่งขนาดหนึ่งไบต์ที่ทำหน้าที่แตกต่างกันตามเนื้อหาของสแต็ค หนึ่งในความเชี่ยวชาญของมันคือวิชาคณิตศาสตร์ - มันมีคำสั่งพื้นฐานทางคณิตศาสตร์ที่หลากหลาย อย่างไรก็ตามในการดำเนินการทางคณิตศาสตร์คุณต้องใส่หมายเลข (หนึ่งหรือมากกว่า) ลงบนสแต็ก การกดค่าเฉพาะในจำนวนน้อยที่สุดเท่าที่จะทำได้เป็นเรื่องยุ่งยากเพราะมีตัวเลือกต่าง ๆ มากมาย ในการท้าทายนี้คุณจะทำสิ่งนั้นอย่างแน่นอน: แสดงตัวเลข (โดยเฉพาะจำนวนเต็ม) ในความเป็นจริงในจำนวนไบต์น้อยที่สุด ความท้าทาย กำหนดจำนวนเต็มNเป็นอินพุตเอาต์พุตโค้ดที่ถูกต้องจริงซึ่งส่งผลNให้ถูกส่งไปยังสแต็ก อินพุตจะอยู่ในช่วงของจำนวนเต็มเสริมของ 32 บิตที่เซ็นชื่อสองบิต (เช่นจำนวนเต็มในช่วงรวม[-2147483648, 2147483647]) ผลลัพธ์ต้องเป็นจำนวนเต็ม (ไม่ใช่แบบลอยสตริงรายการหรือฟังก์ชัน) และต้องอยู่ด้านบนสุดของสแต็ก คุณไม่สามารถทำการสันนิษฐานเกี่ยวกับเนื้อหาของสแต็ค (เช่นว่าว่างเปล่าหรือไม่) ค่าที่มีอยู่ใด ๆ บนสแต็กต้องไม่ถูกแก้ไขหรือจัดเรียงใหม่ ความมุ่งมั่นล่าสุดของจริงในขณะที่ฉันกำลังเขียนความท้าทายนี้จะถูกนำมาใช้ ถ้าฉันแก้ไขข้อบกพร่องหรือปรับปรุงประสิทธิภาพ (หรือการเปลี่ยนแปลงเล็กน้อยอื่น ๆ ที่ไม่ได้ลบหรือเปลี่ยนการทำงานของคำสั่งที่อนุญาต) ฉันจะอัปเดตเวอร์ชันนี้ โซลูชันของคุณจะต้องทำอย่างน้อยที่สุดเช่นเดียวกับวิธีแก้ปัญหาเล็กน้อย (ผนวก:กับอินพุตเพื่อสร้างตัวอักษรตัวเลข) คะแนนของคุณจะเป็นผลรวมของความยาวของโซลูชันเล็ก ๆ น้อย ๆ ลบด้วยผลรวมของความยาวของผลลัพธ์สำหรับการเลือกจำนวนเต็ม …

7
ช่วงเวลาในฐานที่แตกต่างกัน
ท้าทาย: คุณจะได้รับหมายเลขฐาน 10 สำหรับแต่ละฐานตั้งแต่ 10 นับถึงฐาน 2: ใช้หมายเลขอินพุตดั้งเดิมเป็นสตริงฐาน 10 และลบตัวเลขใด ๆ ของตัวเลขที่ไม่ถูกต้องสำหรับฐาน ตีความสตริงตัวเลขผลลัพธ์ในฐานนั้น หากสิ่งนี้ให้ 1 หรือ 0 ให้ยุติกระบวนการทั้งหมด เอาท์พุทหรือพิมพ์ตัวประกอบนายกที่ใหญ่ที่สุดเป็นเลขทศนิยม การส่งออกสามารถอาร์เรย์ของปัจจัยสำคัญที่ใหญ่ที่สุด กรณีตัวอย่าง: การป้อนข้อมูล: 987654321 เอาท์พุท: 379721 10593529 1091 179 1493 293 19 7 อีกวิธีหนึ่งคือ: [379721,10593529,1091,179,1493,293,19,7] สิ่งนี้พิมพ์ปัจจัยที่สำคัญที่สุดของ 987654321, 87654321 9 = 42374116 10 , 7654321 8 = 2054353 10และต่อไปเรื่อย ๆ จนกว่าจะถึง 1 …

5
ไปที่มุมตรงข้ามของรูปสี่เหลี่ยมผืนผ้าในทุกทิศทาง - ยากขึ้น
นี่เป็นสิ่งเดียวกับคำถามนี้ยกเว้นยากกว่า คุณเป็นอีกครั้งที่จะเขียนโปรแกรมที่ได้รับจากมุมซ้ายล่างของรูปสี่เหลี่ยมผืนผ้าไปที่มุมบนขวา อย่างไรก็ตามในครั้งนี้อนุญาตให้มีการเคลื่อนไหวในแนวทแยง โปรแกรมจะยอมรับคู่ที่สั่งซื้อ(width, height)และใช้สิ่งเหล่านี้เป็นส่วนข้อมูลสำหรับสี่เหลี่ยมผืนผ้า โปรแกรมของคุณจะสร้าง ASCII-art ของโซลูชัน (ใช้.สำหรับช่องว่างเปล่า#สำหรับส่วนหนึ่งของโซลูชันและXสำหรับสี่เหลี่ยมเริ่มต้น) และนับจำนวนการเคลื่อนไหวที่ใช้เพื่อไปยังจุดสิ้นสุด ตัวอย่าง การป้อนข้อมูล: (5, 6) เอาท์พุท: ....# ....# ...#. ..#.. .#... X.... Move count: 5 คำตอบที่สั้นที่สุดในการชนะไบต์!


11
สร้างเมือง ABACABA
นี่คือเมืองที่ 3 ของ ABACABA: _ A|_| B|__| A|_|_ C|___| A|_| B|__| A|_| มันทำมาจากลำดับABACABAซึ่งโดยพื้นฐานแล้ว: A (การทำซ้ำครั้งที่ 1) วาง B - AB ทำซ้ำ A - ABA (การวนซ้ำครั้งที่ 2) เพลส C - ABAC ทำซ้ำ ABA - ABACABA (การทำซ้ำครั้งที่ 3) และคุณจะได้รับความคิด อาคารมีความสูง (ติดต่อกันโดยไม่ขีดเส้นใต้) เท่ากับตัวอักษรที่แปลงเป็นตัวเลขเป็น A = 1, B = 2 เป็นต้น อินพุต หมายเลขซ้ำ 1 …

13
สูตรเศษส่วนเฉพาะส่วนที่น่าสงสัย
รับจำนวนเต็มบวกnเอาท์พุทจำนวนเต็มaและb (สร้างเศษส่วนลดลงa / b ) เช่น: โดยที่p kคือจำนวนเฉพาะหลักที่k (ด้วย p 1 = 2) ตัวอย่าง: 1 -> 3, 5 2 -> 12, 25 3 -> 144, 325 4 -> 3456, 8125 5 -> 41472, 99125 15 -> 4506715396450638759507001344, 11179755611058498955501765625 420 -> very long อนุญาตให้มีการตรวจสอบความน่าจะเป็นที่สำคัญและไม่เป็นไรถ้าคำตอบของคุณล้มเหลวเนื่องจากข้อ จำกัด ในประเภทจำนวนเต็มของภาษาของคุณ รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

5
ปัญหาสะพานและคบเพลิง
แรงบันดาลใจสำหรับปริศนากอล์ฟรหัสนี้คือปัญหาของสะพานและคบเพลิงซึ่งdคนที่เริ่มต้นของสะพานทั้งหมดจะต้องข้ามมันในปริมาณที่น้อยที่สุดของเวลา จับได้ว่ามากที่สุดสองคนสามารถข้ามในเวลาเดียวกันมิฉะนั้นสะพานจะบี้ภายใต้น้ำหนักของพวกเขาและกลุ่มมีเพียงการเข้าถึงหนึ่งไฟฉายซึ่งจะต้องดำเนินการข้ามสะพาน แต่ละคนในตัวต่อทั้งหมดมีเวลาที่กำหนดที่จะใช้ในการเดินข้ามสะพาน ถ้าคนสองคนข้ามกันทั้งคู่จะช้าเท่ากับคนที่ช้าที่สุด ไม่มีคนกำหนดจำนวนคนที่ต้องข้ามสะพาน โซลูชันของคุณต้องทำงานเพื่อค่าใด ๆ ของd d คุณไม่จำเป็นต้องใช้อินพุตมาตรฐานสำหรับปัญหานี้ แต่เพื่ออธิบายปัญหาฉันจะใช้รูปแบบอินพุตและเอาต์พุตต่อไปนี้สำหรับคำอธิบาย หมายเลขแรก, d , คือจำนวนคนที่จุดเริ่มต้นของสะพาน จากนั้นรหัสจะสแกนหาตัวเลขdแต่ละอันแทนความเร็วของบุคคล รหัสเอาท์พุทจะเป็นจำนวนเวลาที่น้อยที่สุดที่ต้องใช้ในการข้ามทุกคนจากจุดเริ่มต้นของสะพานไปยังจุดสิ้นสุดของสะพานขณะที่ปฏิบัติตามเกณฑ์ที่อธิบายไว้ก่อนหน้านี้ ต่อไปนี้เป็นกรณีการป้อนข้อมูลและกรณีการส่งออกและคำอธิบายสำหรับกรณีการป้อนข้อมูลครั้งแรก ขึ้นอยู่กับคุณว่าจะรับอัลกอริทึมจากข้อมูลนี้เพื่อแก้ปัญหาในจำนวนไบต์ที่น้อยที่สุดของโค้ด อินพุต 4 1 2 5 8 เอาท์พุต 15 ในการเข้าถึงผลลัพธ์นี้ผู้คนจะต้องข้ามด้วยวิธีต่อไปนี้ A and B cross forward (2 minutes) A returns (1 minute) C and D cross forward (8 minutes) B returns (2 minutes) …
17 code-golf 

5
ทำให้คำอธิบายรหัสนี้สวยอีกครั้ง
บทนำ นักกอล์ฟรหัสส่วนใหญ่ที่นี่เพิ่มคำอธิบายลงในผลงานของพวกเขาดังนั้นจึงง่ายต่อการเข้าใจว่าเกิดอะไรขึ้น โดยปกติแล้ว codelines จะอยู่ทางซ้ายและคำอธิบายที่เกี่ยวข้องทางด้านขวาพร้อมกับตัวคั่นบางชนิด เพื่อให้ดูสวยตัวคั่นทั้งหมดอยู่ในคอลัมน์เดียวกัน ข้อความอธิบายที่ยาวมักจะถูกรวมอยู่ในบรรทัดถัดไปดังนั้นผู้อ่านจึงไม่ต้องเลื่อนในแนวนอนเพื่ออ่านทุกอย่าง อย่างไรก็ตามเมื่อคุณต้องการแก้ไขคำอธิบายนี้เนื่องจากคุณสร้างสนามกอล์ฟที่บ้าคลั่งคุณมักจะเสียเวลาในการทำให้คำอธิบายของคุณกลับมาสวยอีกครั้ง เนื่องจากนี่เป็นงานที่ต้องทำซ้ำคุณจึงต้องเขียนโปรแกรมสำหรับสิ่งนี้ ความท้าทาย รับโค้ดหลายบรรทัดพร้อมคำอธิบายและตัวคั่นเอาท์พุทโค้ดที่จัดรูปแบบอย่างสวยงามพร้อมคำอธิบาย ตัวอย่าง อินพุต shM-crz1dc4. "ANDBYOROF # z = อินพุต rz1 # แปลงอินพุตเป็นตัวพิมพ์ใหญ่ cd # split อินพุตบนช่องว่าง c4. "ANDBYOROF # สร้างรายการคำจากสตริงที่บรรจุซึ่งจะถูกละเว้น - # กรองคำเหล่านั้นออก hM # ใช้ตัวอักษรตัวแรกของทุกคำเท่านั้น s # เข้าร่วมพวกเขาเป็นหนึ่งสาย เอาท์พุต shM-crz1dc4. "ANDBYOROF # z = อินพุต rz1 # แปลงอินพุตเป็นตัวพิมพ์ใหญ่ cd …
17 code-golf  string 

5
หมายเลขช็อคโกแลต
กำหนดmโดยnแท่งช็อกโกแลตm,nบวกออกจำนวนวิธีการแบ่งแถบออกเป็นmn1 โดย 1 ชิ้นที่แต่ละตัวแบ่งเกิดขึ้นบนเส้นตาราง คำสั่งซื้อเป็นสิ่งสำคัญ ชิ้นยังมีความแตกต่างดังนั้นทั้งสองชิ้นที่ปลายด้านหนึ่งของ 1 โดย 3 ช็อกโกแลตบาร์ไม่เท่ากัน ตัวอย่างเช่นสำหรับบล็อก 2 คูณ 2 เรามี: _ _ _ _ _ _ _ _ |_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_| |_‖_| |_| |_| _ |_| _ _ |_| |_| |_| _ _ _ _ _ _ _ …

11
ตัวกำหนด 2x2 แบบเรียกซ้ำ
ดีเทอร์มีแนนต์ของเมทริกซ์ 2 คูณ 2 a b c d ad - bcจะได้รับจาก ด้วยเมทริกซ์ของตัวเลขที่มีขนาด 2 nคูณ 2 n , n ≥ 1 ส่งออกผลลัพธ์ที่ได้จากการคำนวณดีเทอร์มิแนนต์ของแต่ละบล็อกย่อย 2 คูณ 2 จนกว่าเราจะถึงตัวเลขเดียว ตัวอย่างเช่นกำหนดอินพุต 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 หลังจากผ่านไปหนึ่งขั้นตอนเราจะได้รับ: (3*9 - 1*5) (4*6 - 1*2) = …

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