これはロケット科学ではありません


59

単一行の文字列を取り込むプログラムまたは関数を作成します。印刷可能なASCIIのみが含まれていると想定できます。次のようなASCIIアートロケットの文字列を印刷または返す

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

入力文字列は胴体の上から下に書かれています。この場合、入力はでしたEarth。ロケットの高さ(炎を含む)は、常にストリングの長さ+ 5です。

出力の各行には、最大2つの末尾スペースがあり、オプションの末尾改行が1つある場合があります。バイト単位の最短コードが優先されます。

その他の例:

[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

リーダーボード


1
関連。これがだまされたと見なされるほど近い他の人がいる可能性があります。
ピーターテイラー

2
@Sefa Spacesはい。他の空白にはありません。リンクWikiは示しています。
カルビンの趣味

6
D'oh、タイトルを見て、脳外科手術について何かを期待していました。:(

17
そして、底が空を指しているなら、あなたは今日宇宙に行かないでしょう。
AstroDan

4
「それはケルバル宇宙計画で働いた...」
マジックタコ

回答:


55

エクセルVBA、142の 179 175 160 155バイト

命令:

セルA1が入力で、列Cが出力であるExcelのワークシートを設定します。列Cのテキストの配置をcenterに設定します。イミディエイトウィンドウで次のコードを記述して実行します。

[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

コードのゴルフを解きました:

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

出力:

ここに画像の説明を入力してください

注:フォントと色は個人的な選択です。


edc65の提案により15バイトが節約されました。ありがとう。

TaylorScottの提案により5バイト節約されました。ありがとう。


"_"Tに追加する15バイトを保存します。このように[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

わかり

@ edc65わかりません。あなたのコードは私のものとまったく同じなので、15バイトを節約するために何を編集する必要がありますか?
アナスタシアロマノバ秀

1
154バイト:[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
テイラースコット

1
それとも、中心側面に保ち、151バイトにそれを得ることができる[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
テイラー・スコット

30

Perl 6、75バイト

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

101
slurp.chomp.comb... Perlは奇妙です。
メゴ

14
うるさい!!! チョップ!!! 櫛!!Perlモンスターが登場!
stommestack

機能とconcatanationを使用することによってあなたは多くのことを切り出すことに注意してください:{[~] " |\n /_\\\n",|(" |$_|\n"for $_.comb)," |_|\n/___\\\n VvV"}65バイト
user0721090601

:しかし、あなたはJSのからの借入によりさらに低く行くことができますtio.run/...
user0721090601

22

JavaScript(ES6)、54

わかりやすい

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

テスト

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

実際には、40バイト

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

はい、それらの改行はそこにあるはずです。

オンラインでお試しください!

説明:

改行は\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
あなたのプログラムは、爆発したロケットに憂鬱に似ています。
corsiKa

15

C、83、82バイト

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

メインテスト:

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

7
私は自分のCソリューションを考案しました。私から+1。
コーディ

電話でSSHが面倒なので、これはテストされていませんが、動作するはずです。2バイトをF(char*c){for(puts(" |\n /_\\");*c;printf(" |%c|\n",*c++),puts(" |_|\n/___\\\n VvV");}
節約し

@algmyrは実際には1バイトを節約します。これは、最後のputs実行が毎回ではなく、一度だけ実行される必要があるためprintfです。しかし、はい、1バイト保存されました。
ステファノサンフィリッポ

右。私が寝ていたはずのとき、私はゴルフでそれを非難します。
アルグミー

これは88バイトではありませんか?
ガストロナー

10

Python 2、93 66 62 61バイト

FGITW。おそらく重いゴルフをすることができます。提案を歓迎します。

編集: Megoのおかげで27バイト。TheBikingVikingのおかげで4バイト。user3030010のおかげで1バイト。

オンラインでお試しください!

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

9

PHP、73 72 69 62バイト

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

スクリプトが呼び出されたときにコマンドラインからの最初の引数として胴体に印刷する文字列を受け取ります。

改善点:

  1. の最初の引数で\ nを実際のLF改行に置き換えて、バイトを保存しましたjoin
  2. 入力に単一のアンダースコアを使用してロケットのベースを追加することにより、さらに3バイトを節約しました
  3. Ismael Miguelに感謝します。PHPが「ハイパーテキストプリプロセッサ」であったという事実を利用して、さらに7バイトを節約しました。

オンラインでお試しください!

これは楽しかった!:-)

サンプル呼び出し:

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


素敵なゴルフ!私はその可能性を完全に忘れていました。ありがとうございました!
YetiCGN

どういたしまして。また、最初の行に2バイトを保存しました。末尾に2つの余分なスペースがありました。それは私が見つけることを期待していなかったものでした、と言わなければなりません。
イスマエルミゲル

1
私は知っている、それは本当に愚かだったが、また見つけるのは本当に難しい。改善されたバージョンで64バイトを思いついたときに気付いたのは、その理由を見つけなければなりませんでした。
YetiCGN

8

brainfuck、179バイト

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

オンラインでお試しください!


@ user00001このフレーズは、テロリストだけでなく、世界中のすべてのイスラム教徒によって使用されています。あなたはテロリストがすべてのイスラム教徒を代表していると本当に思いますか?
リーキー修道女


8

ルビー、57 55バイト

@manatworkで
提案されているように、入力に改行がないと仮定して@ValueInkで-2バイト-5バイト。改行レス入力して例のために提供することができるecho -nように、echo -n hey | ruby rocket.rb

puts'  |
 /_\
 |'+gets.chars*'|
 |'+'|
 |_|
/___\
 VvV'
古いバージョン、入力に改行があると仮定します。

ルビー、62 60バイト

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

質問の所有者のコメントによると、入力には改行文字が含まれないため、を削除できます.chop
マナトワーク

@manatworkきちんと、ありがとう:)
daniero

あなたは、単一引用符文字列を使用する場合は、あなたの両方置き換えることができるはず\\ \ 。(単一引用符で囲まれた文字列では、文字は除いて、エスケープされません\'
バリューインク

7

Haskell、58バイト

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

7

網膜44 37バイト

Martin Enderのおかげで7バイト。

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

オンラインでお試しください!


最下部の行にギャップを残します:(「スペース、最終フロンティア」の場合
-xQbert

@xQbert Worksの場合、TIOリンクを添付できますか?
リーキー修道女

奇妙なことに、今ではうまく機能しています...ああ、私のエラーは最後に改行がありました。
xQbert

Retinaは、末尾の改行を追加することでプログラムを完全に変更できる唯一の言語です。
16分46秒

6

ゼリー37 36 バイト

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

既存のエントリと同じスコアですが、楽しい新機能を使用します- ŒBは、ŒḄバウンスとして知られる、ベクトル化されたバージョンです。跳ね返りは、リストを最後まで実行してから戻ります(x[:-1]+x[::-1]例:)bounce("codegolf") == "codegolflogedoc"

デニスのおかげで-1バイト(バウンスのベクトル化バージョンを使用)

どうやって?

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

TryItOnlineでテストする


2
ŒBはの略ですŒḄ€
デニス


5

V41、39バイト

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

オンラインでお試しください!

何らかの理由で、オンラインインタープリターが予期しない結果を生成していたため、非常に低速で実行されるデバッグバージョンをオンラインインタープリターにプッシュしました。正しい結果が得られるはずです。

このプログラムには印刷できない文字が含まれているため、16進ダンプを次に示します。

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

いいのですが、「Space、the final frontier」のスペースを正しく処理しません。
xQbert

5

R、163バイト

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

アンゴルフド:

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

最後の行にスペースを入れなければならなかったという事実はあまり好きではありませんが、ちょっと!


5

PowerShell v2 +、59 55 51バイト

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

オンラインでお試しください!

Write-Outputこれらはすべてパイプライン上の単なるリテラル文字列であるため、実行終了時にデフォルトを乱用して各要素間に改行を挿入します。唯一の「トリッキー」ビットは$args、ロケットの本体を取得するためのchar-arrayとしての入力の各要素のループです。

ConnorLSWが指摘したリテラルの改行を使用して、いくつかのバイトを節約します。
Veskahのおかげで-4バイト増えました。


あなたは、シェル3を保存し、伊勢せずに罰金を実行するために、文字列で実際の改行を置くことができます\r
COLSW


4

PowerShell、70バイト

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

$ aを入力に設定します。

変数以外の入力を取得する必要がある場合、パイプで接続できます。

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

例:

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

4

Mathematica、50バイト

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

匿名関数。入力として文字のリストを取り、出力として文字列を返します。


4

PHP、108の 100 88バイト

ビジネス猫のおかげで-8バイト

YetiCGNのおかげで-12バイト

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

とても簡単です

イデオネ


1
foreach(str_split($a)as$c)他のforループの代わりに使用することで、多くのバイトを節約できます。あなたは二重引用符を使用する場合にも、あなたは文字列で直接$ cを入れることができます:echo" |$c| ....";
ビジネス猫

二重引用符が原因と解釈されていないブラケットに思っ配列スタイルで働いていなかった@BusinessCat本当、感謝
斎場

正規表現はどうですか?function f($a){echo' |.␤ /_\\␤',preg_replace('/./',' |$0|␤',$a),' |_|␤/___\\␤ VvV';}
マナトワーク

1
なぜその周りに関数を配置するのでしょうか?コマンドラインに置き換え$a$argv[1]コマンドラインから実行すると、はるかに短くなります。
YetiCGN

@manatworkこれはおそらく有効な代替案ですが、私はそれを理解しておらず、私の精神と同じではないので、投稿させていただきます。
セファ

4

C#、106 97 80 74バイト

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

上記を試すためのC#6はありませんが、うまくいくと思います

Kevin Cruijssenのおかげで7バイト節約

17バイトを節約するために私を正しい方向に向けてくれたマナトワークに感謝します。

牛乳のおかげで6バイト節約


+1。ちなみに、末尾の空白はオプションなので、次のように変更できます:using System.Linq;s=>$(" |\n /_\\\n{string.Join("",s.Select(c=>" |"+c+"|\n"))} |_|\n/___\\\n VvV");100バイト
ケビンクルーイッセン

1
@KevinCruijssen私はちょうど私の前の答えにあなたのコメントの後にこれを更新する過程にあった:)助けてくれてありがとう
-TheLethalCoder

あなたはリテラル内の単一の文字列を使用して、いくつかの文字を保存することができますSelect" |"+c+"|\n"c+"|\n |"一緒に`動いて|`後から{}その前に。
マナトワーク

@manatwork私はそれを動作させることができないようだ
-TheLethalCoder

1
改行は\nの2 バイトと比較して1バイトです。したがって、新しい行で置き換えることにより、さらに5バイト節約できます。はい。VisualStudioを使用している場合、デフォルトで改行は2バイトになりますが、16進エディター(Visual Studioにある)でソースファイルを開き、キャリッジリターン文字を削除できます。出力は同じままです。
ミルク

4

C、 131、121 バイト

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

あなたは移動することによって、3つの文字を削除することができp=s、初期化に、そして使用してp内部scanfmain(){char s[99],*p=s;scanf("%s",p);P(" |\n /_\\\n");while(*p)P(" |%c|\n",*p++);P(" |_|\n/___\\\n VvV\n");}
クエンティン・

ok ....「scanf( "%s"、s)」の代わりに「scanf( "%s"、&s)」が正しい結果を出力する理由がわかりません... scanfが取得できないため、最後に危険を好むスペースgets()...
RosLuP

2
投稿を破壊しないでください。ありがとうございました!
NobodyNada


3

05AB1E50 47 43 37バイト

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

オンラインでお試しください!

Adnanのおかげで9バイト節約されました。


このように、ストリングは05AB1E:pの改行も受け入れることができます。
アドナン

@Adnanいいね、ありがとう!空の入力をうまく回避する方法はありますか?
エミグナ

私はIðJプログラムの始めに、胴体の基礎も含むアプローチについて考えていました。
アドナン

@Adnan素晴らしいアイデア。«幸運なしでそれを以前に試しました。しかし、これははるかに優れています。
エミグナ

を削除Uして置換するXs、バイトも節約されます:)。
アドナン

3

Kotlin、68バイト

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

とても簡単です。複数行の文字列と正規表現の置換を使用します。これは、(String)->String型を持つラムダです。テスト:

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

3

Gema、50文字

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

サンプル実行:

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

3
ロケットのベースの前に `| _ |`がありません
-TheLethalCoder

痛い。愚かなミス。@TheLethalCoderに感謝します。
マナトワーク

1
新しい(私にとって)(ゴルフ以外の)言語を紹介してくれた+1
ヨルダン

3

バッシュ84 70

マナトワークのおかげで14を節約

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

バイトの半分以上は、鼻とエンジンを追加するためのものです。


なぜgrep(cat&&echo _)|sed 's~.~ |&|\n~g;1s~^~ |\n /_\\\n~;$s~$~/___\\\n VvV~'。実際に私が使用する理由を参照しないcatechoのいずれかを。短くなり、純粋なsedソリューションに変換されます。
マナトワーク

純粋なsedでは、入力がない場合は出力が得られません
ライリー

ど あなたが正しいです。申し訳ありませんが、要件の一部を忘れていました。
マナトワーク

@manatwork私も最初の試行でそれを忘れていました。
ライリー

今後の参照のために、<pre> <code>タグの使用は避けてください。これは、Markdownフォーマットを自動エスケープするため、将来コードの前に4つのスペースを使用します。取り消し線があるため、現在の書式設定を維持しましたが、それを編集履歴に残しておくこともできます。
アディソンクランプ

3

GolfScript、 61 51バイト

私の最初のコードゴルフは、それで十分だと思います。

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

説明

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

オンラインでお試しください!


3

Vim、41 39バイト

これ<End>は文字通り「終了」キーです。

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

印刷できないもの:

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

3

GNU sed54 49 48バイト

これは、このサイトでのチャレンジに対する私の最初の回答でした。解決策はシンプルで、主に印刷であるため、もうゴルフができないことを確認するのに少し時間を費やしました。

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

オンラインでお試しください!

半年後に早送りして、スクリプトを書き直し、適切な方法でトリックを使用して1バイト短くしました。これで進歩です!

説明:各例のパターンスペースは、入力例「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のバイト

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

私はあなたの答えに入力を追加しない場合。それは動作しません。
ノーラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.