พิมพ์ Retro Rocket


13

(แรงบันดาลใจจากคำถาม SOนี้)

คุณจะได้รับเป็นข้อมูลเดียวจำนวนเต็มบวกn

ในตัวละครให้น้อยที่สุดให้ส่งจรวดในรูปแบบ ASCII ด้วยหัวก้อยและร่างกายที่ประกอบด้วยnเซกเมนต์ ไม่ควรมีช่องว่างต่อท้ายหรือขึ้นบรรทัดใหม่

หัวและหางของจรวดอยู่เสมอเหมือนกันสำหรับค่าของn ร่างกายประกอบด้วยส่วนที่แตกต่างกันสองประเภทซึ่งเป็นทางเลือก ตัวอย่างควรทำให้โครงสร้างของจรวดชัดเจน

เอาต์พุตสำหรับn = 1:

     /**\
    //**\\
   ///**\\\
  ////**\\\\
 /////**\\\\\
+=*=*=*=*=*=*+
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
+=*=*=*=*=*=*+
     /**\
    //**\\
   ///**\\\
  ////**\\\\
 /////**\\\\\

เอาต์พุตสำหรับn = 2:

     /**\
    //**\\
   ///**\\\
  ////**\\\\
 /////**\\\\\
+=*=*=*=*=*=*+
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
+=*=*=*=*=*=*+
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
+=*=*=*=*=*=*+
     /**\
    //**\\
   ///**\\\
  ////**\\\\
 /////**\\\\\

เอาท์พุทสำหรับn = 3:

     /**\
    //**\\
   ///**\\\
  ////**\\\\
 /////**\\\\\
+=*=*=*=*=*=*+
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
+=*=*=*=*=*=*+
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
+=*=*=*=*=*=*+
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
+=*=*=*=*=*=*+
     /**\
    //**\\
   ///**\\\
  ////**\\\\
 /////**\\\\\

3
โพสต์ที่เกี่ยวข้องจากซวยของเรา: codereview.stackexchange.com/questions/65040/ …

คำตอบ:


6

CJam, 67 63 ตัวอักษร

"дȈ鰚㒄å摒四ㄺ뎞椉ᖛⲠ줥葌⌁掗⦠춻锦䎷겲铣굛쮂먲꿡㦺좒轃汁̕뎕갴瓖邻吟㭰戔蟏㳵回㡚钦״脮烮鋉둎邫"6e4b127b:c~

นี้จะทำงานในล่ามออนไลน์

มันทำงานอย่างไร

หลังจากกดสตริง Unicode แล้วข้อมูลโค้ด

6e4b127b:c~

แปลงสตริงจากฐาน 60000 เป็นฐาน 127 ปลดเปลื้องสตริงและประเมินผลลัพธ์

รหัสที่ถูกเรียกใช้งานมีดังต่อไปนี้:

"..."          " A binary string of length 42.                                            ";
122b7b         " Convert from base 122 to base 7.                                         ";
"\n *./\|"f=   " Replace each digits with the corresponding character.                    ";
60/~           " Split into chunks of length 60 and dump the resulting array.             ";
               " The stack now contains the rocket's head and a body half.                ";
[_W%[\]_W%]    " Push an array of the body half and the reversed body half, a reversed    ";
               " copy of that array and collect both array into another one.              ";
Nf*Nf+         " Join each array of body halves separating by LFs and append LFs.         ";
ri:I*           " Repeat the resulting array I := int(input()) times.                     ";
I<W%           " Keep the first I bodies and reverse their order.                         ";
\a_@\++        " Prepend and append the rocket head/tail.                                 ";
'+"=*"6*'+N+++ " Push S := '+=*=*=*=*=*=*+\n'.                                            ";
*              " Join the array of parts, separating by S.                                ";

1
คุณควรนับสิ่งนี้เป็นไบต์ไม่ใช่?
Claudiu

8
@Claudiu: และทำลายคะแนนของฉันได้อย่างไร : คำตอบ P มีคะแนนตามความยาวของพวกเขาไบต์โดยค่าเริ่มต้น แต่คำถามแทนที่นี้โดยบอกว่าในฐานะตัวละครน้อยที่สุด
เดนนิส

10

CJam, 121 ไบต์

5,{_5\-S*\)_'/*"**"@'\*N}%:A['+"+
"]"=*"6**:Lri:M{M(:M;2,{M+2%:J;3,{:I'|J@2\-'.*I'.*?_J"/\\""\/"?JI)3I-?*\++_+'|N}%}%L}*A

ลองออนไลน์

รับอินพุตnผ่าน STDIN

ฉันจะเพิ่มคำอธิบายในภายหลัง โดยพื้นฐานแล้วมันเป็นเพียงแค่วงวนในลักษณะที่ไร้เดียงสา การสลับระหว่างสองส่วนของร่างกายที่แตกต่างกันฉันเป็นห่วงซ้อนกันมาเป็นส่วนหนึ่งและห่วงมากกว่าและ0 1จากนั้นฉันเพิ่งเพิ่มตัววนซ้ำด้านนอกและส่วนภายในและใช้พาริตี้ของพวกเขาในการตัดสินใจระหว่างรูปสามเหลี่ยมชี้ขึ้นหรือลง


ฉันได้รับjava.util.NoSuchElementExceptionสำเนา + วางโค้ด (ชี้ไปที่Lri)
Claudiu

@Claudiu คุณป้อนจำนวนเต็มในช่อง "ป้อนข้อมูล" หรือไม่
Martin Ender

โอ้ใช่นั่นจะทำมัน!
Claudiu

5

ทับทิม, 203

n,q=$*[0].to_i,"\\/"
h,r,m=1.upto(5).map{|i|(?/*i+"**"+?\\*i).center 14},?++"=*"*6+?+,3.times.map{|i|?|+?.*i+q*(3-i)+?.*(2*i)+q*(3-i)+?.*i+?|}*"\n"
p=m.reverse.tr q,"/\\"
puts h,([r,m,p,r,p,m]*n)[0,3*n],r,h

Ungolfed

ฉันคิดว่าในกรณีนี้มันมีประโยชน์ที่จะมีเวอร์ชั่นที่ไม่ใช่กอล์ฟ

n      = $*[0].to_i
head   = 1.upto(5).map { |i| ("/"*i + "**" + "\\"*i).center 14 }
ridge  = "+" + "=*"*6 + "+"
middle = 3.times.map { |i| "|" + "."*i + "\\/"*(3-i) + "."*(2*i) + "\\/"*(3-i) + "."*i + "|" }.join "\n"
piddle = middle.reverse.tr "\\/", "/\\"

puts head
puts ([ridge,middle,piddle,ridge,piddle,middle]*n)[0,3*n]
puts ridge, head

คำอธิบาย

ฉันสงสัยว่ามันใกล้จะมีประสิทธิภาพทุกที่ แต่มันก็สนุกดี

  • ARGVการป้อนข้อมูลที่นำมาจาก
  • hมี "หัว" และ "หาง" ของจรวดrมี "สันเขา" ที่แยกส่วนต่าง ๆ ของจรวดและmและpเป็นส่วนบนและด้านล่างของ "ร่างกาย" ของจรวด
  • ร่างกายถูกสร้างขึ้นโดยการขี่จักรยานผ่านArray ["ridge", "top of body", "bottom of body", "ridge", "bottom of body", "top of body"]และรับ3*nองค์ประกอบแรก
  • puts ทำให้แน่ใจว่าทุกอย่างได้รับสายของตัวเอง

3

Python, 120 + 77 + 1 = 198 ตัวอักษร

นี่เป็นวิธีการที่ผิด แต่ฉันก็เสร็จแล้วเมื่อมาร์ตินโพสต์คำตอบของเขา

H,L,T,B=open("R","rb").read().decode('zip').split("X")
n=input()
for p in[H]+([B,T,L,T,B,L]*n)[:3*n][::-1]+[L,H]:print p

ต้องใช้ไฟล์R(+1 สำหรับชื่อไฟล์) ที่ 77 ไบต์ซึ่งคุณสามารถสร้างได้ดังต่อไปนี้:

>>> open('R','wb').write('eJxNjMENwDAIA/+ZIm8i4Qm6Bw+PwvDFQRUFydwJwd5VMOO6ILqIRjE+LsEI4zw2fSKJ6Vzpmt4p\ndVlnRikoVWqrK+8s/X1ivozIJuo=\n'.decode('base64'))

3

JS, WIP, 252b หรือ 173 ตัวอักษร

มันไม่ใช่ฟังก์ชั่นดังนั้นคุณต้องตั้งค่าของ n ที่จุดเริ่มต้น (3 ที่นี่) จากนั้นดำเนินการในคอนโซลหรือใน nodeJS

นี่คือเวอร์ชั่น 252b:

n=3;r=a="     /**01    //**001   ///**0001  ////**00001 /////**00000";b="1+=*=*=*=*=*=*+1";for(c=[d="|0/0/0/0/0/0/|1|.0/0/..0/0/.|1|..0/....0/..|",d.split("").reverse().join("")];n--;)r+=b+c[n%2]+1+c[1-n%2];(r+b+a).replace(/0/g,"\\").replace(/1/g,"\n")

และนี่คือรุ่น 173 ตัวอักษร (ใช้http://xem.github.io/obfuscatweet/ )

n=3;eval(unescape(escape('𬠽𨐽𘠠𘀠𘀠𛰪𚠰𜐠𘀠𘀯𛰪𚠰𜀱𘀠𘀯𛰯𚠪𜀰𜀱𘀠𛰯𛰯𚠪𜀰𜀰𜐠𛰯𛰯𛰪𚠰𜀰𜀰𘠻𨠽𘠱𚰽𚠽𚠽𚠽𚠽𚠽𚠫𜐢𞱦𫱲𚁣👛𩀽𘡼𜀯𜀯𜀯𜀯𜀯𜀯𯀱𯀮𜀯𜀯𛠮𜀯𜀯𛡼𜑼𛠮𜀯𛠮𛠮𜀯𛠮𯀢𛁤𛡳𬁬𪑴𚀢𘠩𛡲𩑶𩑲𬱥𚀩𛡪𫱩𫠨𘠢𚑝𞱮𛐭𞰩𬠫👢𚱣𦱮𙐲𧐫𜐫𨱛𜐭𫠥𜡝𞰨𬠫𨠫𨐩𛡲𩑰𫁡𨱥𚀯𜀯𩰬𘡜𧀢𚐮𬡥𬁬𨑣𩐨𛰱𛱧𛀢𧁮𘠩').replace(/uD./g,'')))

ทดสอบในคอนโซล เจ๋งและ +1 แต่โดยปกติเมื่อ OP ถามหาเอาต์พุตและไม่ใช่ค่าส่งคืนจะมีการร้องขอคำสั่งเอาต์พุต (เช่น console.log หรือการแจ้งเตือน - ฉันไม่รู้ใน nodeJS)
edc65

คุณพูดถูก ... ฉันอนุญาตให้ตัวเองพิจารณาว่าคอนโซลเป็นเอาต์พุต : p (เช่น nodeJS สามารถส่งออกได้เฉพาะบนคอนโซล afaik)
xem

3

JavaScript (E6) 252 257

การใช้สตริงซ้ำมากเกินไป

F=p=>{
  R=(n,s='.',a='')=>a+s.repeat(n)+a;
  for(i=f=o=m=n='';++i<6;)
    o+=f+R(6-i,' ')+R(i,u='/')+'**'+R(i,t='\\'),
    f='\n',
    i<4?m+=f+R(2,R(4-i,t+u,R(i-1)),'|',n+=f+R(2,R(i,u+t,R(3-i)),'|')):0;
  s=f+R(6,'=*','+'),
  console.log(o+s+R(p&1,q=m+n+s)+R(p/2,n+m+s+q)+f+o)
}

มันสนุกเราทั้งสองมี 252B แต่ด้วยวิธีการที่แตกต่างกันอย่างสิ้นเชิง :)
xem

3

Javascript (ES3): 243 219ไบต์

R=function(n){for(a='',i=5;i--;t=a+=s+'\n')for(s='**',j=6;j--;b=['|../\\..|./\\/\\.|/\\/\\/\\','|\\/\\/\\/|.\\/\\/.|..\\/..'])s=i<j?'/'+s+'\\':' '+s+' ';for(;a+='+=*=*=*=*=*=*+\n',n;)a+=(b[n&1]+b[--n&1]).replace(/[^|]+/g,'$&$&|\n');return a+t}

1 SyntaxError: function statement requires a name:, 2: การส่งออกที่ไม่ถูกต้องส่วนของร่างกายจะไม่เท่ากันทั้งหมด (คี่และแตกต่างกัน)
edc65

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