Şirketiniz henüz yeni bir projeye başlıyor ve ilk defa fonksiyonel bir programlama kodu stili kullanmaya karar verdiniz. Bununla birlikte, patronunuz gerçekten çok farklı ve yerleşik işlevleri kullanmak istemiyor ve kendinize ana işlevleri uygulamanızı istiyor. Özellikle sen fonksiyonlarını yazmak gerekir: Map
, Nest
, Apply
, Range
, Fold
veTable
seçimi ile ilgili bir dilde. Patron gerçekten meşgul bir adam ve programları olabildiğince kısa yapmak istiyor, bu yüzden zamanını boşa harcamıyor. Ayrıca döngü kullanmamanızı istiyor, bu nedenle döngü kullanmadığınız için bayt sayısında% 10'luk bir düşüşe sahip olacaksınız.
İşlevlerin ayrıntılı gereksinimleri aşağıdadır:
harita
Map
İşlevi, iki parametre alır: f
ve list
nerede f
bir fonksiyondur ve list
değerlerin bir listesidir. f
Uygulamayı her elemanına geri döndürmelidir list
. Dolayısıyla bu şekilde çalışacak:
Map(f,{a,b,c})
döner
{ f(a), f(b), f(c) }
ve
Map(f, {{a,b},{b,c}})
döner
{ f({a,b}), f({b,c})}
yuva
Nest
: İşlev de üç parametre alır f
, arg
, times
nerede f
, bir işlevdir arg
onun başlangıç argümanı ve times
fonksiyon uygulanır kaç katıdır. f
Uygulanan times
süreleri olan bir ifade döndürmelidir arg
. Dolayısıyla bu şekilde çalışacak:
Nest(f, x, 3)
döner
f(f(f(x)))
ve
Nest(f, {a,b}, 3)
döner
f(f(f({a,b})))
Uygulamak
Apply
İşlevi, iki parametre alır: f
ve args
nerede f
bir fonksiyonu ve olan args
bir liste. Bu başvurmalıdır f
için args
. Bu nedenle:
Apply(f, {a,b,c})
döner
f(a,b,c)
menzil
Range
Fonksiyonu tek tamsayı alır r
ve o numaraya kadar tamsayılar çıkarır. Bu nedenle:
Range(5)
döner
{ 1, 2, 3, 4, 5}
Kat
Fold
Fonksiyon üç parametre alır f
, arg
, others
nerede f
bir fonksiyondur, arg
basit parametre ve olan others
bir liste. Bu şekilde çalışacak:
Fold(f, x, {a, b, c, d})
döner
f(f(f(f(x,a),b),c),d)
tablo
Tablo işlevleri bir işlev f
ve iterator
biçim olarak adlandırılan bir parametre almalıdır : {iMin, iMax}
where iMin
ve iMax
integer. f
Belirtilen aralıkta başvurmalısınız . Bu nedenle:
Table(f, {0, 5})
döner
{f(0), f(1), f(2), f(3), f(4), f(5)}
Bu fonksiyonların tanımını Mathematica fonksiyonel programlama sayfasından kullandım , bu nedenle daha fazla rehberliğe ihtiyacınız olursa oraya gidin. Bu sayfada gösterilen fonksiyonların tüm versiyonlarını uygulamanıza gerek kalmayacağına, sadece bu yazıya yazılanlara dikkat edin.
Standart Loopholes'a her zamanki gibi izin verilmez.
Dilinizin işlevlerin argüman olarak iletilmesine izin vermemesi durumunda, bu özelliği uygulamanız ve cevabınıza eklemeniz gerekir. Bununla birlikte, bu işlemin bayt sayısı topluma eklenmeyecektir.
Bu kod golf yani en kısa kod kazanır. İyi şanslar!!!
Table
burada nasıl çalıştığını gerçekten anlamadım . ÖrneğinizTable(f, {x, 0, 5})
mi olmalı ? Ayrıcax
, işlevi yalnızca aralığa uyguladığı için de hiçbir amaç elde edemiyorum .