ASCII dank yıldızı


10

Giriş açıklaması

Bir dize (en iyi sonuçlar için tüm karakterler yazdırılabilir ve aynı genişlikte olmalıdır).

Çıktı açıklaması

Deseni izleyen bir karakter yıldızı:

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

Burada 0, 1... dizenin sonraki karakterleri. Çıktının mutlaka bir dize olması gerekmez - konsere yıldız karakterini char ile yazdırmak iyidir.

Misal

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

"Bir dize" biraz daha açık olması gerektiğini düşünüyorum, sadece yazdırılabilir ASCII oluşan bir dize demek?
FryAmTheEggman

"Bir dize" yeterli olduğunu düşünüyorum. Tabii ki, en iyi sonuçlar için muhtemelen çıktının şeklini bozacak sekmelerden veya diğer karakterlerden kaçınmak istersiniz, ancak bu onları ekleyemeyeceğiniz anlamına gelmez. Yine de, açıklık için açıklamayı güncelledim.
shooqie

3
Bu, bunun en iyi sonuçları sağlayıp sağlamadığı değil, cevapların onu desteklemesi gerekip gerekmediği sorusudur. Örneğin ASCII olmayan (Unicode) karakterler de desteklenecekse, bazı diller biraz farklı kodlar kullanmak zorunda kalabilir. Benzer şekilde, yazdırılamazların görünmeyeceğini varsayarsak bazı kodlar daha kısa olabilir (özellikle satır beslemeleri).
Martin Ender

Tüm karakterleri yazdıp yazamayacağınız önemsizdir. Kodunuzu, bazı karakterleri (Unicode gibi) yazdırmanızı kısıtlasa bile kısaltabilirsiniz. Bence bu zaten kod golfünün ruhu. Programınız ortak karakterleri desteklediği sürece sorun yok. Değilse, o zaman meydan okuma spesifikasyonunun sorun olduğunu düşünmüyorum.
shooqie

Yanıtlar:



1

Perl, 97 93 + 2 = 95 bayt

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

-nlEBayrak gerektirir :

$ 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

Ciddi, 57 bayt

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

Evet, yeni satırın orada olması gerekiyordu. Evet, ciddi şekilde dize manipülasyonu berbat. Hexdump (ile tersinir 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..+@

Yazmayı bitirdikten sonra bunu bir açıklama ile güncelleyeceğim. Biraz uzun.


1

ES6, 153 bayt

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

Alternatif çözüm, ayrıca 153 bayt:

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

Not: \nİç `ler gerçek bir satırsonu karakteridir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.