Perusahaan Anda baru saja memulai suatu proyek, dan untuk pertama kalinya Anda memutuskan untuk menggunakan gaya pemrograman kode fungsional. Namun bos Anda benar-benar malu-malu dan tidak ingin menggunakan fungsi bawaan, dan mengharuskan Anda untuk menerapkan sendiri fungsi-fungsi utama. Secara khusus Anda perlu menulis fungsi: Map
, Nest
, Apply
, Range
, Fold
dan Table
dalam bahasa pada pilihan Anda. Bosnya orang yang sangat sibuk, dan dia ingin programnya sesingkat mungkin, jadi dia tidak membuang waktu untuk membaca. Dia juga ingin agar Anda tidak menggunakan loop, oleh karena itu Anda akan memiliki pengurangan 10% pada jumlah byte karena tidak menggunakan loop.
Persyaratan rinci fungsi di bawah ini:
Peta
The Map
Fungsi mengambil dua parameter: f
dan list
di mana f
adalah fungsi dan list
merupakan daftar nilai. Ini harus mengembalikan f
diterapkan ke setiap elemen list
. Karena itu akan berfungsi seperti itu:
Map(f,{a,b,c})
kembali
{ f(a), f(b), f(c) }
dan
Map(f, {{a,b},{b,c}})
kembali
{ f({a,b}), f({b,c})}
Sarang
The Nest
Fungsi mengambil tiga parameter juga: f
, arg
, times
di mana f
adalah fungsi, arg
adalah argumen mulai, dan times
adalah berapa kali fungsi ini diterapkan. Itu harus mengembalikan ekspresi dengan waktu yang f
diterapkan times
ke arg
. Karena itu akan berfungsi seperti itu:
Nest(f, x, 3)
kembali
f(f(f(x)))
dan
Nest(f, {a,b}, 3)
kembali
f(f(f({a,b})))
Menerapkan
The Apply
Fungsi mengambil dua parameter: f
dan args
di mana f
adalah fungsi dan args
daftar. Itu harus berlaku f
untuk args
. Karena itu:
Apply(f, {a,b,c})
kembali
f(a,b,c)
Jarak
The Range
Fungsi mengambil satu bilangan bulat r
dan output bilangan bulat hingga jumlah itu. Karena itu:
Range(5)
kembali
{ 1, 2, 3, 4, 5}
Melipat
The Fold
Fungsi mengambil tiga parameter f
, arg
, others
di mana f
adalah fungsi, arg
adalah parameter sederhana, dan others
daftar. Ini akan berfungsi seperti itu:
Fold(f, x, {a, b, c, d})
kembali
f(f(f(f(x,a),b),c),d)
Meja
Fungsi-fungsi tabel harus mengambil fungsi f
, dan parameter yang disebut iterator
dalam bentuk: {iMin, iMax}
where iMin
and iMax
integer. Anda harus menerapkan f
rentang yang ditentukan. Karena itu:
Table(f, {0, 5})
kembali
{f(0), f(1), f(2), f(3), f(4), f(5)}
Saya telah menggunakan definisi fungsi-fungsi ini dari halaman pemrograman fungsional Mathematica , jadi pergilah ke sana jika Anda memerlukan panduan lebih lanjut. Perhatikan bahwa Anda tidak perlu mengimplementasikan semua versi fungsi yang ditampilkan di halaman itu, tetapi hanya yang ditulis dalam posting ini.
Celah Standar tidak diizinkan seperti biasa.
Jika bahasa Anda tidak memungkinkan fungsi untuk diteruskan sebagai argumen, Anda perlu menerapkan kemampuan ini, dan menambahkannya ke dalam jawaban Anda. Namun byte-count dari operasi ini tidak akan ditambahkan ke total.
Ini adalah kode golf sehingga kode terpendek menang. Semoga berhasil!!!
Table
kerjanya di sini. Apakah teladan Anda seharusnyaTable(f, {x, 0, 5})
? Saya juga tidak mendapatkan tujuanx
sama sekali, karena itu hanya menerapkan fungsi ke kisaran.