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

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

2
Gerrymandering พร้อมประตูลอจิก
ฟังก์ชันส่วนใหญ่เป็นฟังก์ชั่นบูลีนซึ่งรับอินพุตบูลีนสามรายการและส่งคืนค่าที่พบบ่อยที่สุด เช่นถ้าmaj(x,y,z)เป็นฟังก์ชันส่วนใหญ่และTหมายถึงความจริงและFหมายถึงเท็จแล้ว: maj(T,T,T) = T maj(T,T,F) = T maj(T,F,F) = F maj(F,F,F) = F คำถามนี้เกี่ยวข้องกับการเขียนฟังก์ชันบูลีนเป็นองค์ประกอบของฟังก์ชันส่วนใหญ่ ตัวอย่างขององค์ประกอบ 5 Ary (x1,x2,x3,x4,x5) => maj(x1,x2,maj(x3,x4,x5))ของฟังก์ชั่นส่วนใหญ่เป็น ฟังก์ชันนี้ส่งคืนเอาต์พุตต่อไปนี้บนเวกเตอร์อินพุตตัวอย่างเหล่านี้: (T,T,F,F,F) => maj(T,T,maj(F,F,F)) = maj(T,T,F) = T (T,F,T,T,F) => maj(T,F,maj(T,T,F)) = maj(T,F,T) = T (T,F,T,F,F) => maj(T,F,maj(T,F,F)) = maj(T,F,F) = F (F,F,F,T,T) => maj(F,F,maj(F,T,T)) = maj(F,F,T) = F …

30
สี่เหลี่ยมที่สมบูรณ์แบบไร้พรมแดน
ได้รับn=m^2กลับรายการของจำนวนเต็มที่ไม่ชายแดนตารางของจำนวนเต็มจากm x m1 to n ตัวอย่าง n = 1 (m = 1) ตาราง: [1] กลับ: [] n = 4 (m = 2) ตาราง: [1,2] [3,4] กลับ: [] n = 9 (m = 3) ตาราง: [1,2,3] [4,5,6] [7,8,9] กลับ: [5] n = 16 (m = 4) ตาราง: [ 1, 2, 3, …
16 code-golf  matrix 

5
แฟ็กทอเรียล
วันนี้ในชั้นเรียนสถิติของฉันฉันพบว่าแฟคทอเรียลบางตัวสามารถทำให้ง่ายขึ้นเมื่อคูณเข้าด้วยกัน! ตัวอย่างเช่น:5! * 3! = 5! *3*2 = 5! *6 = 6! งานของคุณ: รับสตริงที่มีเฉพาะตัวเลขอารบิกและเครื่องหมายอัศเจรีย์ทำให้แฟคทอเรียลของฉันเป็นสตริงที่สั้นที่สุดเท่าที่เป็นไปได้ในจำนวนไบต์น้อยที่สุดสำหรับภาษาของคุณสไตล์การเขียนโค้ด อินพุต สตริงที่มีเฉพาะตัวเลขอารบิกและเครื่องหมายอัศเจรีย์ แฟกทอเรียลสำหรับอินพุตจะไม่ใหญ่กว่า 200! แฟคทอเรียลจะไม่มีแฟคทอเรียลมากกว่าหนึ่งรายการต่อหมายเลข อินพุตอาจถูกใช้เป็นรายการของจำนวนเต็ม เอาท์พุต สตริงที่สั้นลงซึ่งอาจมีค่าเทียบเท่ากับอินพุต คำสั่งซื้อนั้นไม่สำคัญ สัญลักษณ์แฟคทอเรียลเป็นสิ่งที่จำเป็น แต่คุณไม่จำเป็นต้องใช้สัญลักษณ์แฟคทอเรียลมากกว่าหนึ่งรายการต่อหมายเลข กรณีทดสอบ In: 3!2!2! Out: 4! In 2!3!2!0! Out: 4! In: 7!2!2!7!2!2!2!2! Out: 8!8! In: 23!3!2!2! Out: 24! Also: 4!! In: 23!3!2!2!2! Out: 24!2! In: 127!2!2!2!2!2!2!2! …

4
Tuple เพิ่มเติมใน pointfree
เป็นวิธีที่สั้นที่สุดที่เราสามารถแสดงฟังก์ชั่นอะไร f(a,b)(c,d)=(a+c,b+d) ในสัญกรณ์ฟรี pointfree.ioให้เรา uncurry (flip flip snd . (ap .) . flip flip fst . ((.) .) . (. (+)) . flip . (((.) . (,)) .) . (+)) ซึ่งสามารถทำงานให้สั้นลงได้ uncurry$(`flip`snd).((<*>).).(`flip`fst).((.).).(.(+)).flip.(((.).(,)).).(+) สำหรับ 76 ไบต์ แต่ตอนนี้ยังดูเหมือนว่ามันยาวและซับซ้อนสำหรับการดังกล่าวเป็นงานที่ง่าย มีวิธีใดบ้างที่เราสามารถแสดงการเพิ่มขึ้นของจำนวนคู่ในฐานะฟังก์ชั่นไร้จุดที่สั้นกว่าได้หรือไม่? เพื่อให้ชัดเจนโดยสิ่งที่ฉันหมายถึงโดยไม่มีจุดการประกาศจุดของฟังก์ชั่นที่เกี่ยวข้องกับการมีฟังก์ชั่นที่มีอยู่และผู้ประกอบการและใช้พวกเขากับแต่ละอื่น ๆ ในลักษณะที่ฟังก์ชั่นที่ต้องการจะถูกสร้างขึ้น backticks วงเล็บและคุณค่าที่แท้จริง ( [], 0, [1..3]ฯลฯ ) จะได้รับอนุญาต แต่คำหลักเช่นwhereและletจะไม่ หมายความว่า: …

7
คิวการสลายตัวของเรา
ในการท้าทายนี้ฉันจะขอให้คุณหาการสลายตัว QR ของเมทริกซ์จตุรัส QR สลายของเมทริกซ์สองเมทริกซ์QและRดังกล่าวว่าA = QR โดยเฉพาะอย่างยิ่งเรากำลังมองหาคิวที่จะเป็นเมทริกซ์มุมฉาก (นั่นคือQ T Q = QQ T = ฉันที่ฉันเป็นตัวตนแบบทวีคูณและTคือทรานส) และRเป็นเมทริกซ์รูปสามเหลี่ยมบน (ทุกค่าต่ำกว่าเส้นทแยงมุมต้อง เป็นศูนย์) คุณจะเขียนโค้ดที่ใช้เมทริกซ์จตุรัสด้วยวิธีการที่สมเหตุสมผลและแสดงผลการย่อยสลาย QR ด้วยวิธีใด ๆ เมทริกซ์จำนวนมากมีการย่อยสลาย QR จำนวนมาก แต่คุณต้องการเพียงหนึ่งเอาต์พุต องค์ประกอบของเมทริกซ์ผลลัพธ์ของคุณควรอยู่ในตำแหน่งทศนิยมสองตำแหน่งของคำตอบจริงสำหรับทุกรายการในเมทริกซ์ นี่คือการแข่งขันกอล์ฟรหัสดังนั้นคำตอบจะได้คะแนนเป็นไบต์ด้วยจำนวนไบต์น้อยกว่าซึ่งเป็นคะแนนที่ดีกว่า กรณีทดสอบ เหล่านี้เป็นเพียงผลลัพธ์ที่เป็นไปได้ผลลัพธ์ของคุณไม่จำเป็นต้องตรงกับสิ่งเหล่านี้ทั้งหมดตราบเท่าที่พวกเขาถูกต้อง 0 0 0 1 0 0 0 0 0 0 0 0 -> 0 1 0 0 0 0 …

8
เป็นคนชั่วร้ายที่สุด
บทนำ นี่คือการติดตามความท้าทายนี้ที่คุณรับบทเป็นฝาแฝดผู้ชั่วร้าย การเป็นคนชั่วคุณไม่ต้องการเพิ่มส่วนแบ่งให้มากที่สุด แต่จะไม่ยุติธรรมเท่าที่จะเป็นไปได้และคุณจะไม่ทำให้ชัดเจนเกินไปนั่นคือสาเหตุที่คุณคิดแผนการดังต่อไปนี้: คุณจะบอกคนอื่น ๆ ว่าคุณต้องการที่จะยุติธรรมเท่าที่จะทำได้เหมือนพี่น้องของคุณและคุณจะต้องแบ่งจำนวนเต็มออกเป็นความยาวเท่ากัน ดังนั้นสำหรับแต่ละจำนวนเต็มคุณจะได้จำนวนคนที่เหมาะสมเช่นความแตกต่างระหว่างชิ้นใหญ่ที่สุดกับชิ้นเล็กที่สุดคือสูงสุด ตัวอย่างเช่นถ้าคุณได้รับจำนวนเต็ม6567คุณสามารถปล่อยให้มันเป็นแยกออกเป็นสองชิ้นหรือสี่65,67 6,5,6,7สิ่งนี้ให้ความแตกต่างสูงสุดต่อไปนี้: 6567 -> max() = 0 65,67 -> max(|65-67|) = 2 6,5,6,7 -> max(|6-5|,|6-5|,|6-6|,|6-7|,|5-6|,|5-7|,|6-7|) = 2 เนื่องจากคุณเพียงต้องการที่จะเป็นความชั่วร้ายที่คุณไม่ชอบ67มากกว่า7และทำให้คุณจะได้ผลลัพธ์อย่างใดอย่างหนึ่งหรือ24 อื่น (กรณีพิเศษน้อยกว่า); รับจำนวนเต็ม121131คุณสามารถแยกเช่นนี้ 121131 -> max() = 0 121,131 -> max(|121-131|) = 10 12,11,31 -> max(|12-11|,|12-31|,|11-31|) = 20 1,2,1,1,3,1 -> max(…) = 2 เวลานี้มีทางออกเดียว …

1
Hopping Bunny ของ Google
เมื่อวันที่ 4 ธันวาคม 2017 ของ Google Doodle เป็นเกมการเขียนโปรแกรมแบบกราฟิกที่มีกระต่าย ระดับต่อมาได้อย่างไม่น่ารำคาญและพวกเขาดูเหมือนจะเป็นผู้สมัครที่ดีสำหรับอะตอมกอล์ฟที่ท้าทาย รายละเอียด เกม มีการเคลื่อนไหวสี่อย่าง: กระโดดไปข้างหน้าเลี้ยวซ้ายเลี้ยวขวาและวนรอบ แต่ละการเคลื่อนไหวเหล่านี้เป็นโทเค็นเดียวซึ่งสอดคล้องกับความจริงที่ว่าพวกเขาเป็นหนึ่งไทล์ในเกม กระต่ายสามารถเผชิญหน้ากับทิศทางทั้งสี่ทิศ (เช่นทิศเหนือทิศใต้ทิศตะวันออกทิศตะวันตก) กระต่ายสามารถกระโดดไปข้างหน้า (เลื่อนไปหนึ่งช่องในทิศทางที่หันหน้าไป) แล้วเลี้ยวซ้ายหรือขวา ลูปอาจมีจำนวนของการเคลื่อนไหวอื่น ๆ ภายในพวกเขารวมถึงลูปอื่น ๆ และจำนวนการวนซ้ำของพวกเขาคือจำนวนเต็มบวกใด ๆ กระดานเป็นชุดของตารางที่จัดชิดตารางและกระต่ายสามารถกระโดดระหว่างสี่เหลี่ยมที่อยู่ติดกัน กระต่ายไม่สามารถกระโดดเข้าไปในความว่างเปล่าได้ หมายความว่าการพยายามกระโดดออกจากกระดานไม่ได้ทำอะไรเลย (นี่เป็นเรื่องน่าประหลาดใจสำหรับบางคนและทำให้คนอื่นผิดหวัง) สี่เหลี่ยมจะถูกทำเครื่องหมายหรือไม่ทำเครื่องหมาย เมื่อกระต่ายอยู่ในรูปสี่เหลี่ยมมันจะถูกทำเครื่องหมาย ระดับเสร็จสมบูรณ์เมื่อทำเครื่องหมายสี่เหลี่ยมทั้งหมด คุณอาจคิดว่ามีวิธีแก้ปัญหาอยู่ รหัสของคุณ วัตถุประสงค์: ให้คณะกรรมการค้นหาวิธีแก้ปัญหาที่สั้นที่สุดหนึ่งรายการหรือมากกว่า การป้อนข้อมูลเป็นรายการของสแควร์ที่ตั้งคณะกรรมการ (แยกความแตกต่างสี่เหลี่ยมที่ทำเครื่องหมายและไม่ได้ทำเครื่องหมาย) และเอาท์พุทเป็นรายการของการเคลื่อนไหว รูปแบบอินพุตและเอาต์พุตไม่สำคัญเลยตราบใดที่รูปแบบที่มนุษย์สามารถอ่านและเข้าใจได้ เกณฑ์การชนะ:ผลรวมของจำนวนการเคลื่อนไหวของการแก้ปัญหาที่สั้นที่สุดที่พบภายในหนึ่งนาทีสำหรับแต่ละกระดาน หากโปรแกรมของคุณไม่พบวิธีแก้ปัญหาสำหรับบอร์ดใด ๆ คะแนนของคุณสำหรับบอร์ดนั้นคือ (5 * จำนวนสี่เหลี่ยม) โปรดอย่าแก้ไขปัญหาฮาร์ดโค้ดในลักษณะใด ๆ รหัสของคุณควรจะนำบอร์ดใด …

15
แยกรายการหมายเลข unary ที่เซ็นชื่อ
โดยทั่วไปแล้วตัวเลขที่ไม่ใช่ตัวเลขจะแสดงเฉพาะจำนวนเต็มที่ไม่ใช่ค่าลบ แต่เราสามารถขยายตัวเลขเหล่านี้เพื่อแสดงจำนวนเต็มทั้งหมดดังนี้: จำนวนเต็มบวก N ถูกแทนด้วย N 1:5 -> 11111 จำนวนเต็มลบ -N ถูกแทน0ด้วยตามด้วย N 1:-5 -> 011111 ศูนย์แสดงเป็น 0 จากนั้นเราสามารถแสดงรายการของตัวเลขเหล่านี้ได้อย่างชัดเจนหากเราใช้0เป็นตัวคั่น: 3,-2,0,1 111,011,0,1 111 0 011 0 0 0 1 11100110001 งานของคุณ: นำสตริงที่แสดงรายการของหมายเลขยูนารีที่ลงนามแล้วและแปลเป็นรายการของเลขทศนิยม รายละเอียด คุณอาจสมมติว่าการป้อนข้อมูลเป็นรายการที่สมบูรณ์ของหมายเลข unary ที่ลงนามแล้ว โดยเฉพาะอย่างยิ่งโปรแกรมของคุณจะไม่ต้องจัดการ 1) อินพุตว่างเปล่าหรือ 2) อินพุตที่ลงท้ายด้วยตัวคั่น คุณอาจคิดว่าขนาดของแต่ละหมายเลขจะต้องไม่เกิน 127 สำหรับภาษาที่มีขนาดของสตริงหรือรายการสูงสุดคุณอาจสมมติว่าอินพุตและเอาต์พุตจะพอดีกับโครงสร้างข้อมูลของภาษาของคุณ แต่อัลกอริทึมของคุณควรทำงานกับรายการ ขนาดใดก็ได้ โปรแกรมหรือฟังก์ชั่นของคุณอาจทำการ I / O ด้วยวิธีมาตรฐานใดๆ …

23
ลำดับของเลขจำนวนเต็มแบบเอ็กซ์โพเนนเชียล
พิจารณารูปสามเหลี่ยมที่เป็นNแถว TH (1 จัดทำดัชนี) เป็นอาร์เรย์จากครั้งแรกที่ไม่มีอำนาจจำนวนเต็มบวกของN นี่คือสองสามแถวแรก: N | สามเหลี่ยม 1 | 1 2 | 2 4 3 | 3 9 27 4 | 4 16 64 256 5 | 5 25 125 625 3125 ... ตอนนี้ถ้าเราต่อพลังเหล่านั้นเป็นลำดับเดียวเราจะได้ OEIS A075363 : 1, 2, 4, 3, 9, 27, 4, 16, 64, 256, 5, …

30
Array of Challenges # 3: ค่าเฉลี่ยเคลื่อนที่
หมายเหตุ: นี่คือ # 3 ในชุดของความท้าทายการจัดการอาร์เรย์ สำหรับความท้าทายก่อนหน้านี้คลิกที่นี่ ค่าเฉลี่ยเคลื่อนที่ของรายการ ค่าเฉลี่ยเคลื่อนที่ของรายการคือการคำนวณผลในใหม่เรียบออกรายการที่สร้างขึ้นโดยเฉลี่ย sublists ที่ทับซ้อนกันเล็ก ๆ ของเดิม เมื่อสร้างค่าเฉลี่ยเคลื่อนที่อันดับแรกเราจะสร้างรายการของรายการย่อยที่ทับซ้อนกันโดยใช้ 'ขนาดหน้าต่าง' ที่แน่นอนเลื่อนหน้าต่างนี้ไปทางขวาหนึ่งครั้งในแต่ละครั้ง ตัวอย่างเช่นเมื่อกำหนดรายการ[8, 4, 6, 2, 2, 4]และขนาดหน้าต่าง3รายการย่อยจะเป็น: [8, 4, 6, 2, 2, 4] Sublists: ( ) <- [8, 4, 6] ( ) <- [4, 6, 2] ( ) <- [6, 2, 2] ( ) <- [2, …

15
ระยะทาง Levenshtein & OEIS (ตำรวจ)
นี่คือโพสต์ Cop โพสต์โม่งอยู่ที่นี่ งานของคุณคือการใช้การป้อนข้อมูลจำนวนเต็มNและเอาท์พุทชับหลักในลำดับOEIS A002942 ลำดับประกอบด้วยตัวเลขสแควร์ที่เขียนย้อนหลัง: 1, 4, 9, 61, 52, 63, 94, 46, 18, 1, 121, 441, ... โปรดทราบว่าเลขศูนย์นำหน้าจะถูกตัดออก ( 100กลายเป็น1ไม่ใช่001 ) การเชื่อมโยงสิ่งนี้เข้ากับสตริง (หรือตัวเลขยาวหนึ่งค่า): 1496152639446181121441 คุณจะส่งออกตัวเลขที่Nในสตริง / หมายเลขนี้ คุณสามารถเลือกที่จะใช้Nเป็นดัชนี 0 หรือดัชนี 1 ดัชนี (โปรดระบุว่าคุณเลือกแบบใด) กรณีทดสอบ (1 ดัชนี): N = 1, ==> 1 N = 5, ==> 1 N = …

17
วาดเครื่องหมายแลมบ์ดา
เพื่อเฉลิมฉลองวันครบรอบปีที่ 2497 ของชัยชนะกรีกที่ Salamis ใน 480 ปีก่อนคริสตกาล วาดเครื่องหมายแลมบ์ดา แลมบ์ดาป่าวคือแลมบ์ดาทาสีบนแผงกั้นกรีกเช่นนั้น: ปริศนา:ได้รับจำนวนเต็มคี่บวก, สร้างภาพศิลปะ ASCII ของโล่ด้านบน ข้อมูลจำเพาะ: n = 1: ( /\ ) n = 3: ( /\ ) | / \ | ( / \ ) n = 5 ( /\ ) | / \ | | / \ | | / …

10
ตัวเลขสามเหลี่ยม
(ไม่ไม่ใช่คนเหล่านั้น ) ความท้าทาย คุณจะได้รับสองอินพุต ครั้งแรกที่เป็นจำนวนเต็มบวกn > 0ซึ่งจะใช้ในการออกสามเหลี่ยมขวาของตัวเลขn x n 1, 2, 3, ... nสามเหลี่ยมนี้เริ่มต้นที่มุมหนึ่งและเพิ่มขึ้นในแนวนอนและแนวตั้งโดยหนึ่งและทแยงมุมสอง ดูตัวอย่างด้านล่างสำหรับการชี้แจง เก็บหนึ่งช่องว่างระหว่างคอลัมน์และเก็บหมายเลขทั้งหมดไว้ในคอลัมน์ที่ต้องการ (นี่คือศิลปะ ASCIIหลังจากทั้งหมด) อินพุตที่สองxเป็นหนึ่งในสี่อักขระ ASCII เดี่ยวที่แตกต่างกันที่คุณเลือกซึ่งจะกำหนดมุมเริ่มต้นของรูปสามเหลี่ยม ตัวอย่างเช่นคุณสามารถใช้1,2,3,4หรือa,b,c,dหรือ#,*,!,)เป็นต้นโปรดระบุในคำตอบของคุณเกี่ยวกับการวางแนว สำหรับการชี้แจงในความท้าทายนี้ฉันจะใช้1,2,3,4ซึ่งจะสอดคล้องกับ1สำหรับบนซ้าย2สำหรับบนขวาและตามเข็มนาฬิกา ตัวอย่าง ตัวอย่างเช่นสำหรับn = 5, x = 1การส่งออกต่อไปนี้: 1 2 3 4 5 2 3 4 5 3 4 5 4 5 5 สำหรับการป้อนข้อมูลn = 11, x = …

6
ประเมินการแสดงออกของลบและตัวหนอน
ได้รับการแสดงออกที่ตรงกับ regex ไม่/^[-~]*x$/, ประเมินในแง่ของxและเอาท์พุทจับคู่สาย /^-?x[+-]\d+$/regex ยกตัวอย่างเช่นสตริง-~xประเมินx+1ในขณะที่สตริง-~-xประเมิน-x+1และสตริงประเมิน-~-~--xx+2 เราเริ่มต้นxและประเมินสตริงจากขวาไปซ้าย -ขัดแย้งกับคำในขณะที่~แปลงไปy-y-1 Testcases: x x+0 ~x -x-1 -~x x+1 ~-~x -x-2 -~-~x x+2 --~~x x+0 ~-x x-1 -~-x -x+1 นี่คือรหัสกอล์ฟ คำตอบที่สั้นที่สุดในการชนะไบต์ รูปแบบอินพุต / เอาต์พุตมีความเข้มงวด "x"มีผลบังคับใช้
16 code-golf  string 

16
พลังแห่งช่วงเวลาสำคัญ
สำหรับจุดประสงค์ของการท้าทายนี้ Prime Power of Prime (PPP) หมายถึงจำนวนที่สามารถกำหนดเป็นจำนวนเฉพาะกับกำลังของจำนวนเฉพาะ ตัวอย่างเช่น 9 เป็น PPP เพราะสามารถแสดงเป็น 3 ^ 2 ในทางกลับกันไม่ใช่ PPP เพราะมันสามารถถูกแทนด้วย 3 ^ 4 เท่านั้นและ 4 ไม่ใช่นายกรัฐมนตรี PPPs สองสามตัวแรกคือ: 4, 8, 9, 25, 27, 32, 49, 121, 125, 128, 169, 243, 289, 343 ... นี่คือลำดับ OEIS A053810 งานของคุณ: เขียนโปรแกรมหรือฟังก์ชั่นสำหรับอินพุตจำนวนเต็ม n ส่งคืน / ส่งออก …

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