import java.util.Arrays;
public class Strands
{
public static boolean isStringPshh(String str)
{
if (str == null || str == "")
{
System.out.println("Pshh!");
return true;
}
return false;
}
public static boolean isStringPshh(String[] strArray)
{
for(int i = 0; i < strArray.length; i++)
{
if(strArray[i] == null)
{
System.out.println("Pshh!");
return true;
}
}
return false;
}
public static void straightAndNarrow(String str)
{
straightAndNarrow(str, 2);
}
public static void straightAndNarrow(String str, int n)
{
if (isStringPshh(str))
{
return;
}
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++)
{
if (chars[i] == ' ')
{
System.out.println();
}
else
{
for (int numSpaces = 0; numSpaces < n; numSpaces++)
{
System.out.print(' ');
}
System.out.println(chars[i]);
}
}
}
public static void meanderingPath(String str)
{
if (isStringPshh(str))
{
return;
}
char[] chars = str.toCharArray();
int[] spacePattern = new int[] { 2, 2, 2, 3, 4, 5, 5, 5, 4, 3};
for (int i = 0; i < chars.length; i++)
{
if (chars[i] == ' ')
{
System.out.println();
}
else
{
for (int numSpaces = 0; spacePattern[(i % spacePattern.length)] > numSpaces; numSpaces++)
{
System.out.print(' ');
if (numSpaces == 0 && i == 0)
{
System.out.print(' ');
}
}
System.out.println(chars[i]);
}
}
}
public static int getLargestStringLength(String[] strArray)
{
return strArray[getLargestString(strArray)].length();
}
public static int getLargestString(String[] strArray)
{
int largestStringLength = 0;
int index = 0;
int strLength = strArray.length;
for (int i = 0; i < strLength; i++)
{
if (strArray[i].length() > largestStringLength)
{
largestStringLength = strArray[i].length();
index = i;
}
}
return index;
}
public static void classicRapunzel(String [] strings)
{
int largestStringLength = getLargestStringLength(strings);
int[] spacePattern = new int[] {2, 2, 2, 3, 4, 5, 5, 5, 4, 3};
int maxChar = ((5 * largestStringLength) * strings.length);
char[] newLine = new char[maxChar];
int iter = 0;
if (isStringPshh(strings))
{
return;
}
for (int i = 0; i < largestStringLength; i++)
{
for (int numSpaces = 0; spacePattern[(i % spacePattern.length)] > numSpaces; numSpaces++)
{
newLine[iter] = ' ';
iter++;
if (numSpaces == 0 && i == 0)
{
newLine[iter] = ' ';
iter++;
}
}
for (int verticalChar = 0; verticalChar < strings.length; verticalChar++)
{
int verticalLength = strings[verticalChar].length();
String currentString = strings[verticalChar];
if (i >= verticalLength)
{
if (verticalChar != strings.length - 1)
{
newLine[iter] = ' ';
iter++;
newLine[iter] = ' ';
iter++;
newLine[iter] = ' ';
iter++;
}
}
else
{
if (verticalChar % 2 != 0)
{
if (i == 0)
{
newLine[iter] = currentString.charAt(i);
}
else
{
if (currentString.length() >= i)
{
newLine[iter] = currentString.charAt(i);
}
}
}
else
{
if (currentString.length() >= i)
{
newLine[iter] = currentString.charAt(i);
}
}
iter++;
if(verticalChar < strings.length - 1 && (strings[verticalChar + 1].length() > i ))
{
newLine[iter] = ' ';
iter++;
newLine[iter] = ' ';
iter++;
}
}
}
for (int k = 0; k < newLine.length; k++)
{
System.out.print(newLine[k]);
}
if (i != largestStringLength - 1)
{
System.out.println();
}
Arrays.fill(newLine, '\u0000');
iter = 0;
}
}
public static void steamyMocha(String [] strings)
{
if (strings == null || strings.length < 1)
{
return;
}
int largestStringIndex = getLargestString(strings);
int largestStringLength = strings[largestStringIndex].length();
int[] spacePattern = new int[] {2, 2, 2, 3, 4, 5, 5, 5, 4, 3};
int maxChar = ((5 * largestStringLength) * strings.length);
char[] newLine = new char[maxChar];
int iter = 0;
if (isStringPshh(strings))
{
return;
}
if(strings.length > 1 && largestStringIndex % 2 == 1)
{
largestStringLength++;
}
for (int i = 0; i < largestStringLength; i++)
{
for (int numSpaces = 0; spacePattern[(i % spacePattern.length)] > numSpaces; numSpaces++)
{
newLine[iter] = ' ';
iter++;
if (numSpaces == 0 && i == 0)
{
newLine[iter] = ' ';
iter++;
}
}
for (int verticalChar = 0; verticalChar < strings.length; verticalChar++)
{
int verticalLength = strings[verticalChar].length();
String currentString = strings[verticalChar];
boolean futureChars = false;
for (int g = verticalChar + 1; g < strings.length; g++)
{
if (strings[g].length() + (g % 2) > i )
{
futureChars = true;
}
}
if (verticalChar % 2 != 0)
{
if (i == 0)
{
if (currentString.length() - 1 != i && futureChars)
newLine[iter] = ' ';
}
else
{
if (currentString.length() >= i)
{
newLine[iter] = currentString.charAt(i - 1);
}
else if (futureChars)
{
newLine[iter] = ' ';
}
}
}
else
{
if (currentString.length() > i)
{
newLine[iter] = currentString.charAt(i);
}
else if (futureChars)
{
newLine[iter] = ' ';
}
}
iter++;
if (verticalChar < strings.length - 1 && futureChars && !(verticalChar % 2 == 0 && i == 0 && verticalChar == strings.length - 2))
{
newLine[iter] = ' ';
iter++;
newLine[iter] = ' ';
iter++;
}
}
for (int k = 0; k < newLine.length; k++)
{
System.out.print(newLine[k]);
}
if (i != largestStringLength - 1)
{
System.out.println();
}
Arrays.fill(newLine, '\u0000');
iter = 0;
}
}
public static void cascadingWaterfall(String [] strings)
{
if (strings == null || strings.length < 1)
{
return;
}
int largestStringLength = getLargestStringLength(strings);
int[] spacePattern = new int[] {2, 2, 2, 3, 4, 5, 5, 5, 4, 3};
int maxChar = ((5 * largestStringLength) * strings.length);
char[] newLine = new char[maxChar];
int iter = 0;
for (int i = 0; i < largestStringLength; i++)
{
for (int numSpaces = 0; spacePattern[(i % spacePattern.length)] > numSpaces; numSpaces++)
{
newLine[iter] = ' ';
iter++;
if (numSpaces == 0 && i == 0)
{
newLine[iter] = ' ';
iter++;
}
}
for (int verticalChar = 0; verticalChar < strings.length; verticalChar++)
{
for (int g = 0; g < verticalChar; g++)
{
newLine[iter] = ' ';
iter++;
}
int verticalLength = strings[verticalChar].length();
String currentString = strings[verticalChar];
if (i >= verticalLength)
{
if (verticalChar != strings.length - 1)
{
newLine[iter] = ' ';
iter++;
newLine[iter] = ' ';
iter++;
newLine[iter] = ' ';
iter++;
}
}
else
{
if (verticalChar % 2 != 0)
{
if(i == 0)
{
newLine[iter] = currentString.charAt(i);
}
else
{
if (currentString.length() >= i)
{
newLine[iter] = currentString.charAt(i);
}
}
}
else
{
if (currentString.length() >= i)
{
newLine[iter] = currentString.charAt(i);
}
}
iter++;
if (verticalChar < strings.length - 1 && (strings[verticalChar + 1].length() > i ))
{
newLine[iter] = ' ';
iter++;
newLine[iter] = ' ';
iter++;
}
}
if (i == 0)
{
newLine[iter] = '\n';
iter++;
}
}
for (int k = 0; k < newLine.length; k++)
{
System.out.print(newLine[k]);
}
if (i != largestStringLength - 1)
{
System.out.println();
}
Arrays.fill(newLine, '\u0000');
iter = 0;
}
}
}