คำถามติดแท็ก functional-programming

แท็กนี้มีไว้สำหรับความท้าทายที่เกี่ยวข้องกับกระบวนทัศน์การเขียนโปรแกรมเชิงฟังก์ชัน

15
เครื่องขยายความจริง
หลายคนรู้ว่าเครื่องความจริงในการเขียนโปรแกรมคืออะไร แต่ถึงเวลาแล้วที่เราจะทำทุกอย่างให้เป็นระเบียบ ขอแนะนำเครื่องแห่งความจริงที่ขยายเพิ่ม! เครื่องจักรความจริงแบบขยายใช้สองสิ่งเป็นอินพุตจำนวนเต็มnและสตริงที่ไม่ว่างsเปล่า มันส่งออกs nครั้งด้วยช่องว่างต่อท้ายตัวเลือก อย่างไรก็ตามหากnมีค่าเท่ากับ0คุณจะต้องแสดงผลออกsจนกว่าโปรแกรมจะหยุดทำงานด้วยตนเองเช่นไม่ควรยกเลิก นอกจากนี้หากnเป็นจำนวนลบสตริงจะต้องมีการกลับรายการ ตัวอย่างเช่นมีs=helloและเอาท์พุทจะเป็นn=-1olleh วิธีการอินพุตมาตรฐานเอาต์พุตชนิดใดก็ได้ตราบใดที่สามารถจัดการกับอนันต์ได้ หากคุณมีคำตอบที่ไม่จัดการกับอนันต์คุณสามารถโพสต์ได้ถ้ามันน่าสนใจหรือในภาษาที่ไม่สามารถจัดการกับผลลัพธ์ที่ไม่มีที่สิ้นสุด กรณีทดสอบ n, s, output 5, "hello world", "hello worldhello worldhello worldhello worldhello world" 0, "PPCG", "PPCGPPCGPPCGPPCG..." -2, "truThY", "YhTurtYhTurt" 2000, "o", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" นี่คือรหัส - กอล์ฟดังนั้นรหัสที่สั้นที่สุดชนะ! นี่คือโพสต์ Sandbox ดั้งเดิม ทำการแก้ไขแล้ว ขอบคุณไปที่ @ComparSparklePony สำหรับการสร้างแนวคิดของการท้าทายนี้

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จะไม่ หมายความว่า: …

30
สร้างโปรแกรม Parrot
รับอินพุต, เอาต์พุตที่อินพุตตามด้วย newline ไม่รู้จบ ข้อมูลที่ป้อนจะเป็นสตริงที่ประกอบด้วยอักขระ ASCII ที่พิมพ์ได้ ( 0x20-0x7E) และบรรทัดใหม่ ( 0x0A) หากอินพุตมีความยาว 0 ให้ส่งบรรทัดใหม่อย่างไม่สิ้นสุด นี่คือโค้ดกอล์ฟที่มีจำนวนน้อยที่สุดในแต่ละภาษาที่ชนะ!
15 code-golf  string  sequence  combinatorics  fastest-code  number  code-challenge  restricted-source  rosetta-stone  code-golf  arithmetic  decision-problem  integer  factorial  code-golf  arithmetic  decision-problem  integer  bitwise  code-golf  kolmogorov-complexity  code-golf  tips  vim  code-golf  quine  code-generation  code-golf  string  restricted-source  code-golf  string  random  unicode  code-golf  audio  code-golf  ascii-art  code-golf  decision-problem  code-golf  puzzle-solver  code-golf  restricted-source  code-golf  kolmogorov-complexity  permutations  hexagonal-grid  code-golf  string  math  combinatorics  fastest-code  code-golf  restricted-source  code-golf  string  code-golf  arithmetic  code-golf  math  number  code-golf  string  decision-problem  balanced-string  code-golf  binary  code-golf  string  number  code-challenge  restricted-source  code-golf  ascii-art  printable-ascii  interactive  code-golf  string  ascii-art  code-challenge  restricted-source  source-layout  code-golf  arithmetic  tips  functional-programming  golfing-language  code-golf  binary  encryption 

18
ค้นหาการจัดกลุ่มตัวเลขที่เกี่ยวข้อง
เมื่อเร็ว ๆ 25,121นี้ชื่อเสียงของฉันคือ ฉันสังเกตเห็นว่าการจัดกลุ่มตัวเลขแต่ละหลัก (เช่นตัวเลขคั่นด้วยเครื่องหมายจุลภาค) เป็นรูปสี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบ ความท้าทายของคุณคือให้เป็นจำนวนเต็มที่ไม่ใช่ลบNและฟังก์ชันกล่องดำ แบบบูล unary f : Z * → Bให้ค่าจริงถ้าแต่ละค่าfนำไปใช้กับการจัดกลุ่มหลักของNคือความจริงและเท็จเป็นอย่างอื่น หนึ่งสามารถค้นหาการจัดกลุ่มหลักโดยแยกหมายเลขออกเป็นกลุ่ม 3 โดยเริ่มจากด้านขวา กลุ่มซ้ายสุดอาจมี 1, 2 หรือ 3 หลัก ตัวอย่างบางส่วน: 12398123 -> 12,398,123 (3 digit groupings) 10 -> 10 (1 digit grouping) 23045 -> 23,045 (2 digit groupings) 100000001 -> 100,000,001 (3 digit groupings) 1337 …

2
มีภาษาโปรแกรมการทำงานที่ออกแบบมาสำหรับการเขียนโค้ดกอล์ฟหรือไม่?
มีภาษาโปรแกรมการทำงานที่ออกแบบมาสำหรับการเขียนโค้ดกอล์ฟหรือไม่? ฉันรู้ว่า golfscript และ CJam เติมเต็มหมวดหมู่เดียวกันสำหรับ stack based แต่ฉันไม่สามารถหาภาษาของรหัส golfing

1
การนับโซ่ของคันนิงแฮม
ตัวเลขที่สำคัญทำให้ผู้คนหลงใหล 2300 ปีที่แล้ว Euclid เขียนใน "Elements" ของเขา จำนวนเฉพาะคือสิ่งที่วัดโดยหน่วยเดียว ซึ่งหมายความว่านายกสามารถหารด้วย1(หรือด้วยตัวเอง) เท่านั้น ผู้คนมักจะมองหาความสัมพันธ์ระหว่างจำนวนเฉพาะและเกิดขึ้นกับบางสิ่งที่แปลก (เช่นใน "น่าสนใจ") ตัวอย่างเช่นนายก Sophie Germainเป็นนายกpที่2*p+1สำคัญเช่นกัน นายกปลอดภัยเป็นนายกpที่(p-1)/2ยังเป็นนายกรัฐมนตรีซึ่งเป็นว่าสภาพข้างหลังของนายกโซฟีต์แชร์กแมง สิ่งเหล่านี้เกี่ยวข้องกับสิ่งที่เรากำลังมองหาในการท้าทายนี้ ห่วงโซ่คันนิงแฮมของประเภทที่เป็นชุดของจำนวนเฉพาะที่องค์ประกอบยกเว้นคนสุดท้ายทุกคนจะเป็นนายกโซฟีต์แชร์กแมงและองค์ประกอบยกเว้นคนแรกที่ทุกคนเป็นนายกปลอดภัย จำนวนขององค์ประกอบในครั้งนี้มีห่วงโซ่ที่เรียกว่ามันยาว ซึ่งหมายความว่าเราเริ่มต้นด้วยการลากและคำนวณp q=2*p+1ถ้าqเป็นไพร์มด้วยเรามี Cunnigham chain ของ type I ที่มีความยาว 2 จากนั้นเราจะทดสอบ2*q+1และต่อไปเรื่อย ๆ จนกระทั่งจำนวนที่สร้างขึ้นถัดไปเป็นคอมโพสิต โซ่คันนิงแฮมประเภทIIสร้างขึ้นตามหลักการเดียวกันเกือบทั้งหมดความแตกต่างเพียงอย่างเดียวคือเราตรวจสอบ2*p-1แต่ละขั้นตอน โซ่คันนิงแฮมสามารถมีความยาว 1ซึ่งหมายความว่า 2 * p + 1 หรือ 2 * p-1 ไม่สำคัญ เราไม่ได้สนใจในสิ่งเหล่านี้ ตัวอย่างบางส่วนของ Cunningham chains 2เริ่มสายโซ่ประเภทที่ฉันมีความยาว …

9
การลบคริสตจักร
การลบคริสตจักร แลมบ์ดาแคลคูลัสเป็นที่สนใจของฉันมาโดยตลอดและพฤติกรรมฉุกเฉินของการส่งผ่านหน้าที่ต่าง ๆ เข้ามามีความซับซ้อนอย่างน่ายินดี เลขคริสตจักรเป็นตัวแทนของตัวเลขธรรมชาติที่สร้างขึ้นจากการใช้ฟังก์ชั่นซ้ำ ๆ (โดยปกติจะเป็นการเพิ่มค่าคงที่แบบเอกภาพ) ตัวอย่างเช่นจำนวนศูนย์ส่งคืน x และ "ละเว้น" ฟังก์ชันอินพุตหนึ่งคือf(x)สองคือf(f(x))และต่อไปนี้: ident = lambda x: x zero = lambda f: ident succ = lambda n: lambda f: lambda x: f(n(f)(x)) one = succ(zero) add1 = lambda x: x + 1 to_int = lambda f: f(add1)(0) print(to_int(one)) >>> 1 จากนี้เราสามารถเห็นได้อย่างง่ายดายว่าการเติมนั้นทำได้โดยใช้ฟังก์ชันแรกกับ …

5
Combinator จุดคง Golfed
เขียนcombinator จุดคงที่ในตัวละครน้อยที่สุดในภาษาที่คุณเลือก รูปแบบอิสระ ( เช่นอะไรก็ตามที่สั้นที่สุด): ทั้งโปรแกรมฟังก์ชันที่แท้จริงโค้ดขนาดสั้น คุณไม่สามารถใช้ไลบรารีมาตรฐานของคุณถ้ามันมี อย่างไรก็ตามคุณสามารถดึงมันออกมาจากฟังก์ชั่นระดับสูงอื่น ๆ ที่คุณต้องการทำมากกว่าสร้างจากฐาน โปรดรวมแฟกทอเรียลแบบเรียกซ้ำหรือฟีโบนักชีที่ใช้เป็นตัวอย่าง ในคำถามนี้การอ้างอิงตนเองเป็นที่ยอมรับจุดมุ่งหมายนั้นเพียงเพื่อลบออกจากฟังก์ชั่นวนซ้ำที่จะนำไปใช้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.