Ngôi sao ẩm ướt ASCII


10

Mô tả đầu vào

Một chuỗi (để có kết quả tốt nhất, tất cả các ký tự phải được in và có cùng chiều rộng).

Mô tả đầu ra

Một ngôi sao nhân vật theo mô hình:

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

trong đó 0, 1... là các ký tự tiếp theo của chuỗi. Đầu ra không nhất thiết phải là một chuỗi - in char sao bằng char vào bảng điều khiển là ổn.

Thí dụ

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

Tôi nghĩ rằng "một chuỗi" nên rõ ràng hơn một chút, ý bạn là một chuỗi chỉ bao gồm ASCII có thể in được?
FryAmTheEggman

Tôi nghĩ rằng "một chuỗi" là đủ. Tất nhiên, để có kết quả tốt nhất, bạn có thể muốn tránh các tab hoặc các ký tự khác sẽ làm biến dạng hình dạng của đầu ra, nhưng điều đó không có nghĩa là bạn không thể bao gồm chúng. Tuy nhiên, tôi đã cập nhật mô tả cho rõ ràng.
shooqie

3
Đó không phải là một câu hỏi về việc liệu điều đó có mang lại kết quả tốt nhất hay không mà là liệu các câu trả lời có hỗ trợ hay không. Một số ngôn ngữ có thể phải sử dụng mã hơi khác nhau, ví dụ như các ký tự không phải ASCII (Unicode) cũng phải được hỗ trợ. Tương tự, một số mã có thể ngắn hơn nếu chúng ta có thể giả sử rằng không thể in được sẽ không xuất hiện (cụ thể là các dòng).
Martin Ender

Cho dù bạn có thể in tất cả các ký tự hay không đều không liên quan. Nếu bạn có thể làm cho mã của mình ngắn hơn, ngay cả khi nó giới hạn bạn in một số ký tự nhất định (như Unicode), thì cũng vậy. Tôi nghĩ dù sao đó cũng là tinh thần của môn đánh gôn. Miễn là chương trình của bạn hỗ trợ các nhân vật thông thường, nó vẫn ổn. Nếu không, thì tôi không nghĩ rằng đặc tả thách thức là vấn đề.
shooqie

Câu trả lời:



1

Perl, 97 93 + 2 = 95 byte

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

Yêu cầu -nlEcờ:

$ 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

Ung dung:

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

1

Nghiêm túc, 57 byte

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

Vâng, dòng mới đó được cho là ở đó. Vâng, Nghiêm túc mà vẫn hút khi thao tác chuỗi. Hexdump (đảo ngược với 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..+@

Tôi sẽ cập nhật điều này với lời giải thích khi tôi viết xong. Nó hơi dài.


1

ES6, 153 byte

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`

Ung dung:

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

Giải pháp thay thế, cũng 153 byte:

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`

Ung dung:

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

Lưu ý: \n`s bên trong là một ký tự dòng mới.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.