/* package whatever; // don't place package name! */
import java.util.concurrent.ThreadLocalRandom;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static char board[][];
static boolean tryPlace(int x,int y,int width,int height) {
for(int i=0;i<height;i++) {
for(int j=0;j<width;j++) {
if(board[y+i][x+j]!='.') {
return false; // ship can not be placed
}
}
}
// if we reach here, ship can be placed
for(int i=0;i<height;i++) {
for(int j=0;j<width;j++) {
board[y+i][x+j]='#';
}
}
return true; // ship placed successfully
}
{
ThreadLocalRandom random=ThreadLocalRandom.current();
board=new char[10][10];
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
board[i][j]='.';
int size=3;
int amount=2;
while(amount>0) {
if(random.nextBoolean()) {
// horizontal
if(tryPlace(random.nextInt(10-size+1),random.nextInt(10),size,1)){
amount--; // one placed
}
} else {
// vertical
if(tryPlace(random.nextInt(10),random.nextInt(10-size+1),1,size)){
amount--; // one placed
}
}
}
// and a 4x2 mothership
while(!(random.nextBoolean()
?tryPlace(random.nextInt(7),random.nextInt(9),4,2)
:tryPlace(random.nextInt(9),random.nextInt(7),2,4)
));
for(int i=0;i<10;i++)
System.
out.
println(board
[i
]); // char[] has special overload for print/ln() }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZExvY2FsUmFuZG9tOwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CglzdGF0aWMgY2hhciBib2FyZFtdW107CglzdGF0aWMgYm9vbGVhbiB0cnlQbGFjZShpbnQgeCxpbnQgeSxpbnQgd2lkdGgsaW50IGhlaWdodCkgewogICAgICBmb3IoaW50IGk9MDtpPGhlaWdodDtpKyspIHsKICAgICAgICBmb3IoaW50IGo9MDtqPHdpZHRoO2orKykgewogICAgICAgICAgaWYoYm9hcmRbeStpXVt4K2pdIT0nLicpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBzaGlwIGNhbiBub3QgYmUgcGxhY2VkCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIGlmIHdlIHJlYWNoIGhlcmUsIHNoaXAgY2FuIGJlIHBsYWNlZAogICAgICBmb3IoaW50IGk9MDtpPGhlaWdodDtpKyspIHsKICAgICAgICBmb3IoaW50IGo9MDtqPHdpZHRoO2orKykgewogICAgICAgICAgYm9hcmRbeStpXVt4K2pdPScjJzsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7IC8vIHNoaXAgcGxhY2VkIHN1Y2Nlc3NmdWxseQogICAgfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJICBUaHJlYWRMb2NhbFJhbmRvbSByYW5kb209VGhyZWFkTG9jYWxSYW5kb20uY3VycmVudCgpOwogICAgICBib2FyZD1uZXcgY2hhclsxMF1bMTBdOwogICAgICBmb3IoaW50IGk9MDtpPDEwO2krKykKICAgICAgICBmb3IoaW50IGo9MDtqPDEwO2orKykKICAgICAgICAgIGJvYXJkW2ldW2pdPScuJzsKCiAgICAgIGludCBzaXplPTM7CiAgICAgIGludCBhbW91bnQ9MjsKICAgICAgd2hpbGUoYW1vdW50PjApIHsKICAgICAgICBpZihyYW5kb20ubmV4dEJvb2xlYW4oKSkgewogICAgICAgICAgLy8gaG9yaXpvbnRhbAogICAgICAgICAgaWYodHJ5UGxhY2UocmFuZG9tLm5leHRJbnQoMTAtc2l6ZSsxKSxyYW5kb20ubmV4dEludCgxMCksc2l6ZSwxKSl7CiAgICAgICAgICAgIGFtb3VudC0tOyAvLyBvbmUgcGxhY2VkCiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIHZlcnRpY2FsCiAgICAgICAgICBpZih0cnlQbGFjZShyYW5kb20ubmV4dEludCgxMCkscmFuZG9tLm5leHRJbnQoMTAtc2l6ZSsxKSwxLHNpemUpKXsKICAgICAgICAgICAgYW1vdW50LS07IC8vIG9uZSBwbGFjZWQKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIGFuZCBhIDR4MiBtb3RoZXJzaGlwCiAgICAgIHdoaWxlKCEocmFuZG9tLm5leHRCb29sZWFuKCkKICAgICAgICA/dHJ5UGxhY2UocmFuZG9tLm5leHRJbnQoNykscmFuZG9tLm5leHRJbnQoOSksNCwyKQogICAgICAgIDp0cnlQbGFjZShyYW5kb20ubmV4dEludCg5KSxyYW5kb20ubmV4dEludCg3KSwyLDQpCiAgICAgICkpOwoKICAgICAgZm9yKGludCBpPTA7aTwxMDtpKyspCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGJvYXJkW2ldKTsgLy8gY2hhcltdIGhhcyBzcGVjaWFsIG92ZXJsb2FkIGZvciBwcmludC9sbigpCiAgICB9Cn0K