ASCII暗星


10

输入说明

字符串(为获得最佳结果,所有字符应可打印且宽度相同)。

输出说明

遵循模式的字符星:

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

其中01...是字符串的后续字符。输出不一定必须是一个字符串-在控制台中逐字符打印star char很好。

>> 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 '16

我认为“字符串”就足够了。当然,为了获得最佳结果,您可能希望避免使用制表符或其他字符,这些选项卡或其他字符会扭曲输出的形状,但这并不意味着您不能包含它们。不过,为了清楚起见,我更新了说明。
shooqie '16

3
给出最佳结果的问题不是问题,而是答案是否必须得到支持。如果还必须支持非ASCII(Unicode)字符,则某些语言可能必须使用略有不同的代码。同样,如果我们假设无法打印的内容不会出现(特别是换行),则某些代码可能会更短。
Martin Ender

是否可以打印所有字符都无关紧要。如果您可以使代码更短,即使它限制了您打印某些字符(例如Unicode),那么也可以。无论如何,我认为这是代码编程的精神。只要您的程序支持常见字符,就可以了。如果不是,那么我认为挑战规范不是问题。
shooqie '16

Answers:



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╛╜+@

是的,该换行符应该在那里。是的,严重地仍然很讨厌字符串操作。十六进制转储(与可逆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是字面换行符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.