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

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

5
การทำให้เข้าใจง่าย Amidakuji (阿 simpl 籤)
หากคุณเคยสัมผัสวัฒนธรรมญี่ปุ่นหรือเอเชียตะวันออกคุณจะได้พบกับเกม Amidakuji: ตามที่Wikipedia อธิบายมันเป็นลอตเตอรีประเภทหนึ่งที่วาดบนกระดาษและใช้ในการสุ่มเลือกการเรียงสับเปลี่ยนของรายการ N ตัวอย่างเช่นอาจใช้เพื่อกำหนดลำดับการเริ่มต้นแบบสุ่มให้กับคน N หรือรางวัล N ให้กับคน N และอื่น ๆ เคล็ดลับในการทำความเข้าใจว่าทำไมเกมถึงแสดงถึงการเปลี่ยนแปลงคือการตระหนักว่าทุกจังหวะในแนวนอน (เรียกว่า "ขา") สลับสองรายการเข้าที่ หน้า Wikipedia เดียวกันนี้ยังอธิบายว่าการเปลี่ยนแปลง P ของ N รายการแต่ละรายการสอดคล้องกับแผนภาพ Amidakuji จำนวนไม่ จำกัด (s) ที่มีจำนวนน้อยที่สุดในแนวนอน (ขา) เรียกว่า "ช่วงเวลา" ของการเปลี่ยนแปลงเฉพาะ p งานของคุณคือการรับไดอะแกรม Amidakuji ที่มีเส้นแนวตั้งตั้งแต่ 2 เส้นขึ้นไป (ในตัวอย่างนี้คือ 6) ในรูปแบบนี้ (ลบด้วยตัวอักษร): A B C D E F | …

1
KoTH: Gomoku (ห้าแถว)
Gomokuหรือห้าในแถวเป็นเกมกระดานที่เล่นโดยผู้เล่นสองคนในตารางด้วยหินสีดำและสีขาว ใครก็ตามที่สามารถวาง5หินในแถว (แนวนอนแนวตั้งหรือแนวทแยงมุม) ชนะเกม15×1515×1515 \times 15555 กฎระเบียบ ใน KoTH นี้เราจะเล่นกฎ Swap2 ซึ่งหมายความว่าเกมประกอบด้วยสองขั้นตอน: ในระยะแรกผู้เล่นสองคนจะตัดสินว่าใครจะไปก่อน / ผู้ที่เล่นเป็นสีดำหลังจากนั้นพวกเขาจะวางหินหนึ่งก้อนในแต่ละรอบโดยเริ่มจากผู้เล่น ใครเลือกสีดำ ระยะแรก ให้ผู้เล่นเป็นA & BและAจะเปิดเกม: Aวางสองหินสีดำและสีขาวบนกระดาน Bสามารถเลือกหนึ่งในสามการเคลื่อนไหวต่อไปนี้: ผู้เล่นBตัดสินใจที่จะเล่นเป็นสีดำ: เฟสแรกสิ้นสุดลง ผู้เล่นBตัดสินใจที่จะวางหินสีขาวและเล่นสีขาว: ช่วงแรกจบลง ผู้เล่นBตัดสินใจที่จะเล่นหนึ่งดำและหินขาวหนึ่งก้อน: Aจะเลือกสี เฟสเกม ผู้เล่นแต่ละคนวางก้อนหินสีเดียวบนกระดานเริ่มจากผู้เล่นที่เล่นเป็นสีดำสิ่งนี้จะดำเนินต่อไปจนกว่าจะไม่มีที่ว่างในการเล่น (ในกรณีนี้คือเน็คไท) หรือผู้เล่นคนหนึ่งเล่นก้อนใน แถว (ในกรณีที่ผู้เล่นชนะ)555 แถวหมายถึงแนวนอนแนวตั้งหรือแนวทแยง การชนะคือการชนะ - ไม่สำคัญว่าผู้เล่นจะทำคะแนนได้มากกว่าหนึ่งแถวหรือไม่ กฎของเกม KoTH ผู้เล่นแต่ละคนเล่นกับผู้เล่นคนอื่นสองครั้ง: เริ่มแรกมันจะถูกสุ่มเลือกว่าใครจะไปก่อน ในเกมถัดไปผู้เล่นที่ได้เล่นครั้งสุดท้ายต้องไปก่อน การชนะนั้นมีค่า 2 คะแนน, เสมอ 1 และแพ้ 0 …

13
ทวีคูณและหาร
รับค่าxค้นหาค่าตัวเลขที่เล็กที่สุดที่มากกว่าyที่สามารถคูณและหารด้วยxในขณะที่ยังคงรักษาตัวเลขเดิมทั้งหมดไว้ ตัวเลขใหม่จะไม่สูญเสียตัวเลข หมายเลขใหม่ไม่ได้รับตัวเลข ตัวอย่างเช่น: อินพุต: x = 2, y = 250000 เดิม: 285714 กอง: 142857 การคูณ: 571428 นี่คือความจริงเพราะ285714มีค่ามากกว่าปี ; แล้วเมื่อหารด้วยxผลลัพธ์ใน142,857และเมื่อคูณด้วยxผลลัพธ์ใน571428 ในการทดสอบทั้งตัวเลขหลักเดิมจาก285714มีอยู่และไม่มีการเพิ่มตัวเลขพิเศษ กฎระเบียบ Xควรเป็น2หรือ3เนื่องจากการคำนวณใด ๆ ที่สูงกว่าใช้เวลานานเกินไป Yต้องเป็นจำนวนเต็มที่มากกว่าศูนย์ รหัสที่สั้นที่สุดชนะ กรณีทดสอบ นี่เป็นกรณีทดสอบที่พบบ่อยที่สุดของฉันเนื่องจากเป็นแบบทดสอบที่เร็วที่สุด x = 2, y = 250000 = 285714 x = 2, y = 290000 = 2589714 x = 2, y = …
10 code-golf  number 

5
คาถาพ่อมดของ
แก้ไข : ฉันไม่ได้เล่น D&D มาก่อนเมื่อฉันตั้งคำถามนี้ขึ้นมาฉันไม่ได้ค้นคว้าอย่างถูกต้อง ฉันขอโทษสำหรับสิ่งนี้และฉันกำลังแก้ไขบางอย่างที่อาจทำให้คำตอบไม่ถูกต้องเพื่อให้เป็นจริงที่สุดเท่าที่จะเป็นไปได้สำหรับกฎ dnd 5e ขอโทษ แฟน D&D จากคำถามเครือข่ายร้อนแรงเมื่อไม่นานมานี้ดูเหมือนว่าจะมีปัญหาบางอย่างเกี่ยวกับว่านักเวทย์มนตร์ที่ถูกเลือกเข้าแถวสอดคล้องกับความเป็นไปได้หรือไม่ - และฉันคิดว่าเราควรช่วย! บทนำ (ทั้งหมดนี้ได้อธิบายไว้แล้วในคำถามที่กล่าวถึงก่อนหน้านี้) นักเวทย์รู้สองคาถาระดับ 1 ตั้งแต่เริ่มต้น (ระดับ 1): [1, 1] ทุกครั้งที่นักเวทย์จะได้รับเลเวล (ยกเว้นเลเวล 12, 14, 16, 18, 19 และ 20) พวกเขาเรียนรู้คาถาใหม่ (จำเป็น) นอกจากนี้เมื่อปรับระดับขึ้นหนึ่งสามารถเลือก (ไม่จำเป็น) เพื่อแทนที่คาถาหนึ่งด้วยอีก คาถาที่เรียนรู้และแทนที่จะต้องเป็นระดับสล็อตคาถาที่ถูกต้องซึ่งเป็นครึ่งหนึ่งของระดับจอมเวทย์ของคุณ ดูตารางนี้: Sorcerer level Highest spell level possible 1 1 2 1 3 …

6
แปรงสีฟันเดินทาง
บทนำ ความท้าทายในวันนี้เป็นเรื่องของฟัน โดยเฉพาะระยะเวลาในการแปรงจากฟันซี่หนึ่งไปยังฟันอื่น ความท้าทายของคุณคือการกำหนดตำแหน่งของฟันสองซี่ให้ได้ระยะเวลาที่สั้นที่สุดในการแปรงจากครั้งแรกไปยังวินาที ท้าทาย สำหรับความท้าทายนี้เราจะใช้เลย์เอาต์ของปากมนุษย์ที่เป็นผู้ใหญ่โดยเฉลี่ย: แผนภาพนี้แสดงให้เห็นว่าใช้กันอย่างแพร่หลายระบบเลข ISO ระบบแบ่งปากออกเป็นสี่ส่วนและกำหนดแต่ละหมายเลข: ด้านบนขวา (1), ซ้ายบน (2), ซ้ายล่าง (3) และล่างขวา (4) จากนั้นจึงนับจำนวนฟันของแต่ละส่วนจากกลางปากตั้งแต่ 1-8 ดังนั้นฟันซี่ที่สี่จากจุดศูนย์กลางทางด้านขวาบน (ส่วนที่ 1) คือหมายเลขฟัน 14 สมมติว่าการแปรงฟันหนึ่งครั้งใช้เวลา 1 หน่วย การย้ายจากฟันซี่หนึ่งไปยังฟันข้างหนึ่งจะใช้เวลา 0 หน่วย นอกจากนี้คุณยังสามารถข้ามจากฟันไปยังฟันโดยตรงเหนือหรือใต้ฟันซึ่งใช้เวลา 1 หน่วย ดังนั้นคุณใช้แปรงจากฟัน 14 ถึงฟัน 31 นานเท่าไหร่? เมื่อดูจากแผนภาพด้านบนคุณจะเห็นว่าใช้เวลา 7 หน่วย นี่คือวิธีที่คำนวณ: Action : Unit of time Brushing tooth 14 …
10 code-golf 

7
เพื่อนบ้านของใครเป็นศัตรู
บทนำ สำหรับวัตถุประสงค์ของการท้าทายนี้เราจะกำหนดเพื่อนบ้านขององค์ประกอบในตารางเมทริกซ์ (เช่น ) เป็นรายการทั้งหมดของ ที่อยู่ติดกันในแนวทแยงมุมแนวนอนหรือแนวตั้งเป็น (เช่นพวกเขา"ล้อมรอบ"โดยไม่ต้องล้อมรอบ)A E = A i , j A EEEEAAAE=Ai,jE=Ai,jE=A_{i,j}AAAEEE EEE สำหรับ pedants คำนิยามอย่างเป็นทางการของเพื่อนบ้านของสำหรับ matixคือ (ดัชนี 0): โดยที่ n×n N ฉัน,Ai,jAi,jA_{i,\:j}n×nn×nn\times nAAAE ฉัน,Ni,j={Aa,b∣ ( a , b )∈Ei,j∩([0,n)∩Z)2}Nผม,J={Aa,ข|(a,ข)∈Eผม,J∩([0,n)∩Z)2}N_{i,\:j}=\{A_{a,\:b}\mid(a,b)\in E_{i,\:j}\:\cap\:([0,\:n)\:\cap\:\Bbb{Z})^2\}Eผม,J= { i - 1,ผม,i+1}×{j−1,j,j+1} \ {i,j}Ei,j={i−1,i,i+1}×{j−1,j,J+1} \ {ผม,J}E_{i,\:j}=\{i-1,\:i,\:i+1\}\times \{j-1,\:j,\:j+1\} \text{ \\ } \{i,\:j\} สมมติว่าองค์ประกอบที่ indexอาศัยอยู่ในความเป็นศัตรูถ้ามันเป็น coprime …

2
แก้ไขปัญหาการหยุดชะงักสำหรับ Modilar SNISP
ในจิตวิญญาณของการแก้ปัญหาลังเลสำหรับ Befingeให้มีกำหนดภาษาอื่นที่เรียกว่า 2D Modilar SNISP Modilar SNISP มีหกคำแนะนำต่อไปนี้: \ ชี้นำตัวชี้คำสั่งดังนี้: หากเข้าหาจากด้านบนไปทางขวา; ถ้าเดินจากทางขวาขึ้นไป; หากเข้าหาจากด้านล่างไปซ้าย; หากเข้าหาจากด้านซ้ายให้ลงไป / ชี้นำตัวชี้คำสั่งดังนี้: ถ้าเข้าหาจากด้านบนไปซ้าย; หากเข้าหาจากด้านซ้ายขึ้นไป; หากเข้าหาจากด้านล่างไปทางขวา; หากเข้าหาจากด้านขวาให้ลงไป ! ข้ามคำแนะนำถัดไป @ ผลักตำแหน่ง IP และทิศทางไปยังสแตกการโทร #ดึงตำแหน่ง IP และทิศทางจาก call stack และเรียกคืนจากนั้นข้ามคำสั่งถัดไป หาก call stack ว่างเปล่าการดำเนินการจะหยุดลง . ไม่ทำอะไรเลย ตัวชี้คำสั่งเริ่มต้นที่มุมซ้ายบนไปทางขวา หากเคยออกจากสนามแข่งขันการประหารชีวิตจะหยุดลง Modilar SNISP ไม่สามารถมีประสิทธิภาพมากกว่าPDAได้เพราะแหล่งเดียวของที่เก็บข้อมูลที่ไม่ได้ จำกัด คือสแต็ก (call call) ที่มีตัวอักษรที่ จำกัด (คู่ของ …

5
บอกขั้นตอนทางจันทรคติ!
ท้าทาย รับภาพดวงจันทร์เป็นสัญญาณเข้าให้ส่งออกเฟสของดวงจันทร์ ขั้นตอนของดวงจันทร์ โปรแกรมของคุณจะได้รับหนึ่งในภาพเหล่านี้ในรูปแบบ png และคุณต้องส่งออกเฟสตามที่กำหนด: new moon hexdump waxing crescent hexdump first quarter hexdump waxing gibbous hexdump full moon hexdump waning gibbous hexdump third quarter hexdump waning crescent hexdump อินพุต อินพุตจะเป็นเส้นทางไปยังไฟล์ 240 px คูณ 240 px png และจะเป็นหนึ่งในภาพด้านบน ไบต์รูปภาพรับประกันว่าจะเหมือนกัน การชนะ รหัสที่สั้นที่สุดชนะ

6
ค้นหาผลรวมของระยะทางที่ใกล้ที่สุด
สำหรับงานนี้รหัสของคุณควรใช้อาร์เรย์ที่มีการเรียงสองจำนวนเต็ม X และ Y เป็นอินพุต มันควรคำนวณผลรวมของระยะทางที่แน่นอนระหว่างแต่ละจำนวนเต็มใน X และจำนวนที่ใกล้เคียงที่สุดใน Y ตัวอย่าง: X = (1 5,9) Y = (3,4,7) ระยะทางคือ 2 + 1 + 2 X = (1,2,3) Y = (0,8) ระยะทางคือ 1 + 2 + 3 รหัสของคุณสามารถป้อนข้อมูลในวิธีที่สะดวก ข้อ จำกัด หลักคือรหัสของคุณจะต้องทำงานในเวลาเชิงเส้นในผลรวมของความยาวของสองอาร์เรย์ . (คุณสามารถสันนิษฐานได้ว่าการเพิ่มจำนวนเต็มสองจำนวนต้องใช้เวลาคงที่)

3
แสดงผล ASCII“ เครื่องหมาย”
ถ้าคุณโยนไข่ ASCII ในทิศทางที่กำหนดคุณท้ายด้วยเครื่องหมาย ASCII ขนาด n มัน "เริ่มต้น" ด้วยหนึ่งo(ไข่แดง) และดำเนินการต่อในทิศทางที่กำหนดด้วย "บรรทัด" ซึ่งประกอบด้วย 2 ถึงn * 's *'s ถูกแยกออกจาก 'พื้นที่' หนึ่งและoและทั้งหมดที่ 'สาย' ของ*' s จะถูกคั่นด้วย 'เส้น' ของ 'พื้นที่' ทิศทางของแท่งอาจเป็นหนึ่งในแปดทิศทางจากoตัวอย่างเช่น: 1 2 3 4 o 5 6 7 8 นี่คือตัวอย่างของเครื่องหมาย ASCII ขนาด 4 ทิศทาง5, 2และ3ตามลำดับ ด้านซ้ายเป็นเครื่องหมาย ASCII จริงและด้านขวาเป็นเครื่องหมายเดียวกัน แต่มี "เส้น" ของ "พื้นที่" …

5
เขียนโปรแกรม Brainfuck สองโปรแกรม
ให้ตัวอย่างโค้ด brainfuck 2 อันAและBเอาท์พุทโค้ด brainfuck บางอย่างCที่มีพฤติกรรมเช่นเดียวBกับการรันด้วยอินพุตของAผลลัพธ์ โปรดทราบว่าCการทำงานต้องให้ป้อนข้อมูลใด ๆ Aที่ตรงกับสมมติฐานดังต่อไปนี้ราวกับว่ามันถูกมอบให้กับ คุณสามารถสันนิษฐานได้ว่า: อินพุต จำกัด ทั้ง A และ B หยุดทำงาน EOF มีค่า 0 หรือ -1 อย่างสม่ำเสมอ อนุญาตหรือทิ้งเซลล์อย่างสม่ำเสมอ เทปที่ไม่มีขอบเขต (ไม่เช่นนั้นอาจเป็นไปไม่ได้) การตัดอย่างต่อเนื่อง 8 บิตหรือจำนวนเต็มไม่ จำกัด ไม่มีสตรีม (อินพุตหรือเอาต์พุตสำหรับ A หรือ B) มีไบต์เป็นตัวแทน EOF รหัส A และ B สามารถมีอักขระที่อาจปรากฏใน C ของคุณและ +-[]<>,. เช่น (EOF = 0) A …

3
แปลงข้อความเป็นปุ่มกด
ฉันเป็นหุ่นยนต์ ฉันซื้อแป้นพิมพ์นี้เนื่องจากรูปแบบสี่เหลี่ยมที่เรียบง่าย: ~` !1 @2 #3 $4 %5 ^6 &7 *8 (9 )0 _- += tab Qq Ww Ee Rr Tt Yy Uu Ii Oo Pp {[ }] \| Aa Ss Dd Ff Gg Hh Jj Kk Ll :; "' [-enter-] Zz Xx Cc Vv Bb Nn Mm <, >. …

1
ตัวตรวจสอบตัวตรวจสอบ
เป้าหมายของความท้าทายนี้คือการพิจารณาว่าการย้ายนั้นเป็นตัวตรวจสอบภาษาอังกฤษตามกฎหมายหรือไม่ ความท้าทายนี้จะใช้กระดาน 8x8 ชิ้นส่วนที่เคลื่อนไหวควรได้รับการปฏิบัติเหมือนเป็นชาย (ไม่ใช่กษัตริย์) ที่สามารถเคลื่อนที่ไปข้างหน้าในแนวทแยงมุมได้ กระดานจะมีชิ้นส่วนสีดำ 0 ชิ้นขึ้นไปและชิ้นส่วนสีขาว 1 ชิ้นขึ้นไป ชิ้นส่วนสีขาวหนึ่งชิ้นกำลังเคลื่อนที่ ชิ้นส่วนสีขาวสามารถ "กระโดด" เหนือแผ่นดำหนึ่งเส้นทแยงมุมตรงหน้าถ้าสี่เหลี่ยมด้านหลังว่างเปล่า เป็นไปได้ที่จะกระโดดต่อจากตำแหน่งนั้นหากมีชิ้นส่วนสีดำอีกอันหนึ่งอยู่ในทิศทางใดก็ได้ในแนวทแยงมุมด้านหน้า การจับเป็นสิ่งจำเป็นดังนั้นจึงผิดกฎหมายที่จะไม่กระโดดที่มี อย่างไรก็ตามไม่จำเป็นต้องใช้พา ธ ที่เพิ่มจำนวนการกระโดดได้สูงสุด โดยทั่วไปหมายความว่าหากคุณกระโดดและมีการกระโดดที่เป็นไปได้อีกครั้งจากตำแหน่งสิ้นสุดการเคลื่อนไหวนั้นผิดกฎหมาย ตำแหน่งชิ้นใช้รูปแบบการกำหนดหมายเลขต่อไปนี้: กฎระเบียบ ปัจจัยการผลิต: รายการหมายเลขที่แสดงถึงชิ้นส่วนสีดำ รายการหมายเลขที่แสดงถึงชิ้นส่วนสีขาว ตำแหน่งเริ่มต้นสำหรับชิ้นส่วนสีขาว ตำแหน่งสิ้นสุดสำหรับชิ้นส่วนสีขาว เอาท์พุท: ค่าความจริงหากการย้ายถูกต้องมิฉะนั้นจะเป็นค่าเท็จ คุณสามารถถือว่าชิ้นส่วนสีขาวจะครองตำแหน่งเริ่มต้นเสมอ หากสะดวกคุณสามารถสันนิษฐานได้ว่าชิ้นส่วนสีขาวชิ้นแรกในรายการชิ้นส่วนสีขาวจะมีตำแหน่งเริ่มต้นแทนที่จะยอมรับอินพุต 3 กฎกอล์ฟมาตรฐานรหัส ไบต์ที่น้อยที่สุดจะเป็นผู้ชนะ กรณีทดสอบ เพื่อแสดงให้เห็นว่า O คือตำแหน่งเริ่มต้น X คือตำแหน่งสิ้นสุด B คือชิ้นส่วนสีดำและ W เป็นชิ้นส่วนสีขาว Black pieces: [] White pieces: …

5
ผลรวม จำกัด แบบวงกลม
ท้าทาย ลองจินตนาการN-tuple ของจำนวนเต็มระหว่าง 0 และรวมและขอเรียกว่าMF มีความเป็น(M + 1) ** Nไปได้Fทั้งหมด จำนวนดังกล่าวFตอบสนองความไม่เท่าเทียมกันต่อไปนี้ทั้งหมด (ดัชนีเป็นฐานเดียว) F[n] + F[n+1] <= M สำหรับ 1 <= n < N F[N] + F[1] <= M เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้เวลาสองจำนวนเต็มบวก NและMและผลคำตอบในรูปแบบที่สะดวกใด ๆ กรณีทดสอบ (N,M) => Answer (1,1) => 1 (2,1) => 3 (3,1) => 4 (4,1) => 7 (1,2) => 2 …

26
ฟังก์ชั่นที่จะใช้สามจำนวนเต็มและส่งกลับรายการจำนวนเต็มและตัวอักษรตัวอักษร
ท้าทาย เราใช้เวลาสามจำนวนเต็มบวกa, bและcเป็น input ใช้จำนวนเต็มเหล่านี้เป็นครั้งแรกสร้างลำดับในช่วงที่[0, c](รวมทั้งสองด้าน) bในขั้นตอนของ ตัวอย่างเช่นสำหรับลำดับจะเป็นa=4, b=2, c=100[0,2,4,...,96,98,100] สำหรับทุกหมายเลขในลำดับนี้ซึ่งหารด้วยaให้แทนที่ด้วยตัวอักษรถัดไปในตัวอักษรตัวพิมพ์เล็กเริ่มต้นด้วยตัวอักษร 'a' และล้อมรอบกลับเป็น 'a' หลังจากคุณถึง 'z' ตัวอย่าง: อินพุต: a=4, b=2, c=100 เอาต์พุต:a2b6c10d14e18f22g26h30i34j38k42l46m50n54o58p62q66r70s74t78u82v86w90x94y98z กฏท้าทาย: คุณสามารถสมมติว่าa, bและเป็นจำนวนเต็มบวกเท่านั้นที่cb ≤ a ≤ c คุณสามารถสันนิษฐานได้ว่าaมีหลายbตัว คุณสามารถสันนิษฐานได้ว่าคือหารด้วยcb เอาต์พุตที่ต้องการคือสตริงที่ต่อกันเดียวตามด้านบน แต่รายการ / อาร์เรย์นั้นเป็นที่ยอมรับ กรณีทดสอบ: Input: a=4, b=2, c=100 Output: a2b6c10d14e18f22g26h30i34j38k42l46m50n54o58p62q66r70s74t78u82v86w90x94y98z Input: a=9, b=3, c=174 Output: a36b1215c2124d3033e3942f4851g5760h6669i7578j8487k9396l102105m111114n120123o129132p138141q147150r156159s165168t174 Input: a=10, …

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