Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak obliczyć medianę
Malinaa
post
Post #1





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Jak obliczyć medianę w JavaScript?
Jest takie zadanie:
https://dbm.org.pl/__TESTY/test-1.htm
Kto wie jak się to robi w JS i dla przykładu wyznaczy medianę wydatków,
o co chodzi z food, fuel w expenses?

Ten post edytował Malinaa 17.07.2024, 12:40:59
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Chyba juz jestem za stary na te testy rekrutacyjne, ale nie kumam jak sie tresc zadania ma do przykladowych danych . starosc nie radosc
Go to the top of the page
+Quote Post
Malinaa
post
Post #3





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Ach faktycznie już wiem, dlaczego też nie kumam jak się treść zadania ma do przykładowych danych.
No, ale można spojrzeć na zadanie, że jego skumanie jest odmładzające...

Ten post edytował Malinaa 17.07.2024, 13:45:37
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




edit: no ale dobra, przyklad podali chujowy ale w sumie co za roznica

Tu masz jak pobrac pierwsza niedziele miesiaca

https://stackoverflow.com/questions/4018879...t-sunday-in-apr

no to majac miesiace okreslasz dla nich pierwsza niedziele miesiaca, potem dla kazdego miesiaca lecisz po dniach z expenses i jesli dzien jest mniejszy lub rowny pierwszej niedzieli to do tablicy zbiorczej dla miesiaca wrzucasz wszystkie wydatki. z tresci zadania nie wynika ze mediana ma byc podzielona na typy wydatkow wiec wrzucasz wszystkei wydatki do jednego wora, czy to paliwo czy to jedzenie czy cokolwiek innego to leci do jednego twojego wora wydatkow.

Majac wor wydatkow dla miesiaca, to wyliczasz dla niego mediane. Mediana zakladam wiesz co to jest?

No i tyle (IMG:style_emoticons/default/smile.gif)

edit: w sumie mala poprawka. nie liczysz mediany dla kazdego miesiaca, tylko jedna mediane z wydatkow do pierwszej niedzieli kazdego miesiaca. Ech, czytanie tresci zadania ze zrozumenie sie klania dla mnie ;D
Go to the top of the page
+Quote Post
Malinaa
post
Post #5





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Ładnie i szybko się odmłodziłeś (IMG:style_emoticons/default/smile.gif)
Wygląda, że w JS zajmie mi to więcej czasu i pewnie cały dzień będę się odmładzał, albo po prostu pójdę na basen.

Podany link jest trefny, sprawdzałem godzinę temu dla różnych dat i oszukuje.
Mediana to taka średnia, a dokładnie jak wyliczyć też nie ma problemu, bo informacja jest ogólnie dostępna.

Dzięki za info.

Ups. Oszukuje to co poniżej, po dodaniu
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.1/moment.min.js"></script>
pierwsze rozwiązanie sprawdzam ponownie i działa na 100% Ok. Thanks.

Ten post edytował Malinaa 17.07.2024, 14:19:32
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Podany link jest trefny, sprawdzałem godzinę temu dla różnych dat i oszukuje.

Podany tam przyklad

function firstSunday(month, year) {
let tempDate = new Date();
tempDate.setHours(0,0,0,0);
// first SUNDAY of april
tempDate.setMonth(month);
tempDate.setYear(year);
tempDate.setDate(1);

let day = tempDate.getDay();
let toNextSun = day !== 0 ? 7 - day : 0;
tempDate.setDate(tempDate.getDate() + toNextSun);

return tempDate.toDateString();
}

jest jak najbardziej ok, musisz tylko pamietac ze miesiace w js liczy sie od zera, jak chcesz pazdziernik to masz wywolywac to tak

firstSunday(9, 2023)

a jak wrzesien to tak
firstSunday(8, 2023)

a jak styczen to tak
firstSunday(0, 2023)

Tak wiem, pojebane (IMG:style_emoticons/default/wink.gif)


Cytat
Wygląda, że w JS zajmie mi to więcej czasu i pewnie cały dzień będę się odmładzał, albo po prostu pójdę na basen.

no tak szczewrze powiedziawszy to jest jedno z tych zadan na jedna godzine.
Go to the top of the page
+Quote Post
Malinaa
post
Post #7





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Jak się nauczę szybko odmładzać to zrobię w godzinę.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




(IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
Malinaa
post
Post #9





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Zadanie wgląda tak:
https://dbm.org.pl/__TESTY/zadanie-1.htm
ale była jeszcze informacja o testach automatycznych.
Jak przetestować taki kod, aby przeszedł testy automatyczne?
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




oni poprostu maja zestaw danych wejsciowych i wyjsciowych i po przepuszczeniu przez twoja funkcje, mechanizm testow sprawdza czy wszystkie wyjscia sie zgadzaja dla danych wejsc.
Oni ci podali schemat jak mniej wiecej struktura kodu powinna wygladac bo im latwiej taka struktrure testowac. No ale ty zrobiles po swojemu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Malinaa
post
Post #11





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


No tak do pice (po naszemu ja pierdole), stary a głupi jak młody, albo uparty jak osioł, no nie wiem...
Jak to samo zrobić nie po swojemu, a po ichniejszemu?
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no oni podalo ci kod js jak to ma wygladac. podali ci funkcje ktora ma przyjac te expenses i zwrocic mediane.

No w srodek tej funkcje wloz swoj kod js i juz. Tak, w js mozna deklarowac funkcje w funkcji

czyli mniej wiecej tak to mogloby byc,


Kod
function ICHFUNKCJA(expenses) { //sorki, nie pamietam jak oni to nazwali a ty skasowales zrodlo


    function getFirstSunday(year, month) {
            let firstDay = new Date(year, month - 1, 1);
            let firstSunday = new Date(firstDay);
            
            firstSunday.setDate(firstDay.getDate() + (7 - firstDay.getDay()) % 7);
            
            return firstSunday;
        }
        
        function calculateMedian(amount) {
            if (amount.length === 0) return null;
            
            amount.sort((a, b) => a - b);
            
            const middle = Math.floor(amount.length / 2);
            
            return amount.length % 2 !== 0 ? amount[middle] : (amount[middle - 1] + amount[middle]) / 2;
        }
        
            let allExpenses = [];
            
            for (let expense in expenses) {
                let [year, month] = expense.split('-').map(Number);
                let firstSunday = getFirstSunday(year, month);
                
                for (let day in expenses[expense]) {
                    let currentDate = new Date(year, month - 1, Number(day));
                    
                    if (currentDate <= firstSunday) {
                        for (let category in expenses[expense][day]) {
                            allExpenses.push(...expenses[expense][day][category]);
                        }
                    }
                }
            }
        
            return calculateMedian(allExpenses);
        
}
Go to the top of the page
+Quote Post
Malinaa
post
Post #13





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Funkcja w funkcji - nie wiedziałem, ale kiedy po tym kodzie dam:

console.log(solution(expenses)); // nazwali to solution(expenses)

to w wersji poprzedniej jak i poprawionej w konsoli wyświetli się to samo = wynik,
więc nadal nie kumam, dlaczego musi być funkcja w funkcji.

I jeżeli chcą, aby podać wynik i przesłać plik (do testu) to ten plik, czy może być z HTML'em nazwa_pliku.html
czy musi być np. nazwa_pliku.js tak, aby przeszło (przesłany plik przeszedł) test automatyczny?
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no a po co tam html? Ma to byc plik .js z takim kodem

Kod
    function getFirstSunday(year, month) {
            let firstDay = new Date(year, month - 1, 1);
            let firstSunday = new Date(firstDay);
            
            firstSunday.setDate(firstDay.getDate() + (7 - firstDay.getDay()) % 7);
            
            return firstSunday;
        }

        function calculateMedian(amount) {
            if (amount.length === 0) return null;
            
            amount.sort((a, b) => a - b);
            
            const middle = Math.floor(amount.length / 2);
            
            return amount.length % 2 !== 0 ? amount[middle] : (amount[middle - 1] + amount[middle]) / 2;
        }


function solution(expenses) {


        
        
            let allExpenses = [];
            
            for (let expense in expenses) {
                let [year, month] = expense.split('-').map(Number);
                let firstSunday = getFirstSunday(year, month);
                
                for (let day in expenses[expense]) {
                    let currentDate = new Date(year, month - 1, Number(day));
                    
                    if (currentDate <= firstSunday) {
                        for (let category in expenses[expense][day]) {
                            allExpenses.push(...expenses[expense][day][category]);
                        }
                    }
                }
            }
        
            return calculateMedian(allExpenses);
        
}

Tam html do niczego nikomu nie jest potrzebny

Cytat
to w wersji poprzedniej jak i poprawionej w konsoli wyświetli się to samo = wynik,

No to chyba dobrze ze to samo sie wyswietla co nie? (IMG:style_emoticons/default/wink.gif)

Cytat
więc nadal nie kumam, dlaczego musi być funkcja w funkcji.

No bo oni podali ci pseudokod jak ma wygladac ktory nie uwzglenial dodatkowych funkcji poza funkcja glowna. No to napisalem bys wrzucil funkcje do tej glownej. No ale jak widzisz wyzej wyrzucilem je po za. Zadowolony? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Malinaa
post
Post #15





Grupa: Zarejestrowani
Postów: 573
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


Ah przepadło, stoper był włączony i czas mnie gonił, więc wysłałem jak było w pliku html

Cytat
No to chyba dobrze ze to samo sie wyswietla co nie?


A pewnie, że dobrze. Powstało jednak pytanie jeżeli jest dobrze, po co poprawiać na dobrze funkcja w funkcji.
No, ale teraz kumam (chociaż nie zostało to jasno określone), że ze względu na podany pseudokod funkcja w funkcji jest mega dobrze
i najlepiej nie wyrzucać funkcji pomocniczych poza główną, a będziesz Pan zadowolony, co nawiasem mówiąc brzmi jako tako.
Z powodów powyższych poza napadem niekontrolowanego śmiechu (IMG:style_emoticons/default/wink.gif) czuje się nowym człowiekiem, oświecony... (IMG:style_emoticons/default/smile.gif) Thanks

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.09.2025 - 18:39