Ikuti kata-kata!

33

Menurut hemat saya, teks standar itu membosankan. Karena itu saya mengusulkan standar penulisan baru, kata-kata berjalan!

Kata-kata berjalan

Walking words adalah kata-kata yang akan merespon karakter tertentu. Untuk tujuan tantangan ini, karakter pemicu [u, d, r, l]berasal up down right left.

Setiap kali Anda menemukan karakter seperti itu saat mencetak teks, Anda akan memindahkan arah teks.
Misalnya, teks abcdefakan menghasilkan:

abcd
   e
   f

Aturan

  • Baik huruf besar UDRLdan kecil udrlharus mengubah arah, tetapi case harus dipertahankan dalam output
  • Input hanya akan berisi karakter yang dapat dicetak (0-9, A-Z, a-z, !@#%^&*() etc...), tidak ada baris baru!
  • Setiap kali teks akan bertabrakan, itu akan menimpa karakter lama di posisi itu
  • Keluaran harus disajikan kepada pengguna dalam hal apa pun yang modis, tetapi harus berupa keluaran tunggal (tanpa deretan garis)
  • Trailing dan baris baru diizinkan
  • Ruang tambahan diizinkan
  • Celah standar berlaku

Uji kasus

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
                                       !

Ini adalah , kode terpendek dalam byte yang menang!

Bassdrop Cumberwubwubwub
sumber
4
Format ini memiliki masalah kehilangan data yang parah ...: p
Mukul Kumar
Apakah ruang memimpin / trailing diperbolehkan?
Arnauld
@Arnauld Selama mereka tidak mengganggu posisi karakter mereka. Jadi kemungkinan besar hanya tertinggal ruang
Bassdrop Cumberwubwubwub
1
Bagaimana hasil dari kata itu golfterlihat dengan sendirinya?
gabe3886
2
@ gabe3886gfl
Bassdrop Cumberwubwubwub

Jawaban:

4

Arang , 29 27 20 19 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

FS«

Ulangi karakter input.

F№rdlu↧ι

Jika huruf saat ini adalah arah ...

≔ιω

kemudian perbarui arah berjalan saat ini.

✳∨ωrι

Cetak karakter dalam arah berjalan saat ini, default ke kanan jika belum ada arah yang ditetapkan.

Neil
sumber
1
@ Veskah Seharusnya a . Maaf soal itu.
Neil
7

Dyalog APL , 63 byte

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

menggunakan ⎕IO←0dan fitur dari v16 ( @)

n←≢s←⍞input mentah sdan panjangnyan

⍴∘'',⍨2×n buat 2n demi 2n matriks ruang

s@(...)mengubah matriks dengan karakter spada indeks (pasangan) yang ditentukan

bagaimana indeks dihitung:

¯1↓s jatuhkan char terakhir s

'rdluRDLU'⍳'disandikan 'r'sebagai 0, 'd'sebagai 1, dll; karakter lain seperti 8

0, tambahkan sebuah 0

(8∘≠⍴¨⊢) mengubah setiap 8 menjadi daftar kosong, semua yang lain menjadi daftar 1-elemen

,⍨\konkatasi bertukar kumulatif ( abcd-> a ba cba dcba)

⊃¨ pertama dari masing-masing

0j1* konstanta imajiner i dengan kekuatan

+\ jumlah kumulatif

11 9∘○¨bagian nyata dan imajiner dari masing-masing; dapatkan koordinasi di kisaran -n...n

n+ pusatkan mereka pada matriks besar

ngn
sumber
3

Pyth, 68 65 byte

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

Suite uji

Ini menggunakan kamus, diindeks oleh sepasang koordinat, yang diperbarui sebagai input dibaca, kemudian dicetak di akhir. Ini juga menggunakan satu ton trik golf yang cerdas.

Inilah cara saya menulisnya, menggunakan -mbendera juru bahasa untuk menghapus spasi dan komentar sebelum menjalankan:

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

C #, 525 474 Bytes

Sunting: Disimpan 51 Bytes berkat @steenbergh

Itu tidak cantik, tapi itu berhasil ...

Golf:

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

Tidak Disatukan:

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

Penjelasan:

Menggunakan array dua dimensi dan dnilai untuk meningkatkan posisi array dalam arah koreksi, di mana nilai d adalah:

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

Uji:

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
sumber
Anda dapat menghapus saklar kedua sepenuhnya. Pada saklar pertama di mana Anda menulis d=0;, ganti pernyataan ini dengan pernyataan di pernyataan beralih kedua case 0:dan lakukan mirip dengan kasus lain dan Anda mungkin tidak perlu beralih kedua. Dan terakhir hapus pernyataan ini a[y,x]=s[i]dan tulis di atas dari saklar pertama.
Mukul Kumar
@MukulKumar Ide bagus, saya tidak bisa membuatnya bekerja. Saya mencoba melakukannya dalam satu saklar pada awalnya. Itu harus tetap di konfigurasi dual-switch saat ini! :)
Pete Arden
Anda menulis a[y,x]=s[i]sebelum beralih dulu?
Mukul Kumar
2
Anda dapat menggunakan switch(s[i].toLowerCase())(atau apa yang setara dengan c # ...) lalu menghapus semua huruf besar. Harus menyimpan beberapa byte.
steenbergh
1
@steenbergh Terima kasih, penghematan besar di sana! Tidak, Anda tidak dapat langsung ToUpper()karena itu charbukan string. Pilihannya adalah s[i].ToString().ToUpper()atau char.ToUpper(s[i])- Saya pikir yang charsedikit lebih pendek. Cheers :)
Pete Arden
3

JavaScript (ES6), 218 220 232

Sunting Saya menggunakan udan tuntuk melacak posisi teratas dan paling kiri, tetapi saya menyadari bahwa titu tidak diperlukan sama sekali

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

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

Uji

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

05AB1E , 27 26 25 23 22 byte

Disimpan 3 byte berkat Grimy

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

Cobalah online!

Penjelasan

ā                        # 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
sumber
1
"Pengantin" adalah kata kamus. -1 . EDIT: buat itu -2 .
Grimmy
@ Grimy: Saya bertanya-tanya apakah kamus bisa digunakan di sini, tapi itu benar-benar pintar!
Emigna
22
Grimmy
2

Javascript, 4̶6̶6̶, 455, 433 Bytes

Suntingan: 11 Bytes disimpan, terima kasih kepada pengguna 1000000000 10 atau lebih disimpan, berkat pengguna2428118 Juga menghapus beberapa titik koma yang tidak perlu.

Saya cukup yakin ini bisa golf lebih lanjut, tetapi saya tidak bisa mengelolanya. Saya masih baru, jadi semua saran sangat dihargai :)

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

Tidak Disatukan:

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

}

Saya kurang lebih mengambil pendekatan:

  • Memiliki array untuk menyimpan output
  • Hitung posisi x dan y karakter berikutnya dalam array
  • Jika koordinat hendak berada di luar array, rentangkan array ke arah itu. Baik dengan mendorong dan menambah ruang ke ujung baris itu atau menambahkan baris lain seluruhnya.
  • Buat array [y] [x] = karakter saat ini
  • cetak array yang dihasilkan
Jhal
sumber
Selamat datang di situs ini! Saya bukan ahli dalam JavaScript tetapi ini terlihat cukup bagus.
Wheat Wizard
Selamat datang! Anda dapat menghemat 11 byte dengan menggantinya ['r','u','l','d']dengan"ruld"
0 '
Anda juga tidak perlu z=di awal program Anda
0
Terima kasih atas tipnya! JS tidak pernah berhenti membuat saya takjub dengan kenyamanannya.
Jhal
Anda dapat menggunakan templat literal di beberapa tempat untuk menghemat beberapa byte, misalnya 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))

Saya mencoba menjalankan program saya sebagai input ke program saya dengan beberapa hasil menarik. Hah, coba tafsirkan itu, Python!

Dicukur 5 byte - pujian untuk Jack Bates.

23 byte dibawa pergi oleh kundor

Catatan: Saya pikir ada beberapa kesalahan pengukuran dengan byte saya karena menggunakan editor yang berbeda. Namun, saya cukup yakin yang terbaru benar.

Tuan Ratte
sumber
Anda dapat menghapus 5 byte dengan mengganti 'r':(1,0)dengan 'r':ddan dengan menghapus spasi pada w[a] for. Juga ini gila !!! Berapa lama waktu yang Anda ambil?
@JackBates Sehari, di sela-sela pekerjaan. Saya menjadi sedikit obsesif.
Lord Ratte
Bukankah kita semua? Itulah inti dari pengkodean!
Saya percaya Anda dapat mengganti seluruh X,Y=map(...)baris dengan X,Y=zip(*m). Bekerja disini. ( *mmembongkar kunci itu ke daftar kuncinya, dan mengelompokkannya menjadi dua tupel.)
Nick Matteo
Anda juga dapat meletakkan for loop pada satu baris untuk menghemat empat byte.
Nick Matteo
2

PHP, 238 223 205 204 byte

12 byte disimpan oleh Jörg ( striposbukan preg_match), 1 byte + kawat gigi dengan memimpin bukannya trailing baris baru, 16 + kawat gigi golf dari perubahan arah, 1 lebih dengan ternary bukan 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]??" ";

Jalankan sebagai pipa dengan php -nR '<code>'atau coba online .

kerusakan

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
sumber
1
Jika saya melihat ini benar strspn($r[$y+=$e][$x+=$d]=$c,udlruDLR)harus menyimpan beberapa byte daripada menggunakan regex, ´stripos (_ulrd, $ r [$ y + = $ e] [$ x + = $ d] = $ c) `harus lebih baik seperti strspn $argnsave 3 Bytes
Jörg Hülsermann
@ JörgHülsermann Apakah Anda membuntuti saya? : D Anda benar.
Titus
Tidak ada yang mengedit posnya hari ini dan saya telah melihat jawaban Anda dan saya melihat Anda dapat mempersingkatnya. Maaf karena peningkatannya tidak terlalu bagus sehingga Anda bisa mengalahkan jawaban JS. Itu membuat senang dan bangga jika saya dapat menemukan beberapa byte dalam jawaban Anda tetapi saya tidak mencari kasus ini
Jörg Hülsermann
@ JörgHülsermann Jangan khawatir; Saya menemukan 21 byte tambahan selain 12. Terima kasih telah membuat saya mengunjungi kembali ini.
Titus
Lebih dari 10 persen itu menyenangkan
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 terima kasih kepada @Grimy .

Penjelasan:

Coba di sini. (CATATAN: Saya menghapus semua spasi tambahan / baris baru untuk membuat output sedikit lebih kompak. Jangan lepaskan .replaceAll("(m?)\\s+$","")di test-metode untuk melihat hasil yang sebenarnya.)

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
sumber
1
d<69?1:d>84?-1:0bisa5-d/14
Grimmy
1
Dan dengan nada yang sama, d==82?1:d==76?-1:0 bisa3-(d^16)/23
Grimmy
@ Terima kasih kotor. Saya tahu kedua bagian itu entah bagaimana bisa golf, tapi saya cukup buruk dalam transformasi bitwise / aritmatika itu, jadi saya tidak repot mencoba. Terima kasih atas -17 byte! :)
Kevin Cruijssen
1

Perl, 204 + 3 = 207 byte

+3 untuk -F

Spasi bukan bagian dari kode dan disediakan untuk keterbacaan.

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

Mirip dengan solusi saya untuk tantangan Fizz Buzz, saya membuat hash dengan koordinat x, y untuk setiap langkah di sepanjang jalan, menjaga maksimum dan minimum koordinat x dan y yang disimpan, kemudian loop through dan cetak semuanya.

Jika saya putus asa saya mungkin bisa mengubah tiga baris terakhir dari forloop pertama menjadi pernyataan menjijikkan tunggal yang dapat menghemat satu atau dua byte, tapi saya tidak menantikan hasil yang benar-benar tidak dapat dibaca.

Gabriel Benamy
sumber
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

Saya agak terkejut dengan kemampuan Excel untuk bersaing dengan jawaban yang ada. Ini bekerja karena wdan zmelacak arah.

steenbergh
sumber
posisi awal 70 mungkin tidak cukup. Selain itu, ruang utama tidak diperbolehkan
edc65
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

Panggil fungsi dengan W "text",vx,vy, di mana vx dan vy adalah arah di awal (default adalah 1,0)

12Me21
sumber
Apa yang terjadi jika X atau Y kurang dari 0?
edc65
Sekarang akan menggulir semua teks ketika kursor mati layar.
12Me21
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()}}

Tidak disatukan

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

Peringatan

Input yang lebih panjang akan membutuhkan layar yang lebih besar. Output tidak memiliki perawatan untuk baris / kolom "kosong" seperti yang saya pahami yang dapat diterima oleh aturan tantangan.

Kata-kata kasar

  • Newline menjadi terminator default untuk printsux
  • Tidak ada cara sederhana untuk membuat array dengan panjang yang diketahui menghancurkan skor.
Otávio
sumber