ASCII Dank Star


10

입력 설명

문자열 (최상의 결과를 얻으려면 모든 문자를 인쇄 할 수 있어야하고 너비가 같아야합니다).

출력 설명

패턴을 따르는 캐릭터 스타 :

0  0  0
 1 1 1 
  222  
0123210
  222  
 1 1 1 
0  0  0

여기서 0, 1...은 문자열의 후속 문자입니다. 출력은 반드시 하나의 문자열 일 필요는 없습니다. 별 문자를 문자로 콘솔에 인쇄하는 것이 좋습니다.

>> star('overflow')
>>
o      o      o
 v     v     v 
  e    e    e  
   r   r   r   
    f  f  f    
     l l l     
      ooo      
overflowolfrevo
      ooo      
     l l l     
    f  f  f    
   r   r   r   
  e    e    e  
 v     v     v 
o      o      o

"문자열"이 좀 더 명확해야한다고 생각합니다. 인쇄 가능한 ASCII로만 구성된 문자열을 의미합니까?
FryAmTheEggman

"문자열"이면 충분하다고 생각합니다. 물론 최상의 결과를 얻으려면 출력 모양을 왜곡하는 탭이나 다른 문자를 사용하지 않아도되지만 탭을 포함 할 수는 없습니다. 여전히 명확성을 위해 설명을 업데이트했습니다.
shooqie

3
그것은 그것이 가장 좋은 결과를 제공하는지 여부에 대한 질문이 아니라 응답이 그것을 지원해야하는지에 대한 질문입니다. 비 ASCII (유니 코드) 문자도 지원해야하는 경우 일부 언어는 다소 다른 코드를 사용해야 할 수도 있습니다. 마찬가지로 인쇄 할 수없는 항목 (특히 줄 바꿈)이 나타나지 않는다고 가정하면 일부 코드가 더 짧을 수 있습니다.
Martin Ender

모든 문자를 인쇄 할 수 있는지 여부는 관련이 없습니다. 유니 코드와 같은 특정 문자를 인쇄하지 못하도록 코드를 더 짧게 만들 수 있다면 그렇게하십시오. 어쨌든 이것이 코드 골프 정신이라고 생각합니다. 프로그램이 일반적인 문자를 지원하는 한 괜찮습니다. 그렇지 않으면 챌린지 사양이 문제라고 생각하지 않습니다.
shooqie

답변:



1

Perl, 97 93 + 2 = 95 바이트

$i=y///c-2;push@a,map{$"x$j++.$_.($"x$i--.$_)x2}/.(?!$)/g;say for@a,s/.$//r.reverse,reverse@a

-nlE플래그 필요 :

$ perl -nlE'$i=y///c-2;push@a,map{$"x$j++.$_.($"x$i--.$_)x2}/.(?!$)/g;say for@a,s/.$//r.reverse,reverse@a' <<< 'overflow'
o      o      o
 v     v     v
  e    e    e
   r   r   r
    f  f  f
     l l l
      ooo
overflowolfrevo
      ooo
     l l l
    f  f  f
   r   r   r
  e    e    e
 v     v     v
o      o      o

언 골프 드 :

$i=y///c-2;
push @a, map{
  $" x $j++ . 
  $_ . 
  ($" x $i-- . $_)x2
} /.(?!$)/g;
say for @a, s/.$//r.reverse, reverse@a

1

진심으로 57 바이트

╩╜#dXΣR;╝;lr;R3Z`i' *;(;;))@(((@)' *;)kΣ`M;R@k`'
j`Mi╛╜+@

예, 그 줄 바꿈이 있어야합니다. 예, 여전히 문자열 조작에 심각합니다. 16 진 덤프 (와 가역 xxd -r) :

00000000: cabd 2364 58e4 523b bc3b 6c72 3b52 335a  ..#dX.R;.;lr;R3Z
00000010: 6069 2720 2a3b 283b 3b29 2940 2828 2840  `i' *;(;;))@(((@
00000020: 2927 202a 3b29 6be4 604d 3b52 406b 6027  )' *;)k.`M;R@k`'
00000030: 0a6a 604d 69be bd2b 40                   .j`Mi..+@

작성이 끝나면 설명으로 업데이트하겠습니다. 좀 길어요


1

ES6, 153 바이트

s=>[...a=(t=[...s.slice(0,-1)]).map((c,i)=>(a=Array(t.length).fill` `,a[i]=c,a.join``+c+a.reverse().join``)),s+t.reverse().join``,...a.reverse()].join`\n`

언 골프 드 :

function star(s) {
    r = [];
    h = s.length - 1;
    for (i = 0; i < h; i++) {
        a = [...' '.repeat(h)];
        a[i] = s[i];
        a = a.concat(s[i]).concat(a.reverse());
        r.push(a.join(''));
    }
    return r.concat(s + [...s.slice(0,h)].reverse().join('')).concat(r.reverse()).join("\n");
}

대체 솔루션, 153 바이트 :

s=>[...a=(t=[...s].reverse().slice(1)).map((c,i)=>(a=Array(l+l+1).fill` `,a[i]=a[l]=a[l+l-i]=c,a.join``),l=t.length),s+t.join``,...a.reverse()].join`\n`

언 골프 드 :

function star(s) {
    r = [];
    h = s.length - 1;
    for (i = 0; i < h; i++) {
        a = [...' '.repeat(h + h + 1)];
        a[i] = s[i];
        a[h] = s[i];
        a[h + h - i] = s[i];
        r.push(a.join(''));
    }
    return r.concat(s + [...s].reverse().slice(1).join('')).concat(r.reverse()).join("\n");
}

참고 : \n안의`는 리터럴 개행 문자입니다.

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