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
, Fold
i Table
w 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
Map
Funkcja przyjmuje dwa parametry: f
a list
gdzie f
jest funkcją i list
znajduje się lista wartości. Powinien zwrócić f
zastosowany 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
Nest
Funkcja przyjmuje trzy parametry, a także: f
, arg
, times
gdzie f
jest funkcją, arg
jest jej argument wyjściowy, i times
to ile razy funkcja jest stosowana. Powinien zwrócić wyrażenie z f
zastosowanymi times
czasami 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ć
Apply
Funkcja przyjmuje dwa parametry: f
a args
gdzie f
jest funkcją i args
lista. Powinien mieć zastosowanie f
do args
. W związku z tym:
Apply(f, {a,b,c})
zwraca
f(a,b,c)
Zasięg
Range
Funkcja ma jedną liczbą całkowitą r
i wysyła całkowitymi do tej liczby. W związku z tym:
Range(5)
zwraca
{ 1, 2, 3, 4, 5}
Zagięcie
Fold
Funkcja przyjmuje trzy parametry f
, arg
, others
gdzie f
jest funkcją, arg
jest prosty parametr, a others
lista. 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ę f
i parametr wywoływany iterator
w postaci: {iMin, iMax}
gdzie iMin
i iMax
są liczbami całkowitymi. Należy złożyć wniosek f
w 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!!!
Table
tu 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.