Tất cả trên tàu ASCII


45

Tất cả trên tàu 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-'

Tốt nhất bạn nên chuẩn bị để đi tàu, bởi vì bạn sắp xây dựng chuyến tàu bạn sẽ đi. Đưa ra một chuỗi s, xuất ra một đoàn tàu được hình thành đầy đủ như mô tả ở trên. Đầu ra đầu tiên luôn là công cụ sẽ kéo theo chuỗi của bạn, như được mô tả một mình bên dưới:

    o O O 
   o      
  TS__[O] 
 {======| 
./o--000' 

Theo sau đầu máy là những toa xe lửa chứa từng ký tự của hàng hóa quý giá của bạn. Để tiết kiệm sự nhầm lẫn khi dỡ hàng, công ty của bạn đã giao nhiệm vụ cho bạn dán nhãn bên ngoài của những chiếc xe này. Những chiếc xe trong câu hỏi sẽ luôn luôn trông như thế này:

   ___ 
  | # |
  |___|
_|"""""|
"`-0-0-'

Trường hợp #là đại diện của nhân vật bên trong "hàng hóa" giữ. Xâu chuỗi động cơ cho mỗi chiếc xe cũng là một phần công việc của bạn, vì bạn đã được giao nhiệm vụ giám sát tính trôi chảy và thành công của toàn bộ lô hàng này. Vì vậy, một khi bạn đã dán nhãn tất cả các xe ô tô và có động cơ trên đường ray, bạn phải đảm bảo rằng đoàn tàu đã được lắp ráp và sẵn sàng lăn bánh.

Quy tắc

  • Đầu vào duy nhất mà chương trình của bạn nên dùng là một chuỗi đơn.
  • Động cơ phải luôn là đầu ra, ngay cả khi lô hàng của bạn trống.
  • Mỗi chiếc xe chỉ có thể chứa một ký tự, đừng đẩy vận may của bạn, bạn có thể làm hỏng hàng hóa.
  • Bạn chỉ cần hỗ trợ các ký tự ASCII có thể in sau đây: _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    Nếu bạn kết thúc việc làm nhiều hơn, điều đó cũng tốt, nhưng đây là mức tối thiểu.
  • 1-2 dấu cách được chấp nhận, như là một dòng mới duy nhất.
  • Đây là , đánh số byte ngắn nhất.


1
Tôi không nghĩ rằng đây thực sự là phức tạp kolmogorov . Dựa trên meta bài đăng này, câu hỏi này chắc chắn nằm ở ranh giới giữa phù hợp và không phù hợp với định nghĩa của chúng tôi và cá nhân tôi sẽ nói rằng nó không phù hợp với thẻ tương tự như câu hỏi này cũng yêu cầu một kiểu quấn chuỗi.
Thuật sĩ lúa mì


@WheatWizard nó là một hỗn hợp của nhiều thể loại. Động cơ sẽ rơi vào sự phức tạp của kolmogrov, toàn bộ điều theo ASCII-Art và có lẽ nó cũng rơi một chút vào thao tác chuỗi.
Bạch tuộc ma thuật Urn

Tôi có ấn tượng rằng việc nén mô hình thực tế của tàu sẽ xứng đáng với thẻ; nhưng tôi sẽ loại bỏ nó để ngăn chặn cuộc tranh luận.
Bạch tuộc ma thuật Urn

Câu trả lời:



37

JavaScript (ES6), 149 144 byte

s=>`    o O Oa   ___  
   o     a  | $& | 
  TS__[O]a  |___| 
 {======|a_|"""""|
./o--000'a"\`-0-0-'`.replace(/a(.*)/g,(_,c)=>s.replace(/./g,c))

Tôi không nghĩ rằng động cơ có thể được nén, nhưng có lẽ nó có thể.

Kiểm tra đoạn


Rất nhiều ký tự lặp lại, nên có thể vắt thêm một số byte ra khỏi nó.
orion

17
Mọi người gần như có thể thấy tàu được đóng gói trong mã nguồn :-)
Luis Mendo

15
Được nâng cấp chủ yếu bởi vì mã giống như một chuyến tàu
Rohan Jhunjhunwala

Điểm thưởng vì nó chạy ngay trong trình duyệt!
DGM

6

Befunge, 276 270 byte

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_@>$$$$>,#

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

Giải trình

Xe hơi và động cơ được mã hóa thành hai bộ năm chuỗi trên dòng 3 đến 12. Các giá trị ký tự bị tắt bởi 1 để tránh phải xử lý các dấu ngoặc kép không thể được sử dụng trong chuỗi Befunge.

Mã này hoạt động bằng cách xây dựng tập hợp đầy đủ các ký tự cần thiết để kết xuất tàu trên ngăn xếp. Đối với mỗi dòng đầu ra, một chuỗi xe thích hợp trước tiên được thêm vào ngăn xếp, lặp lại nhiều lần nếu cần cho hàng hóa và sau đó là một bản sao của chuỗi động cơ thích hợp.

Sau khi mỗi dòng được xây dựng, một cặp mũi tên xuống bên trái của chuỗi được thay thế bằng một mũi tên phải, do đó, lần lặp tiếp theo của vòng lặp đi theo một con đường khác thông qua mã, sử dụng một cặp dây khác nhau cho xe và động cơ.

Khi tất cả dữ liệu đã được xây dựng trên ngăn xếp, sẽ có một vòng lặp kết xuất cuối cùng ghi ra các ký tự, trừ đi 1 lần mỗi lần để tính toán cho mã hóa ban đầu.

Như một phần thưởng, nguồn được thiết kế theo hình tháp pháo , trong trường hợp tàu bị tấn công. Các gôn thủ đã phá hủy tháp súng của tôi.


Các gôn thủ đã phá hủy tháp súng của tôi, LOL. +1. Tuy nhiên, nó đang đánh bại C # và Java.
Zacharý

6

PHP, 218 211 204 187 183 byte

    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];

Lấy đầu vào từ STDIN; chạy với -nR.

Nén động cơ hoặc toa xe sẽ cần nhiều mã hơn để giải nén hơn là tiết kiệm lưu trữ.
Tôi thấy không có tiềm năng hơn ở đây.


a&$c=$argn thay vì""<$c=$argv[1]
Jörg Hülsermann

@ JörgHülsermann Yea bài này là cổ xưa. :)
Tít

4

Python 2, 176 byte

lambda i:'\n'.join(map(''.join,zip(*[["    o O O","   o     ","  TS__[O]"," {======|","./o--000'"]]+[["   ___  ",'  | '+x+' | ',"  |___| ",'_|"""""|',"\"`-0-0-'"]for x in i])))

Thí dụ:

print f('Python')

cho

    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, 167 166 byte

$l=($a=$args[0]).Length;"    o O O"+"   ___  "*$l;"   o     "+($a[0..$l]|%{"  | $_ |"});"  TS__[O]"+"  |___| "*$l;" {======|"+'_|"""""|'*$l;"./o--000'"+'"`-0-0-'''*$l

Thí dụ:

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

Có thể không hợp lệ! Nếu chạy mà không có đối số nào, nó sẽ thử và in một chuỗi trống và trông như sau:

    o O O
   o       |  |
  TS__[O]
 {======|
./o--000'

Tuy nhiên, nếu chạy với một chuỗi đầu vào trống, nó sẽ trả về đúng:

.\train.ps1 ""
    o O O
   o     
  TS__[O]
 {======|
./o--000'

(kinda) Ungolfed:

$l=($a=$args[0]).Length
"    o O O"+"   ___  "*$l
"   o     "+($a[0..$l]|%{"  | $_ |"})
"  TS__[O]"+"  |___| "*$l
" {======|"+'_|"""""|'*$l
"./o--000'"+'"`-0-0-'''*$l

nén ngắn nhất trong Powershell sẽ là +'c'*xnơi c là char và x là số lần lặp lại, và đó chỉ là để lặp lại hoặc lặp lại hàng đầu, bất kỳ sự lặp lại chuỗi trung tâm nào cũng cần thêm +và thêm "- vì vậy không có điểm nào trong đó Tôi có thể thấy nén tiết kiệm bất kỳ không gian nào, và bộ char lặp lại ___duy nhất chỉ có 3 ký tự.

Giải trình:

$l=($a=$args[0]).Length Lấy đối số đầu tiên, đặt nó vào $ a, sau đó lấy độ dài của $ a và đặt nó vào $ l, đây là các biến duy nhất bạn cần.

" o O O"+" ___ "*$l hầu hết các bit khác theo định dạng này của phần bên trái và sau đó phần bên phải nhân với số lượng ký tự yêu cầu.

" o "+([char[]]$a|%{" | $_ |"})loop ( |%{}) đến $ a dưới dạng mảng char, vì vậy, foreach (char $_ in $a)đối với phiên bản không có đường ống, sau đó đặt char vào văn bản.

Đây là một cách tiếp cận cực kỳ đơn giản, nhưng vì tôi không thể tìm ra cách nào tốt để nén các chuỗi qua nên nó có vẻ như hữu ích nhất.

đã cứu được 1 Byte nhờ briantist! và ở đây tôi đã nghĩ rằng điều này sẽ không thể rút ngắn được nữa ..


Bạn đã không phải xử lý không có đối số :).
Bạch tuộc ma thuật Urn

@carusocomputing yay, cảm ơn vì đã cho tôi biết.
colsw

Đẹp! Bạn có thể tiết kiệm 1 byte bằng cách thay đổi [char[]]$athành $a[0..$l] :)
briantist

ah đã sử dụng mảng char trước khi tôi tuyên bố $lvà hoàn toàn quên nó. cảm ơn vì điều đó!
colsw

2

Java, 361 byte

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

    }
}

Thí dụ

java
    o O O   ___     ___     ___     ___     
   o       | j |   | a |   | v |   | a |   
  TS__[O]  |___|   |___|   |___|   |___|   
 {======|_|"""""|_|"""""|_|"""""|_|"""""|
./o--000'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'

1
Tôi biết rằng nó đã được một nửa năm, nhưng bạn có thể chơi golf khá nhiều (cũng bằng cách xóa khoảng trắng): 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 byte ) Hoặc thậm chí nhiều hơn nếu bạn thay thế new java.util.Scanner(System.in).nextLine()bằng v[0]đầu vào thay thế ( 279 byte ) Hãy thử tại đây .
Kevin Cruijssen

2

Perl, 137 byte

132 byte mã + 5 byte cho -pFcờ.

ascii_train.pl:

#!/usr/bin/perl -apF
s/./  | $& | /g;$_="    o O O!   ___  
   o     $_
  TS__[0]!  |___| 
 {======|!".'_|"""""|'."
./o--000'!\"`-0-0-'";s/!(.*)/$1x@F/ge

Lưu ý rằng tôi đã thêm -acờ trong mã, nhưng đó chỉ là do các phiên bản cũ của Perl yêu cầu -akhi -Fđược sử dụng.

Để chạy nó:

echo -n "code-golf" | perl ascii_train.pl

Đầu vào phải được cung cấp mà không có dòng mới cuối cùng ( echo -nví dụ).

Giải thích:
Từ những gì tôi đã thấy, đó gần như là ý tưởng giống như câu trả lời JavaScript của ETH Producttion.
Không có nhiều thứ đang diễn ra: thật đáng buồn là các mẫu hơi ngắn để làm cho xtoán tử được sử dụng.
Đầu tiên, s/./ | $& | /gbao quanh mỗi ký tự của đầu vào bằng |(và khoảng trắng) để tạo thành cấp độ thứ hai của tàu.
Sau đó, bên trong chuỗi dài đó, mọi thứ giữa a !và một dòng mới là một mẫu chúng tôi muốn lặp lại để xây dựng những chiếc xe. Sự lặp lại đó được thực hiện nhờ vào regex s/!(.*)/$1x@F/ge. (Tôi đã sử dụng !vì đầu vào không thể chứa nó).


1

C #, 277 byte

Chơi gôn

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

Ung dung:

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

Kiểm tra:

Console.Write(new AllAboardTheASCIITrain().T(""));

     o O O
   o        
   TS__[O]
  {======|
./ o--000'

Và ...

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 byte

không có gì đặc biệt xảy ra ở đây .. chỉ cần tạo từng dòng và nối chúng với các dòng mới.

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 byte

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

Dùng thử trực tuyến

Đầu ra:

    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.12 , 57 56 byte

Τ¡ā↓mΛC┌─⁵℮Ƨ⅛□→(š;∞⅟¹°⅔Ζ‽ζ÷⁴‘9n,{"s=Ο!NθæιžGš‼t╬¼Xg`‘8n┼

Hãy thử nó ở đây!

Giải trình:

..‘             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 byte

[["    o O O   o       TS__[O] {======|./o--000'"|_nwise(9)]]+[range(length)as$i|[.[$i:$i+1]|"   ___    | \(.) |   |___| _|\"\"\"\"\"|\"`-0-0-'"|_nwise(8)]]|transpose|map(add)[]

Mở rộng

# 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)[]

Chạy mẫu

$ 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

Dùng thử trực tuyến


0

VBA Excel, 218 byte

Chức năng cửa sổ tức thời VBE ẩn danh nhận đầu vào từ phạm vi [A1]và đầu ra cho cửa sổ ngay lập tức 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)]

Được định dạng để dễ đọc

[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)]

Đầu ra mẫu

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