알파 숫자의 나비 넥타이


14

이 정확한 텍스트를 출력하십시오 :

1                i
12              hi
123            ghi
1234          fghi
12345        efghi
123456      defghi
1234567    cdefghi
12345678  bcdefghi
123456789abcdefghi
12345678  bcdefghi
1234567    cdefghi
123456      defghi
12345        efghi
1234          fghi
123            ghi
12              hi
1                i

하나의 후행 줄 바꿈은 허용되지만 다른 형식 변경은 허용되지 않습니다.

규칙 및 I / O

  • 입력이 없습니다
  • 편리한 방법으로 출력 할 수 있습니다 .
  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

1
대문자 알파벳을 대신 사용할 수 있습니까?
user41805

3
@Cowsquack 규칙 변경 일 것입니다. 이 정확한 텍스트 출력 이라고 표시 됩니다.
데니스

@Cowsquack Nope-소문자가 필요합니다.
AdmBorkBork

답변:


13

C, 87 85 81 80 바이트

j;main(i){for(;++i<19;)for(j=19;j--;)putchar(j?j<i^j<20-i?32:106-j-j/10*39:10);}

온라인으로 사용해보십시오!

설명

j; // same as int j;
main(i){ // same as int main(int i){, where i = argc (1 with no arguments)
  for(;++i<19;) // loop over rows, i = 2..18
    for(j=19;j--;) // loop over chars, j = 19..0
      putchar(j?j<i^j<20-i?32:106-j-j/10*39:10); // output characters:
      //      j?                           :10 // on last char (j=0), output \n
      //        j<i                            // check for top/left half
      //            j<20-i                     // check for bottom/left half
      //           ^                           // 1 if only one half matched
      //                  ?32:                 // if so, output space
      //                      106              // char code for j
      //                         -j            // get desired letter
      //                           -j/10*39    // subtract 39 for j>9 (numbers)
}

나는 ^우선 순위보다 낮은 우선 순위에 놀랐다 <.
Lynn

@Lynn C (및 Java / JS 등)의 비트 연산자는 모두 비교보다 우선 순위가 낮습니다. 이 코드 골프 모두 좋은 오류 (생각의 정말 좋은 소스입니다 if (x & 2 == 0)항상로 평가되는 0)
PurkkaKoodari





3

Q 기본, 72 바이트

Taylor Scott의 제출을 기반으로 합니다.

FOR y=-8TO 8
z=ABS(y)
?"123456789abcdefghi";
LOCATE,10-z
?SPC(2*z)"
NEXT

기본 설명

각 줄에 전체 문자열을 인쇄합니다 123456789abcdefghi. 그런 다음 돌아가서 공백으로 공백을 덮어 씁니다.

전체 설명

코드가 약간 압축 해제 된 상태 :

FOR y = -8 TO 8           ' Loop for 17 rows
 z = ABS(y)               ' z runs from 8 to 0 and back to 8
 ? "123456789abcdefghi";  ' Print the full string and stay on the same line (important!)
 LOCATE , 10-z            ' Go back to column 10-z on that line
 ? SPC(2*z); ""           ' Print 2*z spaces
                          ' (SPC keeps the cursor on the same line unlesss you print
                          ' something after it, so we'll use the empty string)
NEXT                      ' Go to the next y value

정말 똑똑한 Locate명령입니다
Taylor Scott

2

T-SQL, 108 바이트

DECLARE @ INT=8a:
PRINT STUFF('123456789abcdefghi',10-abs(@),2*abs(@),SPACE(2*abs(@)))
SET @-=1IF @>-9GOTO a

반품은 가독성을 위해서만 제공됩니다.

숫자 테이블을 포함하여 다른 많은 변형을 시도했지만 가장 짧았습니다.



2

Japt , 20 바이트

9Æ9Ç>YÃê1 Ë?S:°EsH
ê

apt 인터프리터

문자 배열로 출력됩니다. 그만큼-R플래그는 그냥 출력 모습 좋네요하게 작동 할 필요가 없습니다.

설명:

9Æ9Ç                    create a 9x9 2D array 
    >YÃ                 fill bottom left triangle with "false", upper right with "true"
       ê1               mirror horizontally
          Ë?S           replaces "true" with a space
             :°EsH      replaces "false" with the horizontal index + 1 converted to base 32
                  \n    Store the result in U (saves bytes by not closing braces)
                    ê   palindromize vertically

1

Stax , 18 바이트

â4+╤jo♂▐▀3bkWíæß╝╖

실행 및 디버깅

설명:

9R$|[|<Va17T|]r|>\|pm Full program
9R$                   Produce "123456789"
   |[|<               Left-aligned prefixes (["1        ", "12       ", ...])
       Va17T          Produce "abcdefghi"
            |]        Suffixes (["abcdefghi", "bcdefghi", ...])
              r|>     Reverse and left-align (["        i", "       hi", ...])
                 \    Zip both arrays (["1                i", "12              hi", ...])
                  |p  Palindromize array
                    m Map over array, printing each with a newline                        

1

APL (Dyalog Unicode) , 30 바이트

(⊢⍪1↓⊖)(↑,\1↓⎕d),⌽↑,\⌽8199↑⎕a

온라인으로 사용해보십시오!

행렬로 변환 (공백이있는 자동 패드)

  • ,\ 접두사

  • 1↓ 첫 번째 요소는

  • ⎕d 이 문자열 '0123456789'

  • 이것은 문자 행렬을 제공합니다

1        
12       
123      
1234     
12345    
123456   
1234567  
12345678 
123456789

, 와 연결

  • 반대로 된

  • 매트릭스 화

  • ,\ 접두사

  • 반대로 된

  • 819⌶ 소문자

  • 9↑ 의 처음 9 개 요소

  • ⎕a 이 문자열 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  • 이것은 문자 행렬을 제공합니다

        나는
       안녕하세요
      기
     fghi
    에프 기
   데프 기
  cdefghi
 bcdefghi
abcdefghi

이 결과에

1 나는
안녕 12
123 기
1234 년
12345 에프 기
123456 데프 기
1234567 cdefghi
12345678 bcdefghi
123456789abcdefghi

다음 기차를 수행 (⊢⍪1↓⊖)

올바른 주장

와 수직으로 연결

1↓ 첫 번째 행에서 삭제됨 (이는 중간 행의 반복을 피함)

올바른 논증은 수직으로 뒤집어졌다


다른 솔루션

33 바이트

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⎕ucs 106-q←⍳9

온라인으로 사용해보십시오!

33 바이트

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⌽ucs 96+q←⍳9

온라인으로 사용해보십시오!


1

, 22 17 바이트

G↗↓←⁹β←G↖↓⁹⭆χι‖O↓

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

G↗↓←⁹β

오른쪽 아래 삼각형을 그리고 소문자 알파벳을 사용하여 채 웁니다. (채우기는 알파벳으로 평면을 배열 한 다음 그려진 영역을 복사하는 것을 기반으로합니다.)

숫자 삼각형을 그리려면 왼쪽으로 이동하십시오.

G↖↓⁹⭆χι

왼쪽 아래 삼각형을 그리고 숫자를 사용하여 채 웁니다. (삼각형이 원점의 왼쪽에 그려 지므로 숫자는 오른쪽 정렬되므로 1에서 9까지의 숫자 만 사용됩니다.)

‖O↓

아래쪽 절반을 완성하십시오.


1

V , 25 , 21 바이트

¬19¬ai8ñHÄ/á
r ge.YGp

온라인으로 사용해보십시오!

nmjcman101 덕분에 2-4 바이트가 절약되었습니다!

16 진 덤프 :

00000000: ac31 39ac 6169 38f1 48c4 2fe1 0a72 2067  .19.ai8.H./..r g
00000010: 652e 5947 70                             e.YGp

나는 내가하고있는 모든 것이 오늘 당신의 대답을 스토킹한다는 것을 알고 있지만 이것이 23에 효과적이라고 생각합니다 : 온라인으로보십시오!
nmjcman101 2016 년

@ nmjcman101 어떤 이유로 든 그 버전이 어떻게 작동하는지 이해할 수 없습니다. 그러나 나는 더 짧은 것을 알아 냈습니다. 감사합니다!
James

그것은 /\d*검색 의 끝으로 갔다
nmjcman101

1

J , 44 바이트

(m]\u:49+i.9),.(m=.,}.@|.)]\&.(|."1)u:97+i.9

온라인으로 사용해보십시오!

색인에 사용하기 위해 1과 0의 마스크를 숫자로 생성하려고 시도했지만 추가 행을 제거하는 비용이 높았고 포기했습니다.

   (9-.~i.18){0<:-/~(,|.)i.9
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1


1

apt, 24 바이트

줄의 배열을 반환

9Æ´AçXÄ
c¡A°îYd#a
Vù y ê

그것을 테스트


설명

9Æ            :Map each X in the range [0,9)
  ´A          :  Prefix decrement A (initially 10)
    ç         :  Repeat
     XÄ       :  X+1
\n            :Assign to variable U
 ¡            :Map each element at index Y in U
  A°          :  Postfix increment A
    î         :  Repeat
      d       :  The character at codepoint
     Y #a     :  Y+97
c             :Concatenate with U
\n            :Assign to variable V
Vù            :Left pad each element in V to the length of the longest element
   y          :Transpose
     ê        :Palindromise

대안

9õÈîZqÃú Ë+EòdEn#i)¬ù9Ãê

그것을 테스트

9ÇòdZn#i)cZòÄ)¬Ãú ®éJ´Ãê

그것을 테스트


이것을 수평으로 구축해도 더 짧은 솔루션이 아닌지 궁금합니다. : \
얽히고 설킨

1

QBasic , 87 바이트

콘솔에 입력 및 출력을받지 않는 익명 함수.

For y=-8To 8:z=Abs(y):a$="123456789abcdefghi":?Mid$(a$,1,9-z)Spc(2*z)Mid$(a$,10+z):Next

이 답변은 기술적으로 폴리 글 로트이며 VBA에서 작동합니다.



1

비 펀지-93 , 314 308 바이트

<p0+3*67p0+4*77p0+3*77p0-7*88p0-6*88"#v#v>"
"i        "11g1-21p56+1g1+56+1p28*1g1+28*1p  ^       >25*
"        1"92g1+82p56+2g1-56+2p28*2g1-28*2p91g00g`#v_^   >
"ihgfedcba "93p26*3g1-26*3p">^"88*7-0p88*7-4pv     >25*
"987654321 "14p26*4g1+26*4p26*4g12g`#v_            ^
                             >:#,_@#:<

온라인으로 사용해보십시오!

명령어 >와 함께 배치하여 6 바이트를 골프p



1

PowerShell 5.1, 70 69 64 57 바이트

-7 바이트에 대한 감사 Mazzy

1..9+8..1|%{-join(1..$_+'  '*(9-$_)+' ihgfedcba'[$_..1])}

함께 붙여 넣으면 바이트가 절약됩니다. 하나의 메가 조인으로 만들면 5가 더 절약됩니다. 또한 ai를 얻기 위해 다양한 int를 char []로 변환하여 작동합니다. 실제 문자 범위를 사용하면 5 바이트가 더 좋습니다.


1
이것을 시도하십시오 : 1..9+8..1|%{-join(1..$_+' '*(9-$_)+' ihgfedcba'[$_..1])}. 참고 ' '*(9-$_)는 2 개의 공백 기호를 포함합니다.
mazzy

1
@mazzy ooof, 이중 공간 트릭이 누락되었습니다. 나는 다양한 수학 진술을 생각하고 있었지만 명백한 해결책은 나에게 결코 발생하지 않았습니다.
Veskah

1

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);
}


컴파일러 플래그는 137이지만 +10입니다.
joH1

137은 총 127 바이트의 코드와 10 바이트의 컴파일러 플래그입니다.
Logern

죄송합니다. 지금 업데이트 중!
joH1

@Logern G함수 이름과 일치하도록 매크로의 이름을로 바꾸는 자유를 얻었습니다 .
joH1



0

VBA, 75 바이트

콘솔에 입력 및 출력을받지 않는 익명의 VBE 즉시 창 기능.

For y=-8To 8:z=Abs(y):a="123456789abcdefghi":Mid(a,10-z)=Space(2*z):?a:Next

0

젤리 , 22 21 바이트

9R€z⁶Zµạ106Ọ$Ṡ¡€Uṭ)ŒḄ

온라인으로 사용해보십시오!

(사인)이 캐릭터에 작용할 때 파이썬의 결과를 낳는 의도하지 않은 행동에 의존합니다 None. 이 때문에 파이썬에서는 인수가 0이 아닌 정수인지 여부를 1 바이트 검사합니다 None. 이 동작이 변경되면 하나 이상의 바이트에서도 작동합니다.

줄 목록을 반환하는 함수입니다.



0

파이썬 2 , 97 94 바이트

i=o="123456789abcdefghi";c=8
while c:i=i[:c]+' '*(9-c)*2+i[-c:];o=i+'\n'+o+'\n'+i;c-=1
print o

온라인으로 사용해보십시오!

사용에 대한 대안으로 만 게시되었으며 eval()마침내 100 미만으로 얻었 기 때문에 기본적으로 중간 행으로 시작한 다음 동시에 위아래로 작동합니다.



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