すべてASCIIトレインに乗っている!
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ o | C | | O | | D | | E | | | | G | | O | | L | | F | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
最高です乗る列車を作ろうとしているので、列車に乗る準備をしてください。文字列s
を指定して、上記のように完全に形成されたトレインを出力します。最初に出力されるのは、常に「下に単独で示されているように、弦を引っ張るエンジンです。
o O O o TS__[O] {======| ./o--000"
機関車に続いて、それぞれを含む鉄道車両があります。貴重な貨物の特徴。荷降ろし時の混乱を避けるために、会社はこれらの車の外側にラベルを付けるように指示しました。問題の車は常に次のようになります。
___ | # | |___| _|"""""| "`-0-0-"
#
が"貨物" hold。この出荷全体の流動性と成功を監視する任務を負っているため、各車にエンジンをチェーン接続することもあなたの仕事の一部です。したがって、すべての車にラベルを付けてエンジンを軌道に乗せたら、列車が組み立てられて転がる準備ができていることを確認する必要があります。
規則
- プログラムが取る必要のある入力は1つの文字列のみです。
- 荷物が空の場合でも、エンジンは常に出力する必要があります。
- 各車は1文字しか保持できません、しないでください。運を押して、商品に損傷を与える可能性があります。
- 次の印刷可能なASCII文字のみをサポートする必要があります:
_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
さらに多くのことを行うことになった場合は、 「これも問題ありませんが、これは最低限です。
- 1つの末尾のニューラインと同様に1〜2の末尾のスペースを使用できます。
- これは code-golf ascii-art 、最短のバイト数が勝ちます。
コメント
この質問は文字列の折り返しの種類も要求します。
これは美しい ascii -art
@WheatWizard it '複数のジャンルの混合物。エンジンはコルモゴロフの複雑さに分類され、すべてがASCIIアートに分類され、おそらく文字列操作にも少し分類されます。
列車の実際のパターンを圧縮する価値があるという印象を受けました。タグの;ただし、'削除して、引数を停止します。
JavaScript(ES6)、 149 144バイト
s=>` o O Oa ___ o a | $& | TS__[O]a |___| {======|a_|"""""| ./o--000"a"\`-0-0-"`.replace(/a(.*)/g,(_,c)=>s.replace(/./g,c))
エンジン自体を圧縮できるとは思いませんが、おそらく可能です。
テストスニペット
let f = s=>` o O Oa ___ o a | $& | TS__[O]a |___| {======|a_|"""""| ./o--000"a"\`-0-0-"`.replace(/a(.*)/g,(_,c)=>s.replace(/./g,c)) O.innerHTML = f("CODE GOLF")
<input value="CODE GOLF" oninput="O.innerHTML=f(this.value.replace(/\n/g,"<br>"))"><br> <pre id=O></pre>
コメント
回答
Befunge、 276 270バイト
p1p~:7>7+#:`#~_$:v >#p0p10:p00:+1g00_v#: v"!!```!!!"v>0p01g\-0g1+53p v"!}!#!}!!"v0 p115< v"!}```}!!"v^:-1< v"}#####}`">00g:| >"(.1.1.a#"^+<v1< v"P!P!p!!! "v5>g00p v"!!!!!p!!!"v6 v"^P\``TU!!"vp v"}>>>>>>|!"v+ >"(111..p0/"v6 v-1:g110">>"<g >:11p!#v_p011^ #-:#1_@>$$$$>,#
オンラインでお試しください!
説明
車とエンジンは、3行目から12行目で5つの文字列の2つのセットとしてエンコードされます。文字値Befunge文字列で使用できない二重引用符を処理する必要がないように1ずつずれています。
コードは、列車をレンダリングするために必要な文字の完全なセットを構築することによって機能します。スタック。出力の各行について、適切な車のストリングが最初にスタックに追加され、貨物に必要な回数繰り返され、次に適切なエンジンストリングのコピーが1つ追加されます。
各行が作成されると、文字列の左側にある下向き矢印のペアが右矢印に置き換えられるため、ループの次の反復では、異なるパスを使用して、コード内の異なるパスをたどります。車とエンジンの文字列のペア。
すべてのデータがスタックに蓄積されると、「文字を書き出す最終レンダリングループがあり、最初のエンコードを考慮して毎回1を減算します。 。
ボーナスとして、列車が攻撃を受けた場合に備えて、ソースは砲塔の形で設計されています。 。ゴルファーが私の砲塔を破壊しました。
コメント
回答
PHP、 218 211 204 187 183バイト
o O O<?for(;$y<5;print"\n".[" o "," TS__[O]"," {======|","./o--000""][+$y++])for($p=0;$c=a&$argn[$p++];)echo[" ___ "," | $c | "," |___| ","_|"""""|","\"`-0-0-""][+$y];
STDINから入力を取得します。-nR
で実行します。 。
エンジンの圧縮またはワゴンは、ストレージに節約するよりも多くのコードを解凍する必要があります。
ここにはこれ以上の可能性はありません。
コメント
lsermannうんこの投稿は古くからありました。 🙂
回答
Python 2、176バイト
lambda i:"\n".join(map("".join,zip(*[[" o O O"," o "," TS__[O]"," {======|","./o--000""]]+[[" ___ "," | "+x+" | "," |___| ","_|"""""|","\"`-0-0-""]for x in i])))
例:
print f("Python")
与える
o O O ___ ___ ___ ___ ___ ___ o | P | | y | | t | | h | | o | | n | TS__[O] |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
回答
PowerShell、 167 166バイト
$l=($a=$args[0]).Length;" o O O"+" ___ "*$l;" o "+($a[0..$l]|%{" | $_ |"});" TS__[O]"+" |___| "*$l;" {======|"+"_|"""""|"*$l;"./o--000""+""`-0-0-"""*$l
例:
.\train.ps1 "PowerShell!" o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | P | | o | | w | | e | | r | | S | | h | | e | | l | | l | | ! | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
無効の可能性があります!引数なしで実行すると、1つの空の文字列が出力され、次のようになります。
o O O o | | TS__[O] {======| ./o--000"
空の入力文字列で実行すると、正しく返されます。ただし:
.\train.ps1 "" o O O o TS__[O] {======| ./o--000"
(ちょっと)ゴルフなし:
$l=($a=$args[0]).Length " o O O"+" ___ "*$l " o "+($a[0..$l]|%{" | $_ |"}) " TS__[O]"+" |___| "*$l " {======|"+"_|"""""|"*$l "./o--000""+""`-0-0-"""*$l
Powershellでの最短の圧縮は+"c"*x
になります。ここで、cは文字、xは繰り返しの数です。これは、末尾または先頭の繰り返しの場合のみ、中央の文字列の繰り返しには追加の
と追加の"
-したがって、スペースを節約する圧縮を確認できるポイントはありません。繰り返される文字セットは、 ___
これはわずか3文字です。
説明:
$l=($a=$args[0]).Length
最初の引数を取ります、それを$ aに入れ、次に$ aの長さを取り$ lに入れます。必要な変数はこれらだけです。
" o O O"+" ___ "*$l
ほとんどの他のビットはこのtの形式に従います彼は左部分、次に右部分に必要な文字数を掛けます。
" o "+([char[]]$a|%{" | $_ |"})
ループ(|%{}
) $ aをchar配列として使用するため、パイプライン以外のバージョンの場合はforeach (char $_ in $a)
、charをテキストに挿入します。
これは非常に単純なアプローチです。しかし、これを超えて文字列を圧縮する良い方法が見つからないため、最も便利なようです。
briantistのおかげで1バイト節約できました!そしてここで私はこれがこれ以上短くなることはないと思っていました。
コメント
回答
Java、361バイト
class C {static void main(String[]v){Scanner q = new Scanner(System.in);String i = q.nextLine();String[] t = {" o O O ", " o ", " TS__[O] ", " {======|", "./o--000"",};for (char c: i.toCharArray()) {t[0]+="___ ";t[1]+="| # | ".replace("#",c);t[2]+="|___| ";t[3]+="_|\"\"\"\"\"|";t[4]+="\"`-0-0-"";}for(String p:t) System.out.println(p);}}
class C { static void main(String[]v) { Scanner q = new Scanner(System.in); String i = q.nextLine(); String[] t = { " o O O ", " o ", " TS__[O] ", " {======|", "./o--000"", }; for (char c: i.toCharArray()) { t[0]+="___ "; t[1]+="| # | ".replace("#",c); t[2]+="|___| "; t[3]+="_|\"\"\"\"\"|"; t[4]+="\"`-0-0-""; } for(String p:t) System.out.println(p); } }
例
java o O O ___ ___ ___ ___ o | j | | a | | v | | a | TS__[O] |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
コメント
回答
Perl、137バイト
132バイトのコード+5バイトの-pF
フラグ。
ascii_train.pl
:
#!/usr/bin/perl -apF s/./ | $& | /g;$_=" o O O! ___ o $_ TS__[0]! |___| {======|!"."_|"""""|"." ./o--000"!\"`-0-0-"";s/!(.*)/$1x@F/ge
コードに-a
フラグを追加しましたが、これは古いバージョンのPerlで-a
が必要な場合のみです。 -F
が使用されます。
実行するには:
echo -n "code-golf" | perl ascii_train.pl
入力は、最後の改行なしで指定する必要があります(たとえば、echo -n
を使用)。
説明:
私が見たところ、ほぼ同じ考えですETHProductionのJavaScriptの回答として。
多くのことが起こっているわけではありません。残念ながら、x
演算子を使用する価値があるようにするには、パターンが少し短いです。
まず、 s/./ | $& | /g
は入力の各文字を|
(およびスペース)で囲み、列車の2番目のレベルを形成します。
次にその内部長い文字列、!
と改行の間のすべては、車を構築するために繰り返したいパターンです。その繰り返しは、正規表現s/!(.*)/$1x@F/ge
のおかげで行われます。 (入力に含めることができないため、!
を使用しました。
回答
Τ¡ā↓mΛC┌─⁵℮Ƨ⅛□→(š;∞⅟¹°⅔Ζ‽ζ÷⁴‘9n,{"s=Ο!NθæιžGš‼t╬¼Xg`‘8n┼
ここで試してみてください!
説明:
..‘ push a compressed string of the locomotive in a single line 9n split in line lengths of 9 ,{ for each character in the input "..‘ push a compressed string of a wagon in a single line 8n split to line lengths of 8 ┼ add horizontally
回答
C#、277バイト
ゴルフ:
string T(string s){var o=new string[]{" o O O"," o "," TS__[O]"," {======|","./ o--000"" };for(int i=0;i<s.Length;i++){o[0]+=" ___ ";o[1]+="| # | ".Replace("#",s[i]+"");o[2]+=" |___| ";o[3]+="_|\"\"\"\"\"|";o[4]+="\"`-0-0-"";}return string.Join("\r\n",o);
ゴルフなし:
public string T(string s) { var o = new string[] { " o O O", " o ", " TS__[O]", " {======|", "./ o--000"" }; for (int i = 0; i < s.Length; i++) { o[0] += " ___ "; o[1] += "| # | ".Replace("#", s[i] + ""); o[2] += " |___| "; o[3] += "_|\"\"\"\"\"|"; o[4] += "\"`-0-0-""; } return string.Join("\r\n", o); }
テスト:
Console.Write(new AllAboardTheASCIITrain().T("")); o O O o TS__[O] {======| ./ o--000"
そして…
Console.Write(new AllAboardTheASCIITrain().T("Programming Puzzles & Code Golf")); o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | P | | r | | o | | g | | r | | a | | m | | m | | i | | n | | g | | | | P | | u | | z | | z | | l | | e | | s | | | | & | | | | C | | o | | d | | e | | | | G | | o | | l | | f | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./ o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
回答
C#221バイト
ここでは特別なことは何も起こりません。各行を作成して新しい行と結合するだけです。
s=>{var t=new[]{" o O O"," o "," TS__[O]"," {======|","./o--000""};foreach(var c in s){t[0]+=" ___ ";t[1]+=$" | {c} | ";t[2]+=" |___| ";t[3]+="_|\"\"\"\"\"|";t[4]+="\"`-0-0-"";}return string.Join("\n",t);};
回答
C、 217 212 208バイト
i;f(char*t){char d[]=" o O O o TS__[O] {======|./o--000" ___ | C | |___| _|\"\"\"\"\"|\"`-0-0-"",*p;for(;i<5;i++){printf("%.9s",d+i*9);for(p=t;d[57]=*p++;)printf("%.8s",d+45+i*8);puts("");}}
オンラインで試す
Ou tput:
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | C | | O | | D | | E | | | | G | | O | | L | | F | | | | I | | N | | | | C | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
回答
[[" o O O o TS__[O] {======|./o--000""|_nwise(9)]]+[range(length)as$i|[.[$i:$i+1]|" ___ | \(.) | |___| _|\"\"\"\"\"|\"`-0-0-""|_nwise(8)]]|transpose|map(add)[]
拡張
# engine def E:" o O O o TS__[O] {======|./o--000""|_nwise(9); # car (note string interpolation) def C:" ___ | \(.) | |___| _|\"\"\"\"\"|\"`-0-0-""|_nwise(8); # generate train [[E]] + [range(length) as $i| [.[$i:$i+1] |C]] # combine rows and concatenate strings | transpose | map(add)[]
サンプル実行
$ jq -MRr train.jq <<< "golf" o O O ___ ___ ___ ___ o | g | | o | | l | | f | TS__[O] |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-" $ wc -c < train.jq 178
オンラインで試す
回答
Excel VBA、218バイト
範囲[A1]
およびVBEイミディエイトウィンドウへの出力
[B1]=[Len(A1)]:?" o O O"[Rept(" ___ ",B1)]:?" o ";:For i=1To[B1]:?" | "Mid([A1],i,1)" | ";:Next:?:?" TS__[O]"[Rept(" |___| ",B1)]:?" {======|"[Rept("_|""""""""""|",B1)]:?"./o--000""[Rept("""`-0-0-"",B1)]
読みやすくするためのフォーマット
[B1]=[Len(A1)] ?" o O O"[Rept(" ___ ",B1)] ?" o ";:For i=1To[B1]:?" | "Mid([A1],i,1)" | ";:Next:?: ?" TS__[O]"[Rept(" |___| ",B1)]: ?" {======|"[Rept("_|""""""""""|",B1)]: ?"./o--000""[Rept("""`-0-0-"",B1)]
サンプル出力
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | V | | B | | A | | | | E | | x | | p | | r | | e | | s | | s | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"