Ş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, FoldveTable 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: fve listnerede fbir fonksiyondur ve listdeğerlerin bir listesidir. fUygulamayı 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, timesnerede f, bir işlevdir argonun başlangıç argümanı ve timesfonksiyon uygulanır kaç katıdır. fUygulanan timessü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: fve argsnerede fbir fonksiyonu ve olan argsbir liste. Bu başvurmalıdır fiçin args. Bu nedenle:
Apply(f, {a,b,c})
döner
f(a,b,c)
menzil
RangeFonksiyonu tek tamsayı alır rve o numaraya kadar tamsayılar çıkarır. Bu nedenle:
Range(5)
döner
{ 1, 2, 3, 4, 5}
Kat
FoldFonksiyon üç parametre alır f, arg, othersnerede fbir fonksiyondur, argbasit parametre ve olan othersbir 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 fve iteratorbiçim olarak adlandırılan bir parametre almalıdır : {iMin, iMax}where iMinve iMaxinteger. fBelirtilen 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!!!
Tableburada 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 .