ASCII Dank Star

10

Opis wejściowy

Ciąg (aby uzyskać najlepsze wyniki, wszystkie znaki powinny być drukowalne i mieć tę samą szerokość).

Opis wyników

Gwiazda postaci podążająca za wzorem:

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

gdzie 0, 1... są kolejne znaki łańcucha. Wyjście niekoniecznie musi być jednym ciągiem - drukowanie znaku char za pomocą char do konsoli jest w porządku.

Przykład

>> 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
shooqie
źródło
Myślę, że „ciąg znaków” powinien być nieco wyraźniejszy, czy masz na myśli ciąg składający się wyłącznie z drukowalnego ASCII?
FryAmTheEggman
Myślę, że „ciąg” jest wystarczający. Oczywiście, aby uzyskać najlepsze wyniki, prawdopodobnie chcesz uniknąć tabulacji lub innych znaków, które zniekształcałyby kształt wydruku, ale to nie znaczy, że nie możesz ich dołączyć. Mimo to zaktualizowałem opis dla jasności.
shooqie
3
Nie chodzi o to, czy daje to najlepsze wyniki, ale o to, czy odpowiedzi muszą to wspierać. Niektóre języki mogą wymagać użycia nieco innego kodu, jeśli np. Muszą być obsługiwane znaki inne niż ASCII (Unicode). Podobnie, niektóre kody mogą być krótsze, jeśli możemy założyć, że nie pojawią się niedrukowalne (w szczególności linie).
Martin Ender
To, czy możesz wydrukować wszystkie znaki, nie ma znaczenia. Jeśli możesz skrócić swój kod, nawet jeśli ogranicza to drukowanie niektórych znaków (takich jak Unicode), niech tak będzie. W każdym razie myślę, że taki jest duch golfa. Tak długo, jak twój program obsługuje popularne znaki, jest w porządku. Jeśli nie, to nie sądzę, że specyfikacja wyzwania stanowi problem.
shooqie

Odpowiedzi:

1

Perl, 97 93 + 2 = 95 bajtów

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

Wymaga -nlEflag:

$ 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

Nie golfowany:

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

Poważnie, 57 bajtów

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

Tak, ta nowa linia powinna tam być. Tak, poważnie nadal jest do bani manipulacji strunami. Hexdump (odwracalny z 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..+@

Zaktualizuję to wyjaśnienie, gdy skończę pisać. Trochę długo.

Mego
źródło
1

ES6, 153 bajty

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`

Nie golfowany:

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

Alternatywne rozwiązanie, także 153 bajty:

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`

Nie golfowany:

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

Uwaga: \nWewnątrz jest dosłownie znak nowej linii.

Neil
źródło