เต่าตลอดทางลง


74

เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้จำนวนเต็มบวกและพิมพ์หรือส่งคืนสแต็คของเต่า ASCII จำนวนมากที่เต่าแต่ละตัวมีขนาดใหญ่กว่าหนึ่งตัว

โดยเฉพาะถ้าอินพุตคือ1เอาต์พุตควรเป็น:

 __
/,,\o

หากอินพุตคือ2:

  __
o/,,\
 ____
/,__,\o

หากอินพุตคือ3:

   __
  /,,\o
  ____
o/,__,\
 ______
/,____,\o

หากอินพุตคือ4:

    __
  o/,,\
   ____
  /,__,\o
  ______
o/,____,\
 ________
/,______,\o

หากอินพุตคือ5:

     __
    /,,\o
    ____
  o/,__,\
   ______
  /,____,\o
  ________
o/,______,\
 __________
/,________,\o

และในรูปแบบเดียวกันสำหรับอินพุตที่ใหญ่ขึ้น

โปรดทราบว่า:

  • หัว (the o) ของเต่าล่างอยู่ทางขวาเสมอ หัวของเต่าด้านบนแล้วสลับไปมา
  • ไม่มีบรรทัดใดอาจมีช่องว่างต่อท้าย
  • ไม่อนุญาตให้มีช่องว่างนำหน้าฟุ่มเฟือย (เช่นด้านหลังของเต่าล่างควรอยู่ที่จุดเริ่มต้นของบรรทัด)
  • อนุญาตให้ขึ้นบรรทัดใหม่ตัวเลือกหนึ่งบรรทัดต่อท้าย

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


11
trichoplax ฉันคาดหวังคำตอบที่ใช้การเรียกซ้ำ
El'endia Starman

15
,________,เมื่อมีคนพูดอะไรบางอย่างที่ไม่สมเหตุสมผล
R. Kap

8
พลิกด้านเพื่อให้แน่ใจว่าเต่าทุกตัวมองขึ้นหรือลงเห็นตูดหรือไม่
พื้นฐาน

15
ฉันดีใจที่คุณระบุเต่า ASCII ไม่เช่นนั้นฉันจะส่งคำตอบโลโก้ในที่สุดซึ่งฉันไม่ต้องเสีย 3 ไบต์เพื่อซ่อนเต่า
GuitarPicker

4
ฉันชอบเต่า!
Scotty.NET

คำตอบ:


31

แบตช์ 256 ไบต์

@set i=echo 
@%i%off
set u=
for /l %%j in (2,2,%1)do call set i=%%i%%  
set/af=%1^&1
if %f%==1 %i% __&%i%/,,\o&set u=__
for /l %%j in (2,2,%1)do call:l
exit/b
:l
set i=%i:~0,-2%
%i%  _%u%_
%i%o/,%u%,\
%i% __%u%__
%i%/,_%u%_,\o
set u=__%u%__

โปรดทราบว่าบรรทัดที่ 1 มีช่องว่างต่อท้ายและบรรทัดที่ 4 มีช่องว่างต่อท้ายสองช่อง iดังนั้นจึงมีechoคำสั่งที่มีจำนวนของการเยื้องที่เหมาะสมสำหรับเต่าแต่ละตัว ในขณะเดียวกันuมีจำนวนขีดล่างในเต่าอื่น เต่าแปลกหน้าชั้นนำนั้นใส่ตัวเป็นพิเศษจากนั้นเต่าที่เหลือจะถูกส่งออกเป็นคู่


25
+1 ที่มีขนาดเท่ากับ 256 ไบต์ อย่าตีกอล์ฟเว้นแต่คุณจะสามารถครึ่งหนึ่งของความยาวได้!
Rohan Jhunjhunwala

เดิมทีฉันพลาดบันทึกย่อเกี่ยวกับช่องว่างต่อท้ายส่วนใหญ่บรรณาธิการของฉันถูกกำหนดให้ตัดออกและฉันไม่สามารถคิดออกว่าทำไมมันไม่ทำงาน! มีความสุขเสมอที่ได้เห็น Batch บน PPCG :)
กัปตันแมน

24

C, 131 ไบต์

i,j;f(n){char _[3*n];memset(_,95,3*n);for(i=n;i--;printf("%*.*s\n%*s/,%.*s,\\%s\n",j+n+1,j+j,_,i,"o"+1-i%2,j+j-2,_,"o"+i%2))j=n-i;}

ลองออนไลน์

กำหนดฟังก์ชั่นที่พิมพ์เต่า

การใช้ความกว้างและตัวระบุความแม่นยำอย่างไม่ถูกต้องเป็นการละเมิดอย่างหนักเพื่อให้ได้ระยะห่างและการขีดล่างซ้ำ เต่าแต่ละตัวจะถูกพิมพ์โดยใช้printfสายเดียว:

printf("%*.*s\n%*s/,%.*s,\\%s\n",j+n+1,j+j,_,i,"o"+1-i%2,j+j-2,_,"o"+i%2)

ฉันยังมีรุ่นที่แตกต่างกันซึ่งมีขนาด 144 ไบต์เมื่อลบช่องว่าง:

c,i;f(n){for(i=n;i--;){
    char*p=" _\n o/,_,\\o\n";
    int C[]={i+1,c=n+n-i-i,1,i&~1,i%2,1,1,c-2,1,1,1-i%2,1};
    for(c=0;p[c];)C[c]--?putchar(p[c]):++c;
}}

ประณามฉันกำลังจะเพิ่ม C ++ หนึ่ง

4
+1 ที่มี,_,ในรหัสของคุณ
R. Kap


12

05AB1E, 45 ไบต์

Lvð¹y-©>ׄ__y×UXJ,„/,X¨¨„,\J'o®ÉiìëJ}ð®®É-×ì,

ลองออนไลน์


3
ทำให้คะแนนของฉันสั้นลง
jseals

ไม่แน่ใจว่าG-loop มีอยู่แล้วในเวอร์ชันสิงหาคม 2016 แต่ถ้าเป็นLvสามารถGและทั้งสองyสามารถมีNขนาด -1 ไบต์
Kevin Cruijssen

12

V , 57, 53 49 ไบต์

i ³_
/,_,\oÀñHyjí_/___
ëPhjI ñdjí___
òkk$x^PXkk

เนื่องจากสิ่งนี้มีอักขระที่ไม่สามารถพิมพ์ได้นี่คือ hexdump:

00000000: 6920 b35f 0a2f 2c5f 2c5c 6f1b c0f1 4879  i ._./,_,\o...Hy
00000010: 6aed 5f2f 5f5f 5f0a eb50 1668 6a49 20f1  j._/___..P.hjI .
00000020: 646a ed5f 5f5f 0af2 6b6b 2478 5e50 586b  dj.___..kk$x^PXk
00000030: 6b                                       k

ลองออนไลน์!

คำอธิบาย:

i ³_\n/,_,\o<esc>       "Insert the original turtle with one extra underscore

Àñ                      "Arg1 times:
  Hyj                   "  Go the the beginning of the file, and yank a turtle
     í_/___             "  Extend the lenght of every turtle by two
ëP                      "  Move to the beginning of the file again, and paste the turtle we yanked
  <C-v>hjI              "  Move this turtle one to the right
           ñ            "Stop looping.

dj                      "Delete a turtle (since we have one too many)
  í___                  "Make every turtle shorter (since they are all too long)

ò                       "Recursively:
 kk                     "  Move up two lines
   $x                   "  Delete the last character on this line (an 'o')
     ^P                 "  And paste this 'o' at the beginning of the line
       X                "  Remove one space
        kk              "  Move up two lines again

เอาต์พุตที่น่าสนใจสำหรับอินพุต0และด้านล่าง
R. Kap

input > 10รหัสนี้ยังไม่ทำงาน 0 41c14สังเกตด้านบนผมตั้งใจยากจนนั้นสมบูรณ์ด้วยการป้อนข้อมูล ไม่แน่ใจว่าฉันทำผิดรหัสหรือรองชนะเลิศ
แบรนดอน Anzaldi

1
@ R.Kap ใช่ฉันคิดว่าฉันรู้ว่าทำไมมันถึงเป็นเช่นนั้น V นั้นแทบจะไม่สามารถเข้าใจจำนวนเต็มดังนั้นมันจึงเห็น-1ว่าเป็นสตริงที่ไม่สามารถทำเป็นว่าเป็นตัวเลขได้ โชคดีที่ฉันไม่ต้องจัดการกับสิ่งเหล่านั้น
DJMcMayhem

1
@BrandonAnzaldi อ่าฉันเห็นเหตุผลที่ใช้งานไม่ได้ ฉันจะแก้ไขมันในไม่กี่นาที นอกจากนี้การทำสิ่งอื่นนอกเหนือจากเลขฐานสิบก็ถูกผูกไว้เพื่อทำให้เกิดปัญหาแปลก ๆ
DJMcMayhem

1
ได้! ทางออกที่ดี คิดว่าคงเป็นเรื่องง่ายที่จะแก้ไข ฉันรู้สึกทึ่งกับผลลัพธ์ของแป้นพิมพ์ที่ไม่ได้ตั้งใจดังกล่าว ช่องว่างชั้นนำยังให้ผลลัพธ์ที่สนุกสนาน ดูเหมือนว่าคุณ wrangled V ค่อนข้างดี!
Brandon Anzaldi

11

Perl, 92 ไบต์

รหัส 1 91 -nไบต์

ต้อง-Eไม่มีค่าใช้จ่ายเพิ่มเติม

for$i(1..$_){say$"x$_._,$v=_ x(--$i*2),_.$/.$"x(--$_-1),$_%2?o:$"x!!$_,"/,$v,\\",$_%2?"":o}

การใช้

perl -nE 'for$i(1..$_){say$"x$_._,$v=_ x(--$i*2),_.$/.$"x(--$_-1),$_%2?o:$"x!!$_,"/,$v,\\",$_%2?"":o}' <<< 3
   __
  /,,\o
  ____
o/,__,\
 ______
/,____,\o

ขอบคุณ@Dadaสำหรับ -9 ไบต์ด้วยการทำงานซ้ำของเขา!


1
ทำได้ดีนี่. อีกรุ่น bytecount perl -nE 'for$i(1..$_){say$"x$_._.($v=_ x(($i-1)*2))._.$/.$"x(--$_-1).($_%2?o:$_?$":"")."/,$v,\\".($_%2?"":o)}'เดียวกัน ฉันพยายามที่จะได้รับต่ำกว่า 100 เกินไป แต่ coudl ไม่ ...
Dada

@Dada ขอบคุณ! อัปเดตชื่นชมมาก!
Dom Hastings



6

Python 2, 116 ไบต์

m=input()
for i in range(m):r=m-i;b=r%2;h='o';a='__';u=i*a;s=' '*r;print s+u+a+'\n'+s[:b-2]+h*-~-b+"/,"+u+",\\"+b*h

ฉันได้จำนวนของคุณที่115 ไบต์และคุณสามารถบันทึกหนึ่งไบต์โดยใช้lambda m:for i in r...แทนinput()
wnnmaw

6

R , 150 ไบต์

a=function(x,y=1){d=x-y;t=d%%2;cat(rep(" ",d+1),rep("_",2*y),"\n",rep(" ",d-t),"o"[t],"/,",rep("_",2*y-2),",\\","o"[!t],"\n",sep="");if(y<x)a(x,y+1)}

หมดจด (เพิ่มไบต์)

a=function(x,y=1){
     d=x-y
     t=d%%2
     cat(rep(" ",d+1),rep("_",2*y),"\n",rep(" ",d-t),"o"[t],"/,",rep("_",2*y-2),",\\","o"[!t],"\n",sep="")
     if(y<x)a(x,y+1)
}

โครงสร้างพื้นฐานเรียกซ้ำตัวเอง - บอกตัวเองทั้งหมายเลขสุดท้ายที่จะเรียกและระดับปัจจุบัน เริ่มต้นด้วยค่าเริ่มต้นสำหรับ y = 1 ดังนั้นจึงต้องการเพียงหนึ่งตัวแปรสำหรับการโทรเริ่มต้น กำหนดสองค่าอย่างรวดเร็วที่ใช้บ่อย จากนั้นมันจะทำซ้ำทุกอย่างตามจำนวนครั้งที่จำเป็น

"o"[t],"o"[!t]

แต่ละแบบทดสอบเหล่านี้โดยปริยายว่าจะเพิ่มหัวไปทางขวาหรือซ้ายและวางไว้อย่างเหมาะสม


ใช้#ก่อนชื่อในเครื่องมือแก้ไข markdown เพื่อจัดรูปแบบเหมือนคำตอบอื่น ๆ
TheBikingViking

ขออภัย - แก้ไขแล้ว
user5957401

6

TSQL, 189 ไบต์

ขณะนี้มีการยอมรับอินพุต - ด้วย @PatrickRoberts

DECLARE @i INT=##i##,@ INT=0a:PRINT SPACE(@i-@)+REPLICATE('__',@+1)+'
'+SPACE((@i-@-1)/2*2)+IIF((@i-@-1)%2=1,'o/,','/,')+REPLICATE('__',@)+IIF((@i-@-1)%2=0,',\o',',\')SET
@+=1IF @i>@ GOTO a

ซอ



@PatrickRoberts ขอบคุณไม่ทราบว่าเป็นเซิร์ฟเวอร์ sql ในปี 2016 ใช่หรือไม่
t-clausen.dk

@ t-clausen.dk กลไกการป้อนข้อมูลนั้นเฉพาะเจาะจงกับไซต์ data.SE ไม่ใช่คุณสมบัติมาตรฐานของ SQL รุ่นใด ๆ
BradC

@BradC คุณพูดถูกมันเป็นภาษาการเขียนโปรแกรมและดีมากที่ในที่สุดก็สามารถเพิ่มอินพุตพารามิเตอร์ได้ ฉันลืมทุกอย่างเกี่ยวกับเรื่องนี้และฉันจะพิจารณาใช้มันในอนาคตจ่ายเงินพิเศษไบต์
t-clausen.dk

6

C, 328 238 234 215 ไบต์:

B;M(w,j,R){j=w;if(j<=B){char b[j*2-1],k[j*2+1];b[j*2-2]=k[j*2]=0;memset(b,95,j*2-2);memset(k,95,j*2);R=(B+1-j)%2;printf("%*s\n%*s/,%s,\\%s\n",j*2+B+1-j,k,B-j,R?"":"o",b,R?"o":"");j++;M(j);}}main(){scanf("%d",&B);M(1);}

การใช้งานแบบเรียกซ้ำโดยใช้การจัดรูปแบบสตริงจำนวนมากและmemsetฟังก์ชันbuiltin จะพยายามเล่นกอล์ฟให้มากขึ้นเรื่อย ๆ เท่าที่จะทำได้

C มันออนไลน์! (Ideone)


พอแปลกเต่าตัวที่สามและสี่ปรากฏตัวบน Ideone ...
เควนติน

@Quentin จริง ๆ แล้วนั่นไม่ใช่ Ideone นั่นคือความผิดพลาดของโปรแกรมของฉัน ด้วยเหตุผลบางอย่างการป้อนข้อมูลนาทีเข้าใกล้17และเกินกว่าตรรกะจะหยุดลงด้วยเหตุผลบางประการดังนั้นเต่าจึงทำเช่นนั้น ฉันกำลังพยายามหาสิ่งผิดปกติ
R. Kap

เยี่ยมมาก! โปรดทราบว่าคุณสามารถแทนที่ตัวอักษรของตัวละครมากที่สุด ( 'c') ตามรหัส ASCII ของพวกเขาที่จะสำรองไว้หนึ่งตัวละครแต่ละตัว :)
เควนติน

@Quentin Nice? ... มันใช้งานไม่ได้ดีมาก มันดีอย่างไร
R. Kap

Oh! ฉันตรวจสอบย้อนกลับบน Ideone และมันก็ดูคงที่ แต่นั่นเป็นเพราะมีเต่าน้อยกว่าแน่นอน ... เช้าวันรุ่งขึ้น
เควนติน

4

Java 1.7, 238 ไบต์

ชุดของทั้งสองฟังก์ชั่น: แรกวนซ้ำเหนืออินพุต (# ของเต่า) ที่สองอำนวยความสะดวกในการสร้างลำดับของตัวละครซ้ำซ้ำ recursively (เช่นช่องว่างชั้นนำด้านหลังและท้องของเต่า)

String f(int n){String s="";for(int i=-1,x=-2;++i<n;){int m=(i+n)%2;s+=r(' ',n-i)+r('_',i*2+2)+"\n"+r(' ',n-i-(m==1?1:2))+(m==0?"o":"")+"/,"+r('_',x+=2)+",\\"+(m==1?"o":"")+"\n";}return s;}String r(char c,int n){return n>0?c+r(c,--n):"";}

Ungolfed:

class C {
    public static void main(String[] a) {
        System.out.println(new T().f(1));
        System.out.println(new T().f(2));
        System.out.println(new T().f(3));
        System.out.println(new T().f(4));
        System.out.println(new T().f(5));
    }

    static class T {

        String f(int n) {
            String s = "";
            for (int i = -1, x = 0; ++i < n; x+=2) {
                int m = (i + n) % 2;
                s += r(' ', n - i) + r('_', i * 2 + 2) + "\n" + r(' ', n - i - (m == 1 ? 1 : 2)) + (m == 0 ? "o" : "") + "/," + r('_', x) + ",\\" + (m == 1 ? "o" : "") + "\n";
            }
            return s;
        }

        String r(char c, int n) {
            return n > 0 ? c + r(c, --n) : "";
        }

    }

}

เรียกใช้! (Ideone)

ฉันคิดว่ามันโอเคที่จะแยกคำจำกัดความของชั้นเรียนจากการนับไบต์

ฉันอาจจะสามารถเล่นกอล์ฟนี้อีกเล็กน้อยโดยการย้อนกลับคำสั่งวนซ้ำ (สร้างจากเต่าล่างขึ้น) และ / หรือโดยเวียนซ้ำอย่างเต็มที่เหมือนคำตอบอื่น ๆ

หมายเหตุถึงตัวเอง: Java ขาดชวเลขในตัวจริง ๆ เพื่อทำซ้ำอักขระ n ...



4

งูหลาม 137 120 113 110 ไบต์

m=input()
for i in range(m):p=m-i;b=p%2;print' '*p+'__'*-~i+'\n'+' '*(p-2+b)+'o'*-~-b+'/,'+'__'*i+',\\'+'o'*b

Ungolfed:

m=input()
for i in range(m):
  p=m-i                              // Abstract m-i for a few bytes
  b=p%2                              // Determines every other turtle from bottom

  print' '*p + '__'*-~i + '\n' +    // The top of the turtle
       ' '*(p-2+b) +                // Leading spaces (-1 for every other turtle)
       '0'*-~-b +                   // Add a leading head to every other turtle
       '/,'+'__'*i +                // Body of the turtle
       ',\\'+'0'*b                  // Add a trailing head to every other turtle

หัวแข็ง


แทนที่จะ('o','')[b]ทำเช่นนั้นคุณสามารถทำได้'o'*(1-b)(และ'o'*bเพื่อ('o','')[1-b])
Mego

@ mego โอ้ใช่ฉันเปลี่ยนมันเป็นถ่านเปล่า ขอบคุณ!
greyShift

'0'*-~-1สั้นกว่า'0'*(1-b)
เลมอนที่ถูกทำลายได้

และ - ~ i สั้นกว่า (i + 1)
เลมอนที่ถูกทำลายได้

3

F #, 218 207 202 196 187 ไบต์

โกนส่วนใหญ่ของไบต์เหล่านี้ด้วยการฝังตัวแปร

let R=String.replicate
let t n=let rec L i r k=if i<n then L(i+1)(R(k+i%2+1)" "+R((n-i)*2)"_"+"\n"+R k" "+R(i%2)"o"+"/,"+R(n*2-i*2-2)"_"+",\\"+R(1-i%2)"o"+"\n"+r)(k+i%2*2)else r in L 0""0

ตรรกะถูกขโมยลงคอจากคำตอบของ Pythonนี้อย่างไร้ยางอาย

ลองออนไลน์


3

CJam , 88 ไบต์

ri_[S\_'_*_+N+\O\"/,"\('_*_++','\+'o]\({_[(S+\(2>\(S\+)'O^c+\(-2<\(\('o\{;O}&\;]}*]-1%N*

ทำให้เต่าที่ใหญ่ที่สุดเป็นอันดับแรก (เพราะไม่เช่นนั้นเต่าอื่น ๆ จะยืนอยู่บนอะไร) แล้วค่อยลดขนาดลงจนกว่าจะมีขนาดเล็กที่สุด ทำงานสำหรับจำนวนเต็มใด ๆ ที่มากกว่า 0

ลองออนไลน์!


2

Python 2.7, 255 238 236 ไบต์

แม้ว่าสิ่งนี้จะหายไปกับโซลูชัน Python 2 อื่น ๆ ทั้งสองฉันชอบวิธีเรียกซ้ำของฉัน:

def r(s,p):
 for(a,b)in p:s=a.join(s.split(b))
 return s
def t(w):
 i='_'*2*w;s='\n __%s\n/,%s,\o'%(i,i)
 if w:s=r(t(w-1),[('\n ','\n'),('Z/',' /'),('\\Z\n','\\\n'),(' /','o/'),('\\','\\o'),('o','Z')])+s
 return s
print t(input()-1)[1:]

edit1: ปล่อยสองสามไบต์โดยกำจัดบางส่วนที่แทนที่

edit2: โกน 2 ไบต์โดยบันทึกขีดล่างเป็นตัวแปร



1

Python 2.7, 139 114 113 130 ไบต์

ฉันชอบแนวทางแบบวนซ้ำของ Iguanodon ดังนั้นนี่จึงเป็นความพยายามที่สั้นกว่าเล็กน้อย

def t(n):
 if n>1:t(n-1)
 a=i-n;b=(a+1)%2;print' '*(a+1)+'__'*n+'\n'+' '*(a-1+b)+'o'*(not b)+'/,'+'__'*(n-1)+',\\'+'o'*b
i=input()
t(i)

แก้ไข

อันยิ่งใหญ่25 26 9 ไบต์เล่นกอล์ฟเนื่องจากเคล็ดลับที่ยอดเยี่ยมจากแตงโมที่ถูกทำลาย ขอบคุณมาก! คิดว่าอาจเป็นคำตอบที่สั้นที่สุดของ Python ในขณะนี้ :-)

def t(n):
 if n>1:t(n-1)
 a=i-n;b=-~a%2;print' '*-~a+'__'*n+'\n'+' '*(a-1+b)+'o'*-~-b+'/,'+'__'*~-n+',\\'+'o'*b
i=input()
t(i)

(a + 1) สามารถย่อให้เหลือ - ~ a และ n-1 สามารถย่อให้เหลือ ~ -n และ b ได้ 0 หรือ 1 เสมอดังนั้นจึงไม่สามารถย่อ b ถึง - ~ -b และคุณสามารถกำจัดi=input();t(i)ส่วนหนึ่งเพราะคุณได้รับอนุญาตให้มีฟังก์ชั่น
เลมอนที่ทำลายได้

ขอบคุณมนุษย์สำหรับคำแนะนำที่ดีบางอย่าง @Destructible ยังเห็นว่าเป็น b อยู่เสมอ 1 หรือ 0 จากนั้น 1-b ทำงานและสูญเสีย 1 ไบต์เพิ่มเติม
ElPedro

ยกเว้นที่จะต้อง parens เพราะ * มีลำดับความสำคัญสูงกว่าไบนารี - แต่ unary - และ ~ มีลำดับความสำคัญสูงกว่า *
Lemon ที่สามารถทำลายได้

ตอนนี้ฉันคิดว่าถ้า n อยู่เสมอ> 0 ดังนั้นถ้า n> 1 สามารถย่อให้เหลือ ~ -n (n-1) ซึ่งตัดพื้นที่ว่างนำออกไป นอกจากนี้อีกครั้ง (1-b) สามารถย่อให้เหลือ - ~ -b โดยไม่มี parens
Lemon ที่ถูกทำลาย

นี่เพิ่งจะดีขึ้นเรื่อย ๆ ! ฉันรักใหม่นี้และใช้มากขึ้นในการเขียนโค้ดสามารถอ่านคำแนะนำเพื่อให้คุณได้รับการชื่นชมอย่างมาก :)
ElPedro

1

PowerShell , 105 100 97 87 85 84 ไบต์

-21 bytes ขอบคุณ mazzy, คนบ้า

"$args"..1|%{' '*$_--+($m='__'*$i++)+'__'
' '*($_-$_%2)+("/,$m,\o","o/,$m,\")[$_%2]}

ลองออนไลน์!

เปลี่ยนตัวแปรอย่างชาญฉลาดโดยใช้$_--เพื่อหลีกเลี่ยงการใช้($_+1)บล็อกซ้ำเพื่อบันทึกหลายไบต์ นอกจากนี้ยังแปลงอาร์กิวเมนต์เดี่ยวเป็นสตริงซึ่งจะส่งไปยัง int เมื่อใช้ในช่วงเพื่อวนซ้ำผ่านจำนวนเต่า เคล็ดลับที่ใหญ่ที่สุดคือตอนนี้มีระยะห่างระดับที่ 2 ของเต่าเพิ่มขึ้นทุกแถวอื่น ๆ โดยการลบ$_%2 (เช่น 0 ถ้าแม้, 1 ถ้าแปลก) จาก row_count ปัจจุบัน

มิฉะนั้นเป็นคณิตศาสตร์ดัชนีจำนวนมากเพื่อให้ได้จำนวนที่เหมาะสม_และรวมถึงตัวนับความล่าช้าในรูปแบบ$i++และตอนนี้มีเพียงดัชนีรายการเดียวที่จะวางหัวไว้ในด้านที่ถูกต้อง


@mazzy ไม่มีช่องว่างต่อท้าย แต่ฉันแก้ไขเป็น 5 ไบต์ขอบคุณ
Veskah

1
ฉันขอโทษ :) 85 bytes
mazzy

@mazzy Double dang ทำงานได้มากกว่าเดิม สิ่งที่ดี
Veskah

1
นั่นคือทั้งหมด :) 84 ไบต์
mazzy

0

ES6 (JavaScript) 140 ไบต์

รหัส

T=(i,h=0,p=1,R="repeat")=>(i>1?T(i-1,~h,p+1)+"\n":"")+" "[R](p)+'--'[R](i)+"\n"+" "[R](p-1+h)+(h?"o":"")+"/,"+'__'[R](i-1)+",\\"+(!h?"o":"")

ทดสอบ

console.log(T(5));

     --
    /,,\o
    ----
  o/,__,\
   ------
  /,____,\o
  --------
o/,______,\
 ----------
/,________,\o

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.