Cammina le parole!


33

Secondo la mia modesta opinione, il testo standard è noioso. Pertanto propongo un nuovo standard di scrittura, parole a piedi!

Parole a piedi

Le parole che camminano sono parole che risponderanno a determinati personaggi. Ai fini di questa sfida i personaggi di trigger sono [u, d, r, l]da up down right left.

Ogni volta che si incontra un tale carattere durante la stampa del testo, si sposta la direzione del testo.
Ad esempio, il testo abcdefcomporterà:

abcd
   e
   f

Regole

  • Sia maiuscole UDRLche minuscole udrldovrebbero cambiare la direzione, ma il caso dovrebbe essere preservato nell'output
  • L'input conterrà solo caratteri stampabili (0-9, A-Z, a-z, !@#%^&*() etc...), nessuna nuova riga!
  • Ogni volta che il testo si scontrerà, sovrascriverà il vecchio carattere in quella posizione
  • L'output dovrebbe essere presentato all'utente in qualsiasi questione di moda, ma dovrebbe essere un singolo output (nessuna matrice di linee)
  • Sono consentiti il ​​trascinamento e le nuove linee principali
  • Sono consentiti spazi finali
  • Si applicano scappatoie standard

Casi test

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
                                       !

Questo è , vince il codice più corto in byte!


4
Questo formato presenta un grave problema di perdita di dati ...: p
Mukul Kumar,

Sono consentiti spazi iniziali / finali?
Arnauld,

@Arnauld Finché non disturbano la posizione dei personaggi che sono. Quindi molto probabilmente solo spazi finali
Bassdrop Cumberwubwubwub

1
Come golfapparirebbe l'output della parola da solo?
gabe3886,

2
@ gabe3886gfl
Bassdrop Cumberwubwubwub

Risposte:


4

Carbone di legna , 29 27 20 19 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

FS«

Passa sopra i caratteri di input.

F№rdlu↧ι

Se la lettera corrente è una direzione ...

≔ιω

quindi aggiorna l'attuale direzione di marcia.

✳∨ωrι

Stampa il personaggio nella direzione di marcia corrente, per impostazione predefinita a destra se non è stata ancora impostata alcuna direzione.


1
@Veskah The doveva essere un . Mi dispiace per quello.
Neil,

7

Dyalog APL , 63 byte

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

usi ⎕IO←0e funzionalità di v16 ( @)

n←≢s←⍞input grezzo se sua lunghezzan

⍴∘'',⍨2×n crea una matrice di spazi 2n per 2n

s@(...)modifica la matrice con i caratteri degli sindici (coppie di) specificati

come vengono calcolati gli indici:

¯1↓s rilasciare l'ultimo carattere di s

'rdluRDLU'⍳'codifica 'r'come 0, 'd'come 1, ecc; altri caratteri come 8

0, anteporre uno 0

(8∘≠⍴¨⊢) trasforma ogni 8 in un elenco vuoto, tutti gli altri in un elenco di 1 elemento

,⍨\concatenazioni cumulative scambiate ( abcd-> a ba cba dcba)

⊃¨ prima da ciascuno

0j1* costante immaginaria al potere di

+\ somme cumulative

11 9∘○¨parte reale e immaginaria di ciascuno; ottenere coordinate nell'intervallo -n...n

n+ centrali sulla grande matrice


3

Pyth, 68 65 byte

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

Suite di test

Questo utilizza un dizionario, indicizzato da una coppia di coordinate, che viene aggiornato come input letto, quindi stampato alla fine. Utilizza anche un sacco di trucchi da golf intelligenti.

Ecco come l'ho scritto, usando il -mflag dell'interprete per eliminare spazi bianchi e commenti prima di eseguire:

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.

3

C #, 525 474 byte

Modifica: salvato 51 byte grazie a @steenbergh

Non è carino, ma funziona ...

golfed:

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

Ungolfed:

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

Spiegazione:

Utilizza una matrice bidimensionale e il dvalore per aumentare la posizione della matrice nella direzione di correzione, dove i valori d sono:

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

Test:

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

                            cod                              
                              e                              
                              g                              
                              o                              
                         dna fl    sel                       
                                     z                       
                         p           z                       
                         rogramming pu  

puoi rimuovere completamente il secondo switch. Nel primo switch in cui scrivi d=0;, sostituisci questa istruzione con l'istruzione nella seconda case 0:istruzione switch e fai in modo simile ad altri casi e potresti non aver bisogno di un secondo switch. Infine, rimuovi questa istruzione a[y,x]=s[i]e scrivila sopra del primo interruttore.
Mukul Kumar,

@MukulKumar Bella idea, non riesco a farlo funzionare. Ho provato a farlo inizialmente con un interruttore. Deve rimanere nella sua attuale configurazione a doppio interruttore! :)
Pete Arden,

hai scritto a[y,x]=s[i]prima del primo passaggio?
Mukul Kumar,

2
È possibile utilizzare switch(s[i].toLowerCase())(o qual è l'equivalente in c # ...) e quindi rimuovere tutte le maiuscole. Dovrebbe salvare alcuni byte.
steenbergh,

1
@steenbergh Grazie, grandi risparmi lì! No, non puoi direttamente ToUpper()perché charnon è un string. Le scelte sono s[i].ToString().ToUpper()o char.ToUpper(s[i])- Penso che charquella sia leggermente più breve. Saluti :)
Pete Arden,

3

JavaScript (ES6), 218 220 232

Modifica Stavo usando ue tper tenere traccia della posizione più in alto e più a sinistra, ma mi sono reso conto che tnon era affatto necessario

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

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

Test

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>


3

05AB1E , 27 26 25 23 22 byte

Salvato 3 byte grazie a Grimy

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

Provalo online!

Spiegazione

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

1
"sposa" è una parola del dizionario. -1 . MODIFICA: fai che -2 .
Grimmy,

@Grimy: mi chiedevo se il dizionario potesse essere usato qui, ma è davvero intelligente!
Emigna,


2

Javascript, 4̶6̶6̶, 455, 433 byte

Modifiche: 11 byte salvati, grazie all'utente 1000000000 10 o più salvati, grazie all'utente2428118 Rimossi anche alcuni punti e virgola non necessari.

Sono abbastanza sicuro che questo possa essere ulteriormente migliorato, ma non sono riuscito a gestirlo. Sono ancora tutto nuovo, quindi ogni consiglio è molto apprezzato :)

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

Ungolfed:

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``));

}

Ho più o meno adottato l'approccio di:

  • Avere un array per archiviare l'output
  • Calcola la posizione xey del carattere successivo nella matrice
  • Se le coordinate stavano per essere all'esterno dell'array, estendere l'array in quella direzione. O spingendo e spazio extra alla fine di quella riga o aggiungendo un'altra riga interamente.
  • Crea array [y] [x] = carattere corrente
  • stampa l'array risultante

Benvenuti nel sito! Non sono un esperto di JavaScript ma questo sembra abbastanza buono.
Wheat Wizard

Benvenuto! È possibile salvare 11 byte sostituendo['r','u','l','d'] con"ruld"
0 "

Inoltre non è necessario il z= all'inizio del programma
0 "

Grazie per il consiglio! JS non smette mai di stupirmi per la sua comodità.
Jhal,

È possibile utilizzare valori letterali modello in diversi punti per salvare alcuni byte, ad es a.split`` .
user2428118

2

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

Ho provato a eseguire il mio programma come input per il mio programma con alcuni risultati interessanti. Ah, prova a interpretarlo, Python!

Rasato 5 byte - complimenti a Jack Bates.

23 byte portati via da Kundor

Nota: penso che ci sia stato un errore di misurazione con i miei byte a causa dell'utilizzo di editor diversi. Tuttavia, sono abbastanza certo che l'ultimo sia corretto.


È possibile rimuovere 5 byte sostituendo 'r':(1,0)con 'r':de rimuovendo lo spazio in w[a] for. Anche questo è pazzo !!! Quanto tempo hai impiegato?

@JackBates Un giorno, tra un lavoro e l'altro. Divento un po 'ossessivo.
Lord Ratte,

Non tutti noi? Questo è il punto centrale della programmazione!

Credo che tu possa sostituire l'intera X,Y=map(...)linea con X,Y=zip(*m). Funziona qui. (la *mdecomprime in un elenco delle sue chiavi e zip le raggruppa in due tuple.)
Nick Matteo

È inoltre possibile inserire il ciclo for su una riga per salvare quattro byte.
Nick Matteo

2

PHP, 238 223 205 204 byte

12 byte salvati da Jörg (stripos invece di preg_match), 1 byte + parentesi graffe conducendo anziché trascinare newline, 16 + parentesi golfate dal cambio di direzione, 1 in più con ternario invece di 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]??" ";

Esegui come pipe php -nR '<code>'o provalo online .

abbattersi

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

1
Se vedo questo diritto strspn($r[$y+=$e][$x+=$d]=$c,udlruDLR)dovrebbe salvare alcuni byte invece di usare il regex, ´stripos (_ulrd, $ r [$ y + = $ e] [$ x + = $ d] = $ c) `dovrebbe essere migliore come strspn $argnsalva 3 Byte
Jörg Hülsermann,

@ JörgHülsermann Mi stai perseguitando? : D Hai ragione.
Tito,

Nessuno ha modificato il suo post oggi e ho visto la tua risposta e ho visto che puoi renderlo più breve. Mi dispiace che il miglioramento non sia così eccezionale da poter battere la risposta di JS. È felice e orgoglioso se riesco a trovare dei byte nelle tue risposte ma non sto cercando questi casi
Jörg Hülsermann

@ JörgHülsermann Non preoccuparti; Ho trovato altri 21 byte oltre ai tuoi 12. Grazie per avermi fatto rivisitare questo.
Tito,

Oltre il 10 percento è bello
Jörg Hülsermann

2

Java 10, 288 286 280 263 byte

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 byte grazie a @Grimy .

Spiegazione:

Provalo qui. (NOTA: rimuovo tutti gli spazi / le nuove righe finali per rendere l'output un po 'più compatto. Sentiti libero di rimuovere .replaceAll("(m?)\\s+$","")il testmetodo nel per vedere il risultato reale.)

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

1
d<69?1:d>84?-1:0può essere5-d/14
Grimmy

1
E nella stessa ottica, d==82?1:d==76?-1:0può essere3-(d^16)/23
Grimmy,

@Grimy Grazie. Sapevo che quelle due parti potevano in qualche modo essere giocate a golf, ma sono piuttosto cattivo con quelle trasformazioni bitwise / aritmetiche, quindi non mi sono preoccupato di provarci. Grazie per i -17 byte! :)
Kevin Cruijssen,

1

Perl, 204 + 3 = 207 byte

+3 per -F

Lo spazio bianco non fa parte del codice e viene fornito per leggibilità.

%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""
}

Simile alla mia soluzione alla sfida di Fizz Buzz, creo un hash con coordinate x, y per ogni passo lungo la strada, mantenendo i massimi e i minimi delle coordinate xey, quindi ciclo e stampa tutto.

Se sono disperato, potrei essere in grado di trasformare le ultime tre righe del primo forloop in una singola istruzione disgustosa che può salvare un byte o due, ma non vedo l'ora che arrivi il risultato illeggibile.


1

Excel VBA, 205 byte

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

Sono un po 'sorpreso dalla capacità di Excel di competere con le risposte esistenti. Funziona perché we ztenere traccia della direzione.


la posizione di partenza 70 potrebbe non essere sufficiente. Inoltre, gli spazi
iniziali

1

SmileBASIC, 148 146 byte

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

Chiamare la funzione con W "text",vx,vy, dove vx e vy è la direzione all'inizio (il valore predefinito è 1,0)


Cosa succede quando X o Y è inferiore a 0?
edc65,

Ora scorrerà tutto il testo quando il cursore si sposta dallo schermo.
Me21,

0

Swift 3, 283 byte

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()}}

Ungolfed

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()
    }
}

avvertimento

Un input più lungo richiede uno schermo più grande. L'output non ha alcun trattamento per le righe / colonne "vuote", come ho capito, il che è accettabile dalle regole della sfida.

declamazione

  • Newline è il terminatore predefinito per print sux
  • Nessun modo semplice di creare una matrice di lunghezza nota ha distrutto il punteggio.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.