드래곤 커브 그리기


19

오늘의 과제 : 용의 곡선을 그리세요!

드래곤 커브가 무엇인지 모르는 경우 여기 에 소개 ViHart 비디오가 있습니다 (정말로 시원하십시오!)

당신의 임무 : 용 곡선을 그리고 적어도 9 번 반복하십시오. 1 번에서 9 번까지 반복을 표시 할 필요는 없으며, 9 번 이상 반복 한 후 생성 된 최종 곡선 만 표시하면됩니다. 곡선은 곡선의 점을 연결하는 직선으로 그려야합니다. 출력은 9 개 이상의 반복 (반사, 회전, 크기 조정 및 선 너비, 선 색 및 배경색의 변화까지)을 나타내는 아래 이미지 중 하나와 일치해야합니다. 출력은 개별 라인과 그 "상자"가 서로 구별 될 수있을만큼 충분히 커야합니다. 두 선이 곡선에서 교차하지 않으면 출력에서 ​​동일하거나 인접한 픽셀을 차지하지 않아야합니다 (배경 사이에 배경의 픽셀이 하나 이상 있어야 함). 이미지를 화면에 표시하거나 이미지를 파일로 저장하여 사용할 수 있습니다. 출력은 그래픽이어야합니다. ASCII 아트 일 수 없습니다.

바이트 단위로 가장 짧은 코드가 승리 하지만 라이브러리에 대한 지시문을 포함하면 바이트 수에 포함되어서는 안되며 게시 전에 작성된 그래픽 라이브러리 또는 선택한 언어로 작성된 다른 라이브러리를 사용할 수 있습니다.

프로그램 출력 이미지를 포함하십시오.

여기에 이미지 설명을 입력하십시오

비디오를 본 경우이 단락을 건너 뛰십시오.비디오를 보지 않기로 결정한 분들을 위해 드래곤 커브의 첫 12 회 반복이 아래에 나와 있습니다. 이 작업을 위해 용 곡선은 다음 규칙에 의해 생성 된 곡선입니다. 현재 곡선의 끝점을 취하고 해당 끝점을 기준으로 90도 회전하여 두 번째 곡선을 만들어 원본의 끝점 곡선은 새 곡선의 시작점이며 두 곡선을 만나는 단일 곡선으로 결합합니다. 아래 이미지에서 각 반복마다 끝점을 기준으로 이전 반복을 시계 방향으로 90도 회전하여 각 새 반복이 생성됩니다. 곡선이 화면에 표시 될 때 어느 끝이 "종점"으로 카운트되는지는 확실하지 않지만 곡선이 점의 배열로 저장 될 때 "종점"을 마지막 점으로 쉽게 정의 할 수 있습니다. 배열

아스키 아트는 높이 평가되지만 인정되지는 않습니다 : 이것은 아스키 아트가 아닌 그래픽 출력입니다.


3
사이징, 컬러링 등에 대한 사양이 있습니까? 정확한 출력이므로 약간 불분명합니다.
Rɪᴋᴇʀ


6
나는 제거 용 곡선 은 아무것도 추가 할 것 같지 않았기 때문에 태그를
블루


3
이것은 복제본이 아닙니다. 이를 해결하기위한 프로그래밍 기법은 상당히 다릅니다 (어쩌면 차콜 제외). 대부분의 답변은 거북이 그래픽 라이브러리를 사용하며 ASCII 컨텍스트에서는 전혀 작동하지 않습니다.

답변:


2

x86, MSDOS, 16 바이트

나는 얼마 전에 이것을 용 프랙탈을 생성하는 가장 작은 일과로 썼다. 실제 반복을 사용하지 않고 프랙탈 내에 포함 된 모든 개별 픽셀을 직접 플로팅하여 최종 이미지를 표시합니다 . 이 팩 에는 많은 다른 작은 제작물 포함되어 있습니다 . 16 바이트 버전은 2014 년부터 32 바이트 제작 으로 드래곤 프랙탈을 가능한 한 작게 만들기위한 노력의 끝이었습니다 .

마녀

14 10 19 CA D1 FA 10 DE 01 D1 CD 10 B4 0C EB F0

암호

S: 
adc al,0x10
sbb dx,cx       
sar dx,0x01 
adc dh,bl
add cx,dx
int 0x10
mov ah,0x0C
jmp short S

스크린 샷


1
이것은 ... 놀랍습니다. 나는 그것을 어떻게 운영 할 것인가?
J. Antonio Perez

가장 빠른 방법은 온라인 DosBox입니다. twt86.co?c=FBAZytH6EN4B0c0QtAzr8A%3D%3D 여기에서 소스를 복사하여 직접 컴파일 할 수 있습니다. 고전적인 방법은 DosBox (0.74)를 직접 다운로드하여 실행하는 것입니다. 가장 실제적인 방법은 MSDos 또는 FreeDos Bootstick (Rufus)을 구하여 실제 #noemu에 대해 실행하는 것입니다.)
HellMood

9

파이썬 2/3 169 167 150 111 98 78 바이트

챌린지 사양에 따라 가져 오기는 바이트 수에 포함되지 않습니다.

39 (!) 바이트를 절약 한 @AlexHall과 다른 13 개를위한 @ nedla2004에 감사합니다.

from turtle import*
o=[90]
for z in o*9:o+=[90]+[-x for x in o[::-1]]
fd(5)
for i in o:rt(i);fd(5)

목록 또는 오른쪽 (90) 및 왼쪽 (-90) 회전을 생성하여 시작한 다음 목록을 통과하여 거북이를 이동합니다.

생성 된 출력 : 여기에 이미지 설명을 입력하십시오

편집 : 이것이 너무 지루한 시계라면 speed(0)첫 번째 바로 앞에 추가하십시오 fd(5). 거북이가 훨씬 빨리 움직인다는 것을 제외하고는 같은 방식으로 작동합니다.


사진이 좋을 것입니다 :)
Kritixi Lithos

출력물의 사진이나 스크린 샷을 게시 할 수 있습니까? 이 코드가 화면에 어떤 내용을 인쇄하는지는 확실하지 않습니다
J. Antonio Perez

이미지가 잘림
J. Antonio Perez

지금 수정해야합니다 :)
Theo

@AlexHall 감사합니다! 루프를 짧게 만드는 방법이 있어야한다는 것을 알고있었습니다 :)
Theo

8

로고, 43 바이트

for[i 1 512][fd 9 lt :i/(bitand :i -:i)*90]

http://www.calormen.com/jslogo/# 에서 통역사와 함께 사용해보십시오 .

이것은 이전 ASCII 아트 답변 과 동일한 원리를 사용하고 wikipedia 의 공식을 사용 하여 질문의 이미지와 일치하도록 방향을 바꿨습니다.

먼저, k*(2^m)k가 홀수 인 형태 로 n을 표현하십시오 . n 번째 턴의 방향은 k mod 4에 의해 결정되는데, 즉 k를 4로 나눌 때 남은 나머지는 k mod 4가 1이면 n 번째 턴은 R L이고; k mod 4가 3이면 n 번째 턴은 L R

bitand :i -:i의 최하위 비트를 찾습니다 i. 우리는 i이것을 i필요한 분수로 바로 나누고 필요한 홀수를 제공 하기 위해 이것을 나눕니다 k. 좌회전과 우회전을 구분할 필요는 없습니다. 우리는 k*90각도 를 왼쪽으로 돌리고 회전이 우리를 위해 모듈로를 수행하는 모듈러스 360 오퍼레이터라는 사실에 의존합니다.

산출

ht필요한 경우 거북이를 숨기려면 사용하십시오 .

여기에 이미지 설명을 입력하십시오

출력 (수정)

다음은 곡선이 단일 가닥 인 방법을 보여줍니다.

bk 6 for[i 1 512][fd 6 rt :i/(bitand :i -:i)%4*45-90 fd 3 rt :i/(bitand :i -:i)%4*45-90]

여기에 이미지 설명을 입력하십시오


4

LindenMASM , 51 바이트

LindenMASM은 제가 샌드 박스에서 영원히 살 수 있도록 도전하기 위해 만든 언어입니다. Lindenmayer 시스템 의 개념을 사용하여 용 곡선, 프랙탈 식물, Sierpinski 삼각형 등과 같은 것을 그립니다.

소스 코드는 다음과 같습니다.

STT
AXI FX
INC 9
SET F 0
RPL X X+YF+
RPL Y -FX-Y
END

n = 6예를 들어 이것을 설정하려면 :

STT
AXI FX
INC 6
SET F 0
RPL X X+YF+
RPL Y -FX-Y
END

이것은 Python 3을 통해 다음 이미지를 생성합니다 turtle.

6 대

Lindenmayer 시스템에서 첫 번째 반복이 단일 행이므로 반복에 대해 약간의 번호 차이가있을 수 있습니다. 다음과 같은 모습입니다 n = 10.

10 대

재미를 위해 15 세대의 모습은 다음과 같습니다 ( MOV 2조금 더 작게 만드는 지침 이 추가됨 ).

15 대

최대 20 세대 (포함 MOV 0.5) 를 얻으면 더 이상 라인을 볼 수 없으며 생성 하는 데 많은 단계가 필요합니다 (페어 +--+최적화되지 않음). 당신이 얻는 것은 다음과 같습니다.

20 대

현재 인터프리터는 소량의 세대에 대한 그래픽 문제를 표시 할 수 있습니다. 즉, 화면에 표시되지 않을 수 있습니다. 불행히도이 인터프리터가 만들어 졌을 때 문제가 없었습니다. 파이썬 3의 가능한 변경으로 인해이 문제가 발생했을 수도 있고 내 시스템 일 수도 있습니다.


4

언더로드, 196 바이트

()()(<svg width="99" height="147">)S(<g transform="translate):S((33,33)">)S((3,0)rotate)*a(*a(~*)*~("><path d="M0h3" stroke="#"/>)~*a(*)**:(-90)a~^~(90)a~^)*::*:**:*^S(</g>)(:*)::*:**:*^S(</svg>)S

저전력 esolang에서이 도전을 시도하는 것이 흥미로울 수 있다고 생각했습니다. 언더로드는 명령 수가 적은 언어에 상당히 적합합니다.

출력은 매우 많이 중첩 된 태그와 일부 골프 단축키가 포함 된 SVG 파일입니다. 지금까지 브라우저를 표시 할 수있는 브라우저를 찾지 못했습니다 (Firefox는 몇 분 동안로드하려고 시도하고 Firefox와 Chromium 모두 빈 화면을 표시합니다). 대부분의 이미지 처리 프로그램은 그것을로드 할 수 없으며 (다른 형식으로 변환하기가 어렵습니다), 이미지 뷰어 Eye of Gnome (Ubuntu의 기본 설치의 일부)에로드 할 수있었습니다. 따라서 이미지를 볼 수 있도록 이미지의 스크린 샷을 찍었습니다 (실제 이미지에는 투명한 배경이 있지만 실제로 스크린 샷을 투명하게 만들 수는 없습니다).

Underload의 드래곤 커브 스크린 샷

이미지 크기를 명시 적으로 지정해야합니다. 이미지에 대한 적절한 방향을 따기 최소한의 법적 크기로 모든 그리기와 도전에 의해 지정된 반복의 최소 수를하고있는 것은, 우리에게 있다는 이미지를 제공합니다 단지 폭 99 개 픽셀에 맞는이, 바이트를 저장합니다. 일이 그렇게 잘되면 좋습니다.

이미지를 그리는 데 사용되는 일반적인 알고리즘은 두 변수를 유지하는 것입니다 (언로드는 변수 이름을 지정하지 않지만 xy 로 생각했습니다 ). 처음에는 비어 있습니다. 그럼 반복 (교체 X , Y 와 함께)를 ( x는 , 좌측 및 전진 좌회전 Y가 ) 및 ( X는 , 우회전 전진 y로 ). 10 회 반복 한 후 xy 는 모두 9 회 반복 용 곡선을 유지합니다.

미세 최적화 및 언더로드 관련 트릭도 있습니다. 스택의 상단, 각 루프 반복으로 너무 많은 혼란을 피하기 위해 xy 를 함수로 결합하여 시작 합니다. " x , turn 명령어, 함수 인수, 이동- 앞으로 지시하고, y . " 이 함수는 스택에서 하나의 공간 만 차지하므로 중복 -90하여 인수로 호출하고 , 중복 된 값 아래에서 리턴 값을 교환 한 다음 인수로 호출 90하여 xy에 대한 새 값을 보유 할 수 있습니다.스택의 상위 2 개 요소 (가장 일반적으로 액세스 할 수있는) 이상을 만질 필요가 없습니다. 이 함수는 런타임에 코드 생성됩니다. 생성기 자체는 <g transform="translate이미지의 원점을 설정하는 데 사용되는 문자열을 재사용 할 수 있도록 런타임에 코드로 생성됩니다 . 모든 열린 태그를 먼저 생성 한 다음 모든 닫기 태그가 just </g>이므로 문자열을 반복하여 열린 태그와 일치하는 것에 대해 걱정할 필요없이 간단히 문자열을 반복하여 1024 개의 닫기 태그를 출력 할 수 있습니다. (언더로드에서 숫자를 효율적으로 쓰는 것은 그 자체로는 흥미로운 문제입니다. (:*)::*:**:*아마도 "2를 (1 + 2 × 2) × 2의 거듭 제곱"으로 변환하여 1024를 쓰는 가장 효율적인 방법 일 것입니다.

언더로드에는 그래픽 라이브러리가 없으므로 고정 된 위치에 선을 그리고 주어진 점을 중심으로 이미지를 회전하여 SVG를 생성합니다. 펜을 돌리는 대신 종이를 돌리십시오. 아이디어는 선을 그리거나 전체 이미지를 회전하거나 다른 선을 그리거나 이미지를 다시 회전하는 등 모든 선이 그려 짐에 따라 산술이나 그래픽 라이브러리를 사용할 필요없이 거북이 그래픽을 효과적으로 시뮬레이션 할 수 있다는 것입니다. 같은 위치에. 물론 이는 매우 많이 중첩 된 이미지 회전 태그가있어 많은 SVG 뷰어를 혼란스럽게합니다.

이미지를 스타일링하면 바이트 수를 기준으로 계산되므로 이미지를 표시하는 데 필요한 최소한의 스타일을 지정해야했습니다. 이것은 stroke="#""선이 어떤 색이어야 함"으로 해석되는 것으로 밝혀졌다 . 이것은 검은 색으로 그려지는 것으로 보입니다. 일반적으로 색상은 "# 000"으로 지정합니다. 배경은 기본적으로 투명합니다. 우리는 획 너비를 지정하지 않지만 그놈의 눈에 의해 선택된 것은 모든 것을 보이게합니다.

내부적으로 매우 큰 문자열을 생성하기 때문에 많은 Underload 통역사가이 프로그램으로 어려움을 겪습니다. 그래도 원래 온라인 언더로드 인터프리터가 작동합니다. (흥미롭게도 최초의 통역사가 온라인 상태 였으므로 오프라인에서 사용하기 전에 해당 언어를 온라인에서 사용할 수있었습니다.)

내가 약간 불안한 점은 여기에 1023 개의 선 세그먼트 만 있고 1024가 예상된다는 것입니다. 끝에있는 세그먼트 중 하나 가이 알고리즘으로 그려지지 않을 수 있습니다 ( 대신 다음 반복에 그려집니다). 자격이 상실되면 프로그램을 조정하는 것이 가능할 수 있지만 상당히 길어질 수 있습니다. (어쨌든이 도전이 경쟁에서 이길 것 같지는 않습니다. 이미 몇 가지 더 짧은 참가작이 있습니다.)


4

MATL , 26 바이트

0J1_h9:"tPJ*h]hYsXG15Y01ZG

두 축의 서로 다른 스케일이 허용되면 코드를 19 바이트로 줄일 수 있습니다.

0J1_h9:"tPJ*h]hYsXG

아래 그림은 동일한 규모 (26 바이트) 버전에 해당합니다.

위의 코드는 9 번째 (0 기반) 반복, 즉 챌린지의 10 번째 이미지를 생성합니다.

여기에 이미지 설명을 입력하십시오

다른 값의 9경우 코드에서를 변경 하거나 i숫자를 사용자 입력으로 사용하도록 대체하십시오 . 예를 들어 결과 13는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

설명

서서히 배열 구축이 루프를 사용하는 단계를 복소 평면 내에서 곡선을 하였다. 예를 들어 처음 두 단계는 1j(위) 및 -1(왼쪽)입니다.

각 반복에서 지금까지의 단계 배열이 복사됩니다. 배열의 복사본이되는 반전 , 승산 하여 1j(90도 회전까지) 및 연접 일본어로.

루프 후, 누적 된 단계 은 실제 점을 제공 한 다음 복소 평면에 그려집니다.

0                          % Push 0
 J1_h                      % Push array [1j, -1]. This defines the first two steps
     9:                    % Push [1, 2, ..., 9]
       "                   % For each
        t                  %   Duplicate the array of steps so far
         P                 %   Reverse
          J*               %   Multiply by 1j
            h              %   Concatenate horizontally to previous steps
             ]             % End
              h            % Concatenate with the initial 0
               Ys          % Cumulative sum
                 XG        % Plot. Complex numbers are plotted with real and imag as x and y
                   15Y0    % Push string 'equal'
                       1ZG % Set equal scale in the two axes

귀하의 답변은 인상적입니다 :) 코드에 대한 설명을 제공 하시겠습니까?
J. Antonio Perez

@ 조지 감사합니다! 완료
Luis Mendo

제공하는 "19 바이트"및 "26 바이트"버전은 동일합니다. 여기에 복사하여 붙여 넣기 오류가 있다고 가정합니까?

@ ais523 참으로! 지금 고쳐 주셔서 감사합니다. BTW 여기 에서 실제로 볼 수 있습니다 (실험 컴파일러; 페이지를 새로
고쳐야

3

매스 매 티카 86 바이트

{1,-1}
r=Reverse;Graphics@Line@Nest[Join[l=Last@#;h=#-l&/@#,r[r@#%&/@h]]&,{{0,0},%},9]

작동 방식 : {1,-1}출력 {1,-1}. 기본적으로 "스택으로 푸시"합니다. 이 값은로 불러올 수 있습니다 %. r=Reverse기본적으로 Reverse 함수는 코드에서 두 번 사용하기 때문에 이름을 바꿉니다. 는 Graphics@Line@단지 점의 목록을 받아 그들을 연결하는 선을 그립니다. 이 코드 세그먼트에서 문제의 실제 원인은 다음과 같습니다 Nest[Join[l=Last@#;h=#-l&/@#,r[r@#%&/@h]]&,{{0,0},%},9]. Lemme는 당신에게 그 세그먼트는 f ****** ck처럼 복잡하다고 말합니다. 여기에 무엇 Nest을 수행합니다 Nest[f,x,9]호출의 결과를 출력합니다 f[f[f[f[f[f[f[f[f[x]]]]]]]]].

내 코드 에서이 첫 번째 인수 f는 다음 Join[l=Last@#;h=#-l&/@#,r[r@#%&/@h]]&과 같습니다. , 두 번째 인수 x{{0,0},%}(로 평가 {{0,0},{1,-1}})이고 세 번째 인수는 n9입니다 (첫 번째 인수는 두 번째 인수에 9 번 적용됩니다).

가장 복잡한 부분은이 첫 번째 주장입니다. Join[l=Last@#;h=#-l&/@#,r[r@#%&/@h]]&이는 거의 순수한 구문 설탕의 거대한 혼란입니다. 나는 이것을 위해 수학의 구문 설탕을 실제로 학대하고 있었습니다 . 이 코드 줄은 수학 함수의 익명 함수 버전을 나타냅니다. 단, 실제로는 익명 함수 내에 두 개의 별도 익명 함수를 정의한 것을 단축했습니다. 그래, 그건 합법적이야. 그것을 분해하자.

Join두 가지 주장을 취합니다. 첫 번째는 l=Last@#;h=#-l&/@#이고 두 번째는 r[r@#%&/@h]입니다.

Join의 첫 번째 인수 : "main"익명 함수 #내에서 곡선의 현재 반복에있는 모든 점의 목록입니다. 따라서 l=Last@#;"입력으로받은 포인트 목록에서 포인트를 가져 와서 해당 포인트를 변수에 할당합니다 l. 다음 세그먼트 h=#-l&/@#는 좀 더 복잡합니다."라는 의미입니다. 이 함수는 점을 입력으로 받아 빼고 l결과를 반환합니다. 이제 입력으로받은 포인트 목록의 모든 요소에 해당 기능을 적용하여 이동 된 포인트 목록을 생성하고 해당 새 목록을 변수에 지정하십시오 h.

Join :의 두 번째 주장 r[r@#%&/@h] 은 문자 그대로 내가 작성한 가장 복잡한 구문입니다. 코드 세그먼트에 다음과 같은 내용이 포함될 수 있다고 생각할 수 없습니다 @#%&/@. 프로그램 중간에 만화 캐릭터처럼 저주하는 것처럼 보입니다! 그러나 그것을 분해 할 수 있습니다. 기억하십시오- r[x]포인트 목록을 가져 와서 해당 목록을 역순으로 반환합니다. r@#%&익명의 값에 의해 그것의 반전 입력, 다음 곱셈은 역사적으로 유명한에 해당 함수이다 %(인 {1,-1}), 및 리턴 결과. 기본적으로 입력은 90도 회전하지만 가능한 한 짧은 코드로 작성합니다. 그런 다음 r@#%&/@h"모든 포인트 인 새 목록을 h90도 회전 하여 출력"을 의미 합니다.

전체적으로, Join[l=Last@#;h=#-l&/@#,r[r@#*%&/@h]]&점 목록을 입력으로 사용하고 90도 회전 된 동일한 점 목록을 추가하여 다음 곡선 반복을 얻는 함수입니다. 드래곤 곡선을 얻기 위해 9 번 반복됩니다. 그런 다음 결과 점 목록이 화면에 선으로 그려집니다. 그리고 출력 :

여기에 이미지 설명을 입력하십시오


3
방금 null 벡터를 작성하는 가장 이상한 트릭을 발견했습니다 0{,}... ... 거의 모든 0 x것이 있기 때문에 작동 하고 에 대한 구문 설탕입니다 . 0x{,}{Null,Null}
Martin Ender

3

파이썬 2, 43 바이트

이 답변은 import 문을 포함하지 않고 43 바이트이며 주로 Level River St의 로고 답변i/(i&-i)코드에서의 사용을 기반으로 합니다. trinket.io에서 온라인으로 사용해보십시오

from turtle import*
for i in range(1,513):fd(9);rt(90*i/(i&-i))

출력 결과는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오


내가 아는 한 import 문의 바이트 수를 총 바이트 수에 포함시켜야합니다.
Theo

1
@Theo, 챌린지 사양에서 인용 :The shortest code in bytes wins, however include directives for libraries shouldn't be included in the byte count, and you may use graphics libraries or other libraries written for your language of choice if they were written before the posting.
Sherlock9

3

매스 매 티카, 56 55 바이트

Graphics@Line@AnglePath[Pi/2JacobiSymbol[-1,Range@512]]

여기에 이미지 설명을 입력하십시오

설명 : OEIS A034947

재미있게 여기, 19 번째 반복의 컬러 버전이 있습니다.

여기에 이미지 설명을 입력하십시오


2

수학, 63 바이트

사용 AnglePath

Graphics@Line@AnglePath[Pi/2Nest[Join[#,{1},-Reverse@#]&,{},9]]

9 개의 반복


1

HTML + 자바 스크립트, 182

<canvas id=C></canvas><script>c=C.getContext("2d")
C.width=C.height=400
s=n=9
x=y=200
for(i=d=0;i<=1<<n;d+=++i/(i&-i))
c.lineTo(x,y),
d&1?y+=d&2?s:-s:x+=d&2?-s:s
c.stroke()</script>


0

Haskell + 다이어그램, 179 바이트

import Diagrams.Prelude
import Diagrams.Backend.SVG
d 1=hrule 1<>vrule 1
d n=d(n-1)<>d(n-1)#reverseTrail#rotateBy(1/4)
main=renderSVG"d"(mkWidth 99)$strokeT(d 9::Trail V2 Double)

출력은 투명한 배경을 가진 99 픽셀 너비의 svg 파일입니다 (9 픽셀 너비의 이미지는 너무 두껍기 때문에 아무것도 인식 할 수 없습니다). 여기에서 크기가 조정되고 흰색 배경 위에 구성됩니다.

용 번호 9


0

tosh , 518 바이트

tosh는 Scratch 이지만 블록 대신 텍스트가 있습니다. 518 바이트 에서이 대답은 아마도 Java보다 훨씬 나쁩니다.

이 답변은 @Theo의 Python answer 과 동일한 논리를 사용 하지만 스크래치 (및 tosh의) 목록 기능이 끔찍하기 때문에 숫자 대신 "L"및 "R"문자열을 사용합니다.

여기서 스크래치 프로젝트로 실행할 수 있습니다 . (토시는 스크래치 프로젝트로 컴파일)

when flag clicked
set path to "R"
go to x: -50 y: 100
point in direction 90
pen down
set pen size to 2
clear
repeat 9
    set path copy to path
    set path to join (path) "R"
    set i to length of path copy
    repeat length of path copy
        if letter i of path copy = "R" then
            set path to join (path) "L"
        else
            set path to join (path) "R"
        end
        change i by -1
    end
end
set i to 0
repeat length of path
    change i by 1
    if letter i of path = "R" then
         turn cw 90 degrees
    else
         turn ccw 90 degrees
    end
    move 7 steps
end  

설명:

when flag clicked
set path to "R"
go to x: -50 y: 100
point in direction 90
pen down
set pen size to 2
clear

이 첫 번째 부분은 녹색 플래그를 클릭 할 때 프로그램을 실행하고 ( when flag clicked) 경로 변수를 "R"로 설정하고 스프라이트와 스테이지를 그릴 준비가되도록합니다.

repeat 9
    set path copy to path
    set path to join (path) "R"
    set i to length of path copy
    repeat length of path copy
        if letter i of path copy = "R" then
            set path to join (path) "L"
        else
            set path to join (path) "R"
        end
        change i by -1
    end
end

이제 경로 생성 코드에 도달했습니다. 숫자 대신 "R"및 "L"문자열을 제외하고 @Theo의 Python answer 와 동일한 논리를 사용하며 목록 이해 대신 중첩 루프를 사용합니다.

set i to 0
repeat length of path
    change i by 1
    if letter i of path = "R" then
         turn cw 90 degrees
    else
         turn ccw 90 degrees
    end
    move 7 steps
end  

마지막으로 경로 변수의 각 문자를 통과하고 문자에 따라 왼쪽 또는 오른쪽으로 회전하여 경로를 그립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.