Zadanie 1 Mediana - Najlepszy Java Developer

Zadanie

Pierwszym rozruchowym zadaniem jest znalezienie mediany dla liczb zmiennoprzecinkowych. ­čśë

Czym jest mediana

Szybkie przypomnienie czym jest mediana.

Jest to warto┼Ť─ç ┼Ťredniej arytmetycznej dw├│ch ┼Ťrodkowych element├│w zbioru uporz─ůdkowanego, w przypadku, gdy zbi├│r ma liczb─Ö element├│w nieparzyst─ů to wtedy wybieramy element ┼Ťrodkowy.

Przykład

1. Maj─ůc zbi├│r:

1, 4, 6, 9

To mediana jest r├│wna: (4 + 6)/ 2 = 5

2. Maj─ůc zbi├│r z nieparzyst─ů ilo┼Ťci─ů element├│w;

1, 4, 10

To mediana jest równa 4.

Punktacja

Za to zadanie można otrzymać maksymalnie 150 expa.

Przygotowanych jest pięć testów, za każdy zdany test otrzymasz 30 expa.

Termin

Zadanie zosta┼éo opublikowane┬á5 listopada 2018 roku, rozwi─ůzania mo┼╝na przesy┼éa─ç do┬á7 listopada 2018 roku┬ádo godziny 23:59. Zadania wys┼éane p├│┼║niej b─Öd─ů automatycznie usuwane.

Format

Zadanie należy wysłać na email: njd@1024kb.pl z tematem: TWÓJ-NICK_MDN.

Wystarczy wys┼éa─ç w za┼é─ůczniku tylko plik r├│wnie┼╝ o nazwie┬áTW├ôJ-NICK_MDN.java, kt├│rego szablon mo┼╝esz pobra─ç st─ůd.

 

Rozwi─ůzanie

Zr├│bmy ma┼ée podsumowanie zadania: rozwi─ůzanie przes┼éa┼éo 18 os├│b,┬ániestety to jest tylko ~30% – cho─ç du┼╝e prawdopodobie┼ästwo, ┼╝e osoby p├│┼║niej zapisane nie wiedzia┼éy o pierwszym zadaniu. Zobaczymy jak b─Ödzie z kolejnymi.

Moje przyk┼éadowe rozwi─ůzania zadania wygl─ůda tak:

import java.util.Arrays;

public class Median {
    static void sort(float [] numbers) {
        for(int i=0;i<numbers.length;i++) {
            for(int j=1;j<numbers.length;j++) {
                if (numbers[j-1] > numbers[j]) {
                    final float temp = numbers[j-1];
                    numbers[j-1] = numbers[j];
                    numbers[j] = temp;
                }
            }
        }

    }

   public static float median(float [] numbers) {
        final int size = numbers.length;
        if (size == 0) {
            throw new IllegalArgumentException("You have to type any numbers.");
        }
        // opcjonalnie - użycie własnego algorytmu sortowanie
        // preferowane u┼╝ycie wbudowanych metod, kt├│rych z┼éo┼╝ono┼Ť─ç obliczeniowa jest mniejsza
        //sort(numbers);
        Arrays.sort(numbers);
        return size % 2 == 0 ? (numbers[(size-1)/2] + numbers[size/2]) / 2.0f : numbers[size/2];
    }
    
    public static void main(String[] args) {
        float median = median(new float[]{1.0f, 3.0f, 2.0f, 1.0f});
        System.out.println("Mediana: " + median);
    }
}

Na pocz─ůtku sprawdzam, czy aby na pewno tablica ma liczby – poda┼éem to jako przyk┼éad, ┼╝e warto pami─Öta─ç o sprawdzaniu takiego przypadku w kolejnych zadaniach. W tym zadaniu nie bra┼éem tego pod uwag─Ö, ze wzgl─Ödu, ┼╝e nie powiedzia┼éem o tym w tre┼Ťci zadania.

Za ka┼╝dy ┬ázdany test gracz otrzyma┼é 30 expa, testy wygl─ůda┼éy tak:

import org.junit.Assert;
import org.junit.Test;
import pl.maniaq.Median;

public class TestMedian {

    @Test
    public void firstMedianTest() {
        //is
        float numbers[] = {-2.1f,  -.7f, 1.5f, .0f,136.5f, 4.0f, .3f,  800.3f};

        //when
        float result = Median.median(numbers);

        //expected
        Assert.assertEquals(.15f, result, 0);
    }

    @Test
    public void secondMedianTest() {
        //is
        float numbers[] = {100.001f, 102.03f, -23.4f, -17.8f, 400.0f};

        //when
        float result = Median.median(numbers);

        //expected
        Assert.assertEquals(100.001f, result, 0);
    }

    @Test
    public void thirdMedianTest() {
        //is
        float numbers[] = {-2004.5f, 0.0001f, -0.001f, -14894.1f};

        //when
        float result = Median.median(numbers);

        //expected
        Assert.assertEquals(-1002.2505f, result, 0);
    }

    @Test
    public void fourthMedianTest() {
        //is
        float numbers[] = {.0f, -483.5f};

        //when
        float result = Median.median(numbers);

        //expected
        Assert.assertEquals(-241.75f, result, 0);
    }

    @Test
    public void fifthMedianTest() {
        //is
        float numbers[] = {0.7f};

        //when
        float result = Median.median(numbers);

        //expected
        Assert.assertEquals(.7f, result, 0);
    }

}

Kilku osobom nie przesz┼éy wszystkie testy, warto uruchomi─ç sw├│j algorytm dla tych danych wej┼Ťciowych i zobaczy─ç jak zachowuje si─Ö Wasz program. Wed┼éug mnie najwa┼╝niejsz─ů cz─Ö┼Ťci─ů zadania jest wyci─ůganie wniosk├│w. ­čśë

Uczulam na to, aby┬ápliki by┼éy podawane w za┼é─ůczniku w ustalonym formacie tj. z odpowiedni─ů nazw─ů!┬áUsprawnia to proces sprawdzania i pozwala na unikni─Öcie pomy┼éki przy wpisywaniu wyniku.

Prosz─Ö, wpisuje sw├│j nick, kt├│ry podali┼Ťcie podczas rejestracji na┬áhttps://njd.1024kb.pl.

Kolejne zadanie pojawi si─Ö ju┼╝ 9 listopada.

Gratuluj─Ö wszystkim podj─Öcia zadania i ┼╝ycz─Ö powodzenia w kolejnym! ­čśë

 

Kamil Klimek

Od 2016 jestem programist─ů Java. Przez pierwsze 4 lata pracowa┼éem jako Full Stack Java Developer. P├│┼║niej postanowi┼éem postawi─ç nacisk na Jav─Ö, ┼╝eby jeszcze lepiej j─ů pozna─ç.

Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x