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

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

30
สร้างสามเหลี่ยมปาสคาล
สามเหลี่ยมของปาสคาลนั้นสร้างขึ้นโดยเริ่มจาก 1 ในแถวแรก ในแถวถัดไปจำนวนจะถูกกำหนดโดยผลรวมของตัวเลขสองตัวที่อยู่เหนือมันไปทางซ้ายและขวา เพื่อสาธิตนี่คือ 5 แถวแรกของสามเหลี่ยมปาสคาล: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 ความท้าทาย ได้รับอินพุตn (ให้ไว้ แต่สะดวกที่สุดในภาษาที่คุณเลือก) สร้างnแถวแรกของสามเหลี่ยมปาสคาล คุณอาจคิดว่าnเป็นจำนวนเต็มรวมระหว่าง 1 ถึง 25 จะต้องมีตัวแบ่งบรรทัดระหว่างแต่ละแถวและช่องว่างระหว่างแต่ละหมายเลข แต่นอกเหนือจากนั้นคุณสามารถจัดรูปแบบตามที่คุณต้องการ นี่คือรหัสกอล์ฟดังนั้นทางออกที่สั้นที่สุดชนะ ตัวอย่าง I / O > 1 1 > 9 1 1 1 1 2 1 1 …

15
ปลดล็อคล็อคของคุณ
คุณล็อคจักรยานของคุณด้วยรหัสล็อค 3 หลัก ตอนนี้คุณต้องการไปนั่งและต้องปลดล็อคด้วยความช่วยเหลือของโปรแกรมต่อไปนี้ อินพุต พารามิเตอร์ที่ 1 การรวมกันของล็อคของคุณอยู่ในสถานะล็อค มันจะต้องแตกต่างจากพารามิเตอร์ที่ 2 (= การรวมกันของสถานะปลดล็อค ) (หรืออาจถูกขโมยจักรยานของคุณ!) ช่วง 000..999 ต้องไม่ละเว้นศูนย์นำหน้า พารามิเตอร์ที่ 2 การรวมกันของล็อคของคุณอยู่ในสถานะปลดล็อค ค่านี้เป็นเป้าหมายของคุณ ช่วง 000..999 ต้องไม่ละเว้นศูนย์นำหน้า เอาท์พุต รายการของแต่ละรัฐของการรวมกันล็อคหลังจากแต่ละ "การหมุน" รวมถึงสถานะเริ่มต้น (ซึ่งมักจะเป็นพารามิเตอร์ที่ 1) และขั้นตอนสุดท้าย (ซึ่งมักจะเป็นพารามิเตอร์ที่ 2) ขั้นตอนวิธี คุณเริ่ม "หมุน" หลักแรกทีละหนึ่งจนกว่าคุณจะถึงตัวเลขที่ถูกต้องในสถานะปลดล็อค แต่เพราะคุณอยู่ในความรู้เกี่ยวกับการปลดล็อครหัสทั้งคุณหมุนหลักในทิศทางที่คุณต้องมีจำนวนน้อยที่สุดของการหมุนไปถึงหลักในการปลดล็อครัฐ ในกรณีที่เสมอกันคุณสามารถเลือกทิศทางใดก็ได้ที่คุณต้องการ เมื่อคุณถึงหลักแรกที่ถูกต้องคุณจะเริ่มขั้นตอนเดียวกันกับที่ 2 และจากนั้นด้วย 3 ลำดับของตัวเลขคือการเข้าใจว่าเป็นวงกลม: ... 9 0 1 2 3 …

15
สร้าง Brainfuck สำหรับหมายเลข 1-255
เขียนโปรแกรมที่สำหรับตัวเลข 1 ถึง 255 พิมพ์รหัส BF ที่จะสร้างตัวเลขที่กำหนดในบางไบต์ของอาร์เรย์พร้อมกับขึ้นบรรทัดใหม่ ตัวอย่างเช่นสี่บรรทัดแรกของเอาต์พุตอาจเป็นไปได้ว่า: + ++ +++ ++++ ผู้ชนะจะมีขนาดเล็กที่สุด: source code + output(เป็นไบต์) คำชี้แจงและการแก้ไข : โปรแกรม BF ใช้เซลล์ห่อหุ้ม โปรแกรม BF เอาต์พุตต้องสิ้นสุดด้วยเซลล์ที่ไม่ใช่ศูนย์เท่านั้นที่เป็นเซลล์ที่มีตัวเลข โปรแกรมจะต้องส่งออกตามลำดับ การแสดงผลโปรแกรมสำหรับ 0 เป็นทางเลือก ตัวชี้ข้อมูลเชิงลบไม่ได้รับอนุญาต <ที่ตัวชี้แรกจะไม่ทำอะไรเลย (แสดงความคิดเห็นถ้ามันจะเหมาะสมกว่าที่จะมีการโยน)

11
มีเสียงก้องในชุดของฉัน ... สะท้อนในชุดของฉัน ... ชุดของฉัน
ช่วยด้วย! ฉันดูเหมือนจะมีเสียงสะท้อนที่น่ารำคาญในบางอาร์เรย์ของฉันและฉันต้องการกำจัดมัน เมื่อสิ่งนี้เกิดขึ้นอาร์เรย์ดั้งเดิมจะทำซ้ำตัวเองที่ไหนสักแห่งที่อยู่ตรงกลางทำให้เกิดการเพิ่มค่าซึ่งกันและกัน ตัวอย่างเช่นอาร์เรย์[ 422, 375, 527, 375, 859, 451, 754, 451 ]มีเสียงสะท้อนของตัวเองเช่น: [ 422, 375, 527, 375, 859, 451, 754, 451 ] <-- array with echo (input) [ 422, 375, 105, 0, 754, 451 ] <-- original array (output) [ 422, 375, 105, 0, 754, 451 ] <-- echo …

30
ซ้ำแล้วซ้ำอีก! factorials!
เพื่อไม่ให้สับสนกับค้นหาปัจจัย! บทนำ แฟคทอเรียลของจำนวนเต็มnสามารถคำนวณได้โดย n ! = n × ( n - 1 ) × ( n - 2 ) × ( . . . ) × 2 × 1n!=n×(n−1)×(n−2)×(...)×2×1n!=n\times(n-1)\times(n-2)\times(...)\times2\times1 มันค่อนข้างง่ายและไม่มีอะไรใหม่ อย่างไรก็ตามแฟกทอเรียลสามารถขยายเป็นแฟคทอเรียลสองเท่าเช่น สำหรับเลขคู่และ สำหรับเลขคี่ แต่เราไม่ จำกัด เพียงแฟคทอเรียลสองเท่า ตัวอย่างเช่น หรือ หรือ ขึ้นอยู่กับ ค่าเริ่มต้นn ! ! = n × ( n - 2 …

18
นับพัลส์หมุนหน้าปัดในหมายเลขโทรศัพท์ (รวมถึงตัวอักษร)
ในวันปู่ย่าตายายของคุณการหมุนหมายเลขโทรศัพท์ทำได้ด้วยการหมุนหน้าปัดเช่นนี้: หากต้องการหมุนแต่ละหลักให้วางนิ้วของคุณในช่องที่เกี่ยวข้องดึงไปที่จุดหยุดนิ้วแล้วปล่อย กลไกจะทำให้หมุนหมุนกลับไปยังตำแหน่งพักและโทรศัพท์จะตัดการเชื่อมต่อและเชื่อมต่อวงจรตามจำนวนครั้งที่กำหนดทำให้มีเสียงคลิก โทรหลักNต้องไม่มี “พัลส์” เช่นยกเว้น N = 0 ซึ่งเป็นพัลส์ที่สิบ โทรศัพท์แบบหมุนมีคุณสมบัติที่ตัวเลขขนาดใหญ่ (8, 9, 0) ใช้เวลาในการโทรนานกว่าตัวเลขขนาดเล็ก (1, 2, 3) นี่คือการพิจารณาที่สำคัญในการวาดแผนที่รหัสพื้นที่ในช่วงต้นและทำไมมหานครนิวยอร์กที่มีประชากรหนาแน่น (และสายโทรศัพท์) มีความหนาแน่น212 (เพียง 5 พัลส์) ในขณะที่907 (26 พัลส์) ไปที่อะแลสกา แน่นอนว่าทั้งหมดนี้ไม่เกี่ยวข้องเมื่อการโทรออกด้วยระบบสัมผัสกลายเป็นที่นิยม ความท้าทาย เขียนเป็นสองสามไบต์เป็นไปได้โปรแกรมหรือฟังก์ชั่นที่ใช้เป็นสายอักขระ (หรือลำดับของตัวอักษร) ที่มีหมายเลขโทรศัพท์และส่งออกจำนวนพัลส์หมุนหน้าปัด สิ่งเหล่านี้จะถูกนับดังนี้: ตัวเลข ตัวเลข 1-9 จะนับเป็นจำนวนพัลส์นั้น หลัก 0 นับเป็น 10 พัลส์ จดหมาย โปรดทราบว่าตัวเลข 2-9 บนหน้าปัดมีตัวอักษรของตัวอักษรละตินที่เกี่ยวข้อง เหล่านี้เดิมทีตั้งใจสำหรับการแลกเปลี่ยนชื่อแต่หลังใหม่ที่เหมาะสมสำหรับphonewordsและสำหรับข้อความระบบการป้อนข้อความ คุณต้องสนับสนุนการมีตัวอักษรในหมายเลขโทรศัพท์ของคุณโดยใช้E.161 การกำหนดตัวอักษรเป็นตัวเลข: …
34 code-golf  number 

30
P Pr Pre Pref คำนำหน้าคำนำหน้าคำนำหน้าคำนำหน้า
ให้รายการ จำกัด บางรายการกลับรายการของคำนำหน้าทั้งหมดรวมถึงรายการที่ว่างในลำดับความยาวของพวกเขา (โดยทั่วไปจะใช้ฟังก์ชัน Haskell inits) รายละเอียด รายการอินพุตมีตัวเลข (หรือประเภทอื่นหากสะดวกกว่า) การส่งออกจะต้องเป็นรายชื่อของรายการ การส่งสามารถ แต่ไม่จำเป็นต้องเป็นฟังก์ชันสามารถใช้I / O เริ่มต้นใด ๆได้ มีเป็นคำตอบ CWสำหรับทุกการแก้ปัญหาจิ๊บจ๊อย ตัวอย่าง [] -> [[]] [42] -> [[],[42]] [1,2,3,4] -> [[], [1], [1,2], [1,2,3], [1,2,3,4]] [4,3,2,1] -> [[], [4], [4,3], [4,3,2], [4,3,2,1]]

15
จุดขัดแตะสามเหลี่ยมใกล้กับจุดกำเนิด
พื้นหลัง ตารางสามเหลี่ยมเป็นตารางที่เกิดขึ้นจากการปูกระเบื้องเครื่องบินเป็นประจำกับรูปสามเหลี่ยมด้านเท่าของความยาวด้าน 1. ภาพด้านล่างเป็นตัวอย่างของตารางสามเหลี่ยม จุดตาข่ายสามเหลี่ยมเป็นจุดสุดยอดของรูปสามเหลี่ยมรูปสามเหลี่ยมตาราง กำเนิดเป็นจุดคงที่บนเครื่องบินซึ่งเป็นหนึ่งในจุดตาข่ายสามเหลี่ยม ท้าทาย ได้รับจำนวนเต็มไม่เป็นลบn, nค้นหาหมายเลขของจุดขัดแตะรูปสามเหลี่ยมที่มีระยะทางยุคลิดจากจุดกำเนิดคือน้อยกว่าหรือเท่ากับ ตัวอย่าง รูปต่อไปนี้เป็นตัวอย่างสำหรับn = 7(แสดงเฉพาะพื้นที่ 60 องศาเพื่อความสะดวกโดยมีจุด A เป็นจุดกำเนิด): กรณีทดสอบ Input | Output --------------- 0 | 1 1 | 7 2 | 19 3 | 37 4 | 61 5 | 91 6 | 127 7 | 187 8 | 241 9 …

30
ขึ้นและลงขึ้นและลง
ท้าทาย: รับอินพุตจำนวนเต็มบวกnสร้างเวกเตอร์ที่ตามหลังรูปแบบนี้: 0 1 0 -1 -2 -1 0 1 2 3 2 1 0 -1 -2 -3 -4 -3 -2 -1 ... ±(n-1) ±n หรืออธิบายด้วยคำว่า: เวกเตอร์เริ่มต้นที่0และทำให้เพิ่มขึ้น1จนกว่าจะถึงจำนวนเต็มบวกคี่ที่เล็กที่สุดที่ไม่ได้เป็นส่วนหนึ่งของลำดับแล้วมันจะทำให้ลดลงจนกว่าจะถึงที่เล็กที่สุด (ในขนาด) แม้จำนวนลบ เป็นส่วนหนึ่งของลำดับ มันจะดำเนินต่อไปในลักษณะนี้จนกว่าnจะถึง ลำดับจะสิ้นสุดในเชิงบวกnหากnเป็นเลขคี่และลบnหากnเป็นเลขคู่ รูปแบบผลลัพธ์มีความยืดหยุ่น กรณีทดสอบ: n = 1 0 1 ----------- n = 2 0 1 0 -1 -2 ----------- n …

30
โปรแกรม Autogram
ประโยคนี้มีพนักงานสองคน, สองคน, สองคน, ยี่สิบแปดคน, ห้าคน, ห้าคน, สามคน, แปดคน, สิบเอ็ดคน, สามคน, สามคน, สองคน, คนสิบสามคน, เก้าคน, สองคน, ห้าคนยี่สิบห้าคน s, ยี่สิบสาม t, หก v, สิบ w, สอง x, ห้า y, และหนึ่ง z ประโยคดังกล่าวเรียกว่าautograms งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่มีคุณสมบัติคล้ายกัน: ใช้เป็นอินพุตไบต์และส่งออกจำนวนเต็มแทนจำนวนครั้งที่ไบต์ปรากฏขึ้นในซอร์สโค้ดของโปรแกรม มันควรเอาท์พุท 0 ถ้าอินพุทไม่ปรากฏในแหล่งที่มา โปรแกรมของคุณจะต้องไม่อ่านซอร์สโค้ดของตัวเองไม่ว่าโดยตรงหรือโดยอ้อม แต่ข้อมูลทั้งหมดที่จำเป็นในการส่งออกจะต้องเป็นรหัสที่ใช้งานยากสไตล์ควินิน โปรแกรมของคุณจะต้องมีความยาวอย่างน้อยหนึ่งไบต์ นี่คือรหัสกอล์ฟดังนั้นรายการที่สั้นที่สุด (เป็นไบต์) ชนะ ฉันจะไม่ยอมรับคำตอบดังนั้นอย่าลังเลที่จะแข่งขันเพื่อหาคำตอบที่สั้นที่สุดในภาษาที่คุณโปรดปราน ขอแนะนำให้คุณรวมคำอธิบายไว้ในโพสต์ของคุณ ลีดเดอร์ ด้านล่างนี้เป็นกระดานนำสำหรับคะแนนโดยรวมและต่อภาษา: แสดงตัวอย่างโค้ด var QUESTION_ID=162408,OVERRIDE_USER=21034;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function …

20
ปืนใหญ่ตัวอักษร
กระสุนปืนใหญ่ถูกยิงเพื่อให้ในช่วงแรกของการบินขึ้นไปบนตาของมันด้วยNยอดไม้ในช่วงที่สองโดยมีN-1ยอดไม้แหลมและอื่น ๆ จนกว่าจะถึงจุดสูงสุดของวิถี จากนั้นมันก็จะตกลงมา 1, 2, ฯลฯ ยอดไม้ต่อการกะพริบตาจนกว่ามันจะกระทบพื้น ในขณะเดียวกันลูกกระสุนปืนใหญ่ก็เคลื่อนที่ในแนวนอนด้วยความเร็วคงที่เท่ากับ 1 ยอดไม้ / กะพริบตา งานของคุณคือวาดวิถีด้วยตัวอักษรต่อเนื่องจากตัวอักษรภาษาอังกฤษ 'A'ถ้าคุณวิ่งออกมาจากตัวอักษรเริ่มต้นอีกครั้งจาก เขียนฟังก์ชั่นหรือโปรแกรม อินพุตเป็นจำนวนเต็มN( 1≤N≤15) เอาต์พุตสามารถเป็นเมทริกซ์อักขระในรูปแบบที่สมเหตุสมผลตัวอย่างเช่นสตริงที่คั่นด้วยบรรทัดใหม่หรือรายการสตริง ตัวอักษรอาจเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ทั้งหมด อนุญาตให้มีช่องว่างนำหน้าและต่อท้ายพิเศษ ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม รหัสสั้นจะดีกว่า in: 5 out: OP N Q M R L S K T J U I V H W G X F Y E Z D A C …

30
สร้าง Magic 8 Ball
เมื่อตอนเป็นเด็กเพื่อนของฉันมีลูกบอลวิเศษ 8 ลูกที่เราจะถามคำถามและดูว่าชะตากรรมของคำถามนั้นคืออะไร ท้าทาย ความท้าทายของคุณคือการเขียนโปรแกรม (หรือฟังก์ชั่น) ที่เมื่อรัน (หรือเรียกว่า) เอาต์พุต (หรือส่งคืน) คำตอบแบบสุ่มจากคำตอบที่เป็นไปได้ด้านล่าง (Random เป็น: each output should have a nonzero chance of occurring but they do not need to meet any other criteria) คำตอบที่เป็นไปได้จาก Magic 8-ball คือ (case-insensitive): It is certain It is decidedly so Without a doubt Yes definitely You …

11
ฉันฉีกออกเป็นกี่หน้า?
เดือนที่แล้วฉันยืมหนังสือมากมายจากห้องสมุด พวกเขาทั้งหมดเป็นหนังสือที่ดีเต็มไปด้วยอารมณ์และพล็อตเรื่องบิด น่าเสียดายที่ในบางจุดฉันโกรธ / เศร้า / ผิดหวังมาก ตอนนี้ห้องสมุดอยากรู้ว่าฉันฉีกหนังสือแต่ละเล่มออกไปกี่หน้า เป้าหมายของคุณคือการเขียนโปรแกรมซึ่งใช้การเรียงลำดับรายการที่คั่นด้วยเครื่องหมายจุลภาคเป็นอินพุตและพิมพ์จำนวนหน้าต่ำสุดและสูงสุดที่เป็นไปได้ที่ฉันสามารถฉีกออกได้ แต่ละบรรทัดแสดงถึงหนังสือแต่ละหมายเลขแสดงถึงหน้าที่หายไปจากหนังสือ อินพุตตัวอย่าง: 7,8,100,101,222,223 2,3,88,89,90,103,177 2,3,6,7,10,11 1 1,2 ตัวอย่างผลลัพธ์: 4/5 5/6 3/6 1/1 1/2 4/5หมายความว่าฉันอาจฉีกออกเป็น 4 หรือ 5 หน้าขึ้นอยู่กับว่าหมายเลขหน้าของหนังสือเริ่มต้นที่ด้านใด อาจมีการฉีกขาดหน้า 6/7 หน้า 8/9 หน้า 100/101 และหน้า 222/223 (4 หน้า) อีกวิธีหนึ่งอาจมีการฉีกขาดหน้า 7/8, หน้า 99/100, หน้า 101/102, หน้า 221/222 และหน้า 223/224 (5 หน้า) จำไว้ว่าหน้าหนังสือมีด้านหน้าและด้านหลังเสมอ …
34 code-golf 

30
Code Golf: งู ASCII สัตว์เลี้ยงของคุณเอง
ดังนั้นฉันจึงเขียนหนึ่งสายการบินซึ่งพิมพ์งูบนคอนโซล มันสนุกนิดหน่อยและฉันสงสัยว่าฉันจะย่อรหัสของฉันได้อย่างไร ... นี่คือตัวอย่างเอาต์พุต (สั้น): + + + + + + + + + + + + + + + + + + + + นี่คือรายละเอียด: ในแต่ละบรรทัดจะมีการพิมพ์อักขระที่ไม่ใช่ whitespace เดียว (แล้วแต่จำนวนใดก็ได้ที่คุณต้องการ) ลงในคอนโซลโดยเริ่มจากการเว้นระยะห่างระหว่าง 29 ถึง 31 ช่องว่างทางด้านซ้าย การวนซ้ำแต่ละครั้งจะทำการตัดสินใจแบบสุ่มระหว่างการกระทำทั้งสามนี้ จำนวนของช่องว่างภายในลดลง 1 ปริมาณของช่องว่างภายในยังคงเหมือนเดิม ปริมาณของช่องว่างภายในเพิ่มขึ้น 1 ทำสิ่งนี้ 30 ครั้งเพื่อพิมพ์งูยาว 30 เซ็กเมนต์ให้คอนโซล คำตอบที่สั้นที่สุดเป็นไบต์ชนะ

21
ตัวเลขที่ง่ายต่อการคูณ
งานของคุณคือการพิจารณาว่าตัวเลขสองตัวนั้นง่ายต่อการคูณหรือไม่ ซึ่งหมายความว่าการคูณยาว 10 ฐานของพวกเขาไม่มีการถือครอง (การจัดกลุ่มใหม่) ระหว่างค่าสถานที่โดยดูที่ขั้นตอนการคูณและขั้นตอนการบวก สิ่งนี้จะเกิดขึ้นเมื่อตัวเลขแต่ละคู่ถูกคูณให้ 9 หรือน้อยกว่าและผลรวมของแต่ละคอลัมน์คือ 9 หรือน้อยกว่า ตัวอย่างเช่น331และ1021ง่ายต่อการคูณ: 331 x 1021 ------ + 331 662 0 331 ------ 337951 และเหมือนกันคือจริง (เช่นเคย) ถ้าเราคูณในลำดับอื่น ๆ : 1021 x 331 ------ + 1021 3063 3063 ------ 337951 แต่431และ1021ไม่ใช่เรื่องง่ายที่จะคูณด้วยการดำเนินการเกิดขึ้นระหว่างคอลัมน์ที่ระบุ: 431 x 1021 ------ + 431 862 0 431 ------ 440051 …

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