Cruz de personaje

31

Esperaba publicar algo más complejo como mi primer acertijo en PCG, pero una pregunta de tarea particular, eh ... sobre Stack Overflow me inspiró a publicar esto. Ellos quieren:

imprima el siguiente patrón para cualquier palabra que contenga un número impar de letras:

P           M
  R       A   
    O   R    
      G       
    O   R      
  R       A   
P           M 


Observe que las letras se separan de un caballero en el patrón que necesita imprimir. Entonces, cada otra columna está vacía. - (Gracias xnor por señalar esto).

Reglas

  1. El uso de C ++ está prohibido. Como puedo vincular esta pregunta allí.
  2. Puede usar stdout, o cualquier medio de salida rápida de una cadena (por ejemplo, alert()en JavaScript).
  3. Como siempre, el código más corto gana.
sampathsris
fuente
2
Esto está en las publicaciones relacionadas sobre el desbordamiento de la pila: stackoverflow.com/q/5508110
Level River St el
2
@flawr Creo que significa impar, ya que no es un número par.
NinjaBearMonkey
31
Dios, soy estúpido, pensé que era una especie de oscura abreviatura de informático =)
error
2
@jpjacobs: Bytes, a menos que la pregunta explícitamente indique lo contrario.
Dennis
2
¿Todo el programa o solo una función? (muy inteligente de mi parte responder primero y hacer esta pregunta más tarde ...)
Rodolfo Dias

Respuestas:

13

Pyth , 22

Vzjdm?@zd}N,dt-lzd\ Uz

Prueba:

$ pyth -c 'Vzjdm?@zd}N,dt-lzd\ Uz' <<< "CODE-GOLF"
C               F
  O           L  
    D       O    
      E   G      
        -        
      E   G      
    D       O    
  O           L  
C               F

Explicación:

(Implicit)                  z = input()
(Implicit)                  d = ' '
Vz                          for N in range(len(z)):
  jd                            print(d.join(
    m                               map(lambda d:
     ?@zd                                        z[d] if
         }N                                      N in
           ,dt-lzd                                    (d,len(z)-d-1) else
      \                                          " ",
     Uz                                          range(len(z)))))
isaacg
fuente
¿Ningún complemento en Pyth?
xnor
@xnor No, pero no ayudaría. Supongamos que no ~fuera bit a bit en Pyth. Entonces podríamos cambiar t-lzda +lz~d- todavía 5 caracteres.
isaacg
VzEs un buen truco: no sabía que U<string>daba range(len(<string>)).
FryAmTheEggman
Sí, es una buena característica. Funciona de esa manera en las listas también, pero no necesariamente en las tuplas. EDITAR: Vaya, eso falta en la documentación. Lo agregaré Lo siento.
isaacg
20

APL ( 37 35 34 27)

↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞

Toma entrada del teclado, así:

      ↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞
CODE-GOLF
C               F 
  O           L   
    D       O     
      E   G       
        -         
      E   G       
    D       O     
  O           L   
C               F 
marinus
fuente
77
Todos mis votos a favor pertenecen a APL.
Nit
13

Python 2 - 94 90 89 88

s=input()
L=len(s)
R=range(L)
for i in R:print" ".join([s[j]," "][j!=i!=L+~j]for j in R)

Entrada:

"CODE-GOLF"

Salida:

C               F
  O           L  
    D       O    
      E   G      
        -        
      E   G      
    D       O    
  O           L  
C               F
Falko
fuente
Estaba escribiendo lo mismo. Mi única mejora es i in[j,L+~j].
xnor
@xnor: Encontré una condición aún más corta. ;)
Falko
Inteligente. Sin embargo, aún puedes hacerlo L+~j.
xnor
@xnor: Ah, tienes razón. Siempre olvido el +~truco ...
Falko
¿Se puede hacer for i in R:print" ".join([s[j]," "][j!=i!=L+~j]for j in R)para guardar un char? (No tengo acceso a Python 2 ahora para probar.)
xnor
11

Python 3: 75 caracteres

s=input()
i=n=len(s)
while i:i-=1;a=[" "]*n;a[i]=s[i];a[~i]=s[~i];print(*a)

Para la línea i, comenzamos con una lista de espacios y configuramos las entradas idesde el frente y hacia atrás para que sean iguales a las letras de la cadena de entrada. Luego, imprimimos el resultado.

Las cadenas de Python son inmutables, por lo que adebe ser una lista de caracteres. La lista adebe inicializarse dentro del ciclo o las modificaciones se transferirán entre ciclos. Usamos print(*a)para imprimir cada carácter en la lista, separados por espacios, lo que requiere Python 3.

Las líneas de salida son simétricas, por lo que podemos tener una icuenta atrás en lugar de arriba usando un ciclo while.

>>> CODE-GOLF
C               F
  O           L  
    D       O    
      E   G      
        -        
      E   G      
    D       O    
  O           L  
C               F

También funciona para un número par de letras.

>>> CODEGOLF
C             F
  O         L  
    D     O    
      E G      
      E G      
    D     O    
  O         L  
C             F
xnor
fuente
Al convertir esto a Pyth, obtengo VlzJ*]dlz=@JN@zN=@Jt_N@_zNjdJcuál es 29 bytes ... Creo que tendré que intentar algo más para vencer a APL. Además, +1 como prueba de que Python 3 puede
superar a
@fry Python 3 generalmente supera a los campos de golf 2 en mi experiencia. Incluso si nada cambia en ninguna otra parte, la mayoría de los desafíos dan una entrada y una salida esperan, y len("raw_input()") + len("print ") > len("input()") + len("print()").
undergroundmonorail
@undergroundmonorail Bueno, el problema con eso es que input() también es válido en Python 2 (solo actúa de manera algo diferente), por lo que a menos que la entrada para el desafío sea bastante estricta, Python 2 generalmente ganará.
FryAmTheEggman
Wow, incluso con Python 2 y print" ".join(a)tu código es más corto (82) que el mío.
Falko
@FryAmTheEggman Vea mi respuesta: es una adaptación de la otra respuesta de Python, y es mucho más corta que APL. Pyth realmente no le gusta asignar a índices, desafortunadamente.
isaacg
8

CJam, 27 25 bytes

l_,S*:Sf{W):W2$tW~@tS}zN*

Pruébalo en línea.

Ejecución de ejemplo

$ cjam <(echo 'l_,S*:Sf{W):W2$tW~@tS}zN*') <<< CROSS; echo
C       S 
  R   S   
    O     
  R   S   
C       S 

Como el ejemplo en la respuesta, cada línea tiene espacios en blanco al final.

Cómo funciona

                             " N := '\n'; R := []; S = ' '; W := -1 ";
l                            " Q := input()                         ";
 _,S*:S                      " S := len(Q) * S                      ";
       f{            }       " for each C in Q:                     ";
                             "   T := S                             ";
         W):W                "   W += 1                             ";
             2$t             "   T[W] := C                          ";
                W~@t         "   T[~W] := C                         ";
                             "   R += [T]                           ";
                    S        "   R += [S]                           ";
                      z      " R := zip(R)                          ";
                       N*    " R := N.join(R)                       ";
                             " print R                              ";
Dennis
fuente
1
Lamento que esta sea básicamente una "gran respuesta". comentario, pero solo tenía que decir que nunca, nunca , se me habría ocurrido construir el cuadro por columnas en lugar de por filas.
FryAmTheEggman
4

Java - 168

Un bucle anidado simple, no hay nada realmente especial aquí.

class C{public static void main(String[]a){int b=-1,c=a[0].length()-1,d;for(;b++<c;)for(d=-1;d++<c;)System.out.print((b==d|b==c-d?a[0].charAt(d):" ")+(c==d?"\n":""));}}

Con saltos de línea:

class C{
    public static void main(String[]a){
        int b=-1,c=a[0].length()-1,d;
        for(;b++<c;)
            for(d=-1;d++<c;)
                System.out.print(
                    (b==d|b==c-d?a[0].charAt(d):" ")+
                    (c==d?"\n":""));
    }
}
Geobits
fuente
4

Pure Bash, 94 bytes

l=${#1}
for((;t<l*l;t++));{
((x=t%l))||echo
((x-t/l&&x+t/l+1-l))&&printf \ ||printf ${1:x:1}
}
Trauma digital
fuente
1
Demasiados t%lcálculos. Guárdelo el primer uso en una variable y ((x=t%l))luego use la variable para reducirlo a 94 caracteres.
manatwork
Ah, sí, había hecho esto x=t%ly y=t/lfue más largo ... no se me pasó por la cabeza solo usar x
Trauma digital
4

Rubí, 64

f=->w{x=w.size
x.times{|i|y=" "*x
y[i],y[~i]=w[i],w[~i]
puts y}}

Explicación

  • La entrada se toma como argumento para una lambda. Espera a String.
  • En un bucle que recorre todos los caracteres de la palabra ( nen total):
    • Crear una cadena que consta de nespacios.
    • Reemplace el espacio ith y n-ith ( ~i, gracias xnor) con el carácter ith y n-ith de la entrada.
    • Imprime la linea
britishtea
fuente
77
¡Felicitaciones por publicar la respuesta número 25,000! :) (En realidad, no estoy 100% seguro, este es el debido al almacenamiento en caché. Pero fue la última respuesta, cuando vi por primera vez "25,000 respuestas" en las estadísticas del sitio.)
Martin Ender
2
Puedes hacerlo -i-1como el complemento de bits ~i.
xnor
Eso es muy inteligente, gracias!
britishtea
2
Con este enfoque, en realidad parece beneficioso usar stdin en lugar de una lambda: gets.size.times{|x|u=?\s*~/$/;u[x]=$_[x];u[~x]=$_[~x];puts u}(se supone que la entrada no termina con una nueva línea, por ejemplo echo -n CODE-GOLF). Uno puede hacer uso adicional de .charspara salvar a otro personaje:x=0;gets.chars{|r|u=?\s*~/$/;u[x]=r;u[~x]=$_[-x+=1];puts u}
Ventero
4

JavaScript (E6) 101 95129136

Editar espaciado de letras incorrecto. Fijo.
Edición más simple y más corta usando clásicos para bucles
Como una función, salida a través de una ventana emergente.

F=a=>{
  for(l=a.length+1,i=s=o='';++i<l;s='\n')
    for(j=0;++j<l;)
      o+=s+((s=' ')+a)[j==i|i+j==l&&j]
  alert(o)
}

Versión anterior usando .map

F=a=>alert([...a].map((c,p)=>
  --q<p
  ?B(q)+a[q]+B(p-q-1)+c 
  :B(p)+c+(p-q?B(q-p-1)+a[q]:'')
,B=n=>' '.repeat(n),q=a.length).join('\n'))

Prueba en la consola FireFox / FireBug

F('Java-Script')

Salida

J                   t
  a               p  
    v           i    
      a       r      
        -   c        
          S          
        -   c        
      a       r      
    v           i    
  a               p  
J                   t
edc65
fuente
2
Esto no tiene suficiente espacio horizontal: debe haber columnas de todos los espacios entre cada columna con letras.
isaacg
4

Befunge-93, 68 71

:~:84*-!#@#v_\:2*\4+p1+
::+\4+g:!| >$1+0:>p1-::
00+4\*2:\<>0p#:- ^#2g

Puedes probarlo aquí . Aparecerá un cuadro de diálogo de entrada en cada paso ~; ingrese su palabra un carácter a la vez (después de todo, dice que la entrada es 'klunky'), terminando con un espacio.

No se imprimirá en la consola; ¡Esto no sería Befunge sin un toque de auto-modificación, después de todo! En su lugar, modificará su propia cuadrícula para mostrar el mensaje. Una vez hecho esto, la cuadrícula se verá así:

 ~:84*-!#@#v_\:2*\4+p1+
::+\4+g:!| >$1+0:>p1-::
00+4\*2:\<>0p#:- ^#2g

c               f      
  o           l        
    d       o          
      e   g            
        -              
      e   g            
    d       o          
  o           l        
c               f

(Tenga en cuenta el noble sacrificio de la celda en (0,0), después de que sepamos que el puntero ya no irá allí, con el fin de almacenar un dato).

También funciona con entradas de longitud uniforme. Tenga en cuenta que, dado que Befunge-93 está limitado a una cuadrícula de 80x25, el tamaño de entrada está limitado a 21 caracteres si lo ejecuta en un intérprete Befunge-93. Ejecutarlo como Befunge-98 debería eliminar este límite.

Editar : ahora funciona más en la línea de la salida prevista, a expensas de solo tres caracteres de longitud.

Kasran
fuente
Tenga en cuenta que las letras están separadas con una columna en blanco. Las letras son relativamente en forma de L.
sampathsris
Drats! Eso complica las cosas bastante significativamente. Creo que puedo salvar esto, pero se agregará al tamaño final ... oh, bueno.
Kasran
4

Javascript 102 84 85

Editar: Tuve que arreglar el espacio. Ya no es tan pequeño.

function p(s){for(i in s){o='';for(n in s)o+=(n==i?s[n]:n==s.length-1-i?s[n]:' ')+' ';console.log(o)}}

p('Thanks-Dennis')

T                       s
  h                   i
    a               n
      n           n
        k       e
          s   D
            -
          s   D
        k       e
      n           n
    a               n
  h                   i
T                       s
Rip Leeb
fuente
Esto no tiene suficiente espacio horizontal.
Dennis
1
Wow, más corto que el mío y ni siquiera usando ES6. +1
Scimonster
Mejor, pero el espacio sigue siendo incorrecto (mira la X). Además, a menos que la pregunta diga lo contrario, debe escribir un programa o una función. Los fragmentos con variables codificadas generalmente están mal vistos.
Dennis
1
¿Y no puedes hacerlo function(s)ya que no recurres?
Zacharý
3

CJam, 38 36 35 34 32 bytes

l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}

Pruébalo aquí. Esto lee la palabra de entrada de STDIN. También funciona para un número par de caracteres. Esto imprime una columna final de espacios, pero no veo nada en las reglas en contra de eso.

Explicación

l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}
l:I                              "Read input and store it in I.";
   ,                             "Get string length.";
    ,_                           "Turn into range and duplicate.";
      f{                       } "Map block onto first range, with second range on the stack.";
        f{                   }   "Map block onto second range, with first iterator in stack.
                                  Each invocation of this block will start with grid coordinates
                                  y and x on the stack (x on top).";
          _2$=                   "Duplicate x, duplicate y, check for equality.";
              @2$+               "Pull up y, duplucate x, add,";
                  I,(=           "Check if that's one less than the string length.";
                      |          "Bitwise or between conditions.";
                       \         "Swap condition and x.";
                        I=       "Take x'th character from the string.";
                          S?     "Push a space and select character depending on condition.";
                            S    "Push another space.";
                              N  "Push a line feed.";

El contenido de la pila se imprime automáticamente al final del programa.

Martin Ender
fuente
Mi querido CJam, APL te acaba de derrotar. ^ _ ^
vaxquis
@vaxquis Me sorprendió haber podido vencerlo dos veces en primer lugar. Este problema parece mucho más adecuado para APL y compañía que para lenguajes basados ​​en pila.
Martin Ender
2
bueno, al menos es más fácil escribir l:I,,_f{f{_2$=@2$+I,(=|\I=S?S}N}en una servilleta que ↑{∊2↑¨⍵↑¨I}¨↓(+∨⌽)∘.=⍨⍳⍴I←⍞... risita
vaxquis
Bueno, alguien más logró vencerme usando CJam, y no puedo hacer que mi programa sea más corto, por lo que CJam finalmente me ganó. (Pero Pyth obtiene la corona). (Dicho esto, @vaxquis, APL es mucho más fácil de leer que la mayoría de los otros idiomas utilizados aquí, ciertamente una vez que conoces los 60 caracteres, y ciertamente cuando se compara con Pyth o CJam o Incluso J.)
Marinus
3

C, 105

dos formas ligeramente diferentes de hacerlo.

c,i,j;main(int l,char**v){for(l=strlen(v[1]);j-l;)putchar((c=v[1][i++])?i-1-j&&l-i-j?32:c:(i=0,j++,10));}

i,j;main(int l,char**v){for(l=strlen(v[1]);j-l;i++)putchar((l-i)?i-j&&l-i-j-1?32:v[1][i]:(i=-1,j++,10));}

Si desea agregar espacios adicionales, reemplace putchar(con printf(" %c",un extra de 5 caracteres.

Level River St
fuente
3

J - 36 30 bytes:

Editar: 6 caracteres más cortos, los créditos van a @algorithmshark .

(1j1#"1' '&,({~](*>.*&|.)=)#\)

p.ej:

   (1j1#"1' '&,({~](*>.*&|.)=)#\) 'Code-Golf'
C               f
  o           l  
    d       o    
      e   G      
        -        
      e   G      
    d       o    
  o           l  
C               f

Bonificación: también funciona con cadenas de longitud uniforme:

   (1j1#"1' '&,({~](*>.*&|.)=)#\) 'CodeGolf'
C             f
  o         l  
    d     o    
      e G      
      e G      
    d     o    
  o         l  
C             f
jpjacobs
fuente
3

Prólogo - 240 bytes

:-initialization m.
+[]. +[H|T]:-(H=' ';!),+T.
+[H|T]+I+X:-0=:=I,X=H;+T+(I-1)+X.
+L+I+C+S:-L=:=I;S=[D|E],+C+I+B,+C+(L-I-1)+B,+B+2*I+D,+L+(I+1)+C+E,+B,writef('%s\n',[B]).
-X:-get_char(C),(C='\n',X=[];X=[C|Y],-Y).
m:- -X,length(X,L),+L+0+_+X.

Invocación:

$ echo "Code-Golf" | swipl -qf c.pl
C               f
  o           l
    d       o
      e   G
        -
      e   G
    d       o
  o           l
C               f

Legible:

:- initialization(main).

vars_to_spaces([]).
vars_to_spaces([' '|T]) :- vars_to_spaces(T).
vars_to_spaces([_|T]) :- vars_to_spaces(T).

get_index([Head|_], Index, Result) :-
    0 =:= Index,
    Result = Head.
get_index([_|Tail], Index, Result) :-
    get_index(Tail, Index-1, Result).

print_loop(Length, Index, Board, String) :-
    Length =:= Index;
    String = [FirstChar|RestString],
    get_index(Board, Index, Line),
    get_index(Board, Length-Index-1, Line),
    get_index(Line, 2*Index, FirstChar),
    print_loop(Length, Index+1, Board, RestString),
    vars_to_spaces(Line),
    writef('%s\n', [Line]).

get_line(Line) :-
    get_char(C),
    (   C = '\n', Line = [];
        Line = [C|More], get_line(More)).

main :-
    get_line(String),
    length(String, Length),
    print_loop(Length, 0, _, String).
kay
fuente
3

Lienzo , 5 bytes.

\\:⇵n

Pruébalo aquí!

Explicación:

\      create a diagonal of the input
 \     create an even steeper diagonal of that
  :⇵   reverse a copy of it vertically
    n  overlap the two
dzaima
fuente
3

R , 99 98 93 89 bytes

m=ifelse(diag(l<-length(w<-el(strsplit(scan(,''),'')))),w,' ')
write(pmax(m,m[,l:1]),1,l)

Pruébalo en línea!

La línea 1 lee la cadena de entrada, la divide en caracteres, almacena su longitud y crea una matriz con la palabra en su diagonal principal: las letras de la palabra se superponen en una matriz de identidad (y se repiten de manera predeterminada para que coincida con su longitud) y solo las que coinciden Los 1 se retienen, otros se reemplazan por espacios.

La línea 2 imprime una matriz formada por elementos de la matriz diagonal o su versión espejada horizontalmente, la que sea mayor.

−2 + 1 = −1 byte gracias a JayCe

−4 bytes gracias a Giuseppe

Robert Hacken
fuente
1
¡Dulce! Y buena explicación. Puedes guardar 2 bytes
JayCe
1
mirando las otras respuestas y la pregunta - Parece que la matriz debería ser más grande (espacio extra) - la salida no debería ser una matriz cuadrada ..
JayCe
@ JayCe ¡Gracias por los 2 bytes! Y gracias por el comentario sobre el formato, probablemente tenga razón (aunque las reglas podrían ser más claras al respecto). Afortunadamente, todo lo que necesitaba era poner un espacio en el separador durante la impresión.
Robert Hacken
89 bytes usandopmax e incorporando algunas asignaciones más.
Giuseppe
@Giuseppe Gracias! Lamentablemente, todavía no es suficiente para superar la solución de J.Doe
Robert Hacken
2

C # ( 214 212)

(Ciertamente mal) Versión golfizada:

using System;class A{static void Main(){char[]a,w=Console.ReadLine().ToCharArray();int l=w.Length,i=0;for(;i<l;i++){a=new string(' ',2*l-1).ToCharArray();a[2*i]=w[i];a[2*l-2*i-2]=w[l-i-1];Console.WriteLine(a);}}}

Versión sin golf:

using System;

class A
{
  static void Main()
  {
    char[] a, w = Console.ReadLine().ToCharArray();
    int l = w.Length, i = 0;
    for (; i < l; i++)
    {
      a = new string(' ', 2 * l - 1).ToCharArray();
      a[2 * i] = w[i];
      a[2 * l - 2 * i - 2] = w[l - i - 1];
      Console.WriteLine(a);
    }
  }
}

Cualquier sugerencia, consejo, truco o comentario es muy bienvenido, ya que este es mi primer intento en CodeGolf. Solo quería probarlo, aunque sé que la longitud de mi byte C # ni siquiera se acercará al doble de las mejores soluciones;)

¿Y cómo cuentan ustedes sus bytes? Acabo de publicar lo anterior en una ventana de Quick Watch y lo hice .Length. Podría escribir un pequeño programa para contar bytes por mí, pero apuesto a que hay una manera más fácil que aún no conozco.

InvisiblePanda
fuente
Puede guardar dos bytes eliminando los espacios en for(;i < l;i++).
Beta Decay
Además, uso esto para mi conteo de bytes.
Decaimiento Beta
@BetaDecay Ah genial, debo haber pasado por alto esos. ¡Y gracias por el enlace!
InvisiblePanda
2

JavaScript (ES6) - 185 177 175 170 bytes

f=n=>{return s='  ',r='repeat',n=[...n],l=n.length,j=l/2-.5,[...h=n.slice(0,j).map((c,i)=>s[r](i)+c+s[r](l-2-(i*2))+' '+n[l-i-1]),s[r](j)+n[j],...h.reverse()].join('\n')}

Pon esto en la consola de Firefox y ejecútalo como f('PROGRAM'):

P           M
  R       A
    O   R
      G
    O   R
  R       A
P           M

f("CODE-GOLF"):

C               F
  O           L
    D       O
      E   G
        -
      E   G
    D       O
  O           L
C               F
Scimonster
fuente
Yo tambie lo vi.
Scimonster
2

Mathematica, 149 bytes

FromCharacterCode@Flatten[Append[Riffle[#,32],10]&/@MapThread[Max,{#,Reverse@#,ConstantArray[32,Dimensions@#]},2]&@DiagonalMatrix@ToCharacterCode@#]&

Entrada pasada como parámetro a la función; La función devuelve la cadena de salida. Hay una nueva línea al final de la salida.

Explicación: Creamos una matriz diagonal con la cadena, luego creamos una copia volteada verticalmente Reverse@#para invertir las filas. Luego tenemos una tercera matriz de las mismas dimensiones que contiene solo 32 (espacio ascii). Usamos MapThreadpara tomar el elemento máximo sabio de estas 3 matrices. Finalmente, Riffleespacios en cada fila, Appenduna nueva línea al final y Flattenel resultado.

jcai
fuente
2

C , 119

i,j;main(int l,char**v){l=strlen(v[1]);for(i=0;i<l;i++){for(j=0;j<l;j++)putchar((i-j)*(j-l+i+1)?32:v[1][j]);puts("");}}

Es posible que esto no se compile como C ++, por lo que espero no haber violado las reglas :)

VX
fuente
1. La salida es actualmente incorrecta. Debe haber un espacio entre las letras. 2. i=0y j=0no es necesario, ya que las variables globales se inicializan a cero. 3. Puede usar en main(l,v)char**v;lugar de main(int l,char**v). 4. Si actualiza icomo i+=puts(""), puede deshacerse de los corchetes del bucle externo.
Dennis
2

Perl - 90

Podría ser posible exprimir algunos caracteres más de esto:

($j=$i++%8)==7?++$k&&print"\n":print$j+1==$k||7-$j==$k?"$_ ":"  "for split//,($_ x y///c)

89+ 1para -n.

Corre con:

echo "program" | perl -nE'($j=$i++%8)==7?++$k&&print"\n":print$j+1==$k||7-$j==$k?"$_ ":"  "for split//,($_ x y///c)'

Salida:

p           m
  r       a
    o   r
      g
    o   r
  r       a
p           m
hmatt1
fuente
2

T-SQL: 180

Tomando la entrada de la variable @i

DECLARE @s VARCHAR(MAX)=REPLICATE('  ',LEN(@i)),@ INT=1a:PRINT STUFF(STUFF(@s,@*2-1,1,SUBSTRING(@i,@,1)),LEN(@i)*2-(@*2)+1,1,SUBSTRING(@i,LEN(@i)-@+1,1))SET @+=1IF @<=LEN(@i)GOTO A

Esto introduce caracteres individuales en / decrementando desde el principio y termina en una cadena de espacios.

Resultado de la prueba

DECLARE @i VARCHAR(MAX)='Super Large'
DECLARE @s VARCHAR(MAX)=REPLICATE('  ',LEN(@i)),@ INT=1a:PRINT STUFF(STUFF(@s,@*2-1,1,SUBSTRING(@i,@,1)),LEN(@i)*2-(@*2)+1,1,SUBSTRING(@i,LEN(@i)-@+1,1))SET @+=1IF @<=LEN(@i)GOTO A
S                   e 
  u               g   
    p           r     
      e       a       
        r   L         

        r   L         
      e       a       
    p           r     
  u               g   
S                   e 
MickyT
fuente
2

PowerShell 118 102 97

($x=[char[]]"$args")|%{$i++;$y=[char[]]" "*$x.Count;$y[$i-1]=$x[$i-1];$y[-$i]=$x[-$i];$y-join' '}

Salidas:

PS C:\PowerShell> .\cross.ps1 SWORD
S       D
  W   R
    O
  W   R
S       D
DarkAjax
fuente
2

JavaScript (Node.js) , 81 bytes

f=s=>[...s].map((_,i,a)=>a.map((c,j)=>j==i|j==s.length+~i?c:' ').join` `).join`
`

EDITAR : -1 Gracias Joe King. No vi que el TIO proporciona una pasta directa preformateada para CG.

Pruébalo en línea!


fuente
por cierto, el exceso de código para ejecutar el código en TIO puede ir en el pie de página del programa. Esto ayuda a determinar el recuento de bytes correcto y a usar el formato de respuesta PPCG automatizado de manera más fluida. Por ejemplo, pruébelo en línea.
Jo King
-i-1puede ser+~i
Jo King
1

C # 208

static void Main()
{
string s=Console.ReadLine(),t="";
int n=s.Length;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)t+=s[i];
else if(i==n-j-1)t+=s[n-i-1];
t+=" ";
}
t+="\n";
}
Console.WriteLine(t);
}
bacchusbeale
fuente
Salva a 11 personajes preciosos con t+=i==j?s[i]:i==n-j-1?s[n-i-1]:"";.
sampathsris
¿Puedes eliminar esas nuevas líneas?
Zacharý
1

GolfScript 46 ( DEMO )

:w,:l,{l,{.[.l(\-]2$?)!w@[=32]=}%\;''+' '*}%n*
Cristian Lupascu
fuente
1

No importa cuánto tiempo, siempre debe haber una respuesta en ...

Java - 289 234 bytes

public static void main(String[]a){int l=a.length-1,i=0,j;for(;i<=l;i++){for(j=0;j<=l;j++){if(j==i)System.out.print(a[i]);else if(i==l-j)System.out.print(a[j]);else System.out.print(" ");System.out.print(" ");}System.out.println();}}}

Sin golf:

    class A {

    public static void main(String[] a) {
        int l = a.length - 1, i = 0, j;
        for (; i <= l; i++) {
            for (j=0; j <= l;j++) {
                if (j == i)
                    System.out.print(a[i]);
                else if (i == l-j)
                    System.out.print(a[j]);
                else
                    System.out.print(" ");
                System.out.print(" ");
                }            
            System.out.println();
        }
    }
}

La producción, mal hecha, es:

P           M 
  R       A   
    O   R     
      G       
    O   R     
  R       A   
P           M 

Agregué el import java.util.Scannercódigo interno porque nunca recuerdo si las importaciones cuentan para el conteo de bytes ... Maldición, realmente apesta.

Rodolfo Dias
fuente
2
Las importaciones cuentan. Esto se debe en parte a la sintaxis de importación y alias de Python: from math import floor as fque es un poco engañoso
Debería poder guardar un montón de caracteres combinando todas las System.out.printllamadas en una, utilizando un par de operadores ternarios.
DLosc
@DLosc ¿Podrías darme algunos ejemplos?
Rodolfo Dias
1
Sí, en realidad la respuesta de Geobits es un ejemplo perfecto: vea el contenido de la System.out.printllamada al final.
DLosc
1
@RodolfoDias No te sientas así. Mis primeros campos de golf en Java fueron terribles , y todavía puedo afeitarme una buena parte de mis "primeras revisiones" si busco lo suficiente;)
Geobits
1

C # (192/170)

using System;class P{static void Main(){var s=Console.ReadLine();int x,y,l=s.Length;for(x=0;x<l;x++){for(y=0;y<l;y++)Console.Write(x==y||l-x==y+1?s.Substring(x,1):" ");Console.Write("\n");};}}

O, como "Main () only":

static void Main(){var s=Console.ReadLine();int x,y,l=s.Length;for(x=0;x<l;x++){for(y=0;y<l;y++)Console.Write(x==y||l-x==y+1?s.Substring(x,1):" ");Console.Write("\n");};}
RobIII
fuente