import java.util.*; public class Main { Plotter plotter = new ConsolePlotter(50, 50); // plotRotations(plotter, ImageFactory.line(50), 100); plotRotations(plotter, ImageFactory.propeller(50), 30); plotRotations(new ConsolePlotter(40,40), ImageFactory.fromStrings( "* ******************", "* * ", "* * ", "* * ", "* * ", "* * ", "* * ", "* * ", "* * ", "* * ", "* * ", "* * ", "* * ", "* * ", "* * ", "* * ", "* * ", "***********************************", " * *", " * *", " * *", " * *", " * *", " * *", " * *", " * *", " * *", " * *", " * *", " * *", " * *", " * *", " * *", " * *", "****************** *" ), 30); } line.plot(plotter); for (int d = 0; d < n; d++) { line.rotate(2 * PI / n); line.plot(plotter); } } } public double x; public double y; this.x = x; this.y = y; } public void rotate(double centerX, double centerY, double angle) { double xx = x - centerX; double yy = y - centerY; double radius = sqrt(pow(xx, 2) + pow(yy, 2)); double fi = atan2(yy, xx); double fia = fi + angle; double yya = sin(fia) * radius; double xxa = cos(fia) * radius; x = centerX + xxa; y = centerY + yya; } } class ImageFactory { int n2 = n / 2; for (int i = -n2; i < n2; i++) { image.add(i, 0); } return image; } line2.rotate(PI / 2); line1.append(line2); return line1; } int lenx = lines[0].length(); if (lenx != line.length()) { } } int leny = lines.length; for (int y = 0; y < leny; y++) { for (int x = 0; x < line.length(); x++) { char c = line.charAt(x); if (c != ' ') { image.add(x - lenx / 2, y - leny / 2); } } } return image; } } private List<Point> points = new ArrayList<>(); public void plot(Plotter plotter) { plotter.plot(point); } plotter.flush(); } public void rotate(double angle) { point.rotate(0, 0, angle); } } public void add(double x, double y) { } points.add(p); } } } interface Plotter { void flush(); } class ConsolePlotter implements Plotter { private List<IntPoint> buffer = new ArrayList<>(); private final int width; private final int height; public ConsolePlotter(int width, int height) { this.width = width; this.height = height; } static class PointComparator implements Comparator<IntPoint> { @Override public int compare(IntPoint p1, IntPoint p2) { } } static class IntPoint { int x; int y; IntPoint(int x, int y) { this.x = x; this.y = y; } @Override return "{" + x + "," + y + "}"; } } @Override buffer.add(new IntPoint((int) point.x, (int) point.y)); } @Override public void flush() { normalize(); out(); buffer.clear(); } private void out() { int row = 0, pos = 0; for (IntPoint p : buffer) { if (p.y > row) { for (int i = 0; i < p.y - row; i++) { } row = p.y; pos = 0; } if (p.x > pos) { for (int i = 0; i < p.x - pos; i++) { } pos = p.x; } pos++; } } private void normalize() { for (IntPoint p : buffer) { if (p.x < minx) { minx = p.x; } if (p.y < miny) { miny = p.y; } if (p.x > maxx) { maxx = p.x; } if (p.y > maxy) { maxy = p.y; } } int deltax = minx > 0 ? 0 : -minx; int deltay = miny > 0 ? 0 : -miny; maxx += deltax; maxy += deltay; if (maxx < width) { deltax += (width - maxx) / 2; } if (maxy < height) { deltay += (height - maxy) / 2; } for (IntPoint p : buffer) { p.x += deltax; p.y += deltay; } } }
Standard input is empty
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
###################################################
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
# #
##### #
##### #
##### #
##### #
############
# #####
# #####
# #####
# #####
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
# ##
## #
### #
## #
### #
## #
### #
## #
### #
## #
########
# ##
# ###
# ##
# ###
# ##
# ###
# ##
# ###
# ##
##
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
##
#
## #
# #
## ##
## #
# #
## #
## ##
## #
# #
## #
## ##
# #
## #
## #
######
# ##
# ##
# #
## ##
# ##
# #
# ##
## ##
# ##
# #
# ##
## ##
# #
# #
#
##
#
#
#
#
##
# ##
# #
## ##
# #
# ##
## #
# ##
# #
## ##
# #
# ##
## #
# ##
# #
## ##
# #
######
# #
## ##
# #
## #
# ##
## #
# #
## ##
# #
## #
# ##
## #
# #
## ##
# #
# #
##
#
#
##
#
#
#
#
#
#
## ##
# ##
# ##
# ##
# ##
# ##
## ##
# ##
# ##
# ##
# ##
# ##
#######
## #
# #
### #
## #
# #
### ##
## #
# #
### #
## #
# #
# ##
#
#
#
#
#
#
##
#
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
#
# ###
# ###
# ###
# ####
# ###
# ###
# ###
##########
### #
### #
### #
#### #
### #
### #
## #
#
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
# ######
# ##########
######################
########## #
##### #
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
##### #
########## #
######################
# ##########
# ######
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
#
## #
### #
### #
#### #
### #
### #
### #
##########
# ###
# ###
# ###
# ####
# ###
# ###
# ###
#
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
#
##
#
#
#
#
#
#
##
## #
## #
## #
## #
## #
## ##
## #
## #
## #
## #
## #
########
# ##
# ##
# ##
# ##
# ##
## ##
# ##
# ##
# ##
# ##
# ##
## #
#
#
#
#
#
#
##
#
#
##
# #
# #
## ##
# #
## #
# ##
## #
# #
## ##
# #
## #
# ##
## #
# #
## ##
# #
######
# #
## ##
# #
# ##
## #
# ##
# #
## ##
# #
# ##
## #
# ##
# #
## ##
# #
# ##
##
#
#
#
##
#
# ##
# #
## ##
# ##
# #
# ##
## ##
# ##
# #
# ##
## ##
# #
# ##
# ##
######
## #
## #
# #
## ##
## #
# #
## #
## ##
## #
# #
## #
## ##
# #
# #
#
##
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
## #
# ##
# ###
# ##
# ###
# ##
# ###
# ##
# ###
# ##
########
## #
### #
## #
### #
## #
### #
## #
### #
## #
##
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
# #
# #####
# #####
# #####
# #####
############
##### #
##### #
##### #
##### #
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
##
##
#
##
#
##
#
#
#
#
##
#
##
#
#####################################################
#
#
#
##
##
#
#
##
#
##
#
#
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
##### #
##### #
##### #
##### #
############
# #####
# #####
# #####
# #####
# #
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
##
## #
### #
## #
### #
## #
### #
## #
### #
## #
########
# ##
# ###
# ##
# ###
# ##
# ###
# ##
# ###
# ##
## #
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
##
#
# #
# #
## ##
## #
# #
## #
## ##
## #
# #
## #
## ##
# #
## #
## #
######
# ##
# ##
# #
## ##
# ##
# #
# ##
## ##
# ##
# #
# ##
## ##
# #
# ##
#
##
#
#
#
#
##
# #
# #
## ##
# #
# ##
## #
# ##
# #
## ##
# #
# ##
## #
# ##
# #
## ##
# #
######
# #
## ##
# #
## #
# ##
## #
# #
## ##
# #
## #
# ##
## #
# #
## ##
# #
## #
##
#
#
##
#
#
#
#
#
#
## #
# ##
# ##
# ##
# ##
# ##
## ##
# ##
# ##
# ##
# ##
# ##
######
## #
### #
# #
## #
### #
# ##
## #
## #
## #
## #
### #
# ##
#
#
#
#
#
#
##
#
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
#
# ##
# ###
# ###
# ####
# ###
# ###
# ###
##########
### #
### #
### #
#### #
### #
### #
### #
#
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
# #####
# ##########
######################
########## #
###### #
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
###### #
########## #
######################
# ##########
# #####
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
#
### #
### #
### #
#### #
### #
### #
### #
##########
# ###
# ###
# ###
# ####
# ###
# ###
# ##
#
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
#
##
#
#
#
#
#
#
# ##
## #
## #
## #
## #
## #
## ##
## #
## #
## #
## #
## #
########
# ##
# ##
# ##
# ##
# ##
## ##
# ##
# ##
# ##
# ##
# ##
##
#
#
#
#
#
#
##
#
#
##
## #
# #
## ##
# #
## #
# ##
## #
# #
## ##
# #
## #
# ##
## #
# #
## ##
# #
######
# #
## ##
# #
# ##
## #
# ##
# #
## ##
# #
# ##
## #
# ##
# #
## ##
# #
# #
##
#
#
#
#
#
##
#
# #
# #
## ##
# ##
# #
# ##
## ##
# ##
# #
# ##
## ##
# #
# ##
# ##
######
## #
## #
# #
## ##
## #
# #
## #
## ##
## #
# #
## #
## ##
# #
## #
#
##
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
##
# ##
# ###
# ##
# ###
# ##
# ###
# ##
# ###
# ##
########
## #
### #
## #
### #
## #
### #
## #
### #
## #
# ##
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
# #####
# #####
# #####
# #####
############
##### #
##### #
##### #
##### #
# #
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
##
#
#
#
#
#
#
#
##
##
#
#
#
#
##
#
#
#
## ###################################################
#
##
#
##
#
#
##
##
#
##
#
##
##
#
#
#
# ##################
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
###################################
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
################## #
#
#
#
#
# ####
# # ####
# # #####
# # #####
# #
# #
# #
# #
# #
# #
# #
# #
# #
### #
##### #
##### #
###########
# #####
# #####
# ###
# #
# #
# #
# #
# #
# #
# #
# #
# #
##### # #
##### # #
#### # #
#### #
#
#
#
#
#
#
#
#
#
#
##
# ##
# # ##
# # ###
# # ##
# # ###
# ## ##
# # ###
# # #
# #
### #
## #
### #
## #
### #
## #
#######
# ##
# ###
# ##
# ###
# ##
# ###
# #
# # #
### # #
## ## #
### # #
## # #
### # #
## # #
## #
##
#
#
#
#
#
#
#
##
#
#
#
##
#
#
#
##
# ##
# ## #
# # ##
# # ##
## # ##
## ## #
## # ##
# # ##
## # #
## ## ##
# # #
## #
## #
#####
# ##
# ##
# # #
## ## ##
# # ##
## # #
## # ##
# ## ##
## # ##
## # #
## # #
# ## #
## #
##
#
#
#
##
#
#
#
##
#
#
#
##
#
#
##
#
##
#
##
#
##
#
## #
# ###
# # ##
## ## #
# # #
# ## ##
## # #
# ## #
# # ##
## ## #
# # # #
### ##### ###
# # # #
# ## ##
## # #
# ## #
# # ##
## ## #
# # #
# ## ##
## # #
# ## #
# ##
#
##
#
##
#
##
#
##
#
#
##
#
#
#
##
##
##
##
##
##
##
##
#
#
##
#
#
#
# #
# ## #
# ## ## #
# # ## ##
# # ## #
# # ## #
# # ## #
## # ## #
## ####### ##
# ## # ##
# # # #
# ### # #
# ## # #
## # # #
# ### ## #
# ## #
# #
#
#
#
##
#
#
##
##
##
##
##
##
##
##
#
##
###
###
####
###
###
#
#
#
#
#
# #
## #
# #
# #
# #
# # #
# # #####
# # ### #
# # ### #
# # ### #
## ######### ##
# ### # #
# ### # #
# ### # #
##### # #
# # #
# #
# #
# #
# ##
# #
#
#
#
#
#
###
###
####
###
###
##
#######
##########
#
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# # ########
## ##################### ##
######## # #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
#
##########
#######
#
#
# #########
# # #########
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
######## #
#####################
# ########
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
######### # #
######### #
#
#
#
#
#
#
#
# #
# # ###
# # ####
# # ###
# # ###
# # ###
## # #
# #
# #
# #
# #
# #
#### #
### #
### #
### #
#########
# ###
# ###
# ###
# ####
# #
# #
# #
# #
# #
# # ##
### # #
### # #
### # #
#### # #
### # #
# #
#
#
#
#
#
#
#
#
#
#
##
#
#
#
# ##
# # ##
# ## ##
## # ##
# # ##
# # ##
# # ##
## # ##
## ## ##
## #
## #
## #
## #
## #
#######
# ##
# ##
# ##
# #
# ###
## ## ##
## # ##
## # #
## # #
## # #
## # ##
## ## #
## # #
## #
#
#
#
##
#
#
#
#
#
#
#
#
##
#
#
##
#
#
##
#
#
## #
# ####
## # #
# # ##
## ## #
# # ##
## # #
# ## ##
## # #
# # ##
## ## #
# # ##
#####
## # #
# ## ##
## # #
# # ##
## ## #
# # ##
## # #
# ## ##
## # #
# # ##
#### #
# ##
#
#
##
#
#
##
#
#
##
#
#
#
##
#
##
##
##
#
##
##
#
##
#
##
#
#
# ###
## ## #
# ## #
# # #
# ## ##
## ## #
# # # #
## # ## #
# # ## ##
## ##### ##
## ## # #
# ## # ##
# # # #
# ## ##
## ## #
# # #
# ## #
# ## ##
### #
#
#
##
#
##
#
##
##
#
##
##
##
#
##
##
##
###
##
##
###
##
##
#
#
#
#
##
#
# #
# #
# # ####
# # ## #
## # ### #
# # ## #
# # ### #
# # ## #
## ####### ##
# ## # #
# ### # #
# ## # #
# ### # ##
# ## # #
#### # #
# #
# #
#
##
#
#
#
#
##
##
###
##
##
###
##
##
#
#####
#####
#####
##
#
#
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# # ###
# # ##### #
# # ##### #
## ########### ##
# ##### # #
# ##### # #
### # #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
#
#
##
#####
#####
#####
#
#################
# #
# ##
#
# #
# ##
# #
# #
# #
#
# #
# ##
# #
#
# ##
#
# #
#######################################
# #
# #
# #
#
## #
# #
# #
#
# #
# #
## #
## ##
#
## #
# # # # # # #
### ### ### ###
#
#
#
#
# ####
# # ####
# # #####
# # #####
# #
# #
# #
# #
# #
# #
# #
# #
# #
### #
##### #
##### #
###########
# #####
# #####
# ###
# #
# #
# #
# #
# #
# #
# #
# #
# #
##### # #
##### # #
#### # #
#### #
#
#
#
#
#
#
#
#
#
#
##
# ##
# # ##
# # ###
# # ##
# # ###
# ## ##
# # ###
# # #
# #
### #
## #
### #
## #
### #
## #
#######
# ##
# ###
# ##
# ###
# ##
# ###
# #
# # #
### # #
## ## #
### # #
## # #
### # #
## # #
## #
##
#
#
#
#
#
#
#
##
#
#
#
##
#
#
#
##
# ##
# ## #
# # ##
# # ##
## # ##
## ## #
## # ##
# # ##
## # #
## ## ##
# # #
## #
## #
#####
# ##
# ##
# # #
## ## ##
# # ##
## # #
## # ##
# ## ##
## # ##
## # #
## # #
# ## #
## #
##
#
#
#
##
#
#
#
##
#
#
#
##