Pomoc w logice zadania

0

Hej. Robie sobie zadanie z CodeWars i natrafiłem na problem. Wytyczne zadanie sa natepujące:

stations is a list/array of distances (miles) from one station to the next along the Pony Express route.Implement the riders method/function, to return how many riders are necessary to get the mail from one end to the other. NOTE: Each rider travels as far as he can, but never more than 100 miles.

Na poczatku zrobiłem zle gdyz zsumowałem wszystkie odległosci pobrane z listy i jesli na przyklad bylo 450 to wiadomo ze 5 poslancow jest potrzebnych ale tak to nie działa. Wpadłem na pomysł aby pobierac odleglosci z tablicy, sumowac je i w instrukcji warunkowej zaznaczyc aby po sumowaniu odległosci nie przekraczały 100. Te wartosci pozniej wsadzic do innej tablici i zwrocic w return wielkosc tej tablicy. Moj kod prezentuje sie nastepująca ale nie działa tak jak bym chciał. Jesli można to jeszcze inaczej wykombinować to bym prosił o jakies wskazówki ale wydaje mi sie ze tak jak ja wymyslilem moze byc ok .

public int riders (List<Integer> x) {
        int temporaryvalue = 0;
        List<Integer> distancesOfRiders = new ArrayList<>();

        for (int i = 0; i <x.size() ; i++) {
            if ( temporaryvalue < 101) {
                temporaryvalue += x.get(i);

            }
            distancesOfRiders.add(temporaryvalue);
        }

        return distancesOfRiders.size();
    }

0

Pomysł raczej dobry, ale ten program w ogóle robi co innego.

        for (int i = 0; i <x.size() ; i++) {
            if ( temporaryvalue < 101) {
                temporaryvalue += x.get(i);

            }
            distancesOfRiders.add(temporaryvalue);
        }

Dodajesz wartość z x do temporaryvalue jak jest mniejsza od 101 - ale jeździec nie może jechać więcej niż 100, więc raczej powinieneś sprawdzić czy suma temporaryvalue i kolejnego dystansu nie przekracza 100.
W tym momencie dodajesz coś do distancesOfRiders dla każdej wartości z x a chcesz jak rozumiem tylko po przekroczeniu tej setki, zapomniałeś chyba o jakimś "else".
Zapomniałeś też o czyszczeniu temporaryvalue jak się "przepełni".

0

Hmm może przedstawie inaczej moją logikę . Zalozmy ze w tablicy z ktorej pobieramy mamy takie wartości : 45 , 15 , 10 , 48 , 41 , 47 , 40 , 9 , 22. Po zsumowaniu dałoby 275 czyli 3 osób potrzeba. Ale jednak sprawa wyglada inaczej bo jak powiedziane w zadaniu rider moze przejechac maksymalnie tyle ile moze ale nie wiecej niz 100, czyli:

Rider 1 = 43+15+10
Rider 2 = 48+41
Rider 3 = 47+40+9
Rider 4 = 22

Moja idea poleagała na tym aby zrobic tymczasowa zmienna ktora by zsumowała te odległosci aby nie przekraczały 100 czyli:

Rider 1 = 68
Rider 2 = 89
Rider 3 = 96
Rider 4 = 22

Moimi temporaryValue byłyby odpowiednio 68, 89, 96, 22 wsadzone do listy czy tablicy. Potem zwrocic jej wielkość która odzwierciedlałaby ile jeźdźców potrzeba. Wiem że ta pętla którą przedstawiłem działa nie tak jak należy ale innego pomysłu nie mam. Wiem że trzeba iterować po liscie która otrzymujemy w argumencie metody, czyli musze uzyc petli for na początku pobierajac poszczególne wartości.
Poźniej już nie wiem jak te warunki poukładać żeby wykonywało sie wszystko tak jak przedstawiłem.

@lackOfMotivationException Nie rozumiem za bardzo o tym oczyszczeniu jak to przeprowadzić ? A to nie działa w ten sposób ze jesli pobieram kolejna wartość z podanej listy i dodam ją już do temporaryValue ale po dodaniu przekroczy 100 to ta ostatnia wartość nie wróci na swoje miejsce i od niej zacznie sie sumowanie kolejnego teporaryValue czyli jakby jeźdźa 2. Ona przepada czy jak ???

0

@lackOfMotivationException Nie rozumiem za bardzo o tym oczyszczeniu jak to przeprowadzić ? A to nie działa w ten sposób ze jesli pobieram kolejna wartość z podanej listy i dodam ją już do temporaryValue ale po dodaniu przekroczy 100 to ta ostatnia wartość nie wróci na swoje miejsce i od niej zacznie sie sumowanie kolejnego teporaryValue czyli jakby jeźdźa 2. Ona przepada czy jak ???

Właśnie nie wróci. Musisz ją ręcznie ustawić znowu na 0.
Co do reszty, rozumiem Twoją logikę i jak poprawisz kod według moich wskazówek, to powinno zadziałać (choć ja też mogę czegoś nie przewidzieć :p)

Chyba że kodu nie rozumiem, x to jest t lista odległości, tak?

0

Btw, jak nie wiesz czemu kod nie działa, to debuggera polecam

0

Wykombinowałem coś takiego już jestem praktycznie o włos. Ale gdzies siedzi mały bład. Mózg mi paruje gdzie ten feler siedzi

public int riders (List<Integer> x) {
        int temporaryvalue = 0;
        List<Integer> distancesOfRiders = new ArrayList<>();

        for (int i = 0; i <x.size() ; i++) {

            if ( temporaryvalue + x.get(i) < 101) {
                temporaryvalue += x.get(i);
            }
            if ( temporaryvalue + x.get(i) > 100 ){
                System.out.println(temporaryvalue);
                distancesOfRiders.add(temporaryvalue);
                temporaryvalue = 0;
                i--;
            }

        }
        return distancesOfRiders.size();
    }

Konsola pokazuje mi takie wartości :
68
89
64
87

czyli zgadzało by się ze potrzeba 4 jeźdźcó ale odległosci sie nie pokrywają znaczy sie pierwsze 2 sie zgadzają a nastepne 2 nie. Wcześniej kiedy nie miałem instrukcji " i--; " były tylko do listy dodane 2 wartosci 68 i 64 bo po każdym dodaniu do listy przeskakiwało do nastepnego indeksu i zapominało tej liczby ktorej potrzeba. Dlatego po dodaniu do listy umiescilem zeby ' i ' było zmniejszone o 1 co zapobiegało pominięciu. Nie potrafię dostrzec co moge zmienić na moje oko powinno teraz działać ;/.

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