¡Camina las palabras!

33

En mi humilde opinión, el texto estándar es aburrido. Por lo tanto, propongo un nuevo estándar de escritura, ¡palabras para caminar!

Palabras andantes

Las palabras que caminan son palabras que responderán a ciertos caracteres. A los efectos de este desafío, los caracteres desencadenantes son [u, d, r, l]de up down right left.

Cada vez que encuentre un personaje así cuando imprima texto, moverá la dirección del texto.
Por ejemplo, el texto abcdefdará como resultado:

abcd
   e
   f

Reglas

  • Tanto mayúsculas UDRLcomo minúsculas udrldeberían cambiar la dirección, pero las mayúsculas y minúsculas deberían conservarse en la salida
  • ¡La entrada solo contendrá caracteres imprimibles (0-9, A-Z, a-z, !@#%^&*() etc...), no líneas nuevas!
  • Cada vez que el texto colisione, sobrescribirá el carácter anterior en esa posición
  • La salida debe presentarse al usuario en cualquier asunto de moda, pero debe ser una salida única (sin matriz de líneas)
  • Se permiten nuevas líneas finales y principales
  • Se permiten espacios finales
  • Se aplican lagunas estándar

Casos de prueba

empty input => empty output or a newline

u =>
u

abc =>
abc

abcd =>
abcd

abcde =>
abcd
   e

abcdde =>
abcd
   d
   e

codegolf and programming puzzles =>
   cod
     e
     g
     o
dna fl    sel
            z
p           z
rogramming pu

ABCDELFUGHI =>
 I
AHCD
 G E
 UFL

It is in my humble opinion that standard text is boring. Therefore I propose a new writing standard, walking words! =>
dnats taht noinipo el
a                   b
rd                  m
       It is in my hu
 t
 e
 x
 t

 i
 s

 b
 o
 ring. Therefore I propose a new writing stand
                                             a
                                             rd
                                              ,

                                              w
                                              a
                                      rdw gnikl
                                       s
                                       !

Este es el , ¡el código más corto en bytes gana!

Bassdrop Cumberwubwubwub
fuente
44
Este formato tiene un grave problema de pérdida de datos ...: p
Mukul Kumar
¿Se permiten espacios iniciales / finales?
Arnauld
@Arnauld Siempre que no perturben la posición de los personajes que son. Lo más probable es que solo
sigan
1
¿Cómo se vería la salida de la palabra golfpor sí misma?
gabe3886
2
@ gabe3886gfl
Bassdrop Cumberwubwubwub

Respuestas:

4

Carbón , 29 27 20 19 bytes

FS«F№rdlu↧ι≔ιω✳∨ωrι

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

FS«

Pase sobre los caracteres de entrada.

F№rdlu↧ι

Si la letra actual es una dirección ...

≔ιω

luego actualice la dirección actual para caminar.

✳∨ωrι

Imprima el personaje en la dirección de marcha actual, por defecto a la derecha si aún no se ha establecido una dirección.

Neil
fuente
1
@Veskah Se suponía que era un . Lo siento por eso.
Neil
7

Dyalog APL , 63 bytes

s@(n+11 9∘○¨+\0j1*⊃¨,⍨\(8∘≠⍴¨⊢)0,'rdluRDLU'⍳¯1↓s)⍴∘'',⍨2×n←≢s←⍞

usos ⎕IO←0y características de v16 ( @)

n←≢s←⍞entrada sin formato sy su longitudn

⍴∘'',⍨2×n crear una matriz de espacios 2n por 2n

s@(...)enmendar la matriz con los caracteres de slos índices (pares de) especificados

cómo se calculan los índices:

¯1↓s suelta el último personaje de s

'rdluRDLU'⍳'codificar 'r'como 0, 'd'como 1, etc. otros caracteres como 8

0, anteponer un 0

(8∘≠⍴¨⊢) convertir cada 8 en una lista vacía, todos los demás en una lista de 1 elemento

,⍨\concatenaciones intercambiadas acumulativas ( abcd-> a ba cba dcba)

⊃¨ primero de cada

0j1* constante imaginaria i al poder de

+\ sumas acumuladas

11 9∘○¨parte real e imaginaria de cada uno; obtener coordenadas en el rango -n...n

n+ centrarlos en la matriz grande

ngn
fuente
3

Pyth, 68 65 bytes

KUJ,00ImXH~+VJ=@as_BM_MBU2Kx"rdlu"rd0dzjcsm.x@Hd;*Fm=Z}hdedSMCHlZ

Banco de pruebas

Esto utiliza un diccionario, indexado por un par de coordenadas, que se actualiza como la lectura de entrada y luego se imprime al final. También utiliza un montón de ingeniosos trucos de golf.

Así es como lo escribí, usando la -mbandera del intérprete para eliminar el espacio en blanco y los comentarios antes de ejecutar:

KUJ,00                 ; Initialize J to [0, 0] and K to [0, 1].
                       ; J is the current location, K is the current direction.
I                      ; If the following is truthy, which will be when the input
                       ; is nonempty,
  m                    ; Map d over z, the input.
  XH                   ; Assign to H (a hash table, initially empty)
    ~+VJ               ; At location J, then update J by adding elementwise
      =@               ; K (Next variable is implicit), which is set to
        as_BM_MBU2K    ; [0, 1], bifurcated on mapped negation, then mapped on
                       ; reversal bifuraction with the old value of K appended.
                       ; e.g. [[0, 1], [1, 0], [0, -1], [-1, 0], K]
        x"rdlu"rd0     ; indexed at location equal to the index of the lowercase
                       ; of the current character into "rdlu", -1 if missing.
    d                  ; Insert the current character with that key.
  z                    ; map over z.
jc                     ; Join on newlines the result of chopping into a rectangle
  sm                   ; the concatenation of the map
    .x@Hd;             ; Lookup the character at the given location,
                       ; if none then ' '
    *Fm                ; Locations are the cartesian product of the map
      =Z}hded          ; Inclusive range from the head of each list to 
                       ; the end of each list
                       ; Saved in Z for later
      SMCH             ; Transpose the list of keys, and sort the x and y values
                       ; separately.
  lZ                   ; Width of the rectangle should equal the number of
                       ; x values, which is the length of the last entry.
isaacg
fuente
3

C #, 525 474 bytes

Editar: 51 Bytes guardados gracias a @steenbergh

No es bonito, pero funciona ...

Golfizado:

string W(string s){var l=s.Length;var a=new char[2*l+1,2*l+1];int x=2*l/2;int y=2*l/2;int d=0;for(int i=0;i<l;i++){switch(char.ToUpper(s[i])){case'U':d=3;break;case'D':d=1;break;case'L':d=2;break;case'R':d=0;break;}a[y,x]=s[i];switch(d){case 0:x+=1;break;case 1:y+=1;break;case 2:x-=1;break;case 3:y-=1;break;}}string o="";for(int i=0;i<2*l+1;i++){string t="";for(int j=0;j<2*l+1;j++)t+=a[i,j]+"";o+=t==string.Join("",Enumerable.Repeat('\0',2*l+1))?"":(t+"\r\n");}return o;}

Sin golf:

public string W(string s)
{
  var l = s.Length;
  var a = new char[2 * l + 1, 2 * l + 1];
  int x = 2 * l / 2;
  int y = 2 * l / 2;
  int d = 0;
  for (int i = 0; i < l; i++)
  {
    switch (char.ToUpper(s[i]))
    {
      case 'U':
        d = 3;
        break;
      case 'D':
        d = 1;
        break;
      case 'L':
        d = 2;
        break;
      case 'R':
        d = 0;
        break;
    }
    a[y, x] = s[i];
    switch (d)
    {
      case 0:
        x += 1;
        break;
      case 1:
        y += 1;
        break;
      case 2:
        x -= 1;
        break;
      case 3:
        y -= 1;
        break;
    }
  }
  string o = "";
  for (int i = 0; i < 2 * l + 1; i++)
  {
    string t = "";
    for (int j = 0; j < 2 * l + 1; j++)
      t += a[i, j] + "";
    o += t == string.Join("", Enumerable.Repeat('\0', 2 * l + 1)) ? "" : (t + "\r\n");
  }
  return o;
}

Explicación:

Utiliza una matriz bidimensional y el dvalor para incrementar la posición de la matriz en la dirección de corrección, donde los valores d son:

0 => RIGHT
1 => DOWN
2 => LEFT
3 => UP

Prueba:

var walkTheWords = new WalkTheWords();
Console.WriteLine(walkTheWords.W("codegolf and programming puzzles"));

                            cod                              
                              e                              
                              g                              
                              o                              
                         dna fl    sel                       
                                     z                       
                         p           z                       
                         rogramming pu  
Pete Arden
fuente
puede quitar el segundo interruptor por completo. En el primer interruptor donde escribe d=0;, reemplace esta declaración por la declaración en la segunda case 0:declaración del interruptor y haga lo mismo que en otros casos y es posible que no necesite un segundo interruptor. Y finalmente elimine esta declaración a[y,x]=s[i]y escríbala en la parte superior del primer interruptor.
Mukul Kumar
@MukulKumar Buena idea, no puedo hacer que funcione. Traté de hacerlo en un cambio inicialmente. ¡Tiene que permanecer en su configuración actual de doble interruptor! :)
Pete Arden
¿Escribiste a[y,x]=s[i]antes del primer cambio?
Mukul Kumar
2
Puede usar switch(s[i].toLowerCase())(o cuál es el equivalente de c # ...) y luego eliminar todas las mayúsculas. Debería guardar algunos bytes.
steenbergh el
1
@steenbergh ¡Gracias, grandes ahorros allí! No, no puedes directamente ToUpper()porque no es charun string. Las opciones son s[i].ToString().ToUpper()o char.ToUpper(s[i])... Creo que la opción es charun poco más corta. Saludos :)
Pete Arden
3

JavaScript (ES6), 218 220 232

Editar que estaba usando uy tpara realizar un seguimiento de la posición superior e izquierda, pero me di cuenta de que tno es necesario en absoluto

w=>[...w].map(c=>u=(((g[y]=g[y]||[])[x]=c,n=parseInt(c,36)|0)-21&&n-27?a=n-13?n-30?a:!(b=-1):!(b=1):(b=0,a=n/3-8),y+=b,x+=a)<u?x:u,a=1,b=0,x=y=u=w.length,g=[])+g.map(r=>[...r.slice(u)].map(c=>z+=c||' ',z+=`
`),z='')&&z

Menos golf

w=>{
  a = 1, b = 0;
  x = y = u = w.length;
  g = [];
  [...w].map(c => (
    r = g[y]||[],
    r[x] = c,
    g[y] = r,
    n = parseInt(c,36)|0,
    n-21 && n-27 ? n-13 && n-30?0 : (a=0, b=n-13?-1:1) : (b=0, a=n/3-8),
    x += a, u = x<u? x : u,
    y += b
  ))
  z=''
  g.map(r=>[...r.slice(u)].map(c=>z += c||' ', z += '\n'))
  return z
}             

Prueba

F=
w=>[...w].map(c=>u=(((g[y]=g[y]||[])[x]=c,n=parseInt(c,36)|0)-21&&n-27?a=n-13?n-30?a:!(b=-1):!(b=1):(b=0,a=n/3-8),y+=b,x+=a)<u?x:u,a=1,b=0,x=y=u=w.length,g=[])+g.map(r=>[...r.slice(u)].map(c=>z+=c||' ',z+=`
`),z='')&&z

function update() {
  w=I.value
  O.textContent=F(w)
}

update()
#I {width:90%}
<input id=I value='It is in my humble opinion that standard text is boring. Therefore I propose a new writing standard, walking words!' oninput='update()'>
<pre id=O></pre>

edc65
fuente
3

05AB1E , 27 26 25 23 22 bytes

Guardado 3 bytes gracias a Grimy

ā¤‹>Šε’uχ’slkDÈiV}Y}Λ

Pruébalo en línea!

Explicación

ā                        # push [1 ... len(input)]
 ¤‹                      # check each number if its less than the max
   >                     # increment
                         # results in a list as long as the input where each number is 2 
                         # apart from the last one, this is the lengths to draw
    Š                    # move 2 copies of the input to the top of the stack
                         # the first one is the string to draw
     ε              }    # for each char in the second copy
      ’uχ’slk           # get the chars index in "ubridal"
              D          # duplicate
               Èi }      # if the index is even
                 V       # store it in Y
                   Y     # push Y (initially 2)
                         # this gives us the list of directions
                     Λ   # draw everything on the canvas
Emigna
fuente
1
"nupcial" es una palabra del diccionario. -1 . EDITAR: hacer que -2 .
Grimmy
@Grimy: Me preguntaba si el diccionario podría usarse aquí, ¡pero es realmente inteligente!
Emigna
22
Grimmy
2

Javascript, 4̶6̶6̶, 455, 433 bytes

Ediciones: 11 bytes guardados, gracias al usuario 1000000000 10 más o menos guardados, gracias al usuario2428118 También se eliminaron algunos puntos y coma innecesarios.

Estoy bastante seguro de que esto se puede jugar más, pero no pude manejarlo. Todavía soy nuevo, así que cualquier consejo es muy apreciado :)

z=a=>{b=c=0;j=[[]];d='';a.split``.forEach(g=>{h=g.toLowerCase();if('ruld'.includes(h)){d=h}f=x=>new Array(x[0].length).fill` `;switch(d){case 'l':if(!b){j.forEach(e => e.unshift` `);++b}j[c][b--]=g;break;case 'u':if(!c){j.unshift(f(j));++c}j[c--][b]=g;break;case 'd':if(c == j.length-1){j.push(f(j))}j[c++][b]=g;break;default:if(b==(j[0].length-1)){j.forEach(row=>row.push` `)}j[c][b++] = g;break}});j.forEach(x=>console.log(x.join``))}
<input id="a"> </input>
<input type="submit" onclick="z(document.getElementById('a').value);"/>

Sin golf:

z=a=>{
b=c=0;
j=[[]];
d='';
a.split``.forEach(g=>{
    h=g.toLowerCase();
    if('ruld'.includes(h)){d=h;}
    f=x=>new Array(x[0].length).fill` `;
    switch(d){
        case 'l':
            if(!b){
                j.forEach(e => e.unshift` `);
                ++b;
            }
            j[c][b--] = g;
            break;
        case 'u':
            if(!c){
                j.unshift(f(j));
                ++c;
            }
            j[c--][b] = g;
            break;
        case 'd':
            if(c == j.length-1){
                j.push(f(j));
            }
            j[c++][b] = g;
            break;
        default:
            if(b == (j[0].length-1)){
                j.forEach(row=>row.push` `);
            }
            j[c][b++] = g;
            break;
    }
});
j.forEach(x => console.log(x.join``));

}

Más o menos tomé el enfoque de:

  • Tener una matriz para almacenar la salida
  • Calcule la posición x e y del siguiente carácter en la matriz
  • Si las coordenadas estaban a punto de estar fuera de la matriz, extienda la matriz en esa dirección. Ya sea presionando y espacio extra al final de esa fila o agregando otra fila por completo.
  • Hacer matriz [y] [x] = carácter actual
  • imprime la matriz resultante
Jhal
fuente
Bienvenido al sitio! No soy un experto en JavaScript, pero esto se ve bastante bien.
Wheat Wizard
¡Bienvenido! Puede guardar 11 bytes reemplazando ['r','u','l','d']con"ruld"
0
Además, no necesita el z=al comienzo de su programa
0
¡Gracias por el consejo! JS nunca deja de sorprenderme con su conveniencia.
Jhal
Puede usar literales de plantilla en varios lugares para guardar algunos bytes, por ejemplo a.split`` .
user2428118
2

Python 3, 314 309 290 268 Bytes

x=y=0
d,m=(1,0),{}
q={'u':(0,-1),'d':(0,1),'l':(-1,0),'r':d}
for c in input():m[x,y]=c;d=q.get(c.lower(),d);x,y=x+d[0],y+d[1]
X,Y=zip(*m)
O,P=min(X),min(Y)
r,p=0,print
exec("t=~~O;exec(\"p(m.get((t,r+P),' '),end='');t+=1;\"*-~abs(max(X)-O));r+=1;p();"*-~abs(max(Y)-P))

Intenté ejecutar mi programa como entrada a mi programa con algunos resultados interesantes. ¡Ja, intenta interpretar eso, Python!

Afeitado de 5 bytes: felicitaciones a Jack Bates.

23 bytes llevados por kundor

Nota: Creo que hubo algún error de medición con mis bytes debido al uso de diferentes editores. Sin embargo, estoy bastante seguro de que la última es correcta.

Señor ratte
fuente
Puede eliminar 5 bytes reemplazando 'r':(1,0)con 'r':dy eliminando el espacio en w[a] for. También esto es una locura! ¿Cuánto tiempo te llevó esto?
@JackBates Un día, en el medio del trabajo. Me pongo un poco obsesivo.
Lord Ratte el
¿No todos? ¡Ese es el objetivo de la codificación!
Creo que puedes reemplazar toda esa X,Y=map(...)línea con X,Y=zip(*m). Trabaja aqui (lo *mdescomprime en una lista de sus claves y las agrupa en dos tuplas.)
Nick Matteo
También puede colocar el bucle for en una línea para guardar cuatro bytes.
Nick Matteo el
2

PHP, 238223205204 bytes

12 bytes guardados por Jörg (en striposlugar de preg_match), 1 byte + llaves al comienzo en lugar de línea posterior, 16 llaves al golf por el cambio de dirección, 1 más con ternario en lugar de if.

for($m=$d=1;$o=ord($c=$argn[$i++]);$m=min($m,$x),$n=max($n,$x))stripos(_ulrd,$r[$y+=$e][$x+=$d]=$c)?$d=($e=[1,-1][$o&11])?0:$o%4-1:0;ksort($r);foreach($r as$s)for($i=$m-print"\n";$i++<$n;)echo$s[$i]??" ";

Ejecutar como tubería php -nR '<code>'o probarlo en línea .

Descompostura

for($m=$d=1;                    # init max index and x-offset to 1
    $o=ord($c=$argn[$i++]);     # loop through characters
    $m=min($m,$x),$n=max($n,$x))    # 3. adjust min and max x offset
    stripos(_ulrd,
        $r[$y+=$e][$x+=$d]=$c       # 1. move cursor; add character to grid
    )?                              # 2. if direction change
        $d=(
            $e=[1,-1][$o&11]            # set y direction
        )
        ?0:$o%4-1                       # set x direction
    :0;

ksort($r);              # sort rows by index
foreach($r as$s)        # loop through rows
    for($i=$m-print"\n";    # print newline, reset $i
        $i++<$n;)           # loop $i from min index to max index
        echo$s[$i]??" ";        # print character, space if empty
Titus
fuente
1
Si veo este derecho, strspn($r[$y+=$e][$x+=$d]=$c,udlruDLR)debería guardar algunos bytes en lugar de usar la expresión regular, ´stripos (_ulrd, $ r [$ y + = $ e] [$ x + = $ d] = $ c) `debería ser mejor ya que strspn $argnguarda 3 Bytes
Jörg Hülsermann
@ JörgHülsermann ¿Me estás acosando? : D Tienes razón.
Titus
Nadie ha editado su publicación hoy y he visto tu respuesta y vi que puedes acortarla. Lamento que la mejora no sea tan buena que puedas superar la respuesta de JS. Me alegra y enorgullece si puedo encontrar algunos bytes en sus respuestas, pero no busco estos casos
Jörg Hülsermann
@ JörgHülsermann No te preocupes; Encontré otros 21 bytes además de sus 12. Gracias por hacerme volver a visitar esto.
Tito
Más del 10 por ciento es bueno
Jörg Hülsermann
2

Java 10, 288 286 280 263 bytes

s->{int l=s.length(),x=l,y=l,d=82,A=x,B=y;var r=new char[l+=l][l];for(var c:s.toCharArray()){A=x<A?x:A;B=y<B?y:B;r[x][y]=c;c&=~32;d="DLRU".contains(""+c)?c:d;x+=5-d/14;y+=3-(d^16)/23;}s="";for(x=A;x<l;x++,s+="\n")for(y=B;y<l;y++)s+=r[x][y]<1?32:r[x][y];return s;}

-17 bytes gracias a @Grimy .

Explicación:

Pruébalo aquí. (NOTA: Elimino todos los espacios finales / líneas nuevas para hacer que la salida sea un poco más compacta. Siéntase libre de eliminar .replaceAll("(m?)\\s+$","")el testmétodo-para ver el resultado real).

s->{                              // Method with String as both parameter and return-type
  int l=s.length(),               //  Length of input String
      x=l,y=l,                    //  x,y coordinates, starting at `l`,`l`
      d=82,                       //  Direction, starting towards the right
      A=x,B=y;                    //  Min x & y values to remove leading spaces at the end
  var r=new char[l+=l][l];        //  character-matrix, with size `l`+`l` by `l`+`l`
  for(var c:s.toCharArray()){     //  Loop over the characters of the input String:
    A=x<A?x:A;                    //   Adjust minimum x `A` if necessary
    B=y<B?y:B;                    //   Adjust minimum y `B` if necessary
    r[x][y]=c;                    //   Fill x,y with the current character
    c&=~32;                       //   Make character uppercase if it isn't yet
    d="DLRU".contains(""+c)?c:d;  //   Change the direction if necessary
    x+=5-d/14;                    //   Set the next x coordinate based on the direction
    y+=3-(d^16)/23;}              //   Set the next y coordinate based on the direction
  s="";                           //  After the loop: create an empty result-String
  for(x=A;x<l;x++,                //  Loop `x` in the range [`A`, `l`):
      s+="\n")                    //    And append a new-line after every iteration
    for(y=B;y<l;y++)              //   Inner loop `y` in the range [`B`, `l`):
      s+=r[x][y]<1?               //    If the cell at x,y is empty:
          32                      //     Append a space to the result-String
         :r[x][y];                //    Else: append the character to the result-String
  return s;}                      //  After the nested loop: teturn result-String
Kevin Cruijssen
fuente
1
d<69?1:d>84?-1:0puede ser5-d/14
Grimmy
1
Y en la misma línea, d==82?1:d==76?-1:0puede ser3-(d^16)/23
Grimmy
@ Grimy Gracias. Sabía que esas dos partes podrían de alguna manera jugar golf, pero soy bastante malo con esas transformaciones aritméticas / bit a bit, así que no me molesté en intentarlo. ¡Gracias por los -17 bytes! :)
Kevin Cruijssen
1

Perl, 204 + 3 = 207 bytes

+3 para -F

El espacio en blanco no es parte del código y se proporciona para su legibilidad.

%p=(d,1,l,2,u,3,r,$x=$y=0);
for(@F){
    $m{"$x,$y"}=$_;
    $g=$p{lc$_}if/[dlur]/i;
    $g%2?($y+=2-$g):($x+=1-$g);
    ($a>$x?$a:$b<$x?$b:$x)=$x;
    ($c>$y?$c:$d<$y?$d:$y)=$y
}
for$k($c..$d){
    print($m{"$_,$k"}||$")for$a..$b;
    say""
}

De manera similar a mi solución al desafío Fizz Buzz, creo un hash con coordenadas x, y para cada paso del camino, manteniendo los máximos y mínimos de las coordenadas x e y almacenadas, luego recorro e imprimo todo.

Si estoy desesperado , podría convertir las últimas tres líneas del primer forbucle en una sola declaración desagradable que puede salvar un byte o dos, pero no estoy esperando el resultado completamente ilegible.

Gabriel Benamy
fuente
1

Excel VBA, 205 bytes

Sub t(a)
Z=1:x=70:y=x:For i=1 To Len(a)
s=Mid(a,i,1):Cells(y,x).Value=s:Select Case LCase(s)
Case "l":Z=-1:w=0
Case "d":Z=0:w=1
Case "r":Z=1:w=0
Case "u":Z=0:w=-1
End Select:x=x+Z:y=y+w:Next:End Sub

Estoy un poco sorprendido por la capacidad de Excel para competir con las respuestas existentes. Funciona porque wy realiza zun seguimiento de la dirección.

Steenbergh
fuente
la posición inicial 70 podría no ser suficiente. Además, no se permiten espacios
iniciales
1

SmileBASIC, 148 146 bytes

DEF W M,S,T
WHILE""<M
A=INSTR(@DLURdlur,M[0])*PI()/2IF A>0THEN S=COS(A)T=SIN(A)
X=CSRX+S
Y=CSRY+T?SHIFT(M);
SCROLL-!X,-!Y
LOCATE!X+X,Y+!Y
WEND
END

Llame a la función con W "text",vx,vy, donde vx y vy es la dirección al inicio (el valor predeterminado es 1,0)

12Me21
fuente
¿Qué sucede cuando X o Y es menor que 0?
edc65
Ahora desplazará todo el texto cuando el cursor se salga de la pantalla.
12Me21
0

Swift 3, 283 bytes

func w(a:String){var t=a.characters,d=t.count,c=Array(repeating:Array(repeating:" ",count:d*2),count:d*2),i=d,j=d,l=["d":(1,0),"u":(-1,0),"l":(0,-1),"r":(0,1)],e=(0,1)
t.map{c[i][j]="\($0)"
e=l["\($0)".lowercased()] ?? e
i+=e.0
j+=e.1}
c.map{$0.map{print($0,terminator:"")};print()}}

Sin golf

func w(a:String){
    var t=a.characters,d=t.count,c=Array(repeating:Array(repeating:" ",count:d*2),count:d*2),i=d,j=d,l=["d":(1,0),"u":(-1,0),"l":(0,-1),"r":(0,1)],e=(0,1)
    t.map{
        c[i][j]="\($0)"
        e=l["\($0)".lowercased()] ?? e
        i+=e.0
        j+=e.1
    }
    c.map{
        $0.map{
            print($0,terminator:"")
        };
        print()
    }
}

Advertencia

Una entrada más larga requerirá una pantalla más grande. La salida no tiene tratamiento para las filas / columnas "vacías", como entendí que es aceptable según las reglas del desafío.

Despotricar

  • Newline es el terminador predeterminado para printsux
  • Ninguna forma simple de crear una matriz de longitud conocida destruyó el puntaje.
Otávio
fuente