Java Asterisk矩形[关闭]


15

对于我的CS课,我的讲师给我们分配了一个任务,即创建一个由星号制成的矩形,并用Java在其中绘制出对角线。

他还告诉我们将其写入尽可能少的字节中。我已经将其缩减为190个字节,但是我需要找到一些来简化此代码,甚至更多以减少字节。谁能帮我这个?

这段代码是有效的:

interface d{static void main(String[]a){for(int z=0,w=new Byte(a[0]),h=new Byte(a[1]);z<h*w;){int y=z/w,x=z++%w;System.out.print((x>w-2)?"*\n":(y%(h-1)*x*((y-x)%3)==0)?"*":" ");}}}

输入为10 10

输出:

**********
**  *  * *
* *  *  **
*  *  *  *
**  *  * *
* *  *  **
*  *  *  *
**  *  * *
* *  *  ** 

25
不要将他重定向到SO。他会活着被吃掉。
Leaky Nun

3
您能否阐明程序的输出和规格?即示例输入/输出等
TheLethalCoder '16

25
我不完全确定为什么要对此进行投票。这绝对不是一般的编程问题。这几乎是一个标准的提示问题,涉及的主题非常多。我不确定我们是否有家庭作业政策,尽管据我所知,OP甚至在显示自己的努力,所以我不认为这真的有什么问题吗?
马丁·恩德

3
@NathanMerrill对于特定高尔夫问题的建议绝对不是话题
马丁·恩德

3
@LeakyNun我们不活着吃人,我们先杀了他们;)

Answers:


1

从逻辑上讲,每次i == ji+j==w-1(对角线),i == 0j == 0(对于顶线和左侧)和j == w-1i==h-1 (对于右侧和底线)每次都应有Asterik(“ *” )。

class d {
    public static void main(String[] a) {
        for(int i=0,w=new Byte(a[0]),h=new Byte(a[1]);i<h;i++) {
            for(int j=0;j<w;j++) {
                System.out.print(i==0 || j==0 || i==h-1 || i+j==w-1 || j==w-1 || i==j ? "*":" ");
            }
            System.out.println();
        }
    }
}

我不知道这是可以使用的逻辑示例还是完整的代码。如果是第二种情况,那么这里有很多高尔夫运动。例如,System.out.println()或管道(||)和三元运算符之间的无用和所有无用的空格。
Yytsi

1
这只是逻辑@TuukkaX的示例。
阿巴斯·卡拉瓦拉

1

通过执行以下操作可以减少您提供的代码:

  • 用42替换“ *”,用“”替换“”(利用*的字符代码)
  • 将((y-x)%3)移到要相乘的事物的开头,并删除周围的括号
  • 从(x> w-2)和((y-x)%3 * y%(h-1)* x == 0)中删除括号

结果代码为:

interface r{static void main(String[]a){for(int z=0,w=new Byte(a[0]),h=new Byte(a[1]);z<h*w;){int y=z/w,x=z++%w;System.out.print(x>w-2?"*\n":(y-x)%3*y%(h-1)*x==0?42:' ');}}}

注意:问题的示例输出中缺少最后一行!示例代码的输出是不同的。


0

我的计算机上实际上没有Java,因此无法测试,但是我认为它应该可以工作174个字节,并且几乎可以肯定它可以打更多

class d{static void main(String[]a){for(int i=0,w=new Byte(a[0]),h=new Byte(a[1]);i<h;i++)for(int j=0;j<w;j++)System.out.print(j==w-1?"*\n":i%h-1==0||!j||i+j%2==0?"*":" ");}}

为了清楚起见,添加了空格:

class d {
    static void string main(String[] a) {
        for(int i=0,w=new Byte(a[0]),h=new Byte(a[1]);i<h;i++)
            for(int j=0;j<w;j++)
                System.out.print(j==w-1 ? "*\n" : i % h-1 == 0 || !j || i+j % 2 == 0 ? "*":" ");
    }
}

在每行的最后一个字符上打印“ * \ n”,在所有的第一行和最后一行以及第一列上打印“ *”,在行和列的总和为偶数的任何时候打印“ *”,否则打印”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.