ASCII Pylons를 구성해야합니다!


24

내 아나 고프 포스트에서 게시 된 크로스 (참고 : 스포일러, 포스트 mortem이 포함될 수 있음).

다음 텍스트를 정확하게 출력하십시오.

  • 각 줄마다 후행 공백과 후행 줄 바꿈이 추가로있을 수 있습니다.
  • 가장 짧은 코드 (바이트)가 이깁니다.
                                                
                                              !"!
                                             "#$#"
                                            #$%&%$#
                                           $%&'('&%$
                                          %&'()*)('&%
                                         &'()*+,+*)('&
                                        '()*+,-.-,+*)('
                                       ()*+,-./0/.-,+*)(
                                      )*+,-./01210/.-,+*)
                                     *+,-./012343210/.-,+*
                                    +,-./0123456543210/.-,+
                                   ,-./01234567876543210/.-,
                                  -./0123456789:9876543210/.-
                                 ./0123456789:;<;:9876543210/.
                                /0123456789:;<=>=<;:9876543210/
                               0123456789:;<=>?@?>=<;:9876543210
                              123456789:;<=>?@ABA@?>=<;:987654321
                             23456789:;<=>?@ABCDCBA@?>=<;:98765432
                            3456789:;<=>?@ABCDEFEDCBA@?>=<;:9876543
                           456789:;<=>?@ABCDEFGHGFEDCBA@?>=<;:987654
                          56789:;<=>?@ABCDEFGHIJIHGFEDCBA@?>=<;:98765
                         6789:;<=>?@ABCDEFGHIJKLKJIHGFEDCBA@?>=<;:9876
                        789:;<=>?@ABCDEFGHIJKLMNMLKJIHGFEDCBA@?>=<;:987
                       89:;<=>?@ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA@?>=<;:98
                      9:;<=>?@ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA@?>=<;:9
                     :;<=>?@ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA@?>=<;:
                    ;<=>?@ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA@?>=<;
                   <=>?@ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA@?>=<
                  =>?@ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA@?>=
                 >?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>
                ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?
               @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@
              ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA
             BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCB
            CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDC
           DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFED
          EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFE
         FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGF
        GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHG
       HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIH
      IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJI
     JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJ
    KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLK
   LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONML
  MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONM
 NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPON
OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPO

3
의도적 인 첫 공백 전용 줄이 있습니까?
AdmBorkBork

9
그 첫 번째 아스키 문자 권자이기 때문에 공간의 @AdmBorkBork
HyperNeutrino

2
@ the4kman과 <=>=<물고기.
pizzapants184

4
이것이 "ASCII Pylons를 구성해야합니다!"라는 제목이없는 이유가 있습니까?
mattdm

3
@mattdm 나는 제목 때문에 이것을 찬성하기 위해 HNQ 목록에서만 여기에 왔습니다. 잘 했어요
Todd Wilcox

답변:


4

캔버스 , 15 14 바이트

0c[C²[j}¹m]/││

여기 사용해보십시오!

이 작업을 수행하는 동안 Canvas에 ASCII / 유니 코드에 대한 기본 제공 기능이 없었기 때문에 몇 가지 기본 제공 ( & )을 추가했습니다 .

설명 (일부 문자는 모노 스페이스로 대체되었습니다) :

0c              push the charcode of "0" - 48
  {       ]     map over 1..48
   C              push the ASCII characters
    ²[ ]          repeat by the counter (0-indexed)
      j             remove the last character
        ¹m        mold to the length of the counter
           /    pad each line with spaces so it looks like a diagonal
            ││  palindromize the whole thing horizontally

16

PowerShell , 73 바이트

' '*48;46..0|%{" "*$_+-join[char[]](($x=79-$_)..($y=$x+$j++)+(++$y)..$x)}

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

첫 번째 공백 전용 행을 출력 한 다음에서 46로 반복 합니다 0. 각 반복 은 일부 계산을 통해 해당 수의 공백을 출력 한 다음 적절한 기호의 -join에드 char배열을 출력합니다 .


1
첫 줄을 47 개의 공백과 공백 문자로 처리하여 계산을 저장할 수 있습니까?
Riking

@Riking 이렇게하려면 char-array가 3 개 이상이 아닌 하나의 항목 만 생성하도록 만드는 특별한 사례가 필요합니다. 결과적으로 공간 전용 줄을 완전히 별도로 분리하는 것이 더 짧습니다.
AdmBorkBork

11

, 13 바이트

E⁴⁸⮌✂γι⊕⊗ι‖O←

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

 ⁴⁸             Literal 48
E               Map over implicit range
      ι  ι      Current index
        ⊗       Doubled
       ⊕        Incremented
     γ          Printable ASCII
    ✂           Slice
   ⮌            Reverse
                Implicitly print each slice on separate lines
          ‖O←   Reflect with overlap

5
결과가 나에게 잘못 보인다.
Mr. Xcoder

1
@ Mr.Xcoder Ugh, 고전적인 off-by-1 오류 ...
Neil

8

파이썬 2 , 73 바이트

i=48
while i:i-=1;r=range(79-i,127-i*2);print' '*i+bytearray(r+r[-2::-1])

온라인으로 사용해보십시오! 무정부 상태 골프에서 교차 게시 ( 내 제출 참조 ).

빠른 사후 분석 : XNOR와 다이앤가 발견 된 정확한 같은 솔루션을 . ebicochneal은 mitchs가 70 바이트로 개선 된 71 바이트 솔루션 을 제출했습니다 . "현재 줄"변수를 유지하고 현명하게 업데이트함으로써 ( 길이가 길거나) 더 긴 것을 다루지 않습니다.bytearray''.join(map(chr,…))





4

일반적인 Lisp , 110 바이트

(dotimes(i 48)(dotimes(j 96)(princ(if(>(abs(- j 48))i)" "(code-char(+(-(* i 2)(abs(- j 48)))32)))))(princ"
"))

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

설명

(dotimes(i 48)                   ;; for i from 0 up to 47
    (dotimes(j 96)               ;; for j from 0 up to 95
        (princ                   ;; print
            (if(>(abs(- j 48))i) ;; if abs(j - 48) > i
                " "              ;; print " "
                (code-char(+(-(* i 2)(abs(- j 48)))32)) ;; else print appropriate character
            )
        )
    )(princ"
") ;; print newline
)

3

VBA, 71 바이트

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

For i=0To 47:?Spc(47-i);:For j=-i To i:?Chr(32-Abs(j)+2*i);:Next:?:Next



2

C (gcc), 117 바이트

c;i;main(){for(i=0;i<48;++i){for(c=2*i-15;c<32+2*i;++c)putchar(c>31+i?c:32);for(;c>31+i;--c)putchar(c);putchar(10);}}

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

언 골프 드 :

int ch;
int row;
int main(void) {
    for (row = 0; row < 48; ++row) {
        for (ch = 2*row-15; ch < 32 + 2*row; ++ch) {
            // The first character in the row is 2*row - 15 (row is zero-indexed)
            if (ch > 31+row)
                putchar(ch);
            else
                // If the current character is not in the pyramid, mask it with a space
                putchar(' ');
        }
        for (; ch > 31+row; --ch) {
            // Finish the other side of the pyramid
            putchar(ch);
        }
        putchar('\n');
    }
}




2

T-SQL, 153 바이트

DECLARE @ INT=33,@t CHAR(95)=''a:PRINT @t;
SET @t=LEFT(STUFF(STUFF(@t,63-@/2,2,''),46,0,CHAR(@-1)+CHAR(@)+CHAR(@+1)+CHAR(@)),33+@/2)
SET @+=2IF @<128GOTO a

반품은 표시 전용입니다.

나는 전체 문자열을 미리 구성하는 루프 (163 문자)와 즉시 루프를 만드는 중첩 루프 (168 문자)를 포함하여 여러 가지 아이디어를 시도했지만 결국 가장 짧았습니다.

기본적으로 각 루프는 4 개의 새로운 문자 를 문자열의 중앙에 넣은 다음 SQL STUFF()함수를 사용하여 양쪽 끝에서 여분의 문자 를 잘라냅니다 .

형식화 및 설명 :

DECLARE @ INT=33,                      --Using a single counter for both rows and CHAR
        @t CHAR(95)=''                 --a non-null CHAR field will pre-fill with spaces
a:                                     --GOTO loop, shorter than a WHILE
    PRINT @t                           --duh
    SET @t = LEFT(                     --lops off the character at the end
            STUFF(                     --crams 4 new characters in the middle
            STUFF(@t, 63-@/2, 2, '')   --snips out a space and the leading character
                 ,46, 0, CHAR(@-1) + CHAR(@) + CHAR(@+1) + CHAR(@))
                 ,33 + @/2)            --rest of the LEFT()
    SET @+=2
IF @<128 GOTO a

2

J , 47 44 바이트

(,.~}:@|."1)(1+i.48)([|.@{.}.)"0 1 u:31+i.96

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

템플릿을위한 Conor O'Brien에게 감사합니다! 잘못된 솔루션을 표시 한 FrownyFrog에게 감사합니다.


1
아마도 이것은 더 쉽게 수정할 수 있습니다 : 온라인으로 사용해보십시오!
Conor O'Brien

@Conor O'Brien-템플릿에 감사드립니다. 링크를 업데이트했습니다.
Galen Ivanov

상단에 여분의 줄을 인쇄합니다.
FrownyFrog

@FrownyFrog 아, 이제는 줄 바꿈이 아닌 후행 줄 바꿈 만 허용된다는 것을 알았습니다. 나는 그것을 고치려고 노력할 것이다.
Galen Ivanov

@FrownyFrog-고정 및 약간 골프.
Galen Ivanov

2

루비, 59 바이트

48.times{|i|-47.upto(i){|c|putc~c<i ?32-c.abs+2*i:32};puts}

아나 골에 대한 대답에서 교차 게시되었습니다.


2

apt -R, 18 15 바이트

추가 선행 줄 바꿈이 허용되는 경우 14 바이트 .

#0õ_odH+ZÉ ¬êÃû

그것을 테스트


설명

#0                  :48
  õ                 :Range [1,48]
   _         Ã      :Pass each Z through a function
    o               :  Range [0,Z)
      H+ZÉ          :    To each add 32+Z-1
     d              :    Get the character at that codepoint
           ¬        :  Join to a string
            ê       :  Palinrdomise
              û     :Centre pad each element to the length of the longest element
                    :Implicitly join with newlines and output

2

J ,  40 37  32 바이트

(40 개) 식의 u:30+2>.(+:@i.@(2&+)(-*(>+:))"0 _|@i:)47해결 방법의 아이디어 + 갈렌 이바노프 & + 코너 오브라이언 덕분에

에코 포함 37 개 echo u:32+|.(~.(>:*+:@[-])"0 _])|i:47

echo u:32+|.(~.(>:*[+-)"{])|i:47

의견의 @FrownyFrog 팁 통합

TIO


나는 표현이 유효한 제출물이라고 생각하지 않습니다.
LyricLy

@LyricLy, 의견은 내가 "에코"추가 공간이 이제 .. 나에게 또 다른 8 바이트를 면도 괴롭히는을 위해 내가 .. 어쨌든 덕분에이 양식의 다른 J 답변을 참조 할 따라 달라질 것으로 보인다 : 희망이 당신에게있는 거 행복 :)
jayprich

"0 _"{
FrownyFrog

+:@[-][+-
FrownyFrog

아름다운 .. 다음 팁에 감사합니다 @FrownyFrog
jayprich



1

루비 , 78 바이트

s=*32;48.times{puts (s.map(&:chr)*'').center 95;c=*s[0]+1;s=c+s.map{|x|x+2}+c}

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

전체 프로그램. 언 골프 드 :

s=*32;                              # s is an array of integers
48.times{                           # Repeat 48 times:
  puts (s.map(&:chr)*'').center 95; # Turn each int to a char, join, center, and print
  c = *s[0] + 1;                    # c is a singleton array. It will bookend the next line
  s = c + s.map{|x|x+2} + c         # Add 2 to each element of s before adding the bookends
}





1

Gol> <> , 29 바이트

`0FaLssLF:P|LF:M|`/L-R` lRo|;

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

작동 원리

`0FaLssLF:P|LF:M|`/L-R` lRo|;

`0F                        |;  Repeat the following 48 times and halt...
   a                           Push 10 (\n)
    Lss                        Push L(loop counter) + 32
       LF:P|                   Repeat "Clone the top and increment" L times
            LF:M|              Repeat "Clone the top and decrement" L times
                 `/L-R`        Push 32 (space) 47-L times (space is significant)
                        lRo    Print everything as char, from the top,
                               until the stack is empty

1

TCL , 129 122 118 117 바이트

time {incr i;set j -48;set a {};time {set a $a[format %c [expr abs([incr j])>=$i?32:$i*2-abs($j)+30]]} 96;puts $a} 48

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

설명

time { # for i from 0 up to 47
    incr i
    set j -48
    set a {}
    time { # for j from -48 up to 47
        # add next character to a
        set a $a[format %c [expr abs([incr j])>$i?32:$i*2-abs($j)+32]]
    } 96
    puts $a # print a
} 48

1

C (gcc) 199 바이트

#include<stdio.h>
int i,j=32,k=32,l=49;int main(){while(k<127){for(i=0;i<l;++i)printf(" ");for(i=j;i<k;++i)printf("%c",i);printf("%c",k);for(i=k-1;i>=j;--i)printf("%c",i);printf("\n");j++;k+=2;l--;}}

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

모든 도움을 주신 Picard와 PunPun1000에게 감사합니다


@Picard 공백을 제거했습니다. 전역 반복자 변수로 더 축소 할 수 있습니다.
Jonathan Landrum

@Picard 휴대 전화에서 편집했습니다. 내가 빈 줄을 남겼다는 것을 몰랐다.
Jonathan Landrum

1
쉼표 뒤에 printf 호출에 불필요한 공백이 있으며 변수 이름을 한 글자로 줄일 수 있습니다. 또한 TIO 링크와 실제 바이트 수를 포함시킬 수 있다면 좋을 것입니다. 여기에 현재 코드에 대한 링크의 TIO는
PunPun1000

좋아, 나는 그것을 조금 더 압착했습니다, 나는 그것을 더 축소하기 위해 알고리즘을 변경해야 할 것 같아요
Jonathan Landrum

1

하스켈, 102 바이트

main=putStr$do
i<-[48,47..0]
let l=replicate i 32++[79-i..126-i*2]
map toEnum$l++tail(reverse l)++[10]

내가 시도한 것은 짧지 않았습니다.

  • 문자 리터럴의 관점에서 모든 것을 표현하고 succ또는 pred을 저장합니다 map toEnum.
  • 를 사용하는 대신 하향 범위를 작성합니다 reverse.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.