Press "Enter" to skip to content

Niewiarygodne ale prawdziwe, odcinek 1

Mam takiego współpracownika, nazwijmy go piłkarz z gitarą, jako że wolał pozostać anonimowy (ale zezwolił na publikację zadania i rozwiązań). W którymś momencie podszedł do tablicy i napisał „Sum(1)(2)(3)()) -> ma zwrócić liczbę” i powiedział, że mamy 10 minut od teraz. Jeszcze coś wspomniał, że zadanko to ma potencjał do bycia zadaniem rekrutacyjnym dla seniorów, bo trzeba pomyśleć trochę nieszablonowo.

Wydaje się niewykonalne? Też mi się tak wydawało. Padły rozwiązania w 2 językach.

A odpowiedź wygląda tak:

[C#]

        private delegate dynamic F(int x = 0);

        private static dynamic Sum(int n = 0)
        {
            if (n == 0)
            {
                return 0;
            }
            F f = x => x == 0 ? n : Sum(x + n);
            return f;
        }
//użycie (przykład)
            Console.WriteLine(Sum());
            Console.WriteLine(Sum(1)());
            Console.WriteLine(Sum(1)(2)());
            Console.WriteLine(Sum(1)(2)(3)());

——————–

[PY]
def sum(n = None):
    if n == None:
        return 0
    return lambda x = None: n if x == None else sum(n + x)
print(sum(1)(2)(3)())