Twoja firma dopiero zaczyna projekt i po raz pierwszy zdecydowałaś się na funkcjonalny styl programowania. Jednak twój szef jest naprawdę nieufny i nie chce korzystać z wbudowanych funkcji, i wymaga od ciebie wdrożenia głównych funkcji. W szczególności trzeba napisać funkcje: Map, Nest, Apply, Range, Foldi Tablew języku Twojego wyboru. Szef jest bardzo zajętym człowiekiem i chce, aby programy były jak najkrótsze, aby nie tracił czasu na czytanie. On również nie chce, abyś używał pętli, dlatego będziesz miał 10% zmniejszenie liczby bajtów za nieużywanie pętli.
Szczegółowe wymagania dotyczące funkcji są poniżej:
Mapa
MapFunkcja przyjmuje dwa parametry: fa listgdzie fjest funkcją i listznajduje się lista wartości. Powinien zwrócić fzastosowany do każdego elementu list. Dlatego będzie działał jako taki:
Map(f,{a,b,c})
zwraca
{ f(a), f(b), f(c) }
i
Map(f, {{a,b},{b,c}})
zwraca
{ f({a,b}), f({b,c})}
Gniazdo
NestFunkcja przyjmuje trzy parametry, a także: f, arg, timesgdzie fjest funkcją, argjest jej argument wyjściowy, i timesto ile razy funkcja jest stosowana. Powinien zwrócić wyrażenie z fzastosowanymi timesczasami do arg. Dlatego będzie działał jako taki:
Nest(f, x, 3)
zwraca
f(f(f(x)))
i
Nest(f, {a,b}, 3)
zwraca
f(f(f({a,b})))
Zastosować
ApplyFunkcja przyjmuje dwa parametry: fa argsgdzie fjest funkcją i argslista. Powinien mieć zastosowanie fdo args. W związku z tym:
Apply(f, {a,b,c})
zwraca
f(a,b,c)
Zasięg
RangeFunkcja ma jedną liczbą całkowitą ri wysyła całkowitymi do tej liczby. W związku z tym:
Range(5)
zwraca
{ 1, 2, 3, 4, 5}
Zagięcie
FoldFunkcja przyjmuje trzy parametry f, arg, othersgdzie fjest funkcją, argjest prosty parametr, a otherslista. Będzie działał jako taki:
Fold(f, x, {a, b, c, d})
zwraca
f(f(f(f(x,a),b),c),d)
Stół
Funkcje tabel powinny przyjmować funkcję fi parametr wywoływany iteratorw postaci: {iMin, iMax}gdzie iMini iMaxsą liczbami całkowitymi. Należy złożyć wniosek fw określonym zakresie. W związku z tym:
Table(f, {0, 5})
zwraca
{f(0), f(1), f(2), f(3), f(4), f(5)}
Użyłem definicji tych funkcji ze strony programowania funkcjonalnego Mathematica , więc jeśli potrzebujesz więcej wskazówek, przejdź tam. Pamiętaj, że nie będziesz musiał implementować wszystkich wersji funkcji pokazanych na tej stronie, ale tylko te napisane w tym poście.
Standardowe luki są niedozwolone jak zwykle.
Jeśli twój język nie pozwala na przekazywanie funkcji jako argumentów, musisz zaimplementować tę możliwość i dodać ją do swojej odpowiedzi. Jednak liczba bajtów tej operacji nie zostanie dodana do sumy.
To jest kod golfowy, więc wygrywa najkrótszy kod. Powodzenia!!!
Tabletu działa. Czy twoim przykładem powinien byćTable(f, {x, 0, 5})? Nie rozumiem też w ogóle celux, ponieważ po prostu stosuje funkcję do zakresu.