class Diamond { List rows(String input) { List result = []; int rows = (input.codeUnitAt(0) - 64) * 2 - 1; int padding = (rows / 2).floor(); int center = 0; bool halfWay = false; int currentChar = 65; for (int i = 0; i < rows; i++) { String x = ''; x = addPad(x, padding, halfWay); x += String.fromCharCode(currentChar); if (center > 0) { for (int i = 0; i < center; i++) { x += ' '; } x += String.fromCharCode(currentChar); } x = addPad(x, padding, halfWay); (halfWay) ? padding++ : padding--; (halfWay) ? (center > 0) ? center = center - 2 : center-- : (center > 0) ? center = center + 2 : center++; (halfWay) ? currentChar-- : currentChar++; if (i > rows / 2 - 2) halfWay = true; result.add(x); } return result; } String addPad(String input, int padSize, bool halfWay) { for (int i = 0; i < padSize; i++) { input += ' '; } return input; } } void main(List args) { print(Diamond().rows('Z')); }