アスキーダンクスター


10

入力の説明

文字列(最良の結果を得るには、すべての文字が印刷可能で、幅が同じである必要があります)。

出力の説明

パターンに従うキャラクターの星:

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

ここで01...は文字列の後続の文字です。出力は必ずしも1つの文字列である必要はありません-コンソールにスター文字を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 2016

「ひも」で十分だと思います。もちろん、最良の結果を得るには、出力の形状を歪めるタブやその他の文字をできるだけ避けたいでしょうが、それを含めることができないという意味ではありません。それでも、わかりやすくするために説明を更新しました。
shooqie 2016

3
それが最良の結果をもたらすかどうかという問題ではなく、回答がそれをサポートする必要があるかどうかという問題です。一部の言語では、たとえば非ASCII(Unicode)文字もサポートする必要がある場合、多少異なるコードを使用する必要があります。同様に、印刷できないもの(特に改行)が表示されないと想定できる場合、一部のコードは短くなる可能性があります。
マーティンエンダー

すべての文字を印刷できるかどうかは関係ありません。特定の文字(Unicodeなど)の印刷が制限されている場合でも、コードを短くできる場合は、そうしてください。とにかくそれがコードゴルフの精神だと思います。プログラムが一般的な文字をサポートしている限り、問題ありません。そうでない場合は、チャレンジ仕様が問題だとは思わない。
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╛╜+@

はい、その改行はそこにあるはずです。はい、まじめに文字列操作が苦手です。Hexdump(で可逆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内側の `sはリテラルの改行文字です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.