1 / 10
Sep 2023

Czy ktoś widzi w moim rozwiązaniu jakiś błąd?

Zadanie nie przechodzi i wydaje mi się, że jest jakiś przypadek testowy który chce zabrać więcej wody z kubka niż w nim naprawdę jest. Jak usunę wyjątki w metodach fill i release dostaje rezultat “Niepoprawny wynik” a jak zostawię to mam błąd wykonania

  • created

    Sep '23
  • last reply

    Sep '23
  • 9

    replies

  • 319

    views

  • 4

    users

  • 11

    likes

  • 2

    links

Okazało się, że w testach pojawiały się kubki, które miały większą pojemność niż obiecane p. Wadliwy test został wyłączony. Teraz twój program przechodzi.

Wcześniej nikt się na to nie nadział, bo nikt nie sprawdzał zakresu danych. Akurat w tym zadaniu, większa pojemność kubka nie miała znaczenia. Dużo nie zmieniała.

To pokazuje, dlatego nie zachęcamy, do sprawdzania zakresów danych wejściowych. Jeśli są poza zakresem, to Twój program nadal powinien jakoś działać.

Co nie zmienia faktu, że treść wprowadza w błąd, więc dzięki za wyłapanie tego.

Druga sprawa, to zastanów się, czy da się prościej rozwiązać to zadanie, zamiast przeprowadzać symulację przelewania zawartości kubków

Właśnie! To tak jakby w zadaniu polegającym na sumowaniu liczb naturalnych od jeden do n liczyć to w pętli zamiast skorzystać ze wzoru na sumę szeregu arytmetycznego :slight_smile:

Niestety nie zgodzę się z próbą wybielenia
Pisząc:

Wcześniej nikt się na to nie nadział, bo nikt nie sprawdzał zakresu danych. Akurat w tym zadaniu, większa pojemność kubka nie miała znaczenia. Dużo nie zmieniała.

To pokazuje, dlatego nie zachęcamy, do sprawdzania zakresów danych wejściowych. Jeśli są poza zakresem, to Twój program nadal powinien jakoś działać.

W zadaniu wyraźnie przedstawiane są reguły biznesowe które powinny zostać uwzględnione. Zadanie przed poprawieniem błędnego testu było akceptowane w wielu przypadkach co oznaczało, że niektórzy dostali zielony wynik rozwiązując to zadanie po prostu źle. Rozwiązanie bowiem pozwalało na przelewanie się kubka
Jeżeli mam pojemność kubka 5l to logicznym jest, że nie naleje do niego 6l (to naturalne i takie życiowe)
IMO w zadaniu ważniejsze jest przestrzeganie zasad czystego kodu niż algorytm wyliczeniowy. Zgodzę się, że można to zadanie zrobić inaczej chociażby liczyć sumę napełnienia kubków i pouzupełniać kubki od prawej strony.
Refaktoryzacja kodu jest kolejnym krokiem który zawsze wykonuje pisząc kod (zazieleniam kod a następnie próbuje go ulepszyć). Niestety w tym przypadku nie było to możliwe ponieważ początkowa wersja nie przechodziła sprawdzenia

Właśnie! To tak jakby wyczytać w książeczce serwisowej auta, że bak ma 50l i próbować wlać do niego 100l twierdząc, że to nie ma znaczenia :slight_smile:

Na początku proponuje napisać kod który spełnia wszystkie wymagania biznesowe a potem przejść do jego refaktoryzacji. Algorytm to detal

Zgadzam się w 100%. Jest to ewidentne przeoczenie autora i testerów (w tym mojej skromnej osoby).
Sam także kilka razy trafiłem na podobną sytuację rozwiązując inne zadania i wiem, że jest to bardzo frustrujące.

Jedne co mogę na to powiedzieć, to przepraszam i zaprosić do grona problem setterów, żebyś sam zobaczył, jak wygląda proces przygotowywania i testowania zadań. Szczególnie przed konkursem, kiedy trzeba przygotować nie jedno, ale 10-20 zadań na różnych poziomach trudności.

Błędy się zdarzają, za co przepraszamy i staramy się je naprawiać, jak tylko wyjdą na jaw.

Co nie zmienia faktu, że dobrze, jak program jest odporny na takie anomalie.

Po prostu lejesz do pełna albo aż ci się skończą pieniądze :wink:

W mojej wypowiedzi chciałem tylko zaznaczyć, że wymagania biznesowe są ważniejsze od optymalizacji i jeżeli są nie można ich bagatelizować :slight_smile:

W tym zadaniu pięknie to wyszło
n osób dostało potwierdzenie poprawnie działającego kodu mimo, że dopuścili się sytuacji w której dochodziło do przelewania kubków ^^ co z tego, że ich rozwiązanie mogło być bardzo szybkie / zjadające bardzo mało pamięci gdy nie spełniało wymagań zadania :slight_smile:

Bardzo interesujące podejście - algorytm to detal…
Obawiam się, że z takim podejściem nie wyjdziesz poza poziom łatwych zadań, a nawet z wieloma łatwymi będziesz miał problem.

A czy czasami nie ma przekroczenia czasu?

Jak zazieleniłeś, to po co refaktoryzacja kodu?

Ale taki kod, wykonuje właśnie jakiś algorytm, albo nawet wykorzystuje kilka algorytmów. Sortowanie bąbelkowe to też algorytm [przeważnie] wolniejszego sortowania. Modelowanie, czy symulacja przelewania z kubka do kubka, wg zaleceń autora zadania to też algorytm.

Jeżeli wiesz co i jak robisz, refktoryzacja jest zupełnie zbędna. A algorytmy, a już szczególnie na spoju to podstawa.

PS
Nikt nie jest nieomylny, ja często się mylę.
A Ty?
Rozlewasz wodę:

i chociaż dla działania algorytmu [sposobu rozwiązania] zadania nie ma to zupełnie znaczenia, jednak w zadaniu wyraźnie napisano [nawet w tytule], że chodzi tu o czekoladę, a nie zwykłą wodę :wink: