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 (Unicode) ในทำนองเดียวกันบางโค้ดอาจสั้นลงหากเราคิดว่า unprintables จะไม่ปรากฏ (โดยเฉพาะการป้อนบรรทัด)
Martin Ender

ไม่ว่าคุณจะพิมพ์อักขระทั้งหมดหรือไม่ก็ตาม หากคุณสามารถทำให้โค้ดของคุณสั้นลงได้แม้ว่ามันจะ จำกัด คุณจากการพิมพ์ตัวอักษร (เช่น 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

Ungolfed:

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

Ungolfed:

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`

Ungolfed:

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

หมายเหตุ: \nInside `s เป็นตัวอักษรขึ้นบรรทัดใหม่ตามตัวอักษร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.