Công ty của bạn mới bắt đầu thực hiện một dự án và lần đầu tiên bạn quyết định sử dụng kiểu mã lập trình chức năng. Tuy nhiên, sếp của bạn thực sự khác biệt và không muốn sử dụng các chức năng tích hợp sẵn và yêu cầu bạn phải tự thực hiện các chức năng chính. Đặc biệt bạn cần phải viết các chức năng: Map
, Nest
, Apply
, Range
, Fold
và Table
bằng một ngôn ngữ vào sự lựa chọn của bạn. Sếp là một người thực sự bận rộn và anh ấy muốn có các chương trình càng ngắn càng tốt, vì vậy anh ấy không lãng phí thời gian để đọc. Anh ấy cũng không muốn bạn sử dụng các vòng lặp, do đó bạn sẽ giảm 10% số lượng byte vì không sử dụng các vòng lặp.
Các yêu cầu chi tiết của các chức năng dưới đây:
Bản đồ
Các Map
chức năng có hai tham số: f
và list
nơi f
là một chức năng và list
là một danh sách các giá trị. Nó sẽ trả về f
áp dụng cho từng yếu tố của list
. Do đó, nó sẽ hoạt động như vậy:
Map(f,{a,b,c})
trả lại
{ f(a), f(b), f(c) }
và
Map(f, {{a,b},{b,c}})
trả lại
{ f({a,b}), f({b,c})}
Yến
Các Nest
chức năng có ba thông số cũng như: f
, arg
, times
nơi f
là một chức năng, arg
là tranh luận bắt đầu của nó, và times
là bao nhiêu lần so với chức năng được áp dụng. Nó sẽ trả về một biểu thức với thời gian f
áp dụng times
cho arg
. Do đó, nó sẽ hoạt động như vậy:
Nest(f, x, 3)
trả lại
f(f(f(x)))
và
Nest(f, {a,b}, 3)
trả lại
f(f(f({a,b})))
Ứng dụng
Các Apply
chức năng có hai tham số: f
và args
nơi f
là một chức năng và args
một danh sách. Nó nên áp dụng f
cho args
. Vì thế:
Apply(f, {a,b,c})
trả lại
f(a,b,c)
Phạm vi
Các Range
chức năng mất một số nguyên r
và xuất ra các số nguyên lên đến con số đó. Vì thế:
Range(5)
trả lại
{ 1, 2, 3, 4, 5}
Gập lại
Các Fold
chức năng có ba thông số f
, arg
, others
nơi f
là một chức năng, arg
là tham số đơn giản, và others
một danh sách. Nó sẽ hoạt động như vậy:
Fold(f, x, {a, b, c, d})
trả lại
f(f(f(f(x,a),b),c),d)
Bàn
Các hàm bảng nên có một hàm f
và một tham số được gọi iterator
ở dạng: {iMin, iMax}
where iMin
và iMax
là các số nguyên. Bạn nên áp dụng f
trong phạm vi được chỉ định. Vì thế:
Table(f, {0, 5})
trả lại
{f(0), f(1), f(2), f(3), f(4), f(5)}
Tôi đã sử dụng định nghĩa của các hàm này từ trang lập trình chức năng Mathicala , vì vậy hãy đến đó nếu bạn cần thêm hướng dẫn. Lưu ý rằng bạn sẽ không cần phải thực hiện tất cả phiên bản của các chức năng được hiển thị trong trang đó, mà chỉ những chức năng được viết trong bài đăng này.
Lỗ hổng tiêu chuẩn không được phép như bình thường.
Trong trường hợp ngôn ngữ của bạn không cho phép các chức năng được chuyển qua làm đối số, bạn cần triển khai khả năng này và thêm nó vào câu trả lời của mình. Tuy nhiên, tổng số byte của thao tác này sẽ không được thêm vào tổng số.
Đây là mã golf nên mã ngắn nhất sẽ thắng. Chúc may mắn!!!
Table
hoạt động ở đây. Là ví dụ của bạn được cho làTable(f, {x, 0, 5})
? Tôi cũng không có mục đíchx
gì cả, vì nó chỉ áp dụng chức năng cho phạm vi.