На всех примерах предложенных ниже работает.
// Код который можно заменить кодом ниже, Валидатор не пропускает
int index = (int) (Math.random() * stringArrayList.size());
String buffer = stringArrayList.get(index);
stringBuilder.append(buffer);
stringArrayList.remove(index);
// 2 кусок кода с константой. С этим куском кода Валидатор говорит "Программа работала слишком долго и была закрыта!"
String buffer = stringArrayList.get(0);
stringBuilder.append(buffer);
stringArrayList.remove(0);
Если заменить код этим кодом. То-есть если поставить константу вместо рандомного значения. Но ни один не проходит
Абинск Кабул Киров Ватикан Называевск
Киев Нью-Йорк Амстердам Вена Мельбурн
alpha elephant kick linea android eels kill sum eye spud drink even bee dad num tea test sims apple mob mate
Трам Нет Труд Муд Дом Мандарин Март
Киев Нью-Йорк Амстердам Вена Мельбурн Афины
cd bc cc bb ab cc
mob sims bee alpha tea sum android eye even elephant num mate
package com.javarush.task.task22.task2209;
import java.io.*;
import java.util.*;
/*
Составить цепочку слов
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fr = new BufferedReader(new FileReader(reader.readLine()));
String txt;
String stroka="";
while ((txt=fr.readLine())!=null){
stroka+=txt+" ";
}
reader.close();
fr.close();
StringBuilder result = getLine(stroka);
System.out.println(result.toString());
}
public static StringBuilder getLine(String... words) {
if (words.length == 0 || words.toString().isEmpty() || words == null){
return new StringBuilder();
}
StringBuilder stringBuilder = new StringBuilder();
String[] a = Arrays.asList(words).get(0).split(" ");
ArrayList<String> stringArrayList = new ArrayList<>();
for (int i = 0; i <a.length ; i++) {
stringArrayList.add(a[i]);
}
int index = (int) (Math.random() * stringArrayList.size());
String buffer = stringArrayList.get(index);
stringBuilder.append(buffer);
stringArrayList.remove(index);
stringArrayList.sort(String::compareToIgnoreCase);
int countWhile = 0;
boolean check = true;
while (check){
if(stringArrayList.size()==1){
if (stringBuilder.toString().toLowerCase().charAt(0) == stringArrayList.get(0).charAt(stringArrayList.get(0).length()-1)){
stringBuilder.insert(0, stringArrayList.get(0) + " ");
stringArrayList.remove(0);
break;
}else {
if (stringArrayList.get(0).toLowerCase().charAt(0) == stringBuilder.charAt(stringBuilder.length()-1)){
stringBuilder.append(" "+stringArrayList.get(0));
stringArrayList.remove(0);
break;
}else{
stringBuilder.append(" "+ stringArrayList.get(0));
break;
}
}
}
if (countWhile == stringArrayList.size()){
// System.out.println("buffer " + buffer + " stringBuilder is " + stringBuilder);
stringBuilder.delete(stringBuilder.indexOf(buffer),stringBuilder.length());
stringArrayList.add(buffer);
try{
buffer = stringBuilder.substring(stringBuilder.lastIndexOf(" "));
}catch (StringIndexOutOfBoundsException e){
buffer = stringBuilder.substring(stringBuilder.lastIndexOf(" ")+1);
}
//System.out.println("after changing buffer " + buffer + " stringBuilder is " + stringBuilder);
countWhile = 0;
}
char first = stringArrayList.get(countWhile).toLowerCase().charAt(0);
char last = buffer.charAt(buffer.length()-1);
if (first == last){
buffer = stringArrayList.get(countWhile);
stringBuilder.append(" "+buffer);
stringArrayList.remove(countWhile);
countWhile = 0;
} else {if (stringBuilder.length()!=0){
char firstf = stringBuilder.toString().toLowerCase().charAt(0);
char lastf = stringArrayList.get(countWhile).charAt(stringArrayList.get(countWhile).length()-1);
if (firstf == lastf) {
stringBuilder.insert(0,stringArrayList.get(countWhile) + " ");
stringArrayList.remove(countWhile);
countWhile = 0;
}else countWhile++;
}}
}
return stringBuilder;
}
}