C (gcc) ,143 142 127 + 10 = 137 136 + 10 = 146 (컴파일러 플래그) 바이트
논리 OR을 비트 연산자로 대체하여 -1 바이트
Logern 덕분에 -5 바이트
중앙값 라인을 수정하기 위해 +9 바이트, 즉 두 번 출력되었습니다.
char*s="123456789abcdefghi";G{for(;j<18;++j)putchar(i>j|j>17-i?s[j]:32);puts("");}f(){int i=0,j=0;for(;i++<8;)G;g(i+1,j);for(;i-->1;)G;}
컴파일러 플래그 :
-DG=g(i,j)
이 매크로는 g(i,j)함수 선언 및 호출 의 발생을 고려 합니다.
온라인으로 사용해보십시오!
Pietu1998의 훌륭한 답변 과 다른 접근 방식 , 더 간단하고 읽기 쉽지만 더 높은 점수.
진입 점은 기능입니다 f(); 함수g() 는 각 연속 라인의 인쇄를 처리합니다.
로 이름 f을 변경 하여 전체 프로그램을 만들 수 main는 있지만 아직 점수를 올리지 못했습니다.
예쁜 버전, 매크로 G확장 :
char *s = "123456789abcdefghi";
int g(int i, int j) {
for(; j < 18; ++j)
putchar((i > j | j > 17 - i) ? s[j] : 32);
puts(""); // Break the line -- shorter than putchar(10) or printf("\n")
}
int f() {
int i = 0, j = 0; // j is constant, declared here to not have to declare and init it inside g()
for(; i++ < 8;) // Upper half of the tie
g(i, j);
g(i + 1, j); // Median line
for(; i-- > 1;) // Lower half; --i > 0 would also work for the condition
g(i, j);
}