/* package whatever; // don't place package name! */
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone {
public static final int WIDTH = 5;
public static final int HEIGHT = 10;
public static void main
(String[] args
) { String[][] generateGrid
= generateGrid
(WIDTH, HEIGHT
); printGrid(WIDTH,HEIGHT, generateGrid);
}
public static String[][] generateGrid
(int width,
int height
) { for (int row = 0; row < height; row++) {
for (int column = 0; column < width; column++) {
gridData[row][column] = " ";
}
}
return gridData;
}
return String.
format("%-" + n
+ "s", s
); }
return String.
format("%" + n
+ "s", s
); }
public static String repeatChar
(char c,
int n
) { return IntStream.
range(0, n
).
mapToObj(i
-> String.
valueOf(c
)).
collect(Collectors.
joining("")); }
public static void printGrid
(int width,
int height,
String[][] gridData
) { System.
out.
printf("%d x %d Grid%n", width, height
); int lengthOfMaxRowNum
= String.
valueOf(height
-1).
length(); // TODO: can be calculated as max length over Strings in gridData
int maxCellWidth = 4;
System.
out.
print(padRight
(" ", lengthOfMaxRowNum
)); for (int column = 0; column < width; column++) {
System.
out.
print(padLeft
(String.
valueOf(column
), maxCellWidth
+ 1)); }
printHorizontalLine(width, lengthOfMaxRowNum, maxCellWidth);
for (int row = 0; row < height; row++) {
// TODO: alignment of headers (col-numbers) could be customizable
System.
out.
print(padLeft
(String.
valueOf(row
), lengthOfMaxRowNum
)); for (int column = 0; column < width; column++) {
// TODO: alignment of cell-data could be customizable
System.
out.
print("|" + padLeft
(gridData
[row
][column
], maxCellWidth
)); }
printHorizontalLine(width, lengthOfMaxRowNum, maxCellWidth);
}
}
private static void printHorizontalLine(int width, int lengthOfMaxRowNum, int maxCellWidth) {
String line
= repeatChar
('-', maxCellWidth
); System.
out.
print(padLeft
(" ", lengthOfMaxRowNum
)); for (int column = 0; column < width; column++) {
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKCmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkludFN0cmVhbTsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUgewoKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdJRFRIID0gNTsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhFSUdIVCA9IDEwOwoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBTdHJpbmdbXVtdIGdlbmVyYXRlR3JpZCA9IGdlbmVyYXRlR3JpZChXSURUSCwgSEVJR0hUKTsKICAgICAgICBwcmludEdyaWQoV0lEVEgsSEVJR0hULCBnZW5lcmF0ZUdyaWQpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nW11bXSBnZW5lcmF0ZUdyaWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CiAgICAgICAgU3RyaW5nW11bXSBncmlkRGF0YSA9IG5ldyBTdHJpbmdbaGVpZ2h0XVt3aWR0aF07CiAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3crKykgewogICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB3aWR0aDsgY29sdW1uKyspIHsKICAgICAgICAgICAgICAgIGdyaWREYXRhW3Jvd11bY29sdW1uXSA9ICIgIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZ3JpZERhdGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcGFkUmlnaHQoU3RyaW5nIHMsIGludCBuKSB7CiAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIiUtIiArIG4gKyAicyIsIHMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHBhZExlZnQoU3RyaW5nIHMsIGludCBuKSB7CiAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIiUiICsgbiArICJzIiwgcyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcmVwZWF0Q2hhcihjaGFyIGMsIGludCBuKSB7CiAgICAgICAgcmV0dXJuIEludFN0cmVhbS5yYW5nZSgwLCBuKS5tYXBUb09iaihpIC0+IFN0cmluZy52YWx1ZU9mKGMpKS5jb2xsZWN0KENvbGxlY3RvcnMuam9pbmluZygiIikpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludEdyaWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBTdHJpbmdbXVtdIGdyaWREYXRhKSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIiVkIHggJWQgR3JpZCVuIiwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgaW50IGxlbmd0aE9mTWF4Um93TnVtID0gU3RyaW5nLnZhbHVlT2YoaGVpZ2h0LTEpLmxlbmd0aCgpOwogICAgICAgIC8vIFRPRE86IGNhbiBiZSBjYWxjdWxhdGVkIGFzIG1heCBsZW5ndGggb3ZlciBTdHJpbmdzIGluIGdyaWREYXRhCiAgICAgICAgaW50IG1heENlbGxXaWR0aCA9IDQ7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnQocGFkUmlnaHQoIiAiLCBsZW5ndGhPZk1heFJvd051bSkpOwogICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHdpZHRoOyBjb2x1bW4rKykgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KHBhZExlZnQoU3RyaW5nLnZhbHVlT2YoY29sdW1uKSwgbWF4Q2VsbFdpZHRoICsgMSkpOwogICAgICAgIH0KICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKICAgICAgICBwcmludEhvcml6b250YWxMaW5lKHdpZHRoLCBsZW5ndGhPZk1heFJvd051bSwgbWF4Q2VsbFdpZHRoKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKCiAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3crKykgewogICAgICAgICAgICAvLyBUT0RPOiBhbGlnbm1lbnQgb2YgaGVhZGVycyAoY29sLW51bWJlcnMpIGNvdWxkIGJlIGN1c3RvbWl6YWJsZQogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KHBhZExlZnQoU3RyaW5nLnZhbHVlT2Yocm93KSwgbGVuZ3RoT2ZNYXhSb3dOdW0pKTsKICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgd2lkdGg7IGNvbHVtbisrKSB7CiAgICAgICAgICAgICAgICAvLyBUT0RPOiBhbGlnbm1lbnQgb2YgY2VsbC1kYXRhIGNvdWxkIGJlIGN1c3RvbWl6YWJsZQogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgifCIgKyBwYWRMZWZ0KGdyaWREYXRhW3Jvd11bY29sdW1uXSwgbWF4Q2VsbFdpZHRoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ8Iik7CiAgICAgICAgICAgIHByaW50SG9yaXpvbnRhbExpbmUod2lkdGgsIGxlbmd0aE9mTWF4Um93TnVtLCBtYXhDZWxsV2lkdGgpOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludEhvcml6b250YWxMaW5lKGludCB3aWR0aCwgaW50IGxlbmd0aE9mTWF4Um93TnVtLCBpbnQgbWF4Q2VsbFdpZHRoKSB7CiAgICAgICAgU3RyaW5nIGxpbmUgPSAgcmVwZWF0Q2hhcignLScsIG1heENlbGxXaWR0aCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludChwYWRMZWZ0KCIgIiwgbGVuZ3RoT2ZNYXhSb3dOdW0pKTsKICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB3aWR0aDsgY29sdW1uKyspIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIisiK2xpbmUpOwogICAgICAgIH0KICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiKyIpOwogICAgfQoKCn0=