全部登上ASCII火车


45

全部登上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-'

其中#代表“货物”货舱内的字符。将引擎链接到每辆汽车也是您工作的一部分,因为您的任务是监督整个运输过程的流畅性和成功性。因此,在给所有车厢贴上标签并在轨道上安装引擎之后,必须确保火车已组装好并可以滚动。

规则

  • 您的程序应该接受的唯一输入是单个字符串。
  • 即使您的货物是空的,也必须始终输出引擎。
  • 每辆车只能容纳一个角色,不要过分走运,否则可能会损坏货物。
  • 您只需要支持以下可打印的ASCII字符: _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    如果您最终做了更多操作,也可以,但是这是最低要求。
  • 可以接受1-2个尾随空格,也可以使用一个尾随换行符。
  • 这是,最短字节数获胜。


1
我认为这实际上不是kolmogorov复杂性。根据此meta帖子,这个问题肯定在适合和不适合我们的定义之间,我个人会说它不适合与此问题类似的标签,该问题也要求使用字符串包装。
小麦巫师

5
这是美丽的ASCII艺术
CAD97

@WheatWizard是多种流派的混合体。引擎将陷入kolmogrov的复杂性之下,而整个过程会受到ASCII-Art的限制,它可能还会陷入字符串操作中。
魔术章鱼缸

我给人的印象是,压缩火车的实际模式是值得的。但我将其删除以停止争论。
魔术章鱼缸

Answers:


4

05AB1E101 99字节

天真的第一次尝试。

"    o O O   o"ð7×"TS__[O] {======|./o--000'"J5ä¹v… _ €ÐJy“ | ÿ |   |___| _|"""""|"`-0-0-'“«5ä})øJ»

在线尝试!


嗯,代码与火车不一样,但是现在可以胜任了。
魔术章鱼缸

37

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

我认为引擎本身无法压缩,但也许是可以的。

测试片段


许多重复的字符应该可以从中挤出更多的字节。
Orion

17
人们几乎可以看到源代码中包装的火车:-)
路易斯·门多

15
之所以提出投票,主要是因为该代码类似于火车
Rohan Jhunjhunwala

奖励点是因为它可以在浏览器中直接运行!
DGM

6

Befunge,276270字节

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行上被编码为两组,每组五个字符串。字符值相减1,以避免必须处理不能在Befunge字符串中使用的双引号。

该代码通过构建将火车呈现在堆栈上所需的全套字符来工作。对于每行输出,首先将适当的车串添加到堆栈中,对货物重复多次,然后再复制一份适当的引擎串。

构造完每行后,用左箭头替换成对的字符串左下方的一对向下箭头,因此循环的下一次迭代遵循不同的代码路径,对汽车和汽车使用不同的对字符串。发动机。

一旦所有数据都堆积在堆栈上,就会有一个最终的渲染循环来写出字符,每次都减去1来说明初始编码。

作为奖励,如果火车受到攻击,则将源设计为炮塔形状。高尔夫球手摧毁了我的炮塔。


高尔夫球手摧毁了我的炮塔,哈哈。+1。但是,它正在击败C#和Java。
扎卡里

6

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

压缩引擎或旅行车将需要更多的代码来解压缩,而不是节省存储空间。
我认为这里没有更多的潜力了。


a&$c=$argn 而不是""<$c=$argv[1]
约尔格Hülsermann

@JörgHülsermann是的,这个帖子很古老。:)
泰特斯

4

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

4

Powershell,167166字节

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

可能无效!如果根本不带参数运行,它将尝试打印一个空字符串,如下所示:

    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'*xc是字符,x是重复数,并且这仅用于尾随或前导重复,任何中心字符串重复都将需要一个额外的+和一个额外的"-因此在这里没有意义我可以看到压缩节省了任何空间,唯一重复的字符集是___3个字符。

说明:

$l=($a=$args[0]).Length 将第一个arg放入$ a中,然后将$ a的长度放入$ l中,这是您唯一需要的变量。

" o O O"+" ___ "*$l 其他大多数位遵循左部分的格式,然后右部分乘以所需字符数。

" o "+([char[]]$a|%{" | $_ |"})|%{}通过$ a作为char数组循环(),因此foreach (char $_ in $a)对于非管道版本,请将char放入文本中。

这是一种非常简单的方法,但是由于找不到更好的方法来压缩字符串,因此似乎是最有用的方法。

感谢briantist节省了1个字节!我在这里想这不会再缩短了。


您不必处理任何参数:)。
魔术章鱼缸

@carusocomputing是的,谢谢你让我知道。
colsw '16

真好!您可以通过更改保存1个字节[char[]]$a$a[0..$l] :)
briantist

啊,在我声明之前一直使用char数组$l,完全忘记了它。感谢那!
colsw

2

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

1
我知道它已经减半了一年,但你可以打高尔夫球了不少(也被去掉空格): interface C{static void main(String[]v){String n="\n",b=" o O O ",c=" o ",d=" TS__[O] ",e=" {======|",f="./o--000'";for(String x:new java.util.Scanner(System.in).nextLine().split("")){b+="___ ";c+="| "+x+" | ";d+="|___| ";e+="_|\"\"\"\"\"|";f+="\"`-0-0-'";}System.out.print(b+n+c+n+d+n+e+n+f);}}318个字节),甚至更多,如果你更换new java.util.Scanner(System.in).nextLine()v[0]作为替代输入(279个字节在这里试试吧
凯文·克鲁伊森

2

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|(和空格)包围输入的每个字符,以形成火车的第二层。
然后,在该长字符串内,a !和换行符之间的所有内容都是我们要重复的模式,以构造赛车。由于使用了正则表达式,因此可以完成重复操作s/!(.*)/$1x@F/ge。(我用过,!因为输入不能包含它)。


1

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

1

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

1

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

在线尝试

输出:

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

1

SOGL V0.1257个 56 字节

Τ¡ā↓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

1

Jq 1.5,178字节

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

在线尝试


0

Excel VBA,218字节

匿名VBE立即窗口功能,可接收范围内的输入[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-'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.