0

Daily Challenge #4

Cześć! W dzisiejszym cyklu Daily Challenge rozwiążę chyba najbardziej banalne zadanie jakie kiedykolwiek dostałem. Nie chcę się nawet rozpisywać o nim. Wyceniłem na 1 gwiazdkę (jakbym mógł, to bym dał 0.1). Zadanie zaproponowane przez Jane Street.

Tak jak zawsze kod jest dostępny na GitHubie.

Wpis ten należy do cyklu Daily Challenge. W cyklu tym rozwiązuję każdego dnia nowe zadanie. Zadanie te traktuję w taki sposób, jakbym dostał je na rozmowie kwalifikacyjnej i miał coś wymyślić. Implementuję pierwszą myśl jaka przyjdzie mi do głowy. Nie musi być ona (zazwyczaj nie będzie) najlepszym rozwiązaniem. Chodzi po prostu o zabawę i sprawdzenie jakbym sobie poradził z podobnym wyzwaniem. Zaimplementowane rozwiązanie nie jest z reguły tłumaczone, jeżeli masz pytania możesz je zadawać w komentarzach. Wszystkie zadania udostępniane są subskrybentom Daily Coding Problem.

Zadanie

Dzisiejsze zadanie brzmi następująco:

cons(a, b) constructs a pair, and car(pair) and cdr(pair) returns the first and last element of that pair. For example, car(cons(3, 4)) returns 3, and cdr(cons(3, 4)) returns 4. Given this implementation of cons:

def cons(a, b):   
 def pair(f):       
  return f(a, b)    return pair

Implement car and cdr.

Jakaś kpina, prawda?

Testy

Szybkie testy sprawdzające działanie:

[TestMethod]
public void DailyChallenge4()
{
    DailyChallenge4 daily = new DailyChallenge4();
    Assert.AreEqual(3, daily.Car(daily.Cons(3, 4)));
    Assert.AreEqual(4, daily.Cdr(daily.Cons(3, 4)));
}

Implementacja

Po testach, wyjątkowo szybka implementacja:

public Tuple<int, int> Cons(int a, int b)
{
    return new Tuple<int, int>(a, b);
}
 
public int Car(Tuple<int, int> pair)
{
    return pair.Item1;
}
 
public int Cdr(Tuple<int, int> pair)
{
    return pair.Item2;
}

Użyłem Tuple, bo nie chciało mi się pisać osobnej klasy na tego typu zadanie.

Mission Complete

Zadanie banalne. Może istnieje język gdzie jego implementacja okazałaby się wyzwanie. C# na pewno nim nie jest.

Pozdro!

Patryk Bogdański

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.