To nie jest nauka o rakietach


59

Napisz program lub funkcję, która pobiera łańcuch jednowierszowy. Możesz założyć, że zawiera on tylko ASCII do wydruku . Wydrukuj lub zwróć ciąg rakiety artystycznej ASCII, takiej jak

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

z ciągiem wejściowym zapisanym od góry do dołu na kadłubie. W tym przypadku dane wejściowe były Earth. Wysokość rakiety (łącznie z płomieniami) to zawsze długość sznurka plus pięć.

Każda linia w danych wyjściowych może zawierać do dwóch końcowych spacji i może istnieć jedna opcjonalna końcowa nowa linia. Najkrótszy kod w bajtach wygrywa.

Więcej przykładów:

[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

Tabela liderów


1
Związane . Mogą istnieć inne, które są na tyle blisko, że liczy się to jako duplikat.
Peter Taylor

2
@Sefa Spaces tak. Nie dla innych białych znaków. Jak wskazuje połączone wiki .
Calvin's Hobbies

6
Nie, widziałem tytuł i spodziewałem się czegoś o operacji mózgu. :(

17
A jeśli dolne punkty na niebie nie będą dzisiaj w kosmosie.
AstroDan,

4
„Działało w programie kosmicznym Kerbal ...”
Magic Octopus Urn

Odpowiedzi:


55

Excel VBA, 142 179 175 160 155 bajtów

Instrukcja:

Ustaw arkusz roboczy programu Excel, w którym komórka A1 jest wprowadzana, a kolumna C jako dane wyjściowe. Ustaw wyrównanie tekstu w kolumnie C, aby wyśrodkować . Napisz i uruchom następujący kod w oknie natychmiastowym:

[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

Ungolfed kod:

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

Wynik:

wprowadź opis zdjęcia tutaj

Uwaga: czcionka i kolor to tylko osobisty wybór.


15 bajtów zapisanych dzięki sugestii edc65. Dzięki.

5 bajtów zapisanych dzięki sugestii TaylorScott. Dzięki.


Zaoszczędź 15 bajtów dodając "_"do T. W ten sposób[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, w moim kodzie jest błąd i jest za późno, aby go edytować. Ale masz pomysł)
edc65

@ edc65 Nie mam pomysłu. Twój kod jest dokładnie taki sam jak mój, więc co powinienem edytować, aby zaoszczędzić 15 bajtów?
Anastasiya-Romanova 秀

1
154 bajtów:[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
Możesz też sprowadzić go do 151 bajtów, zachowując aspekt centrowania[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 bajtów

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

101
slurp.chomp.comb... Perl jest dziwny.
Mego

14
SLURP !!! CHOMP !!! GRZEBIEŃ!! Nadchodzi potwór Perl!
stommestack

Zauważ, że używając funkcji i konkatacji możesz dużo wyciąć: {[~] " |\n /_\\\n",|(" |$_|\n"for $_.comb)," |_|\n/___\\\n VvV"}65 bajtów
user0721090601

Ale możesz pójść jeszcze niżej, pożyczając od JS: tio.run/…
user0721090601

22

JavaScript (ES6), 54

Bezpośredni

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

Test

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

Właściwie 40 bajtów

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

Tak, te nowe linie powinny tam być.

Wypróbuj online!

Wyjaśnienie:

Nowe linie są reprezentowane przez \ndla łatwiejszego formatowania

"/___\\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
Twój program jest przygnębiająco podobny do wybuchu rakiety.
corsiKa

15

C, 83 , 82 bajtów

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

Test główny:

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

7
Opracowałem własne rozwiązanie C i okazało się, że jest dokładnie twoje, charakter dla postaci. +1 ode mnie
Cody

Na telefon i zbyt leniwy wobec SSH, więc jest to niesprawdzone, ale powinno działać. Zapisuje 2 bajty (jeśli poprawnie policzyłem):F(char*c){for(puts(" |\n /_\\");*c;printf(" |%c|\n",*c++),puts(" |_|\n/___\\\n VvV");}
algmyr

@algmyr faktycznie zapisuje jeden bajt, ponieważ ostatni putsmusi być wykonany tylko raz, a nie po każdym printf. Ale tak, zapisano 1 bajt, tak!
Stefano Sanfilippo

Dobrze. Będę winić to za grę w golfa, kiedy powinienem spać.
algmyr

Czy to nie 88 bajtów?
gastropner

10

Python 2, 93 66 62 61 bajtów

A FGITW. Prawdopodobnie może być mocno golfa. Sugestie mile widziane.

Edycja: 27 bajtów dzięki Mego. 4 bajty dzięki TheBikingViking. 1 bajt dzięki użytkownikowi3030010.

Wypróbuj online!

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

9

PHP, 73 72 69 62 bajtów

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

Pobiera ciąg do wydrukowania na kadłubie jako pierwszy argument z wiersza poleceń, gdy skrypt jest wywoływany.

Ulepszenia:

  1. Zapisano bajt, zastępując \ n prawdziwą nową linią LF w pierwszym argumencie join.
  2. Zaoszczędzono jeszcze trzy bajty, dodając podstawę rakiety z jednym podkreśleniem do wejścia
  3. Dzięki Ismael Miguel : Oszczędź 7 dodatkowych bajtów, wykorzystując fakt, że PHP było kiedyś „preprocesorem hipertekstu”, dzięki czemu możesz wypisać tyle tekstu, ile chcesz i uruchomić kod gdzieś pośrodku.

Wypróbuj online!

To była zabawa! :-)

Przykładowe połączenia:

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


Miłej gry w golfa! Zupełnie zapomniałem o tej możliwości. Dziękuję Ci!
YetiCGN

Nie ma za co. Ponadto zapisałem 2 bajty w pierwszym wierszu. Miałeś na nim 2 dodatkowe spacje końcowe. Muszę powiedzieć, że tego się nie spodziewałem.
Ismael Miguel

1
Wiem, to było naprawdę głupie, ale też bardzo trudne do wykrycia. Zauważyłem tylko raz, gdy wymyśliłem 64 bajty twojej ulepszonej wersji i musiałem dowiedzieć się, dlaczego.
YetiCGN

8

pieprzenie mózgu , 179 bajtów

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

Wypróbuj online!


@ user00001 To zdanie jest używane przez wszystkich muzułmanów na całym świecie, nie tylko przez terrorystów. Czy naprawdę sądzisz, że terroryści reprezentują wszystkich muzułmanów?
Leaky Nun


8

Rubin, 57 55 bajtów

-2 bajty według @ValueInk
-5 bajtów, zakładając, że na wejściu nie ma nowej linii, jak sugeruje @manatwork. Wprowadzanie bez wiersza nowego może być dostarczone na przykład za pomocą echo -n, jak echo -n hey | ruby rocket.rb.

puts'  |
 /_\
 |'+gets.chars*'|
 |'+'|
 |_|
/___\
 VvV'
Stara wersja zakłada nowy wiersz w danych wejściowych:

Rubin, 62 60 bajtów

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

Zgodnie z komentarzem właściciela pytania dane wejściowe nie będą zawierały znaku nowej linii, więc można je usunąć .chop.
manatwork

@manatwork schludnie, dzięki :)
daniero

W przypadku użycia pojedynczych strun środki, powinieneś być w stanie zastąpić Zarówno \\ z \ . (Pojedynczymi cudzysłowami, znaki nie są uciekł, z wyjątkiem \'.
Value Ink

7

Haskell, 58 bajtów

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

7

Retina , 44 37 bajtów

7 bajtów dzięki Martinowi Enderowi.

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

Wypróbuj online!


pozostawia odstęp w wierszu na dole :( dla „Space, the
endier border

@xQbert Działa dla mnie, czy możesz dołączyć link TIO?
Leaky Nun

dziwne, to działa teraz dla mnie dobrze ... ah mój błąd miał nową linię na końcu.
xQbert

Retina to jedyny język, jaki znam, który dodając końcowy znak nowej linii może całkowicie zmienić program.
caird coinheringaahing

6

Galaretka , 37 36 bajtów

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

Taki sam wynik jak istniejący wpis, ale wykorzystuje zabawną nową funkcję - ŒBwektoryzowaną wersję ŒḄ, znaną jako bounce. Odbijanie przebiega przez listę do końca, a następnie z powrotem x[:-1]+x[::-1]np .:bounce("codegolf") == "codegolflogedoc" .

-1 bajt dzięki Dennisowi (użyj wektoryzowanej wersji bounce)

W jaki sposób?

;”_⁾ |;ЀŒ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

Przetestuj na TryItOnline


2
ŒBjest skrótem od ŒḄ€.
Dennis


5

V , 41, 39 bajtów

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

Wypróbuj online!

Zauważ, że z jakiegoś powodu tłumacz online generował nieoczekiwane wyniki, więc wypuściłem wersję debugującą do tłumacza online, który działa znacznie wolniej. Powinien teraz dawać prawidłowe wyniki.

Ponieważ ten program zawiera znaki niedrukowalne, oto zrzut heksowy:

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

Fajnie, ale nie obsługuje spacji w „Space, the endier border” całkiem dobrze.
xQbert

5

R, 163 bajty

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

Nie golfowany:

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

Nie podoba mi się fakt, że musiałem wstawić spacje w ostatnim wierszu, ale hej!


5

PowerShell v2 +, 59 55 51 bajtów

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

Wypróbuj online!

Nadużywa wartości domyślnej Write-Outputna końcu wykonywania, aby wstawić nowy wiersz między każdym elementem, ponieważ wszystkie są po prostu dosłownymi ciągami w potoku. Jedynym „trudnym” bitem jest pętla przechodząca przez każdy element wejścia $argsjako tablica znaków, aby uzyskać korpus rakiety.

Wykorzystuje dosłowne znaki nowej linii, jak wskazał ConnorLSW, aby zapisać niektóre bajty.
-4 dodatkowe bajty dzięki Veskah.


możesz wstawić rzeczywiste znaki nowego wiersza, aby zapisać 3, powłoka i ise działają poprawnie bez\r
colsw


4

PowerShell, 70 bajtów

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

Ustaw $ a na wejście.

Jeśli musi pobierać dane wejściowe inne niż zmienna, może zostać wpuszczone:

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

Przykład:

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

4

Mathematica, 50 bajtów

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

Funkcja anonimowa. Pobiera listę znaków jako dane wejściowe i zwraca ciąg znaków jako dane wyjściowe.


4

PHP, 108 100 88 bajtów

-8 bajtów dzięki business cat

-12 bajtów dzięki YetiCGN

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

całkiem proste

Ideone


1
Możesz zapisać wiele bajtów, używając foreach(str_split($a)as$c)zamiast drugiej pętli for. Możesz również umieścić $ c bezpośrednio w ciągu, jeśli użyjesz podwójnych cudzysłowów:echo" |$c| ....";
Business Cat

@BusinessCat To prawda, że ​​dzięki podwójnym cudzysłowom nie działał w myśleniu o stylu tablicy z powodu braku interpretacji nawiasów
Sefa

Co z wyrażeniem regularnym? function f($a){echo' |.␤ /_\\␤',preg_replace('/./',' |$0|␤',$a),' |_|␤/___\\␤ VvV';}
manatwork

1
Po co w ogóle otaczać tę funkcję? Wymiana $az $argv[1]i działa z linii poleceń sprawia, że znacznie krótszy.
YetiCGN

@manatwork Prawdopodobnie jest to ważna alternatywa, ale ponieważ jej nie rozumiem i nie jest ona w tym samym duchu co moja, pozwolę ci ją opublikować.
Sefa

4

C #, 106 97 80 74 bajty

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

Nie mam C # 6, aby wypróbować powyższe, ale wierzę, że to zadziała

Zaoszczędzono 7 bajtów dzięki Kevinowi Cruijssenowi

Dzięki manatwork za skierowanie mnie we właściwym kierunku, aby zaoszczędzić 17 bajtów

Zaoszczędzono 6 bajtów dzięki mleku


+1. Btw, końcowe białe znaki są opcjonalne, więc możesz je zmienić na: using System.Linq;s=>$(" |\n /_\\\n{string.Join("",s.Select(c=>" |"+c+"|\n"))} |_|\n/___\\\n VvV");( 100 bajtów )
Kevin Cruijssen

1
@KevinCruijssen Właśnie aktualizowałem to po komentarzach do mojej poprzedniej odpowiedzi :) Dziękuję za pomoc
TheLethalCoder

Możesz zapisać niektóre znaki, korzystając z jednego dosłownego ciągu literowego wewnątrz Select: " |"+c+"|\n"c+"|\n |"wraz z przenoszeniem `|` {}przed nim.
manatwork

@manatwork Nie mogę tego zmusić
TheLethalCoder

1
Nowa linia ma 1 bajt w porównaniu do \n2 bajtów. Więc zaoszczędzisz 5 dodatkowych bajtów, zastępując je nowymi liniami. Tak, jeśli używasz programu Visual Studio, domyślnie nowe wiersze będą miały 2 bajty, ale możesz otworzyć plik źródłowy w edytorze szesnastkowym (Visual Studio ma jeden) i usunąć znaki powrotu karetki. Wynik będzie nadal taki sam.
mleko

4

C,  131  , 121 bajtów

#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");}

Możesz usunąć trzy postacie, przechodząc p=sdo inicjalizacji i używając w pśrodku 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 .... nie wiem, dlaczego "scanf ("% s ", & s)" zamiast "scanf ("% s ", s)" drukuje na końcu poprawny wynik ... na końcu, ponieważ scanf nie dostaje spacje, które wolę, aby niebezpieczeństwo () ...
RosLuP

2
Nie niszcz swoich postów. Dziękuję Ci!
NobodyNada,

3

Galaretka, 38 37 bajtów

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

Wypróbuj online!

Taki sam pomysł, jak w przypadku mojej odpowiedzi w języku Pyth, ale prawdopodobnie można to pograć w golfa.


3

05AB1E , 50 47 43 37 bajtów

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

Wypróbuj online!

Zaoszczędzono 9 bajtów dzięki Adnan.


Ciąg może także akceptować znaki nowego wiersza w 05AB1E: p, w ten sposób .
Adnan

@Adnan Nice, dzięki! Masz pomysł, jak lepiej ominąć puste wejście?
Emigna

Myślałem o podejściu IðJna początku programu, które obejmuje również podstawę kadłuba.
Adnan

@Adnan Świetny pomysł. Próbowałem tego «wcześniej bez większego szczęścia. Jest to jednak znacznie lepsze.
Emigna

Wyjmowanie Ui wymiana Xz soszczędza bajt :).
Adnan

3

Kotlin, 68 bajtów

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

Całkiem proste. Używa ciągu wieloliniowego i zastępuje wyrażenie regularne. To jest lambda z (String)->Stringtypem. Test:

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

3

Gema, 50 znaków

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

Przykładowy przebieg:

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

3
Chyba brakuje ci `| _ |` przed bazą rakiety
TheLethalCoder

Ojej. Głupia panna. Dziękuję @TheLethalCoder.
manatwork

1
+1 za wprowadzenie mnie w nowy (dla mnie) (nie golfowy) język.
Jordan,

3

BASH 84 70

Oszczędność 14 dzięki manatwork

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

Ponad połowa bajtów służy do dodania nosa i silnika.


Dlaczego grep? (cat&&echo _)|sed 's~.~ |&|\n~g;1s~^~ |\n /_\\\n~;$s~$~/___\\\n VvV~'. Właściwie nie widzę powodu do używania cati echoobaj. Byłoby krócej przekształcone w czyste sedrozwiązanie.
manatwork

Z czystym sedem nie otrzymasz żadnych wyników, jeśli nie masz danych wejściowych
Riley

Doh Masz rację. Przepraszam, zapomniałem o tej części wymagań.
manatwork

@manatwork Zapomniałem o tym za pierwszym razem.
Riley

Do wykorzystania w przyszłości, unikaj używania znaczników <pre> <code>. W przyszłości użyj 4 spacji poprzedzających kod, ponieważ to automatyczne unikanie formatowania Markdown. Zachowałem bieżące formatowanie ze względu na przekreślenie, ale możesz po prostu zostawić to w historii edycji, aby osoby zainteresowane mogły go obejrzeć.
Addison Crump

3

GolfScript, 61 51 bajtów

Mój pierwszy golf golfowy, mam nadzieję, że jest wystarczająco dobry.

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

Wyjaśnienie

"  |\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

Wypróbuj online!


3

Vim, 41 39 bajtów

Tutaj <End>jest dosłownie klawisz „End”.

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

Nie można drukować, więc:

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

3

GNU sed , 54 49 48 bajtów

To była moja pierwsza odpowiedź na wyzwanie na tej stronie. Rozwiązanie jest proste, głównie drukowanie, więc spędziłem trochę czasu, upewniając się, że nie można go już grać w golfa.

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

Wypróbuj online!

Pół roku później szybko przepisałem skrypt, dla pewności wykorzystałem sztuczkę i grałem w golfa o 1 bajt krócej. To jest postęp!

Objaśnienie: przestrzeń wzoru na każdym kroku jest wymieniona dla jasności, biorąc pod uwagę przykład wejściowy „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 bajty

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

Jeśli nie dodam żadnych danych wejściowych do twojej odpowiedzi. To nie działa.
nolan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.