Đây không phải là khoa học tên lửa


59

Viết chương trình hoặc hàm có trong một chuỗi đơn. Bạn có thể giả sử nó chỉ chứa ASCII có thể in được . In hoặc trả lại một chuỗi tên lửa nghệ thuật ASCII như

  |
 /_\
 |E|
 |a|
 |r|
 |t|
 |h|
 |_|
/___\
 VvV

với chuỗi đầu vào được viết từ trên xuống dưới trên thân máy bay. Trong trường hợp này, đầu vào là Earth. Chiều cao của tên lửa (bao gồm cả ngọn lửa) luôn là chiều dài của chuỗi cộng với năm.

Mỗi dòng trong đầu ra có thể có tối đa hai dấu cách và có thể có một dòng mới tùy chọn duy nhất. Mã ngắn nhất tính bằng byte thắng.

Thêm ví dụ:

[empty string]

  |
 /_\
 |_|
/___\
 VvV

a

  |
 /_\
 |a|
 |_|
/___\
 VvV

|0

  |
 /_\
 |||
 |0|
 |_|
/___\
 VvV

\/\

  |
 /_\
 |\|
 |/|
 |\|
 |_|
/___\
 VvV

 _ _ [note trailing space]

  |
 /_\
 | |
 |_|
 | |
 |_|
 | |
 |_|
/___\
 VvV

    [4 spaces]

  |
 /_\
 | |
 | |
 | |
 | |
 |_|
/___\
 VvV

SPACEY

  |
 /_\
 |S|
 |P|
 |A|
 |C|
 |E|
 |Y|
 |_|
/___\
 VvV

Bảng xếp hạng


1
Liên quan . Có thể có những cái khác đủ gần để cái này được coi là một bản dupe.
Peter Taylor

2
@Sefa Không gian có. Không để khoảng trắng khác. Như wiki liên kết chỉ ra.
Sở thích của Calvin

6
D'oh, tôi đã thấy tiêu đề và mong đợi một cái gì đó về phẫu thuật não. :(

17
Và nếu các điểm dưới cùng trên bầu trời bạn sẽ không đi vào không gian ngày hôm nay.
AstroDan

4
"Nó hoạt động trong Chương trình Không gian Kerbal ..."
Bạch tuộc ma thuật Urn

Câu trả lời:


55

VBA Excel, 142 179 175 160 155 byte

Chỉ dẫn:

Đặt bảng tính của Excel trong đó ô A1 là đầu vào và cột C làm đầu ra. Đặt căn chỉnh văn bản trong cột C thành trung tâm . Viết và chạy mã sau trong Cửa sổ ngay lập tức:

[C1]="|":[C2]="/_\":T=[A1]&"_":For i=1To Len(T):Cells(i+2,3)="|"&Mid(T,i,1)&"|":Next:Cells(i+2,3)="/__\":Cells(i+3,3)="VvV":[C:C].HorizontalAlignment=-4108

Mã hóa:

Sub R()
    [C1] = "|"
    [C2] = "/_\"
    T = [A1]&"_"

    For i = 1 To Len(T)
        Cells(i + 2, 3) = "|" & Mid(T, i, 1) & "|"
    Next

    Cells(i + 2, 3) = "/__\"
    Cells(i + 3, 3) = "VvV"
    [C:C].HorizontalAlignment = -4108   'Set the text alignment in column C to center
End Sub

Đầu ra:

nhập mô tả hình ảnh ở đây

Lưu ý: Phông chữ và màu sắc chỉ là một lựa chọn cá nhân.


15 byte được lưu do đề xuất của edc65. Cảm ơn.

5 byte được lưu do đề xuất của TaylorScott. Cảm ơn.


Lưu 15 byte thêm "_"vào T. Như thế này[C1]="|":[C2]="/_\":T=[A1]&" ":For i=1To Len(T):Cells(i+2,3)="|"&Mid(T,i,1)&"|":Next:Cells(i+2,3)="/__\":Cells(i+4,3)="VvV":Columns(3).HorizontalAlignment=-4108
edc65

(ok có lỗi trong mã của tôi và đã quá muộn để chỉnh sửa nó. Nhưng bạn hiểu ý)
edc65

@ edc65 Tôi không có ý tưởng. Mã của bạn giống hệt mã của tôi vậy tôi nên chỉnh sửa gì để tiết kiệm 15 byte?
Anastasiya-Romanova

1
154 Byte:[C:C].HorizontalAlignment=-4108:[C1]="|":[C2]="/_\":T=[A1]&"_":For i=1To Len(T):Cells(i+2,3)="|"&Mid(T,i,1)&"|":Next:Cells(i+2,3)="/__\":Cells(i+3,3)="VvV
Taylor Scott

1
Hoặc bạn có thể giảm xuống còn 151 byte, giữ nguyên khía cạnh trung tâm[C:C].HorizontalAlignment=3:[C1]="|":[C2]="/_\":T=[A1]&"_":For i=1To Len(T):Cells(i+2,3)="|"&Mid(T,i,1)&"|":Next:Cells(i+2,3)="/___\":Cells(i+3,3)="VvV
Taylor Scott

30

Perl 6, 75 byte

"  |\n /_\\".say;" |$_|".say for slurp.chomp.comb;" |_|\n/___\\\n VvV".say;

101
slurp.chomp.comb... Perl thật kỳ lạ.
Mego

14
SLURP !!! CHOMP !!! CHẢI!! Đây là quái vật Perl!
stommestack

Lưu ý rằng bằng cách sử dụng một hàm và phép nối, bạn có thể cắt ra rất nhiều: {[~] " |\n /_\\\n",|(" |$_|\n"for $_.comb)," |_|\n/___\\\n VvV"}65 byte
user0721090601

Nhưng bạn có thể thậm chí còn thấp hơn bằng cách vay mượn từ JS: tio.run/ Kẻ
user0721090601

22

JavaScript (ES6), 54

Nói thẳng

x=>`  |
 /_\\
 |${[...x+'_'].join`|
 |`}|
/___\\
 VvV`

Kiểm tra

f=x=>`  |
 /_\\
 |${[...x+'_'].join`|
 |`}|
/___\\
 VvV`

function update() {
  O.textContent=f(I.value)
}

update()
<input id=I value='hello' oninput='update()'><pre id=O></pre>


16

Trên thực tế, 40 byte

"/___\
 VvV",'_o"|
 |"j'|o" |"+"  |
 /_\

Vâng, những dòng mới được cho là ở đó.

Hãy thử trực tuyến!

Giải trình:

Dòng mới được đại diện bởi \nđể định dạng dễ dàng hơn

"/___\\n VvV",'_o"|\n |"j'|o" |"+"  |\n /_\
"/___\\n VvV"                                create the bottom of the rocket
             ,'_o                            get input, append a "_" (for the last section before the jets)
                 "|\n |"j                    insert "|\n |" between every pair of characters
                         '|o                 append "|"
                            " |"+            prepend " |"
                                 "  |\n /_\  create the nose cone

12
Chương trình của bạn trông khá giống với một tên lửa phát nổ.
corsiKa

15

C, 83 , 82 byte

F(char*c){for(puts("  |\n /_\\");*c;printf(" |%c|\n",*c++));puts(" |_|\n/___\\\n VvV");}

Kiểm tra chính:

int main() {
  F("");
  F("a");
  F("|0");
  F("\\/\\");
  F(" _ _ ");
  F("    ");
  F("SPACEY");
}

7
Tôi đã tìm ra giải pháp C của riêng mình, và hóa ra chính xác là của bạn, nhân vật cho nhân vật. +1 từ tôi.
Cody

Trên điện thoại và quá lười để SSH, vì vậy điều này chưa được kiểm tra, nhưng nên hoạt động. Lưu 2 byte (nếu tôi đếm đúng):F(char*c){for(puts(" |\n /_\\");*c;printf(" |%c|\n",*c++),puts(" |_|\n/___\\\n VvV");}
algmyr

@ achmyr thực sự tiết kiệm một byte, bởi vì lần cuối cùng putschỉ được thực hiện một lần, không phải sau mỗi lần printf. Nhưng có, 1 byte đã lưu, yay!
Stefano Sanfilippo

Đúng. Tôi sẽ đổ lỗi rằng chơi golf khi tôi nên ngủ.
algmyr

Đây không phải là 88 byte?
dạ dày 29/12/17

10

Python 2, 93 66 62 61 byte

Một FGITW. Có lẽ có thể bị đánh golf nặng. Gợi ý chào mừng.

Chỉnh sửa: 27 byte nhờ Mego. 4 byte nhờ TheBikingViking. 1 byte nhờ người dùng3030010.

Dùng thử trực tuyến!

lambda x:r"""  |
 /_\
 |%s|
/___\
 VvV"""%"|\n |".join(x+"_")

9

PHP, 73 72 69 62 byte

  |
 /_\
 |<?=join('|
 |',str_split($argv[1]._))?>|
/___\
 VvV

Lấy chuỗi để in trên thân máy bay làm đối số đầu tiên từ dòng lệnh khi tập lệnh được gọi.

Cải tiến:

  1. Đã lưu một byte bằng cách thay thế \ n bằng một dòng mới thực sự trong đối số đầu tiên của join.
  2. Đã lưu thêm ba byte bằng cách nối thêm cơ sở tên lửa với một dấu gạch dưới duy nhất vào đầu vào
  3. Nhờ Ismael Miguel : Đã lưu thêm 7 byte bằng cách tận dụng thực tế rằng PHP từng là "bộ tiền xử lý siêu văn bản" để bạn có thể xuất ra nhiều văn bản như bạn muốn và bắt đầu mã ở đâu đó ở giữa.

Hãy thử trực tuyến!

Điều này thật thú vị! :-)

Cuộc gọi mẫu:

php rocket.php ""
php rocket.php EARTH
php rocket.php "This is a very long rocket"


Chơi golf tốt Tôi hoàn toàn quên mất khả năng đó. Cảm ơn bạn!
YetiCGN

Không có gì. Ngoài ra, tôi đã lưu 2 byte trên dòng đầu tiên. Bạn đã có thêm 2 dấu cách trên đó. Đó là điều mà tôi không mong muốn tìm thấy, tôi phải nói.
Ismael Miguel

1
Tôi biết, điều đó thực sự ngu ngốc nhưng cũng rất khó phát hiện. Tôi chỉ nhận thấy một khi tôi đã đưa ra 64 byte trên phiên bản cải tiến của bạn và phải tìm hiểu lý do tại sao.
YetiCGN

8

Brainfuck , 179 byte

>-[-[-<]>>+<]>-..[->+>++++<<]>>----.<<++++++++++.>.>>>+[-[--<]>>--]<.[-<+<++>>]<<+.---.<,[<<<.>.>.>.<.>,]<<<.[->>>+<<<]>.>.>>+++.<<.>.>>.<...---.<.<<.>>>------.[-<<<+<+>>>>]<<<.<.

Hãy thử trực tuyến!


@ user00001 Cụm từ này được sử dụng bởi tất cả người Hồi giáo trên toàn thế giới, không chỉ là kẻ khủng bố. Bạn có thực sự nghĩ rằng những kẻ khủng bố đại diện cho tất cả người Hồi giáo?
Leaky Nun


8

Ruby, 57 55 byte

-2 byte bởi @ValueInk
-5 byte bằng cách giả sử rằng không có dòng mới trong đầu vào, như được đề xuất bởi @manatwork. Đầu vào không có dòng mới có thể được cung cấp ví dụ như echo -n, như echo -n hey | ruby rocket.rb.

puts'  |
 /_\
 |'+gets.chars*'|
 |'+'|
 |_|
/___\
 VvV'
Phiên bản cũ, giả sử dòng mới trong đầu vào:

Ruby, 62 60 byte

puts'  |
 /_\
 |'+gets.chop.chars*'|
 |'+'|
 |_|
/___\
 VvV'

Theo nhận xét của chủ sở hữu câu hỏi, đầu vào sẽ không chứa ký tự dòng mới, vì vậy bạn có thể xóa .chop.
manatwork

@manatwork gọn gàng, cảm ơn :)
daniero

Nếu bạn sử dụng chuỗi trích dẫn đơn, bạn sẽ có thể thay thế cả chuỗi của bạn \\ bằng \ . (Trong các chuỗi được trích dẫn duy nhất, các ký tự không được thoát, ngoại trừ \'.
Ink Ink

7

Haskell, 58 byte

f s="  |\n /_\\\n |"++((:"|\n |")=<<s)++"_|\n/___\\\n VvV"

7

Võng mạc , 44 37 byte

7 byte nhờ Martin Ender.

$
_
.
¶ |$0|
$
¶/___\¶ VvV
^
  |¶ /_\

Hãy thử trực tuyến!


để lại một khoảng trống trên một hàng ở phía dưới :( cho "Không gian, biên giới cuối cùng."
xQbert

@xQbert Làm việc cho tôi, bạn có thể đính kèm một liên kết TIO không?
Nữ tu bị rò rỉ

Thật kỳ lạ, nó hoạt động tốt với tôi bây giờ ... ah lỗi của tôi đã có một dòng mới ở cuối.
xQbert

Retina là ngôn ngữ duy nhất tôi biết mà việc thêm một dòng mới có thể thay đổi hoàn toàn chương trình.
caird coinheringaahing

6

Thạch , 37 36 byte

;”_⁾ |;ЀŒB;“/___\“ VvV”“  |“ /_\”;Y

Cùng điểm số với mục hiện có, nhưng sử dụng một tính năng mới thú vị - ŒB, phiên bản véc tơ của ŒḄ, được gọi là độ nảy. Bouncing đang chạy qua một danh sách đến cuối của nó và sau đó trở lại, x[:-1]+x[::-1]ví dụ : bounce("codegolf") == "codegolflogedoc".

-1 byte nhờ Dennis (sử dụng phiên bản nảy của vectơ)

Làm sao?

;”_⁾ |;ЀŒB;“/___\“ VvV”“  |“ /_\”;Y - argument: a string, S
                        “  |“ /_\”   - the top of the rocket ["  |", " /_\"] 
;”_                                  - concatenate to make S=S+"_"
   ⁾ |;                              - concatenate to make c=" |"+c
       Ѐ                            - map over right argument i.e. for c in S
         ŒB                          - bounce! With vectorisation c[:-1]+c[::-1]
                                       e.g. " |B" -> " |B| "
           ;                         - concatenate with
            “/___\“ VvV”             - the bottom of the rocket ["/___\", " VvV"]
                                  ;  - concatenate the top with everything else
                                   Y - join with line feeds

Kiểm tra nó trên TryItOnline


2
ŒBlà chữ viết tắt ŒḄ€.
Dennis


5

V , 41, 39 byte

ys$_òlé
òÎá|I |
Hr/$r\YO  |GpX2á_o VvV

Hãy thử trực tuyến!

Lưu ý rằng vì một số lý do, trình thông dịch trực tuyến đã tạo ra kết quả không mong muốn, vì vậy tôi đã đẩy một phiên bản gỡ lỗi sang trình thông dịch trực tuyến chạy chậm hơn rất nhiều. Nó sẽ tạo ra kết quả chính xác ngay bây giờ.

Vì chương trình này chứa các ký tự không thể in được, đây là một hexdump:

0000000: 7973 245f f26c e90a f2ce e17c 4920 7c0a  ys$_.l.....|I |.
0000010: 4872 2f24 725c 594f 2020 7c1b 4770 5832  Hr/$r\YO  |.GpX2
0000020: e15f 6f20 5676 56                        ._o VvV

Đẹp nhưng nó không xử lý các không gian trong "Không gian, biên giới cuối cùng" hoàn toàn đúng.
xQbert

5

R, 163 byte

v=c();l="\n";for(i in 1:nchar(a<-scan(,"")))v=c(v,paste0(" |",strsplit(a,"")[[1]][i],"|",l,collapse=""));cat("  |",l," /_\\",l,v," |_|",l,"/___\\",l," VvV",sep="")

Ung dung:

v=c()     #Empty vector
l="\n"    #Line break

for(i in 1:nchar(a<-scan(,"")))                  #For the number of character of the input
    v=c(v, paste0(" |",strsplit(a,"")[[1]][i],"|","\n",collapse=""))
    #This part cut the input into its letters, paste each letter between `|`'s, 
    #and a line break

cat("  |",l," /_\\",l,v," |_|",l,"/___\\",l," VvV",sep="") #Puts everything in the STDOUT,
                                                           #with spaces where needed

Tôi không thực sự thích việc tôi phải đặt một số khoảng trống ở dòng cuối cùng, nhưng này!


5

PowerShell v2 +, 59 55 51 byte

"  |
 /_\"
$args|% t*y|%{" |$_|"}
" |_|
/___\
 VvV"

Hãy thử trực tuyến!

Lạm dụng mặc định Write-Outputkhi kết thúc thực thi để dán một dòng mới giữa mỗi phần tử, vì đây đều là các chuỗi ký tự trên đường ống. Bit "khó khăn" duy nhất là một vòng lặp thông qua mỗi phần tử của đầu vào $argsdưới dạng một mảng char để lấy phần thân của tên lửa.

Sử dụng các dòng mới theo nghĩa đen như được ConnorLSW chỉ ra để lưu một số byte.
-4 byte nhiều hơn nhờ Veskah.


bạn có thể đặt các dòng mới thực sự trong chuỗi để lưu 3, shell và ise thực thi tốt mà không cần\r
colsw


4

PowerShell, 70 byte

"  |`n /_\`n$(([char[]]$a|%{" |$_|"})-join("`n"))`n |_|`n/___\`n VvV 

Đặt $ a thành đầu vào.

Nếu nó phải nhận đầu vào khác với một biến, nó có thể được dẫn vào:

"Hello World"|%{"  |`n /_\`n$(([char[]]$_|%{" |$_|"})-join("`n"))`n |_|`n/___\`n VvV "}

Thí dụ:

  |
 /_\
 |H|
 |e|
 |l|
 |l|
 |o|
 | |
 |W|
 |o|
 |r|
 |l|
 |d|
 |_|
/___\
 VvV 

4

Toán học, 50 byte

"  |
 /_\\
 |"<>(#<>"|
 |"&/@#)<>"_|
/___\\
 VvV"&

Chức năng ẩn danh. Lấy danh sách các ký tự làm đầu vào và trả về một chuỗi làm đầu ra.


4

PHP, 108 100 88 byte

-8 byte nhờ mèo kinh doanh

-12 byte nhờ YetiCGN

echo'  | 
 /_\\
';foreach(str_split($argv[1])as$c){echo" |$c|
";}echo' |_|
/___\\
 VvV';

khá đơn giản

Ý tưởng


1
Bạn có thể tiết kiệm rất nhiều byte bằng cách sử dụng foreach(str_split($a)as$c)thay vì vòng lặp khác. Ngoài ra, bạn có thể đặt $ c trực tiếp vào chuỗi nếu bạn sử dụng dấu ngoặc kép:echo" |$c| ....";
Business Cat

@BusinessCat Đúng, cảm ơn các trích dẫn kép không hoạt động với kiểu suy nghĩ do các dấu ngoặc không được giải thích
Sefa

Còn biểu hiện chính quy thì sao? function f($a){echo' |.␤ /_\\␤',preg_replace('/./',' |$0|␤',$a),' |_|␤/___\\␤ VvV';}
manatwork

1
Tại sao thậm chí đặt một chức năng xung quanh nó? Thay thế $abằng $argv[1]và chạy từ dòng lệnh làm cho nó ngắn hơn nhiều.
YetiCGN

@manatwork Đây có thể là một sự thay thế hợp lệ, nhưng vì tôi không hiểu nó và nó không cùng tinh thần với tôi, tôi sẽ cho phép bạn đăng nó.
Sefa

4

C #, 106 97 80 74 byte

s=>$@"  |
 /_\
 |{string.Join("|\n |",s.ToCharArray())}|
 |_|
/___\
 VvV";

Tôi không có C # 6 để thử những điều trên nhưng tôi tin rằng nó sẽ hoạt động

Đã lưu 7 byte nhờ Kevin Cruijssen

Cảm ơn manatwork đã chỉ cho tôi đi đúng hướng để tiết kiệm 17 byte

Đã lưu 6 byte nhờ sữa


+1. Btw, dấu trắng khoảng trắng là tùy chọn, vì vậy bạn có thể thay đổi nó thành: using System.Linq;s=>$(" |\n /_\\\n{string.Join("",s.Select(c=>" |"+c+"|\n"))} |_|\n/___\\\n VvV");( 100 byte )
Kevin Cruijssen

1
@KevinCruijssen Tôi đang trong quá trình cập nhật thông tin này sau khi nhận xét của bạn về câu trả lời trước của tôi :) Cảm ơn sự giúp đỡ
TheLethalCoder

Bạn có thể lưu một số ký tự bằng cách sử dụng một chuỗi ký tự duy nhất bên trong Select: " |"+c+"|\n"c+"|\n |"cùng với việc di chuyển `|` từ sau {}trước nó.
manatwork

@manatwork Tôi dường như không thể làm cho nó hoạt động
TheLethalCoder

1
Dòng mới là 1 byte so với \n2 byte. Vì vậy, bạn sẽ tiết kiệm thêm 5 byte bằng cách thay thế chúng bằng các dòng mới. Có, nếu bạn đang sử dụng Visual Studio thì theo mặc định, các dòng mới sẽ là 2 byte, nhưng bạn có thể mở tệp nguồn trong trình soạn thảo hex (Visual Studio có một) và xóa các ký tự trả về vận chuyển. Đầu ra vẫn sẽ giống nhau.
sữa

4

C,  131  , 121 byte

#define P printf
main(){char s[99],*p=s;gets(s);P("  |\n /_\\\n");while(*p)P(" |%c|\n",*p++);P(" |_|\n/___\\\n VvV\n");}

Bạn có thể xóa ba ký tự bằng cách di chuyển p=svào phần khởi tạo và sử dụng pbên trong scanf:main(){char s[99],*p=s;scanf("%s",p);P(" |\n /_\\\n");while(*p)P(" |%c|\n",*p++);P(" |_|\n/___\\\n VvV\n");}
Quentin

ok .... tôi không biết tại sao "scanf ("% s ", & s)" thay vì "scanf ("% s ", s)" ở cuối kết quả chính xác ... cuối cùng vì scanf không được không gian tôi thích sự nguy hiểm hơn () ...
RosLuP

2
Xin đừng phá hoại bài viết của bạn. Cảm ơn bạn!
NobodyNada

3

Thạch, 38 37 byte

;”_“|“|¶”jЀ“  |¶“/_\¶”;K;“/___\¶ VvV

Hãy thử trực tuyến!

Ý tưởng tương tự như với câu trả lời Pyth của tôi, nhưng điều này có thể có thể được đánh gôn.


3

05AB1E , 50 47 43 37 byte

I'_J"  |
 /_\"svy" |ÿ|"}"/___\
 VvV"»

Hãy thử trực tuyến!

Đã lưu 9 byte nhờ Adnan.


Chuỗi cũng có thể chấp nhận các dòng mới trong 05AB1E: p, như thế này .
Ad Nam

@Ad Nam Đẹp, cảm ơn! Bất kỳ ý tưởng làm thế nào để có được tốt hơn xung quanh đầu vào trống?
Emigna

Tôi đã suy nghĩ về một cách tiếp cận IðJkhi bắt đầu chương trình, trong đó cũng bao gồm cơ sở của thân máy bay.
Ad Nam

@Ad Nam Ý tưởng tuyệt vời. Tôi đã thử điều đó với «sớm hơn mà không gặp nhiều may mắn. Điều này là tốt hơn nhiều mặc dù.
Emigna

Loại bỏ Uvà thay thế Xbằng scũng tiết kiệm một byte :).
Ad Nam

3

Kotlin, 68 byte

{"""  |
 /_\${it.replace(Regex("."),"\n |\$0|")}
 |_|
/___\
 VvV"""}

Khá đơn giản. Sử dụng chuỗi multiline và thay thế regex. Đây là một lambda với (String)->Stringloại. Kiểm tra:

fun main(args: Array<String>) {
    val function : (String)->String = {"""  |
 /_\${it.replace(Regex("."),"\n |\$0|")}
 |_|
/___\
 VvV"""}
    println(function(" _ _ "))
}

3

Gema, 50 ký tự

\A=  |\n\ /_\\\n
?=\ |?|\n
\Z=\ |_|\n/___\\\n\ VvV

Chạy mẫu:

bash-4.3$ echo -n gema | gema '\A=  |\n\ /_\\\n;?=\ |?|\n;\Z=\ |_|\n/___\\\n\ VvV'
  |
 /_\
 |g|
 |e|
 |m|
 |a|
 |_|
/___\
 VvV

3
Tôi nghĩ rằng bạn đang thiếu `| _ |` trước cơ sở của tên lửa
TheLethalCoder

Ôi. Câm nhớ. Cảm ơn bạn @TheLethalCoder.
manatwork

1
+1 để giới thiệu cho tôi một ngôn ngữ mới (với tôi) (không chơi gôn).
Jordan

3

BASH 84 70

Cứu 14 nhờ manatwork

(cat&&echo _)|sed 's~.~ |&|\n~g;1s~^~  |\n /_\\\n~;$s~$~/___\\\n VvV~'

Hơn một nửa số byte là để thêm mũi và động cơ.


Tại sao grep? (cat&&echo _)|sed 's~.~ |&|\n~g;1s~^~ |\n /_\\\n~;$s~$~/___\\\n VvV~'. Trên thực tế tôi thấy không có lý do để sử dụng catechomột trong hai. Sẽ được chuyển đổi ngắn hơn thành sedgiải pháp tinh khiết .
manatwork

Với sed nguyên chất, bạn không nhận được bất kỳ đầu ra nào nếu bạn không có đầu vào
Riley

Doh. Bạn đúng rồi. Xin lỗi, tôi quên một phần của yêu cầu.
manatwork 26/8/2016

@manatwork Tôi cũng quên nó trong lần thử đầu tiên.
Riley

Để tham khảo trong tương lai, tránh sử dụng thẻ <pre> <code>. Sử dụng 4 khoảng trắng trước mã trong tương lai, vì điều này tự động thoát định dạng Markdown. Tôi đã duy trì định dạng hiện tại do gạch ngang, nhưng bạn chỉ có thể để nó trong lịch sử chỉnh sửa cũng như cho những người tò mò nhìn vào nó.
Addison Crump

3

GolfScript, 61 51 byte

Golf mã đầu tiên của tôi, tôi hy vọng nó là đủ tốt.

"  |
 /_\\
"\1/.,{" |"\(\"|
"\}\*" |_|
/___\\
 VvV"

Giải trình

"  |\n /_\\\n"   # Push the rocket's head
\                # Swap the head with the user's string
1/               # The string is converted into an array
.,               # Push array length
{" |"\           # Push the rocket's body and swap
(\               # Array's first element cut out
"|\n"\           # Push rocket's body and swap
}\*              # Repeat for array length times
" |_|\n/___\\\n VvV" # Push rocket's bottom

Hãy thử trực tuyến!


3

Vim, 41 39 byte

Đây <End>đúng là phím "Kết thúc".

i <End>_:s/./ |&|\r/g
/___\
 VvVggxo /_\

Không thể in được như vậy:

i <End>_^O:s/./ |&|\r/g
/___\
 VvV^[ggxo /_\^[

3

GNU sed , 54 49 48 byte

Đây là câu trả lời đầu tiên của tôi cho một thách thức trên trang web này. Giải pháp rất đơn giản, chủ yếu là in ấn, vì vậy tôi đã dành thời gian để đảm bảo rằng nó không thể bị đánh gôn nữa.

s:.:\n |&|:g
s::  |& /_\\&:
a\ |_|\n/___\\\n VvV

Hãy thử trực tuyến!

Nhanh chóng chuyển tiếp nửa năm sau, tôi viết lại kịch bản, sử dụng một mẹo nhỏ để đo lường tốt và rút ngắn nó xuống còn 1 byte. Bây giờ đó là sự tiến bộ!

Giải thích: không gian mẫu ở mỗi bước được đề cập cho rõ ràng, được đưa ra ví dụ đầu vào "GO"

s:.:\n |&|:g
   # turn each input char into a section of the rocket (\n |G|\n |O|)
s::  |& /_\\&:
   # 's::' is a trick; the search part is actually the one from the previous 's'
   #command, i.e. a char. Only the first char, '\n', the modifier 'g' is not
   #inherited. The replace part is the head of the rocket. (  |\n /_\\n |G|\n |O|)
a\ |_|\n/___\\\n VvV
   # append the tail of the rocket, plus implicit printing at the end

  |
 /_\
 |G|
 |O|
 |_|
/___\
 VvV

3

Lua, 83 , 92 byte

function f(x)return' |\n /_\\\n'..x:gsub('(.)',' |%1|\n')..' |_|\n/___\\\n VvV'end

print('  |\n /_\\\n'..(arg[1] and arg[1]:gsub('(.)',' |%1|\n') or '')..' |_|\n/___\\\n VvV')

Nếu tôi thêm không có đầu vào cho câu trả lời của bạn. Nó không hoạt động.
nolan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.