Strona z zadaniami programistycznymi

1

Chodzi o tak zwane Coding Challenge. Co polecacie?
Oczywiście jest Google i wiele takich stron widziałem. Sprawdziłem też co jest polecane np.:
https://medium.com/coderbyte/the-10-best-coding-challenge-websites-for-2018-12b57645b654
https://levelup.gitconnected.com/top-coding-challenge-websites-of-2018-72d5a9dec6fd
Wybrałem sobie na początek coderbyte. Sprawdziłem też kilka innych ale omówię o co mi chodzi na tym przykładzie bo tu najwięcej spędziłem czasu. Jako język wybrałem C#. Ogólnie mówiąc nie byłem zadowolony.

  • Brak IntelliSense. Nie zrobisz średnika – błąd a dowiesz się po kliknięciu run. Nie pamiętasz kolejności argumentów musisz szukać gdzieś w Google. Praca prawie jak na kartce.
  • Ocena rozwiązania.
    Scores – suma pkt. Za czas napisania zadania i prawidłowo wykonane przypadki testowe
    Time – czas napisania zadania
    Lines of Code – ilość linii kodu
    Naprawdę czas napisania zadania i ilość linii kodu są takie ważne? Oczekiwał bym raczej ilości zajętej pamięci, czas procesora potrzebny na wykonanie zadania, oceny złożoności (ktoś mógł potrzebować dwóch przebiegów pętli inny był sprytniejszy i raz mu wystarczył).
  • Jakość podpowiedzi. Np. w zadaniu polegającym na zamianie pierwszej litery na dużą w podanych słowach zaproponowano by poszukać czy dany język nie ma takiej funkcji. Oczekiwał bym informacji jak podejść do tematu a nie rady by użyć gotowca.
  • Zadanie polegające na znalezieniu najdłuższego słowa w stringu. Nie zaliczyłem wszystkich przypadków testowych bo raz najdłuższym słowem było coś w stylu „123123” czy to jest słowo? Można było podać co autor miał na myśli pisząc „word”.
  • Przykładowe „top solution”. Kiepskie. Losowe czy kto pierwszy? W przykładzie opisanym powyżej użyto przy sprawdzaniu coś w stylu IsLetterOrDigit. Zaproponowane przykłady testowe przeszły ale czy słowem jest „counter-clockwise” lub „I'm”? Inny przykład to wspominana już zamiana pierwszej litery:
    str2 += (char.ToUpper(word[0]) + word.Substring(1) + " ");
    I tak w pętli .Czy faktycznie najlepsze jest sklejanie stringów? Można by podpowiedzieć użycie stringbuildera. Po co spacja za ostatnim wyrazem? Może jakoś bardziej elegancko. Trzecie zadanie które zobaczyłem. Zamiana litery na kolejną w alfabecie. Sprytnie, zamiana na char i + 1. Co się jednak powinno stać jak podamy „z” czy na pewno „{”?
0

A musi byc przez przegladarke. Nie piszesz w c# tylko w jego intepreterze napisanym w javascripcie ;) a przynajmniej tak mi sie wydaje ze to tak dziala. Nie wiem jak z c# ale ksiazki z wydawnictwa Deitel maja sporo zadan do wykonanie po kazdym rozdziale

1

Brak IntelliSense. Nie zrobisz średnika – błąd a dowiesz się po kliknięciu run. Nie pamiętasz kolejności argumentów musisz szukać gdzieś w Google. Praca prawie jak na kartce.

Ja traktuję to jako pozytywne utrudnienie. Ktoś Cię posadzi do poprawki w jakimś pliku i będziesz ładować cały projekt do VS? Bo mi się wydaje, że prościej byłoby odpalić plik nawet w notatniku i poprawić szybko. I nie chodzi tu do końca o C#, a o wszystkie języki ;-)

Naprawdę czas napisania zadania i ilość linii kodu są takie ważne?

To akurat jeden z głupszych wyznaczników oceny zadania (moim zdaniem). Bardziej liczyłbym realizację i ewentualnie złożoność rozwiązania. Procesora? Pamięci? Przy zmianie dużych liter? To nie lata 90 :-)

Jakość podpowiedzi. Np. w zadaniu polegającym na zamianie pierwszej litery na dużą w podanych słowach zaproponowano by poszukać czy dany język nie ma takiej funkcji. Oczekiwał bym informacji jak podejść do tematu a nie rady by użyć gotowca.

Gdzie tu gotowiec? To jest podpowiedź bo nie każdy wie i nie każdy język oferuje wbudowane funkcje/metody do realizacji pewnych zadań. Dzięki temu dowiadujesz się, że Twój język ma takową możliwość więc wykorzystujesz ją, a nie piszesz coś co zostało napisane do gotowego użycia.

Zadanie polegające na znalezieniu najdłuższego słowa w stringu. Nie zaliczyłem wszystkich przypadków testowych bo raz najdłuższym słowem było coś w stylu „123123” czy to jest słowo? Można było podać co autor miał na myśli pisząc „word”.

Słowem w tym przypadku zapewne będzie wszystko co jest rzutowane do stringa. Więc pytanie czy string o wartości 123123 będzie słowem jest średnim pomysłem :P

Przykładowe „top solution”. Kiepskie. Losowe czy kto pierwszy?

To już zależy czy chcesz brać udział w wyścigu szczurów czy chcesz się nauczyć rozwiązywać zadanie w jak najlepszy sposób. Ja wybrałbym to drugie. Bicie się z Azjatami w rankingach to średni pomysł. Chyba, że nie masz nic innego do roboty na najbliższy rok ;-)

Trzecie zadanie które zobaczyłem. Zamiana litery na kolejną w alfabecie. Sprytnie, zamiana na char i + 1. Co się jednak powinno stać jak podamy „z” czy na pewno „{”?

To zależy pewnie od języka. C# używa (chyba nadal) Unicode

int val = (int)'('

Za bardzo się czepiasz tych zadań. Żeby powstały ktoś musiał je wymyślić, napisać i zrobić testy. To, że zrobił je tak, a nie inaczej to tylko i wyłącznie jego "widzimisię" bądź stan wiedzy. Czepianie się nie ma sensu. Też niejednokrotnie spotkałem się z dziwactwami w takich zadaniach i cieszyło mnie to, że mimo dziwactwa udawało się je rozwiązać poprawnie.
Może strona na której rozwiązujesz ma kiepskie zadania pisanie przez hindu :-) - tego nie wiem. Spróbuj innych? Jest tego całe mnóstwo:

  • TopCoder
  • Coderbyte
  • Project Euler
  • HackerRank
  • CodeChef
  • CodeEval
  • Codewars
  • LeetCode

I pewnie jeszcze wiele innych :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1