-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSolution.java
More file actions
96 lines (81 loc) · 4.11 KB
/
Solution.java
File metadata and controls
96 lines (81 loc) · 4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//where they crucified him, and with him two others, on either side one, and Jesus in the middle. (John 19:18)
package com.javarush.task.task20.task2026;
/*
Алгоритмы-прямоугольники
*/
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
public class Solution {
public static void main(String[] args) {
byte[][] a = new byte[][]{
{1, 1, 0, 0},
{1, 1, 0, 0},
{1, 1, 0, 0},
{1, 1, 0, 1}
};
int count = getRectangleCount(a);
System.out.println("count = " + count + ". Должно быть 2");
}
public static int getRectangleCount(byte[][] a) {
Map<Byte, Integer> map = new TreeMap<>();
for (int x = 0; x < a.length; x++)
for (int y = 0; y < a[0].length; y++) {
byte sum = 0;
if (a[x][y] == 0) continue;
sum += (x - 1 >= 0 && y - 1 >= 0) ? a[x - 1][y - 1] : 0; // a[x - 1][y - 1]
sum += (y - 1 >= 0) ? a[x][y - 1] : 0; // a[x][y - 1]
sum += (x + 1 < a.length && y - 1 >= 0) ? a[x + 1][y - 1] : 0; // a[x + 1][y - 1]
sum += (x - 1 >= 0) ? a[x - 1][y] : 0; // a[x - 1][y]
sum += a[x][y]; // a[x][y]
sum += (x + 1 < a.length) ? a[x + 1][y] : 0; // a[x + 1][y]
sum += (x - 1 >= 0 && y + 1 < a[0].length) ? a[x - 1][y + 1] : 0; // a[x - 1][y + 1]
sum += (y + 1 < a[0].length) ? a[x][y + 1] : 0; // a[x][y + 1]
sum += (x + 1 < a.length && y + 1 < a[0].length) ? a[x + 1][y + 1] : 0; // a[x + 1][y + 1]
if (map.containsKey(sum))
map.put(sum, map.get(sum) + 1);
else
map.put(sum, 1);
}
int rectangleCount = 0;
rectangleCount += map.containsKey((byte) 4) ? map.get((byte) 4) / 4 : 0;
rectangleCount += map.containsKey((byte) 2) ? map.get((byte) 2) / 2 : 0;
rectangleCount += map.containsKey((byte) 1) ? map.get((byte) 1) : 0;
return rectangleCount;
}
}
/*
Алгоритмы-прямоугольники
1. Дан двумерный массив N*N, который содержит несколько прямоугольников.
2. Различные прямоугольники не соприкасаются и не накладываются.
3. Внутри прямоугольник весь заполнен 1.
4. В массиве:
4.1) a[i, j] = 1, если элемент (i, j) принадлежит какому-либо прямоугольнику
4.2) a[i, j] = 0, в противном случае
5. getRectangleCount должен возвращать количество прямоугольников.
6. Метод main не участвует в тестировании
Требования:
1. В классе Solution должен существовать метод getRectangleCount с одним параметром типа byte[][].
2. Метод getRectangleCount должен быть публичным.
3. Метод getRectangleCount должен быть статическим.
4. Метод getRectangleCount должен возвращать количество прямоугольников (в соответствии с заданием) найденное в полученном массиве.
package com.javarush.task.task20.task2026;
*
Алгоритмы-прямоугольники
*
public class Solution {
public static void main(String[] args) {
byte[][] a = new byte[][]{
{1, 1, 0, 0},
{1, 1, 0, 0},
{1, 1, 0, 0},
{1, 1, 0, 1}
};
int count = getRectangleCount(a);
System.out.println("count = " + count + ". Должно быть 2");
}
public static int getRectangleCount(byte[][] a) {
return 0;
}
}
*/