Projekt zaliczeniowy z WDI

Histogram (link do wikipedii - polecam przeczytać wstęp i obejrzeć obrazki) jest graficznym przedstawieniem rozkładu danych względem jakiejś cechy. Żeby go narysować, musimy najpierw podzielić zakres wartości na kubełki, tzn przedziały równej długości, a następnie policzyć, ile wartości przypada na każdy przedział (tzn ile trafia do danego kubełka).

Celem projektu jest napisanie programu dzielącego otrzymane dane na kubełki tak, żeby można na ich podstawie było narysować histogram.

Powiedzmy, że otrzymujemy data_size liczb całkowitych, najmniejszą z nich nazwijmy min, a największą max. Chcemy podzielić je na buckets_count kubełków, tak, żeby min była najmniejszą wartością trafiającą do pierwszego kubełka, a max - największą wartością trafiającą do ostatniego kubełka. W tym celu musimy najpierw podzielić cały zakres [min, max] na buckets_count przedziałów równej długości. Przykładowo, jeśli buckets_count=3, to nasz podział wyglądałby następująco:

bucket_0 - [min, min + bucket_width - 1]
bucket_1 - [min + bucket_width, min + 2 * bucket_width - 1]
bucket_2 - [min + 2 * bucket_width, max]

Znalezienie wzoru na bucket_width jest częścią zadania. Można założyć, że przedział będzie zawsze dzielił się na buckets_count równych kubełków bez reszty.

Gdy mamy już zdefiniowane przedziały liczb, które mają trafiać do każdego kubełka, wystarczy dla każdej liczby ze zbioru danych sprawdzić, do którego kubełka trafi.

Wynikiem działania programu ma być wypisanie na ekran przedziału każdego kubełka i tego, ile liczb do niego "wpadło". Format tego wypisywania jest dowolny, o ile będzie czytelny.

Termin i sposób oddania:

Kod rozwiązania proszę przesłać na mojego maila do 22 stycznia 23:59.

Za w pełni poprawne zadanie można uzyskać 30 punktów.

Opis danych wejściowych:

Program ma wczytać najpierw dwie liczby całkowite: data_size oraz buckets_count.

Następnie program ma wczytać data_size liczb całkowitych, które będzie zliczał do odpowiednich kubełków.

Przykłady:

Przykład 1

Dla danych wejściowych:

5 2
1 2 4 3 1

Program może wpisać coś takiego:

bucket 0: [1, 2], count: 3
bucket 1: [3, 4], count: 2

Przykład 2

Dla danych wejściowych:

10 4
1 1 1 1 1 20 20 20 10 10

Program może wpisać coś takiego:

bucket 0: [1, 5], count: 5
bucket 1: [6, 10], count: 2
bucket 2: [11, 15], count: 0
bucket 3: [16, 20], count: 3

Przykład 3

Dla danych wejściowych:

10 20
1 1 1 1 1 20 20 20 10 10

Program może wpisać coś takiego:

bucket 0: [1, 1], count: 5
bucket 1: [2, 2], count: 0
bucket 2: [3, 3], count: 0
bucket 3: [4, 4], count: 0
bucket 4: [5, 5], count: 0
bucket 5: [6, 6], count: 0
bucket 6: [7, 7], count: 0
bucket 7: [8, 8], count: 0
bucket 8: [9, 9], count: 0
bucket 9: [10, 10], count: 2
bucket 10: [11, 11], count: 0
bucket 11: [12, 12], count: 0
bucket 12: [13, 13], count: 0
bucket 13: [14, 14], count: 0
bucket 14: [15, 15], count: 0
bucket 15: [16, 16], count: 0
bucket 16: [17, 17], count: 0
bucket 17: [18, 18], count: 0
bucket 18: [19, 19], count: 0
bucket 19: [20, 20], count: 3

Przykład 4

Dla danych wejściowych:

20 5
3 0 3 -1 4 2 -3 1 0 -3 -1 1 0 0 -4 2 1 -5 3 4

Program może wpisać coś takiego:

bucket 0: [-5, -4], count: 2
bucket 1: [-3, -2], count: 2
bucket 2: [-1, 0], count: 6
bucket 3: [1, 2], count: 5
bucket 4: [3, 4], count: 5

Przykład 5

Dla danych wejściowych:

100 10
8 -3 19 19 4 11 -9 -17 17 3 -16 8 -5 12 -10 -3 -6 -13 11 -2 -16 -3 8 -4 -9 -6 -4 -4 -13 -11 18 -10 -15 7 -11 9 -19 7 20 2 -4 -3 1 -12 2 4 -17 18 -16 -8 1 7 20 8 16 -8 2 -9 -3 -9 -11 -3 -10 -2 -3 8 8 7 17 13 -9 -19 9 -16 16 0 -1 14 18 1 -15 20 -8 12 3 20 -8 -19 4 -11 18 1 -19 -1 7 -16 17 6 1 1

Program może wpisać coś takiego:

bucket 0: [-19, -16], count: 11
bucket 1: [-15, -12], count: 5
bucket 2: [-11, -8], count: 16
bucket 3: [-7, -4], count: 7
bucket 4: [-3, 0], count: 12
bucket 5: [1, 4], count: 14
bucket 6: [5, 8], count: 12
bucket 7: [9, 12], count: 6
bucket 8: [13, 16], count: 4
bucket 9: [17, 20], count: 13

Przykład 6

Dla danych wejściowych:

1000 10
17 -19 18 19 5 -1 -3 7 -11 13 1 -19 -16 -9 10 9 8 3 -12 19 14 11 6 -11 2 16 5 1 8 -9 5 13 18 -6 1 -14 -6 18 -9 -13 -12 -7 -12 -12 16 -4 19 -16 -16 19 9 11 6 18 10 -5 -4 5 -18 16 -2 4 18 -1 9 18 9 19 6 1 -4 -15 9 -17 -5 5 7 -3 -6 5 15 6 -19 -17 5 -15 -11 5 -8 4 11 -11 8 -2 -14 -10 -15 16 -11 -2
1 4 -5 5 -19 18 -7 -10 18 8 -6 -14 -5 19 12 15 -4 -18 17 -15 4 -12 2 13 -19 2 7 11 -17 -12 -1 -17 8 -17 -12 4 2 -14 -14 5 18 18 2 11 -5 -10 6 0 16 -4 -9 -7 -1 17 -16 4 2 12 10 -7 10 -6 10 20 -4 -13 19 -4 -9 7 18 15 12 10 9 3 -18 9 6 11 5 -15 13 3 -3 -17 -12 2 12 -7 11 20 4 8 -4 -11 10 -7 -18 10
-11 7 -1 12 15 4 14 -6 -1 -2 8 8 -9 -1 -16 9 13 6 4 4 -15 1 14 -11 19 3 -13 -16 15 14 18 -1 -4 -18 2 0 0 18 5 -6 15 12 -9 1 2 14 -5 -10 18 5 -7 -14 -16 3 20 -2 6 6 -16 -19 3 -11 1 10 -6 -18 20 5 4 8 19 14 -10 -2 -14 5 -18 15 -5 -4 -3 -6 -4 12 9 -16 -1 -8 -8 8 7 -6 -6 20 -9 9 -17 20 15 -12
-8 -9 -4 15 13 12 -3 16 0 14 -17 5 -7 -19 18 -6 9 -3 -17 -9 -5 6 8 18 -12 1 19 12 4 -6 -11 0 -6 18 -13 -5 -4 -11 -12 -5 0 -10 -3 18 -7 -6 -18 12 20 -8 -19 4 -3 12 3 12 -3 -12 -16 15 -5 16 5 -2 -4 0 -13 -2 4 -4 4 3 15 16 5 -4 -15 -9 4 -6 -17 -12 -4 -4 -16 0 -4 15 3 3 -9 16 16 -3 20 -7 -8 -9 -6 -7
-7 7 10 -2 13 9 13 18 18 11 16 -19 -3 -14 -5 9 11 7 -15 8 -16 -2 17 0 1 9 -18 3 11 18 11 -14 3 15 -16 3 -19 14 17 18 16 10 -7 -5 6 -2 -13 8 -19 10 18 -6 -8 4 -1 -3 12 -8 10 10 -6 -13 7 13 -9 -17 -17 -17 -4 16 18 1 0 7 4 -13 10 -14 -4 3 8 -5 -15 -8 -5 7 -10 11 -14 -15 -4 -5 14 19 16 15 -10 15 -16 -15
8 14 8 -10 -16 12 -6 -14 6 -4 -17 -10 -7 16 7 15 -1 0 -16 8 9 10 1 4 -16 -17 20 11 -8 1 -18 2 -10 16 -19 5 -7 -19 20 -9 16 -8 11 -1 -9 -16 -8 -10 17 14 15 7 -13 8 -4 20 -7 16 -2 1 1 -2 -8 19 -13 -17 -15 20 -13 -8 19 -17 -5 -6 2 -15 -14 -18 9 11 15 -14 0 13 -3 19 8 15 14 -19 -1 18 6 3 -3 0 -3 -10 7 -3
-8 1 5 8 -14 4 20 16 14 4 -5 -12 -12 -3 5 -1 -7 10 0 3 6 17 -2 17 -3 11 3 -4 8 -15 -10 4 -10 16 -3 3 3 -16 7 -13 -16 -14 -14 17 -5 -1 -1 5 14 -13 3 -17 -9 12 1 -16 -11 -11 15 -11 -16 -5 -15 16 -7 10 -11 -10 -6 -11 5 7 7 -1 2 2 16 -19 20 20 18 6 8 -18 -3 4 -2 8 20 -19 16 8 -18 -12 4 3 18 -11 -7 14
-1 -1 -12 17 -3 -19 12 -2 13 6 -6 -9 1 10 -7 -3 16 -13 -10 5 12 -19 -10 -5 10 10 2 20 -10 -13 -1 -14 -16 -9 -19 8 12 -9 -3 16 19 -7 -5 20 -4 -18 18 -1 16 8 10 1 -19 11 10 9 -18 -10 -4 -3 -17 12 8 -17 20 7 20 -2 10 -15 -2 2 -13 2 19 -1 -2 -10 5 8 -15 3 -19 -5 -5 18 0 -3 6 18 14 4 11 -17 -6 17 19 -15 4 8
15 8 4 5 -19 -17 8 2 -1 -15 10 17 3 2 19 7 -5 -7 -10 13 -14 -18 19 -9 3 19 -13 11 1 -6 -12 -15 15 14 -15 15 19 10 6 9 -7 -18 -8 14 4 12 7 -19 -8 13 -4 3 6 -15 -15 18 17 17 -1 -12 6 -5 -11 -16 -18 -16 3 -5 -6 8 1 -5 -6 2 -19 1 -17 -18 4 -10 16 18 -6 12 2 -13 5 18 7 -13 15 10 -16 12 17 -15 -8 19 4 7
-17 -18 4 3 19 -10 -3 16 -11 -6 8 -1 -14 8 -8 19 16 18 12 -12 -17 -15 -18 15 -1 -4 15 -19 8 0 -11 -9 2 10 7 11 -8 -14 -2 0 -3 1 -19 10 12 2 -7 -17 19 -5 10 12 -10 -1 -18 9 -17 9 -16 8 -19 3 14 7 -17 -5 18 -12 -4 1 18 17 -3 -9 12 11 16 -8 20 -17 8 9 20 6 -8 -17 -8 -9 13 18 11 13 8 11 12 -11 -12 6 16 16

Program może wpisać coś takiego:

bucket 0: [-19, -16], count: 106
bucket 1: [-15, -12], count: 87
bucket 2: [-11, -8], count: 93
bucket 3: [-7, -4], count: 113
bucket 4: [-3, 0], count: 92
bucket 5: [1, 4], count: 105
bucket 6: [5, 8], count: 111
bucket 7: [9, 12], count: 101
bucket 8: [13, 16], count: 92
bucket 9: [17, 20], count: 100

Przykład 7

Dla danych wejściowych:

1000 100
50 42 65 89 61 41 25 51 55 46 11 69 50 75 75 72 90 54 38 32 80 37 75 94 33 9 57 86 81 31 64 87 39 59 85 11 5 29 26 83 21 75 16 59 14 89 41 23 16 24 8 59 45 60 86 94 59 72 48 78 19 5 62 20 82 32 85 82 13 26 18 14 20 66 36 12 99 53 29 49 18 69 25 24 52 7 18 42 68 96 10 71 7 9 45 35 38 97 37 50
99 28 43 39 40 25 88 92 90 64 93 55 82 67 7 8 90 24 37 76 48 17 88 74 92 42 76 48 72 91 87 94 2 40 91 46 74 70 13 95 59 15 36 50 93 16 22 53 61 24 20 63 54 46 28 31 23 95 2 26 14 42 7 78 44 56 48 55 80 42 42 11 33 68 63 90 92 100 89 72 44 16 53 86 53 59 34 53 16 17 1 72 100 45 71 56 56 12 58 63
60 87 15 64 94 8 62 14 14 50 20 31 88 23 19 86 64 17 57 45 40 46 27 58 13 31 22 95 47 69 70 49 1 61 15 65 14 98 97 58 85 92 37 87 56 20 53 78 6 31 29 28 69 20 74 78 85 97 21 45 52 19 56 48 98 49 7 86 58 6 30 31 93 15 17 94 67 77 94 12 16 15 17 69 32 28 61 10 58 71 76 1 15 90 38 86 11 88 85 38
94 47 35 99 98 59 61 36 79 13 21 58 15 63 38 83 95 15 99 21 8 81 49 52 31 25 58 66 46 88 53 4 100 9 83 78 48 67 10 8 49 9 55 26 47 31 90 68 43 43 1 26 87 36 23 30 9 34 54 6 37 87 14 78 36 22 73 10 76 64 46 28 92 57 23 32 27 3 78 42 4 40 85 56 23 69 23 43 52 46 44 45 15 21 21 72 90 91 25 100
87 15 77 95 89 56 15 65 100 80 86 94 81 94 23 95 99 75 23 56 12 54 9 95 72 85 63 17 46 13 2 83 83 29 92 49 96 60 7 67 22 1 94 64 77 78 4 28 15 96 72 18 74 66 23 90 33 23 87 7 79 49 97 73 47 64 25 65 79 32 54 96 12 47 60 35 76 35 66 10 79 22 86 21 49 51 46 55 99 25 58 50 63 45 76 87 52 97 98 87
81 35 71 13 19 90 7 50 78 25 55 72 20 63 72 78 56 48 44 33 69 72 12 86 53 29 57 48 50 87 27 80 79 95 88 90 61 82 81 27 68 76 98 27 75 35 24 60 69 30 26 86 81 24 24 98 45 64 10 57 62 49 62 34 26 46 50 21 69 27 28 77 23 86 52 4 86 14 3 17 28 99 87 92 17 57 96 18 79 9 87 7 60 53 47 46 8 61 89 8
57 25 48 82 62 93 10 36 57 86 32 63 35 48 83 32 15 66 19 46 74 77 94 40 83 62 91 20 78 88 32 66 83 8 97 24 35 73 14 7 50 11 28 15 87 13 47 31 99 6 89 54 59 16 34 63 61 21 54 3 74 32 40 10 25 28 61 41 30 87 67 86 18 60 75 80 9 52 89 90 53 38 76 32 91 41 57 23 86 64 49 22 82 1 84 22 81 54 66 15
44 52 45 32 16 2 96 19 72 71 16 92 93 10 10 11 43 50 69 79 43 63 31 26 14 14 79 77 28 4 28 59 80 20 19 11 31 29 55 33 94 65 91 34 92 54 17 72 32 38 2 56 15 31 79 67 21 19 100 63 86 64 7 88 28 41 50 68 62 93 53 86 38 90 77 28 3 61 72 95 26 45 69 60 73 67 35 65 11 13 21 88 86 16 62 55 79 50 40 31
24 40 53 13 38 52 49 80 62 44 23 25 15 84 26 68 19 76 8 26 38 78 56 95 2 60 30 73 17 12 24 24 37 66 94 94 23 69 27 58 84 69 15 44 93 69 67 62 36 20 74 78 86 76 14 61 84 31 91 8 63 97 78 14 54 94 40 51 41 38 82 60 66 23 7 17 89 90 57 9 16 67 33 93 13 80 85 93 27 46 43 68 94 52 10 9 57 98 97 59
55 16 84 64 51 92 68 34 66 10 66 45 80 31 100 94 82 95 72 98 37 53 58 77 43 41 62 49 16 40 42 32 43 43 91 71 14 15 99 28 2 79 95 76 69 73 7 95 33 90 48 61 21 58 57 34 45 41 83 81 91 94 60 11 92 82 85 80 6 32 35 21 97 72 20 100 47 35 40 31 36 41 94 33 17 90 23 67 1 51 51 5 66 58 46 85 21 34 1 6

Program może wpisać coś takiego:

bucket 0: [1, 1], count: 8
bucket 1: [2, 2], count: 7
bucket 2: [3, 3], count: 4
bucket 3: [4, 4], count: 5
bucket 4: [5, 5], count: 3
bucket 5: [6, 6], count: 6
bucket 6: [7, 7], count: 13
bucket 7: [8, 8], count: 10
bucket 8: [9, 9], count: 10
bucket 9: [10, 10], count: 12
bucket 10: [11, 11], count: 9
bucket 11: [12, 12], count: 7
bucket 12: [13, 13], count: 10
bucket 13: [14, 14], count: 14
bucket 14: [15, 15], count: 19
bucket 15: [16, 16], count: 13
bucket 16: [17, 17], count: 12
bucket 17: [18, 18], count: 6
bucket 18: [19, 19], count: 9
bucket 19: [20, 20], count: 11
bucket 20: [21, 21], count: 14
bucket 21: [22, 22], count: 7
bucket 22: [23, 23], count: 17
bucket 23: [24, 24], count: 11
bucket 24: [25, 25], count: 11
bucket 25: [26, 26], count: 11
bucket 26: [27, 27], count: 8
bucket 27: [28, 28], count: 15
bucket 28: [29, 29], count: 6
bucket 29: [30, 30], count: 5
bucket 30: [31, 31], count: 16
bucket 31: [32, 32], count: 14
bucket 32: [33, 33], count: 8
bucket 33: [34, 34], count: 8
bucket 34: [35, 35], count: 11
bucket 35: [36, 36], count: 8
bucket 36: [37, 37], count: 7
bucket 37: [38, 38], count: 11
bucket 38: [39, 39], count: 2
bucket 39: [40, 40], count: 11
bucket 40: [41, 41], count: 9
bucket 41: [42, 42], count: 8
bucket 42: [43, 43], count: 10
bucket 43: [44, 44], count: 7
bucket 44: [45, 45], count: 12
bucket 45: [46, 46], count: 14
bucket 46: [47, 47], count: 8
bucket 47: [48, 48], count: 11
bucket 48: [49, 49], count: 12
bucket 49: [50, 50], count: 13
bucket 50: [51, 51], count: 6
bucket 51: [52, 52], count: 10
bucket 52: [53, 53], count: 13
bucket 53: [54, 54], count: 10
bucket 54: [55, 55], count: 9
bucket 55: [56, 56], count: 11
bucket 56: [57, 57], count: 12
bucket 57: [58, 58], count: 12
bucket 58: [59, 59], count: 10
bucket 59: [60, 60], count: 11
bucket 60: [61, 61], count: 12
bucket 61: [62, 62], count: 11
bucket 62: [63, 63], count: 12
bucket 63: [64, 64], count: 11
bucket 64: [65, 65], count: 6
bucket 65: [66, 66], count: 12
bucket 66: [67, 67], count: 10
bucket 67: [68, 68], count: 8
bucket 68: [69, 69], count: 15
bucket 69: [70, 70], count: 2
bucket 70: [71, 71], count: 6
bucket 71: [72, 72], count: 16
bucket 72: [73, 73], count: 6
bucket 73: [74, 74], count: 7
bucket 74: [75, 75], count: 7
bucket 75: [76, 76], count: 11
bucket 76: [77, 77], count: 8
bucket 77: [78, 78], count: 14
bucket 78: [79, 79], count: 11
bucket 79: [80, 80], count: 10
bucket 80: [81, 81], count: 8
bucket 81: [82, 82], count: 9
bucket 82: [83, 83], count: 9
bucket 83: [84, 84], count: 5
bucket 84: [85, 85], count: 10
bucket 85: [86, 86], count: 19
bucket 86: [87, 87], count: 15
bucket 87: [88, 88], count: 9
bucket 88: [89, 89], count: 8
bucket 89: [90, 90], count: 15
bucket 90: [91, 91], count: 9
bucket 91: [92, 92], count: 11
bucket 92: [93, 93], count: 9
bucket 93: [94, 94], count: 19
bucket 94: [95, 95], count: 13
bucket 95: [96, 96], count: 6
bucket 96: [97, 97], count: 9
bucket 97: [98, 98], count: 8
bucket 98: [99, 99], count: 9
bucket 99: [100, 100], count: 8

Założenia:

Porady: