Skip to content

Commit e55a988

Browse files
committed
Добавлены задачи.
1 parent 6440e99 commit e55a988

File tree

8 files changed

+265
-1
lines changed

8 files changed

+265
-1
lines changed

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
<li><a href="https://github.com/allicen/Java-10000/tree/master/split_parts" target="_blank">Разбиение на части</a> (21%)</li>
115115
<li><a href="https://github.com/allicen/Java-10000/tree/master/stairs" target="_blank">Лестница</a> (21%)</li>
116116
<li><a href="https://github.com/allicen/Java-10000/tree/master/hockey" target="_blank">Хоккей</a> (21%)</li>
117+
<li><a href="https://github.com/allicen/Java-10000/tree/master/sea_battle_two" target="_blank">Морской бой - 2</a> (21%)</li>
117118
<li><a href="https://github.com/allicen/Java-10000/tree/master/last_digit" target="_blank">Последняя цифра A^B</a> (21%)</li>
118119
<li><a href="https://github.com/allicen/Java-10000/tree/master/eleven" target="_blank">Делимость на 11</a> (22%)</li>
119120
<li><a href="https://github.com/allicen/Java-10000/tree/master/alibaba" target="_blank">Али-Баба</a> (22%)</li>
@@ -134,4 +135,6 @@
134135
<li><a href="https://github.com/allicen/Java-10000/tree/master/chess" target="_blank">Шахматы</a> (23%)</li>
135136
<li><a href="https://github.com/allicen/Java-10000/tree/master/numerologist" target="_blank">Нумеролог</a> (24%)</li>
136137
<li><a href="https://github.com/allicen/Java-10000/tree/master/clothes" target="_blank">Одежда</a> (24%)</li>
138+
<li><a href="https://github.com/allicen/Java-10000/tree/master/arrange" target="_blank">Перестановка</a> (24%)</li>
139+
<li><a href="https://github.com/allicen/Java-10000/tree/master/unpack_string" target="_blank">Распаковка строки</a> (24%)</li>
137140
</ol>

arrange/Arrange.java

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package arrange;
2+
3+
import java.io.FileReader;
4+
import java.io.FileWriter;
5+
import java.io.IOException;
6+
import java.util.ArrayList;
7+
import java.util.Collections;
8+
import java.util.Scanner;
9+
import java.util.StringTokenizer;
10+
11+
public class Arrange {
12+
public static void main(String[] args) throws IOException {
13+
ArrayList<String> firstName = new ArrayList<>();
14+
ArrayList<String> secondName = new ArrayList<>();
15+
16+
FileReader file = new FileReader("input.txt");
17+
Scanner sc = new Scanner(file);
18+
StringTokenizer st = new StringTokenizer(sc.nextLine(), " ");
19+
int ind = 0;
20+
while (st.hasMoreTokens()){
21+
String str = st.nextToken();
22+
char[] ch = str.toCharArray();
23+
for (char symbol : ch) {
24+
if (ind == 0) {
25+
firstName.add(String.valueOf(symbol).toLowerCase());
26+
} else {
27+
secondName.add(String.valueOf(symbol).toLowerCase());
28+
}
29+
}
30+
ind++;
31+
}
32+
33+
Collections.sort(firstName);
34+
Collections.sort(secondName);
35+
36+
String result = firstName.equals(secondName) ? "Yes" : "No";
37+
38+
FileWriter out = new FileWriter("output.txt");
39+
out.write(result);
40+
out.close();
41+
}
42+
}

arrange/README.md

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<h1 class="title">Перестановка (24%)</h1>
2+
<p><b>Время: 1 сек.<br>Память: 16 Мб<br>Сложность: 24%</b></p>
3+
<p>Если Вы читали Гарри Поттера, то знаете, что повелитель зла, Лорд Волдеморт создал свое имя путем перестановки букв в своем настоящем имени. Так из имени «Tom Marvolo Riddle» он получил «I am Lord Voldemort».</p>
4+
<p>Напишите программу, которая проверяет, можно ли получить из одного имени другое путем перестановки его букв. При этом регистром букв нужно пренебречь.</p>
5+
<h2>Формат ввода</h2>
6+
<p>В первой строке входного файла input.txt записаны два слова, разделенные единственным в строке пробелом. Слова содержат только символы английского алфавита. Длина слов больше 0 и не превышает 50 символов.</p>
7+
<h2>Формат вывода</h2>
8+
<p>В выходной файл output.txt выведите «Yes», если возможно получить из одного имени другое, и «No» в противном случае.</p>
9+
<h3>Примеры</h3>
10+
<table class="sample-tests">
11+
<thead>
12+
<tr>
13+
<th>Ввод</th>
14+
<th>Вывод</th>
15+
</tr>
16+
</thead>
17+
<tbody>
18+
<tr>
19+
<td>TomMarvoloRiddle IamLordVoldemort</td>
20+
<td>Yes</td>
21+
</tr>
22+
<tr>
23+
<td>stop pots</td>
24+
<td>Yes</td>
25+
</tr>
26+
<tr>
27+
<td>abbc bac</td>
28+
<td>No</td>
29+
</tr>
30+
</tbody>
31+
</table>

chess/Chess.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public static void main(String[] args) throws IOException {
5757
int cCoord = steps[1][0];
5858
int dCoord = steps[1][1];
5959

60-
if(Math.abs(aCoord - cCoord) + Math.abs(bCoord - dCoord) == 3){
60+
if(Math.abs((aCoord - cCoord) * (bCoord - dCoord)) == 2){
6161
result = "YES";
6262
}else {
6363
result = "NO";

sea_battle_two/README.md

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<h1 class="title">Морской бой - 2 (21%)</h1>
2+
<p><b>Время: 1 сек.<br>Память: 16 Мб<br>Сложность: 21%</b></p>
3+
<p>«Морской бой» - игра для двух участников, в которой игроки по очереди называют координаты на неизвестной им карте соперника. Если у соперника по этим координатам имеется корабль, то корабль или его часть «топится», а попавший получает право сделать еще один ход. Цель игрока - первым поразить все корабли противника.</p>
4+
<p>«Морской бой» очень популярен среди учеников одной физико-математической школы. Ребята очень любят в него играть на переменах. Вот и сейчас ученики Иннокентий и Емельян начали новую партию.</p>
5+
<p>Правила, по которым ребята расставляют корабли перед началом партии, несколько отличаются от классических. Во-первых, игра происходит на поле размером N×M, а не 10×10. Во-вторых, число кораблей, их размер и форма выбираются ребятами перед партией - так играть намного интереснее.</p>
6+
<p>Емельян уже расставил все свои корабли, кроме одного однопалубного. Такой корабль занимает ровно одну клетку.</p>
7+
<p>Задана расстановка кораблей Емельяна. Найдите число способов поставить оставшийся однопалубный корабль. При этом учитывайте, что по правилам его можно ставить только в ту клетку, все соседние с которой не заняты. В этой задаче соседними считаются клетки, имеющие общую сторону.</p>
8+
<h2>Формат ввода</h2>
9+
<p>Первая строка входного файла input.txt содержит два числа: N и M (1 ≤ N, M ≤ 100). Последующие N строк описывают игровое поле - каждая из них содержит M символов. Символом «.» (точка) обозначена свободная клетка, символом «*» (звездочка) - занятая кораблем.</p>
10+
<h2>Формат вывода</h2>
11+
<p>В выходной файл output.txt выведите ответ на задачу.</p>
12+
<h3>Примеры</h3>
13+
<table class="sample-tests">
14+
<thead>
15+
<tr>
16+
<th>Ввод</th>
17+
<th>Вывод</th>
18+
</tr>
19+
</thead>
20+
<tbody>
21+
<tr>
22+
<td>4 4<br>
23+
****<br>
24+
**..<br>
25+
*...<br>
26+
*...</td>
27+
<td>4</td>
28+
</tr>
29+
<tr>
30+
<td>4 3<br>
31+
***<br>
32+
...<br>
33+
...<br>
34+
***</td>
35+
<td>0</td>
36+
</tr>
37+
</tbody>
38+
</table>

sea_battle_two/SeaBattleTwo.java

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package sea_battle_two;
2+
3+
import java.io.FileReader;
4+
import java.io.FileWriter;
5+
import java.io.IOException;
6+
import java.util.ArrayList;
7+
import java.util.Scanner;
8+
import java.util.StringTokenizer;
9+
10+
public class SeaBattleTwo {
11+
public static void main(String[] args) throws IOException {
12+
ArrayList<String> data = new ArrayList<>();
13+
FileReader file = new FileReader("input.txt");
14+
Scanner sc = new Scanner(file);
15+
while (sc.hasNextLine()){
16+
data.add(sc.nextLine());
17+
}
18+
int row = 0, column = 0;
19+
StringTokenizer st = new StringTokenizer(data.get(0), " ");
20+
while (st.hasMoreTokens()){
21+
row = Integer.valueOf(st.nextToken());
22+
column = Integer.valueOf(st.nextToken());
23+
}
24+
data.remove(0);
25+
26+
String[] arrData = data.toArray(new String[0]);
27+
String[][] arrayReady = new String[row][column];
28+
29+
for(int i = 0; i < row; i++){
30+
char[] ch = arrData[i].toCharArray();
31+
for(int j = 0; j < column; j++){
32+
arrayReady[i][j] = String.valueOf(ch[j]);
33+
}
34+
}
35+
36+
int count = 0;
37+
if(row > 2 || column > 2){
38+
for(int i = 0; i < row; i++){
39+
for(int j = 0; j < column; j++){
40+
if(arrayReady[i][j].equals(".")){
41+
if(
42+
((i == 0 && arrayReady[i+1][j].equals(".") ||
43+
((i-1 > -1 && arrayReady[i-1][j].equals(".")) && (i+1 < row && (arrayReady[i+1][j].equals("."))))) ||
44+
(i == row-1 && arrayReady[i-1][j].equals("."))) &&
45+
((j == 0 && arrayReady[i][j+1].equals(".")) ||
46+
((j-1 > -1 && arrayReady[i][j-1].equals(".") && (j+1 < column && arrayReady[i][j+1].equals(".")))) ||
47+
(j == column-1 && arrayReady[i][j-1].equals(".")))
48+
)
49+
{
50+
count++;
51+
}
52+
}
53+
}
54+
}
55+
}
56+
57+
FileWriter out = new FileWriter("output.txt");
58+
out.write(String.valueOf(count));
59+
out.close();
60+
}
61+
}

unpack_string/README.md

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<h1 class="title">Распаковка строки (25%)</h1>
2+
<p><b>Время: 1 сек.<br>Память: 16 Мб<br>Сложность: 25%</b></p>
3+
<p>Будем рассматривать только строчки, состоящие из заглавных английских букв. Например, рассмотрим строку AAAABCCCCCDDDD. Длина этой строки равна 14. Поскольку строка состоит только из английских букв, повторяющиеся символы могут быть удалены и заменены числами, определяющими количество повторений. Таким образом, данная строка может быть представлена как 4AB5C4D. Длина такой строки 7. Описанный метод мы назовем упаковкой строки.</p>
4+
<p>Напишите программу, которая берет упакованную строчку и восстанавливает по ней исходную строку.</p>
5+
<h2>Формат ввода</h2>
6+
<p>Входной файл input.txt содержит одну упакованную строку. В строке могут встречаться только конструкции вида nA, где n — количество повторений символа (целое число от 2 до 99), а A — заглавная английская буква, либо конструкции вида A, то есть символ без числа, определяющего количество повторений. Строка содержит от 1 до 80 символов.</p>
7+
<h2>Формат вывода</h2>
8+
<p>В выходной файл output.txt выведите восстановленную строку. При этом строка должна быть разбита на строчки длиной ровно по 40 символов (за исключением последней, которая может содержать меньше 40 символов).</p>
9+
<h3>Примеры</h3>
10+
<table class="sample-tests">
11+
<thead>
12+
<tr>
13+
<th>Ввод</th>
14+
<th>Вывод</th>
15+
</tr>
16+
</thead>
17+
<tbody>
18+
<tr>
19+
<td>3A4B7D</td>
20+
<td>AAABBBBDDDDDDD</td>
21+
</tr>
22+
<tr>
23+
<td>22D7AC18FGD</td>
24+
<td>DDDDDDDDDDDDDDDDDDDDDDAAAAAAACFFFFFFFFFF<br>
25+
FFFFFFFFGD</td>
26+
</tr>
27+
<tr>
28+
<td>95AB</td>
29+
<td>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<br>
30+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<br>
31+
AAAAAAAAAAAAAAAB</td>
32+
</tr>
33+
<tr>
34+
<td>40AB39A</td>
35+
<td>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA<br>
36+
BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</td>
37+
</tr>
38+
</tbody>
39+
</table>

unpack_string/UnpackString.java

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package unpack_string;
2+
3+
import java.io.FileReader;
4+
import java.io.FileWriter;
5+
import java.io.IOException;
6+
import java.util.Scanner;
7+
8+
public class UnpackString {
9+
public static void main(String[] args) throws IOException {
10+
String originalString;
11+
12+
FileReader file = new FileReader("input.txt");
13+
Scanner sc = new Scanner(file);
14+
originalString = sc.nextLine();
15+
16+
StringBuilder finishString = new StringBuilder();
17+
StringBuilder number = new StringBuilder();
18+
19+
char[] ch = originalString.toCharArray();
20+
int shift = 0;
21+
for (char aCh : ch) {
22+
String symbol = String.valueOf(aCh);
23+
if (symbol.matches("\\d")) {
24+
number.append(symbol);
25+
} else {
26+
if (number.length() == 0) {
27+
if(finishString.length() > 0 && (finishString.length() - shift) % 40 == 0){
28+
finishString.append("\n");
29+
shift++;
30+
}
31+
finishString.append(symbol);
32+
} else {
33+
int countSymbol = Integer.valueOf(String.valueOf(number));
34+
for (int j = 0; j < countSymbol; j++) {
35+
if(finishString.length() > 0 && (finishString.length() - shift) % 40 == 0){
36+
finishString.append("\n");
37+
shift++;
38+
}
39+
finishString.append(symbol);
40+
}
41+
number = new StringBuilder();
42+
}
43+
}
44+
}
45+
46+
FileWriter out = new FileWriter("output.txt");
47+
out.write(String.valueOf(finishString));
48+
out.close();
49+
}
50+
}

0 commit comments

Comments
 (0)