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, Foldvà Tablebằ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 Mapchức năng có hai tham số: fvà listnơi flà một chức năng và listlà 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 Nestchức năng có ba thông số cũng như: f, arg, timesnơi flà một chức năng, arglà tranh luận bắt đầu của nó, và timeslà 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 timescho 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 Applychức năng có hai tham số: fvà argsnơi flà một chức năng và argsmột danh sách. Nó nên áp dụng fcho args. Vì thế:
Apply(f, {a,b,c})
trả lại
f(a,b,c)
Phạm vi
Các Rangechức năng mất một số nguyên rvà 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 Foldchức năng có ba thông số f, arg, othersnơi flà một chức năng, arglà tham số đơn giản, và othersmộ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 fvà một tham số được gọi iteratorở dạng: {iMin, iMax}where iMinvà iMaxlà các số nguyên. Bạn nên áp dụng ftrong 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!!!
Tablehoạ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 đíchxgì cả, vì nó chỉ áp dụng chức năng cho phạm vi.