단어를 걸어!


33

표준 텍스트가 지루하다는 것은 겸손한 견해입니다. 그러므로 나는 새로운 글쓰기 표준을 제안합니다.

걷는 단어

보행 단어는 특정 문자에 반응하는 단어입니다. 이 문제를 해결하기 위해 트리거 문자는 [u, d, r, l]입니다 up down right left.

텍스트를 인쇄 할 때 이러한 문자가 나타날 때마다 텍스트 방향을 이동합니다.
예를 들어, 텍스트 abcdef는 다음과 같습니다.

abcd
   e
   f

규칙

  • 대문자 UDRL와 소문자 모두 udrl방향을 변경해야하지만 대소 문자를 출력에 유지해야합니다.
  • 입력은 줄 (0-9, A-Z, a-z, !@#%^&*() etc...)바꿈없이 인쇄 가능한 문자 만 포함합니다 !
  • 텍스트가 충돌 할 때마다 해당 위치의 이전 문자를 덮어 씁니다.
  • 출력물은 유행에 관계없이 사용자에게 제공되어야하지만 단일 출력이어야합니다 (행 배열 없음).
  • 후행 및 선행 개행이 허용됩니다.
  • 후행 공백이 허용됩니다
  • 표준 허점 적용

테스트 사례

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
                                       !

이것은 바이트 단위의 , 가장 짧은 코드입니다.


4
이 형식에는 심각한 데이터 손실 문제가 있습니다 ... : p
Mukul Kumar

앞 / 뒤 공간이 허용됩니까?
Arnauld

@Arnauld 캐릭터의 위치를 ​​방해하지 않는 한. 그래서 아마도 후행 공간
Bassdrop Cumberwubwubwub

1
단어의 출력 golf자체는 어떻습니까?
gabe3886

2
@ gabe3886gfl
Bassdrop Cumberwubwubwub

답변:


4

, 29 27 20 19 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

FS«

입력 문자를 반복합니다.

F№rdlu↧ι

현재 문자가 방향이라면 ...

≔ιω

그런 다음 현재 보행 방향을 업데이트하십시오.

✳∨ωrι

방향이 설정되지 않은 경우 현재 도보 방향으로 문자를 인쇄하고 기본값은 오른쪽입니다.


1
@Veskah The 로되어있었습니다 . 미안합니다.

7

Dyalog APL , 63 바이트

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

⎕IO←0v16의 용도 및 기능 ( @)

n←≢s←⍞원시 입력 s및 길이n

⍴∘'',⍨2×n 2n x 2n 공간 행렬을 만듭니다.

s@(...)s지정된 (쌍) 인덱스 의 문자로 행렬을 수정하십시오.

지수 계산 방법 :

¯1↓s 마지막 숯을 떨어 뜨리다 s

'rdluRDLU'⍳''r'0, 'd'1 등으로 인코딩 ; 다른 문자 8

0, 앞에 0을 더하다

(8∘≠⍴¨⊢) 모든 8을 빈 목록으로, 다른 모든 것을 1 요소 목록으로 바꿉니다.

,⍨\누적 스왑 연결 ( abcd-> a ba cba dcba)

⊃¨ 처음부터

0j1* 허수에 대한 허수 상수 i

+\ 누적 합계

11 9∘○¨각각에서 실제와 가상 부분; 범위에서 조정을 얻을 수 -n...n

n+ 큰 행렬의 중심에 두십시오


3

Pyth, 68 65 바이트

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

테스트 스위트

이것은 한 쌍의 좌표로 색인 된 사전을 사용하며, 입력 읽기로 업데이트 된 다음 끝에 인쇄됩니다. 또한 많은 영리한 골프 트릭을 사용합니다.

다음은 인터프리터의 -m플래그를 사용 하여 공백과 주석을 제거하고 실행하기 전에 작성한 방법입니다 .

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 바이트

편집 : @ steenbergh 덕분에 51 바이트를 절약했습니다.

예쁘지는 않지만 작동합니다 ...

골프 :

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

언 골프 드 :

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

설명:

2 차원 배열과 d값을 사용하여 수정 방향으로 배열의 위치를 ​​증가시킵니다. 여기서 d 값은 다음과 같습니다.

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

테스트:

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

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

두 번째 스위치를 완전히 제거 할 수 있습니다. 첫 번째 스위치를 쓰는 위치 d=0;에서이 명령문을 두 번째 스위치 case 0:명령문 의 명령문으로 바꾸고 다른 경우와 유사 하며 두 번째 스위치 가 필요하지 않을 수 있습니다. 마지막으로이 명령문을 제거 a[y,x]=s[i]하고 맨 위에 씁니다. 첫 번째 스위치.
Mukul Kumar

@MukulKumar 좋은 생각입니다. 작동하지 않습니다. 처음에는 하나의 스위치로 시도했습니다. 현재의 듀얼 스위치 구성을 유지해야합니다! :)
Pete Arden

당신은 쓰기 않았다 a[y,x]=s[i]제 1 스위치 전에?
Mukul Kumar

2
당신은 switch(s[i].toLowerCase())(또는 C #에 해당하는 것을 ...) 사용하고 모든 대문자를 제거 할 수 있습니다. 바이트를 저장해야합니다.
steenbergh

1
@steenbergh 감사합니다. 아니, 당신은 할 수없는 직접 ToUpper()그것은 때문에 char하지 않은 string. 선택은 s[i].ToString().ToUpper()또는 char.ToUpper(s[i])-나는 char조금 더 짧은 것 같아요 . 건배 :)
피트 아덴

3

자바 스크립트 (ES6) 218 220 232

편집 내가 사용 u하고 t상단과 가장 왼쪽 위치를 추적하기 위해, 나는 그것이 t전혀 필요하지 않다는 것을 깨달았습니다.

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

덜 골프

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
}             

테스트

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 바이트

Grimy 덕분에 3 바이트 절약

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

온라인으로 사용해보십시오!

설명

ā                        # 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
"신부"는 사전 단어입니다. -1 . 편집 : 그 -2 확인하십시오 .
그리미

@ 그림 : 사전을 여기서 사용할 수 있을지 궁금했지만 정말 똑똑합니다!
Emigna


2

자바 스크립트, 4̶6̶6̶, 455, 433 바이트

편집 : 11 바이트 저장, 사용자 1000000000 덕분에 10 정도 정도 저장, user2428118 덕분에 불필요한 세미콜론도 제거되었습니다.

나는 이것이 더 골프를 칠 수 있다고 확신하지만, 그것을 잘 관리 할 수는 없었습니다. 나는 여전히 새로운 모든 것이므로 어떤 조언도 많이 부탁드립니다 :)

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

언 골프 드 :

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

}

나는 다소 접근했다 :

  • 출력을 저장할 배열을 갖습니다.
  • 배열에서 다음 문자의 x 및 y 위치를 계산하십시오.
  • 좌표가 배열 외부에있을 경우 해당 방향으로 배열을 확장하십시오. 해당 행의 끝에 추가 공간을 밀어 넣거나 다른 행을 완전히 추가하여.
  • 배열 [y] [x] = 현재 문자로 설정
  • 결과 배열을 인쇄

사이트에 오신 것을 환영합니다! 저는 JavaScript 전문가는 아니지만 매우 좋아 보입니다.
밀 마법사

환영! ['r','u','l','d']"ruld"
0 '

또한 z=프로그램을 시작할 때 필요하지 않습니다
0 '

팁 고마워! JS는 편의상 나를 놀라게하지 않습니다.
Jhal

여러 위치에서 템플릿 리터럴을 사용하여 바이트를 저장할 수 있습니다 (예 :) a.split`` .
user2428118

2

파이썬 3 314 309 290 268 바이트

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

흥미로운 결과를 내 프로그램의 입력으로 프로그램을 실행하려고했습니다. 하, 해석 해봐, 파이썬!

5 바이트 면도-Jack Bates를 보완합니다.

Kundor가 털어 낸 23 바이트

참고 : 다른 편집기를 사용했기 때문에 바이트로 측정하는 데 약간의 오류가 있다고 생각합니다. 그러나 최신 버전이 정확하다고 확신합니다.


당신은 대체하여 5 바이트를 제거 할 수 있습니다 'r':(1,0)'r':d와의 공간을 제거하여 w[a] for. 또한 이것은 미쳤다! !! 시간이 얼마나 걸렸습니까?

@JackBates 하루 사이에 일합니다. 나는 조금 강박 적이다.
로드 Ratte

우리 모두 아닌가요? 이것이 코딩의 요점입니다!

전체 X,Y=map(...)줄을로 바꿀 수 있다고 생각합니다 X,Y=zip(*m). 여기서 작동합니다. ( *m키를 압축 해제하고 튜플을 두 개의 튜플로 재 그룹화합니다.)
Nick Matteo

for 루프를 한 줄에 넣어 4 바이트를 절약 할 수도 있습니다.
Nick Matteo

2

PHP, 238223205204 바이트

르크 (12 바이트로 저장 stripos하는 대신 preg_match), 선도 대신 개행 후행 1 바이트 + 브레이스는 16 개 + 1 교정기 이상의 원 대신에, 방향 변화로부터 golfed 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]??" ";

파이프로 실행 php -nR '<code>'하거나 온라인으로 사용해보십시오 .

고장

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
난이 오른쪽 보면 strspn($r[$y+=$e][$x+=$d]=$c,udlruDLR)일부를 저장해야하는 대신 이용 정규식 'stripos 바이트 (_ulrd를 $ R [$ Y + = $ E] [$ X + = $ D] = $ c) 'strspn으로 더 전자해야 $argn3 바이트에 저장
Jörg Hülsermann

@ JörgHülsermann 스토킹하고 있습니까? : D 맞아.
Titus

오늘 그의 게시물을 편집 한 사람이 없으며 귀하의 답변을 보았으며 더 짧게 만들 수 있음을 확인했습니다. 개선이 너무 커서 JS 답변을 이길 수 없기 때문에 죄송합니다. 귀하의 답변에서 일부 바이트를 찾을 수 있으면 행복하고 자랑
스럽지만

@ JörgHülsermann 걱정하지 마십시오. 12 외에도 21 바이트가 더 있습니다. 다시 방문해 주셔서 감사합니다.
Titus

10 % 이상이 좋다
요 르그 Hülsermann

2

자바 (10), 288 (286) (280) 263 바이트

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 바이트 덕분에 @Grimy .

설명:

여기에서 시도하십시오. (참고 : 출력을 조금 더 작게 만들기 위해 모든 후행 공백 / 줄 바꿈을 제거합니다 . 실제 결과를 보려면-방법 .replaceAll("(m?)\\s+$","")에서 를 제거 test하십시오.)

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:0가능5-d/14
Grimmy

1
그리고 같은 맥락에서, d==82?1:d==76?-1:0할 수있다3-(d^16)/23
그리미

감사합니다. 나는 그 두 부분이 어떻게 든 골프를 칠 수 있다는 것을 알고 있었지만, 비트 / 산술 변환은 꽤 나빴 기 때문에 노력하지 않았습니다. -17 바이트 감사합니다! :)
Kevin Cruijssen

1

펄, 204 + 3 = 207 바이트

+3 -F

공백은 코드의 일부가 아니며 가독성을 위해 제공됩니다.

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

Fizz Buzz 챌린지에 대한 솔루션과 마찬가지로, 모든 단계마다 x, y 좌표로 해시를 만들고 저장된 x 및 y 좌표의 최대 값과 최소값을 유지 한 다음 모든 것을 반복하여 인쇄합니다.

필사적 이라면 첫 번째 for루프 의 마지막 세 줄을 하나의 역겨운 진술로 바꿔서 1 ~ 2 바이트를 절약 할 수는 있지만 완전히 읽을 수없는 결과를 기대하지는 않습니다.


1

Excel VBA, 205 바이트

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

기존 답변과 경쟁 할 수있는 Excel의 기능에 다소 놀랐습니다. 이 때문에 작동 wz방향 추적해야합니다.


시작 위치 70으로는 충분하지 않습니다. 또한 선행 공백은 허용되지 않습니다
edc65

1

스마일 BASIC, 148 146 바이트

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

를 사용하여 함수를 호출하십시오 W "text",vx,vy. 여기서 vx 및 vy는 시작 방향입니다 (기본값은 1,0입니다).


X 또는 Y가 0보다 작 으면 어떻게됩니까?
edc65

이제 커서가 화면을 벗어날 때 모든 텍스트를 스크롤합니다.
12Me21

0

스위프트 3, 283 바이트

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

언 골프

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

경고

더 긴 입력은 더 큰 화면이 필요합니다. 출력은 "빈"행 / 열에 대해 처리되지 않습니다.

란트

  • printsux 의 기본 종결 자인 개행
  • 알려진 길이의 배열을 만드는 간단한 방법은 점수를 파괴하지 않습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.