บริษัท ของคุณเพิ่งเริ่มต้นโครงการและเป็นครั้งแรกที่คุณตัดสินใจที่จะใช้การเขียนโปรแกรมแบบใช้งานได้ อย่างไรก็ตามเจ้านายของคุณมีความแตกต่างและไม่ต้องการใช้ฟังก์ชันในตัวและต้องการให้คุณใช้งานฟังก์ชั่นหลัก โดยเฉพาะอย่างยิ่งที่คุณต้องเขียนฟังก์ชั่น: Map
, Nest
, Apply
, Range
, Fold
และTable
ในภาษาที่คุณเลือก เจ้านายเป็นคนที่ยุ่งมากและเขาต้องการให้รายการสั้นที่สุดเท่าที่จะเป็นไปได้ดังนั้นเขาจึงไม่ต้องเสียเวลาอ่าน เขาไม่ต้องการให้คุณใช้ลูปดังนั้นคุณจะมีการลดลง 10% สำหรับจำนวนไบต์ที่ไม่ได้ใช้ลูป
ข้อกำหนดรายละเอียดของฟังก์ชั่นอยู่ด้านล่าง:
แผนที่
Map
ฟังก์ชั่นใช้เวลาสองพารามิเตอร์f
และlist
ที่f
เป็นฟังก์ชั่นและlist
เป็นรายการค่า มันควรกลับนำไปใช้กับองค์ประกอบของแต่ละf
list
ดังนั้นมันจะทำงานเช่น:
Map(f,{a,b,c})
ผลตอบแทน
{ f(a), f(b), f(c) }
และ
Map(f, {{a,b},{b,c}})
ผลตอบแทน
{ f({a,b}), f({b,c})}
รัง
Nest
ฟังก์ชั่นใช้เวลาสามพารามิเตอร์เช่นกัน: f
, arg
, times
ที่f
เป็นฟังก์ชั่นarg
คือการเริ่มต้นการโต้แย้งของตนและtimes
เป็นวิธีการที่หลายต่อหลายครั้งฟังก์ชั่นที่มีการใช้ มันควรจะกลับแสดงออกที่มีf
นำมาใช้ครั้งเพื่อtimes
arg
ดังนั้นมันจะทำงานเช่น:
Nest(f, x, 3)
ผลตอบแทน
f(f(f(x)))
และ
Nest(f, {a,b}, 3)
ผลตอบแทน
f(f(f({a,b})))
ใช้
Apply
ฟังก์ชั่นใช้เวลาสองพารามิเตอร์f
และargs
ที่f
เป็นฟังก์ชั่นและargs
รายการ มันควรจะใช้กับf
args
ดังนั้น:
Apply(f, {a,b,c})
ผลตอบแทน
f(a,b,c)
พิสัย
Range
ฟังก์ชั่นใช้เวลาหนึ่งจำนวนเต็มr
และผลจำนวนเต็มขึ้นไปยังหมายเลขที่ ดังนั้น:
Range(5)
ผลตอบแทน
{ 1, 2, 3, 4, 5}
พับ
Fold
ฟังก์ชั่นใช้เวลาสามพารามิเตอร์f
, arg
, others
ที่f
เป็นฟังก์ชั่นarg
เป็นพารามิเตอร์ที่ง่ายและothers
รายการ มันจะทำงานเช่น:
Fold(f, x, {a, b, c, d})
ผลตอบแทน
f(f(f(f(x,a),b),c),d)
ตาราง
ฟังก์ชั่นตารางควรใช้ฟังก์ชั่นf
และพารามิเตอร์ที่เรียกว่าiterator
ในรูปแบบ: {iMin, iMax}
ที่ไหนiMin
และiMax
เป็นจำนวนเต็ม คุณควรใช้f
ในช่วงที่ระบุ ดังนั้น:
Table(f, {0, 5})
ผลตอบแทน
{f(0), f(1), f(2), f(3), f(4), f(5)}
ฉันใช้นิยามของฟังก์ชั่นเหล่านี้จากหน้าการเขียนโปรแกรมฟังก์ชั่น Mathematicaดังนั้นมุ่งไปที่นั่นหากคุณต้องการคำแนะนำเพิ่มเติม โปรดทราบว่าคุณไม่จำเป็นต้องใช้ฟังก์ชั่นทุกรุ่นที่แสดงในหน้านั้น แต่จะมีเฉพาะฟังก์ชันที่เขียนในโพสต์นี้เท่านั้น
ช่องโหว่มาตรฐานไม่อนุญาตตามปกติ
ในกรณีที่ภาษาของคุณไม่อนุญาตให้ส่งผ่านฟังก์ชั่นเป็นอาร์กิวเมนต์คุณต้องใช้ความสามารถนี้และเพิ่มเข้าไปในคำตอบของคุณ อย่างไรก็ตามจำนวนไบต์ของการดำเนินการนี้จะไม่ถูกเพิ่มไปยังผลรวม
นี่คือรหัสกอล์ฟเพื่อให้รหัสที่สั้นที่สุดชนะ โชคดี!!!
Table
ทำงานที่นี่ ตัวอย่างของคุณควรจะเป็นTable(f, {x, 0, 5})
อย่างไร ฉันยังไม่ได้รับวัตถุประสงค์x
เลยเพราะมันใช้ฟังก์ชันกับช่วงเท่านั้น