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

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

2
การประกวด BlackJack KOTH
กระบอง ในขณะที่ฉันทำงานหนักกับ KOTH ดั้งเดิมฉันจึงอยากลองทำเกมอื่น สำหรับฉันแล้วความสนุกของความท้าทาย AI เหล่านี้คือการปรับแต่งบอทที่ค่อนข้างเรียบง่ายซึ่งเล่นเกมอย่างง่าย ๆ อย่างละเอียด เนื่องจากลักษณะความน่าจะเป็นของเกมไพ่ฉันคิดว่าแบล็คแจ็คอาจเป็นเกม KOTH ที่น่าสนใจเหมือนกับ TPD กฎทั้งหมดมาจากคำอธิบายของเว็บไซต์ BlackJack พร้อมรองเท้า กฎระเบียบเกี่ยวกับไพ่และสำรับ บอทเล่นที่โต๊ะของผู้แข่งขันสี่ (4) คนและหนึ่ง (1) เจ้ามือ ผู้เล่นทุกคนและตัวแทนจำหน่ายจนกว่าจะหมดรองเท้า (หนึ่ง) (ไพ่สำรับแบบสับไพ่) จนกว่าผู้เล่นนั้นจะหมดท่าตรงจุดนี้จะมีการเพิ่มสำรับแบบสุ่มแบบสุ่มใหม่และการเล่นจะดำเนินต่อไป บอทจะไม่ได้รับการแจ้งจากการเพิ่มเด็คใหม่นี้ การแจ้งเตือนดังกล่าวอาจถูกเพิ่มหากไม่มีคุณสมบัตินี้ทำให้เกิดความทุกข์ / ปัญหาอย่างเพียงพอ มีการบายอินจำนวน 10 ครั้งต่อรอบและบัตรฟรี มือที่สมบูรณ์แบบ / อุดมคติมีคะแนน 21 การ์ดใบหน้าทั้งหมดมีค่า 10 การ์ดตัวเลขทั้งหมดมีค่าหมายเลขของพวกเขา เอซมีค่า 11 หรือ 1 ซึ่งจะจัดการโดยอัตโนมัติโดยกรอบไม่ใช่บอท ตามกฎแล้วไพ่ของผู้เล่นทุกคนจะหงายหน้าและมองเห็นได้ ไพ่ใบหนึ่งของเจ้ามือคว่ำหน้าลงและไพ่อีกใบหงายหน้า เกณฑ์การให้คะแนน คะแนนเกิน 21 …

5
วงกลมผ่านจุดสามจุด
ให้พิกัดคาร์ทีเซียนสามจุดบนระนาบหาสมการของวงกลมผ่านพวกมันทั้งหมด จุดสามจุดจะไม่เป็นเส้นตรง บรรทัดของการป้อนข้อมูลแต่ละโปรแกรมของคุณจะมีxและพิกัดของสามจุดในการสั่งซื้อy A(x),A(y),B(x),B(y),C(x),C(y)พิกัดเหล่านี้จะเป็นตัวเลขจริงน้อยกว่า 1,000,000 คั่นจากแต่ละช่องว่าง (x-h)^2 + (y-k)^2 = r^2การแก้ปัญหาคือจะพิมพ์เป็นสมการที่มีรูปแบบ ค่าสำหรับh, k, rจะได้รับการพิมพ์ด้วยตัวเลขสามหลักหลังจุดทศนิยม เครื่องหมายบวกและลบในสมการควรมีการเปลี่ยนแปลงตามความจำเป็นเพื่อหลีกเลี่ยงสัญญาณหลาย ๆ ตัวต่อหน้าตัวเลข Sample Inputs 7.0 -5.0 -1.0 1.0 0.0 -6.0 1.0 7.0 8.0 6.0 7.0 -2.0 Sample Outputs (x - 3.000)^2 + (y + 2.000)^2 = 5.000^2 (x - 3.921)^2 + (y - 2.447)^2 = …
13 code-golf  math 

5
1P5: แผ่นดินไหว!
เครื่องวัดแผ่นดินไหวของ USGS ตรวจพบแผ่นดินไหวครั้งใหญ่แล้ว! ทีมรับมือเหตุฉุกเฉินจำเป็นต้องประเมินจำนวนผู้ได้รับผลกระทบอย่างรวดเร็ว เขียนโปรแกรมเพื่อคำนวณการประมาณนี้ โปรแกรมของคุณได้รับ 2 อินพุต อย่างแรกคือรายละเอียดของแผ่นดินไหวนั้นเอง แผ่นดินไหวจำลองเป็นส่วนของเส้นตามที่แผ่นดินแตกออกพร้อมกับระยะทางที่สำคัญจากความผิดที่คาดว่าจะเกิดความเสียหาย อินพุตที่สองคือรายการของที่ตั้งและประชากรของเมืองในพื้นที่ โปรแกรมของคุณควรคำนวณจำนวนคนที่อาศัยอยู่ในพื้นที่ที่ได้รับผลกระทบนั่นคือผลรวมของจำนวนประชากรของเมืองทั้งหมดที่อยู่ในระยะวิกฤตของเซ็กเมนต์ความผิดปกติ อินพุต บรรทัดแรกที่อธิบายแผ่นดินไหวประกอบด้วยพิกัด x, y ของจุดเริ่มต้นและจุดสิ้นสุดของความผิดพลาดรวมถึงระยะทางวิกฤต A_x A_y B_x B_y Dรูปแบบคือ ตัวอย่างเช่น: 3.0 3.0 7.0 4.0 2.5 เข้ารหัสความผิดที่ขยายจาก (3.0,3.0) ถึง (7.0,4.0) และระยะทางวิกฤต 2.5 ประการที่สองหนึ่งบรรทัดต่อเมืองในพื้นที่ประกอบด้วยพิกัด x, y ของเมืองและประชากร ตัวอย่างเช่น: 1.0 1.0 2500 5.0 7.0 8000 3.0 4.0 7500 9.0 6.0 …
13 code-golf  math  1p5 

12
รหัสกะทัดรัดที่สุดสำหรับการระเบิดจำลอง
คุณสามารถเขียนโปรแกรมที่เรนเดอร์เพื่อกลั่นกรองกลุ่มพิกเซลที่แตกออกเป็นชิ้นเล็กชิ้นน้อย (อย่างเช่นในเครื่องยนต์อนุภาคอย่างง่าย) และคุณสามารถทำสิ่งนี้ในจำนวนอักขระที่น้อยมากอย่างน่าทึ่ง (การกดปุ่ม) (ระลึกถึงบทแทรกของเกมเมื่อคนตัวเล็ก ๆ เหล่านั้นจะระเบิดและชิ้นพิกเซลเล็ก ๆ ของพวกเขาก็แยกกัน) มีคนเขียนโปรแกรมระบบอนุภาคอย่างง่ายที่นี่ในฐานะร่างการประมวลผลและมันค่อนข้างหนักเมื่อเทียบกับสิ่งที่ฉันคิดว่าคนอื่นควรจะประสบความสำเร็จหากพวกเขาพยายาม แต่ฉันจะต้องประทับใจมากขึ้นถ้ามีคนทำเช่นเดียวกันใน c ++ และ sdl หรือแม้แต่ java หรือ c #
13 code-golf 

4
ลองคูณทีละ 8 บิต
คุณจะได้รับเครื่อง 16- บิตและบอกให้ใช้การคูณจำนวนเต็มตามอำเภอใจ การลงทะเบียนของคุณสามารถเก็บตัวเลข 16 บิตได้เท่านั้นและคำสั่งการคูณที่ใหญ่ที่สุดใช้อินพุต 8 บิตสองรายการและสร้างผลลัพธ์แบบ 16 บิต โปรแกรมของคุณจะต้องป้อนข้อมูลเป็นจำนวนบวกสองค่าโดยพลการและส่งออกผลิตภัณฑ์ของตน หมายเลขอินพุตแต่ละหมายเลขจะถูกเข้ารหัสในบรรทัดของตัวเองเป็นอาร์เรย์ไบต์แบบ endian น้อยโดยที่แต่ละไบต์เป็นตัวเลขฐานสิบหก 2 หลัก ผลลัพธ์จะต้องอยู่ในรูปแบบที่คล้ายกัน บางทีอธิบายได้ดีที่สุดด้วยตัวอย่าง: อินพุต 1f 4a 07 63 a3 เอาท์พุต fd 66 03 a7 04 ซึ่งเข้ารหัสการคูณ 477727 * 41827 = 19981887229 คุณสามารถสันนิษฐานได้ว่าไบต์สุดท้าย (สำคัญที่สุด) ของแต่ละหมายเลขอินพุตคือไม่ใช่ศูนย์และอันสุดท้ายของหมายเลขที่คุณส่งออกต้องไม่ใช่ศูนย์ หมายเลขอินพุตทั้งสองจะมีความยาวไม่เกิน 100 ไบต์ รหัสที่เล็กที่สุดชนะ โปรดจำไว้ว่าตัวคูณที่ใหญ่ที่สุดที่คุณได้รับอนุญาตให้ใช้คือ 1 ไบต์ * 1 ไบต์และไม่มีประเภทจำนวนเต็มใดที่ใหญ่กว่า 2 …
13 code-golf  math 

7
อะไรคือค่าเฉลี่ยของ n, ไพรเวตที่ใกล้ที่สุดกับ n, สแควร์ของ n และจำนวนฟีโบนักชีที่ใกล้เคียงที่สุดถึง n?
นี่เป็นปัญหาทางคณิตศาสตร์ที่ใช้คำถามหลายอย่างทำให้มันค่อนข้างท้าทายและอย่างที่คุณอาจเดาได้ว่ามันคือรหัสกอล์ฟดังนั้นควรสั้นที่สุดเท่าที่จะทำได้ อินพุต , nเป็นใด ๆจำนวนเต็มจำนวน (ควรที่จำนวนเต็มสนับสนุนน้อย แต่จำเป็นที่จะต้องไม่ถูก จำกัด ) เอาท์พุทเป็นค่าเฉลี่ยของ: n กำลังสองของ n จำนวนที่ใกล้เคียงที่สุดถึง n จำนวนที่ใกล้เคียงที่สุดnในลำดับฟีโบนักชี ไม่นานโปรแกรมควรพิมพ์ไปออกมาตรฐานช่องผล(n+(n*n)+closestPrime(n)+closestFib(n))/4ของ คุณไม่ต้องกังวลกับความเป็นไปได้ที่จะเกิดความผิดพลาด ฯลฯ ความแม่นยำของจุดลอยตัวปกติก็ใช้ได้เช่นกัน วิธีการป้อนข้อมูลจะขึ้นอยู่กับคุณอย่างสมบูรณ์ โปรแกรมที่สั้นที่สุด (เป็นตัวอักษร) ชนะเช่นเคยกับ code golfs ในกรณีที่มีเน็คไทเกิดขึ้นเมื่อคุณมองหาสิ่งที่ใกล้เคียงที่สุดให้เลือกข้อใดข้อหนึ่งต่อไปนี้: ขึ้น ลงข้างล่าง เลือกหนึ่งแบบสุ่ม

13
คำนวณตัวเลข N แรกของ e
ท้าทาย เขียนโปรแกรมในการคำนวณครั้งแรก N (<= 10 ^ 3) ตัวเลขของอี โปรแกรมของคุณควรใช้จำนวนเต็มNเป็นอินพุต การป้อนข้อมูล: 100 เอาท์พุท: 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427 การป้อนข้อมูล: 7 เอาท์พุท: 2.718282 การป้อนข้อมูล: 1000 เอาท์พุท: 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035 ทางออกที่สั้นที่สุดชนะ!
13 code-golf  math 

1
ใช้ PCRE ในภาษาของคุณ
หมายเหตุ:หลังจากลองตัวเองแล้วฉันก็รู้ทันทีว่านี่เป็นความผิดพลาดอะไร ก่อนหน้านี้ฉันกำลังแก้ไขกฎเล็กน้อย ฟังก์ชั่นที่ต้องการขั้นต่ำ: ชั้นเรียนตัวอักษร ( ., \w, \Wฯลฯ ) คูณ ( +, *และ?) กลุ่มการจับภาพง่าย ๆ ความท้าทายของคุณคือการนำPCREไปใช้ในภาษาที่คุณเลือกภายใต้เงื่อนไขดังต่อไปนี้: คุณไม่สามารถใช้สิ่งอำนวยความสะดวก RegEx ในภาษาของคุณในทางใดทางหนึ่ง คุณไม่สามารถใช้ห้องสมุด RegEx ของบุคคลที่สามได้ ข้อมูลของคุณควรนำไปใช้กับข้อกำหนด PCRE มากที่สุด เป็นไปได้. โปรแกรมของคุณควรยอมรับเป็นอินพุต 2 บรรทัด: การแสดงออกปกติ อินพุตสตริงที่จะจับคู่ โปรแกรมของคุณควรระบุในผลลัพธ์: ไม่ว่า RegEx จะจับคู่ที่ใดก็ได้ในสตริงอินพุต ผลลัพธ์ของกลุ่มการดักจับใด ๆ ผู้ชนะจะต้องเป็นรายการที่ใช้สเป็คมากที่สุด เป็นไปได้. ในกรณีที่เสมอกันผู้ชนะจะเป็นผลงานที่สร้างสรรค์ที่สุดตามที่ฉันตัดสิน แก้ไข:เพื่อชี้แจงบางสิ่งต่อไปนี้เป็นตัวอย่างของอินพุตและเอาต์พุตที่คาดหวัง: การป้อนข้อมูล: ^ \ s * (w \ +) $ …

20
แถบความคืบหน้าของสถานะการออนไลน์
เขียนโปรแกรมที่แยกวิเคราะห์ผลลัพธ์uptimeและสร้างแถบความคืบหน้าเชิงแนะนำ (ตามที่แสดง) ด้วยความยาวเท่ากับช่วงเวลาปัจจุบันในหน่วยวัน: $ uptime 23:01 up 34 days, 7:30, 5 users, load averages: 0.23 0.27 0.24 $ uptime|<command> 8==================================D (34 วัน = 34 เครื่องหมายเท่ากับ) คำตอบที่สั้นที่สุดชนะ

6
การเปรียบเทียบอำนาจ
เปรียบเทียบตัวเลขสองตัว N 1 = a b c , N 2 = d e fโดยสร้างฟังก์ชัน f (a, b, c, d, e, f) ที่: ส่งคืน 1 ถ้า N 1 > N 2 ส่งคืน -1 ถ้า N 1 <N 2 หมายเหตุ:คุณไม่จำเป็นต้องส่งกลับค่าใด ๆ สำหรับความสัมพันธ์อื่น ๆ ระหว่าง N 1และ N 2 เช่นเมื่อพวกเขาเท่ากันหรือเมื่อความสัมพันธ์ของพวกเขาไม่ได้กำหนด (จำนวนเชิงซ้อน) ข้อ จำกัด …
13 code-golf 

6
คำนวณตัวเลขสุดท้ายของหมายเลขของ Graham
หมายเลขของ Grahamสิ้นสุดใน 7 มันเป็นจำนวนมากในทางทฤษฎีที่ต้องการข้อมูลเพิ่มเติมเพื่อเก็บมากกว่าขนาดของจักรวาลเอง อย่างไรก็ตามเป็นไปได้ที่จะคำนวณตัวเลขสองสามหลักสุดท้ายของหมายเลขของ Graham ตัวเลขสองสามตัวสุดท้ายคือ: 02425950695064738395657479136519351798334535362521 43003540126026771622672160419810652263169355188780 38814483140652526168785095552646051071172000997092 91249544378887496062882911725063001303622934916080 25459461494578871427832350829242102091825896753560 43086993801689249889268099510169055919951195027887 17830837018340236474548882222161573228010132974509 27344594504343300901096928025352751833289884461508 94042482650181938515625357963996189939679054966380 03222348723967018485186439059104575627262464195387 โปรแกรมของคุณอาจไม่มี (หรือตัวเลขที่คล้ายกัน) แต่ต้องคำนวณ จะต้องคำนวณ 200 หลักหรือมากกว่า ส่งออกไปยัง stdout ใช้เวลาสูงสุด 2 นาทีกับฮาร์ดแวร์ที่เหมาะสม โปรแกรมที่สั้นที่สุดชนะ
13 code-golf  number 

5
พลังที่สมบูรณ์แบบมากกว่าหนึ่งทาง?
ท้าทาย งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นซึ่งได้รับจำนวนเต็มบวกNพบจำนวนเต็มบวกทั้งหมดน้อยกว่าหรือเท่ากับNที่สามารถแสดงเป็นพลังที่สมบูรณ์แบบมากกว่าหนึ่งวิธี คำนิยาม พลังที่สมบูรณ์แบบถูกกำหนดให้เป็นตัวเลขที่ฉันพบโดยm ^ kโดยที่ mและฉันเป็นจำนวนเต็มบวก m! = k กรณีทดสอบ อินพุต -> เอาต์พุต 1,000 -> 16, 64, 81, 256, 512, 625, 729 56 -> 16 999 -> 16, 64, 81, 256, 512, 625, 729 81 -> 16, 64, 81 1500 -> 16, 64, 81, 256, 512, 625, 729, 1024, …


5
ฟรีต้นไม้ไบนารี
ดังนั้นก่อนที่คุณจะอ่านแนวคิดวิทยาศาสตร์คอมพิวเตอร์ขั้นพื้นฐาน ต้นไม้ไบนารีเป็นโครงสร้างที่จัดสรรแบบไดนามิก (มักจะใช้สำหรับการจัดเก็บข้อมูลที่สั่งซื้อ) เพราะธรรมชาติของมันผ่านต้นไม้ไบนารีมักจะเรียกซ้ำ; นี่เป็นเพราะการเคลื่อนที่แบบเชิงเส้น (ผ่านลูป) นั้นไม่เป็นธรรมชาติเมื่อมีการวนลูปสองทาง วนซ้ำ: นี่หมายถึงฟังก์ชั่นที่เรียกตัวเองว่า ในภาษาที่ล้าสมัยการจัดการหน่วยความจำจำเป็นต้องมีการจัดการหน่วยความจำด้วยตนเอง คู่มือ: หมายความว่าคุณต้องทำด้วยตัวเอง เมื่อคุณทำการจัดการหน่วยความจำแบบแมนนวลคุณจะต้องขอให้ระบบที่อยู่ภายใต้นั้นว่างให้กับสมาชิกของแผนผังแต่ละตัว ฟรี: กู้คืนหน่วยความจำไปยัง poos ทั่วโลกเพื่อให้สามารถนำมาใช้ใหม่และคุณไม่ได้ใช้หน่วยความจำไม่เพียงพอ การทำให้พ้น: สิ่งนี้ทำได้โดยการเรียกใช้ฟังก์ชันfree()และส่งต่อตัวชี้ที่คุณต้องการกู้คืน ตัวชี้: มันเหมือนแท่งเสมือนจริง ในตอนท้ายของหน่วยความจำคือ เมื่อคุณขอหน่วยความจำคุณจะได้รับพอยน์เตอร์ (แท่งเสมือน) ที่มีหน่วยความจำ เมื่อคุณทำเสร็จแล้วให้คืนพอยน์เตอร์ (แท่งเสมือน) โซลูชันแบบเรียกซ้ำ: freeTree(Node* node) { freeTree(node->left); freeTree(node->right); free(node); } ปัญหาคือการเรียกซ้ำหมายความว่าคุณกำลังเรียกฟังก์ชันเดียวกันซ้ำ ๆ สิ่งนี้จะเพิ่มจำนวนสแต็ก การขยายสแต็กใช้หน่วยความจำมากขึ้น เหตุผลที่คุณทำให้ต้นไม้ว่างอยู่เพราะคุณต้องการให้หน่วยความจำกลับมาใช้หน่วยความจำมากขึ้นก็เป็นสิ่งที่ตรงกันข้าม (แม้ว่าคุณจะได้รับหน่วยความจำทั้งสองกลับมา) ในที่สุดคำถาม: ดังนั้นศูนย์จะมีปัญหาเกี่ยวกับการแปลงเวอร์ชั่นซ้ำข้างต้นเป็นโซลูชันเชิงเส้น (เพื่อให้คุณไม่ต้องใช้หน่วยความจำ) กำหนดประเภทโหนด typedef struct Node Node; struct …

10
พยากรณ์อากาศ
เขียนโปรแกรมที่สั้นที่สุดเพื่อพยากรณ์อากาศ 7 วันข้างหน้า อินพุต (จาก stdin) คือวันทำงานและฤดูกาล เอาท์พุท (ที่ stdout) เป็นเจ็ดสายวันทำงานและอุณหภูมิในเซนติเกรด วันทำงานเริ่มต้นในวันทำการอินพุต อุณหภูมิเป็นตัวเลขสุ่มด้วยช่วงขึ้นอยู่กับฤดูกาล ฤดูใบไม้ผลิ 10 - 30 องศา ฤดูร้อน 20 - 40 องศา ฤดูใบไม้ร่วง 5 - 25 องศา (ฤดูใบไม้ร่วงเป็นคำพ้องความหมายสำหรับฤดูใบไม้ร่วง) ฤดูหนาว -5 - 15 องศา ตัวอย่างอินพุต Thursday Winter ตัวอย่างผลลัพธ์ วันพฤหัสบดีที่ -1 วันศุกร์ที่ 3 วันเสาร์ที่ 8 วันอาทิตย์ที่ 7 วันจันทร์ที่ 10 วันอังคารที่ 10 …
13 code-golf  random 

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