Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak obliczyć medianę
Malinaa
post 17.07.2024, 12:35:39
Post #1





Grupa: Zarejestrowani
Postów: 572
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


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 17.07.2024, 13:37:50
Post #2





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Malinaa
post 17.07.2024, 13:41:58
Post #3





Grupa: Zarejestrowani
Postów: 572
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


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 17.07.2024, 13:51:15
Post #4





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
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 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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Malinaa
post 17.07.2024, 14:07:15
Post #5





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

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


Ładnie i szybko się odmłodziłeś 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


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 17.07.2024, 14:20:37
Post #6





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
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 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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Malinaa
post 17.07.2024, 14:29:05
Post #7





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

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


Jak się nauczę szybko odmładzać to zrobię w godzinę.


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 17.07.2024, 14:38:30
Post #8





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
Dołączył: 27.12.2004




biggrin.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Malinaa
post 18.07.2024, 15:14:29
Post #9





Grupa: Zarejestrowani
Postów: 572
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?


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 19.07.2024, 07:38:34
Post #10





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
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 smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Malinaa
post 19.07.2024, 09:21:39
Post #11





Grupa: Zarejestrowani
Postów: 572
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?


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 19.07.2024, 09:28:09
Post #12





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
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);
        
}


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Malinaa
post 19.07.2024, 11:52:53
Post #13





Grupa: Zarejestrowani
Postów: 572
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?


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 19.07.2024, 13:39:03
Post #14





Grupa: Moderatorzy
Postów: 36 556
Pomógł: 6314
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? 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? smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Malinaa
post 20.07.2024, 10:56:31
Post #15





Grupa: Zarejestrowani
Postów: 572
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 wink.gif czuje się nowym człowiekiem, oświecony... smile.gif Thanks



--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2025 - 00:36