자바 별표 사각형 [닫힘]


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

25
왜 이것이 가까운 투표를했는지 확실하지 않습니다. 이것은 가장 일반적인 프로그래밍 질문이 아닙니다. 그것은 거의 표준 질문이며 주제에 매우 많이 있습니다. 나는 OP가 자신의 노력을 보이고 있음을 알 수 있지만 숙제에 대한 정책이 있는지 잘 모르겠습니다. 그래서 실제로 이것에 문제가 있다고 생각하지 않습니까?
Martin Ender

3
@NathanMerrill 특정 골프 문제에 대한 조언 은 가장 확실한 주제가 아닙니다 .
Martin Ender

3
@LeakyNun 우리는 살아있는 사람들을 먹지 않습니다, 우리는 그들을 먼저 죽입니다;)

답변:


1

논리적으로 i == j& i+j==w-1(대각선), i == 0& j == 0(상단 및 왼쪽) 및 j == w-1& i==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()OR 파이프 ( ||)와 삼항 연산자 사이의 쓸모없는 공백과 모든 쓸모없는 공백이 있습니다.
Yytsi

1
이것은 @TuukkaX 논리의 예일뿐입니다.
Abbas Kararawala

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"을 인쇄하고, 모든 첫 번째 및 마지막 행과 첫 번째 열에 대해 "*"를, 행과 열의 합계가 짝수 인 경우 "*"를 인쇄하고, 그렇지 않으면 인쇄합니다. ""

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.