проверил на
Риев Нью-Йорк Амстердам Вена Мельбурн Венм Колв арк кра рор зор вызов роза мар вуз
и пустые строки
что не работает помогите с примером. или поясните условия последний пункт.
Сергей Мельников
32 уровень
Про игру в города
Решен
Комментарии (14)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Иван ФилинчукExpert
2 декабря 2017, 11:28
Вопрос к разработчикам: 4-й пункт требований "Все слова переданные в метод getLine должны быть включены в результирующую строку, если это возможно.", а если это невозможно, как должна вести себя программа?
0
Pavlo Plynko Java-разработчик в CodeGym Expert
4 декабря 2017, 11:36
Проверяется только работа программы с данными "когда возможно". Соотв. поведение программы при "невозможно" не влияет на валидацию.
0
Иван ФилинчукExpert
4 декабря 2017, 11:50
Спасибо.
0
Иван ФилинчукExpert
1 декабря 2017, 22:12
Вот как программа расположила данные слова:
слово разбор должно быть, к примеру, между зор и роза или рр и рев. 0
Сергей Мельников
1 декабря 2017, 22:24
добавил слово разбор в исходный файл
результат:
Амстердам Мельбурн Нью-Йорк Колв вызов вуз зор роза арк кра Риев Вена Венм мар разбор рор
оно между мар и рор
0
Иван ФилинчукExpert
1 декабря 2017, 22:31
У меня немного другая цепочка(18 слов), а у вас, после добавления слова "разбор" - 16 слов.
0
Сергей Мельников
1 декабря 2017, 22:32
или вы думаете что мне нужно слова начинающиеся и заканчивающиеся одинаковой буквой инсертить в места где это возможно ближе к началу списка?
0
Иван ФилинчукExpert
1 декабря 2017, 22:49
Не обязательно к началу, главное чтобы в нужное место.
0
Сергей Мельников
2 декабря 2017, 08:26
public static StringBuilder getLine(String... words) {
StringBuilder result = new StringBuilder("");
int count = 0;
int i = 0;
char symbol = 'А';
int flagNotfind = 0;
while (count < words.length){
if (words[i]!="")
if (words[i].toLowerCase().charAt(0) == words[i].toLowerCase().charAt(words[i].length() - 1)) {
if (result.indexOf(words[i].toLowerCase().charAt(0) + " ") != -1 || result.indexOf(words[i].toUpperCase().charAt(0) + " ") != -1) {
//System.out.println(words[i]);
result.insert(result.indexOf(words[i].toLowerCase().charAt(0) + " ")+1," "+words[i]);
words[i] = "";
count++;
flagNotfind = 0;
}
}
if (words[i]!="")
if (words[i].toUpperCase().charAt(0) == symbol || words[i].toLowerCase().charAt(0) == symbol || flagNotfind == 2) {
if (count != words.length - 1) result.append(words[i] + " ");
else result.append(words[i]);
symbol = words[i].charAt(words[i].length() - 1);
words[i] = "";
count++;
flagNotfind = 0;
}
if (i<words.length-1) i++;
else {
i=0;
flagNotfind++;
}
}
result.setLength(result.length()-1);
return result;
}
реультат:
Амстердам Мельбурн Нью-Йорк Колв вызов вуз зор рор разбор роза арк кра Риев Вена Венм ма
разбор и рор в нужных местах.
но не принимает.((((
0
Иван ФилинчукExpert
2 декабря 2017, 11:18
0
Иван ФилинчукExpert
2 декабря 2017, 12:36
На таком варианте тоже не работает как надо:
Дело в symbol = 'А', а result.setLength(result.length()-1) - обрезает последний символ. 0
Сергей Мельников
2 декабря 2017, 16:37
Спасибо! С обрезанием поборолся. Это была попытка от безнадежности побороть пробел в конце. С "А" в начале тоже распрощался, но валидатор упирается.
Пожалуй переделаю алгоритм. тогда отпищусь что получилось.
0
Сергей Мельников
3 декабря 2017, 19:13
Решил с 20 раза.
За тестовые строки спасибо! Помогли.
Напутствие другим решающим: Слова надо уметь добавлять не только в конец (как это происходит в известной игре), а и в начало строки и в середину если начинаются с одной буквы. Иначе валидатору не нравится, что в конце строки остаются слова которые могли попасть в связную часть.
+1
Сергей Милютин
18 ноября 2019, 14:00
Если кому-то еще интересно. Недавно писал (независимо от javarush) в учебных целях подобную программу. Для вашего набора городов
Киев Нью-Йорк Амстердам Вена Мельбурн Москва Нью-Дели Мадрид Иерусалим Джакарта Анкара Абу-Даби Исламабад Дакар Рим
существует 204 решения, найденные за 122121 итерации и время 20 мсек. Результаты подробнее здесь:
https://drive.google.com/open?id=1ZphbxcovWObo7deAUqTzx7mHhZMYKRjM
0