Semua Naik Kereta ASCII


45

Semua Naik Kereta 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-'

Anda sebaiknya bersiap untuk naik kereta, karena Anda akan membangun kereta Anda akan naik. Diberikan string s, output kereta yang sepenuhnya terbentuk seperti yang digambarkan di atas. Output hal pertama adalah selalu mesin yang akan menarik tali Anda, seperti yang digambarkan sendiri di bawah ini:

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

Mengikuti lokomotif adalah gerbong-gerbong yang berisi setiap karakter dari kargo berharga Anda. Untuk menghemat kebingungan saat menurunkan muatan, perusahaan Anda telah menugaskan Anda dengan memberi label bagian luar mobil-mobil ini. Mobil yang dimaksud akan selalu terlihat seperti ini:

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

Di mana #perwakilan karakter yang ada di dalam "kargo" terus. Merantai mesin untuk setiap mobil juga merupakan bagian dari pekerjaan Anda, karena Anda telah ditugaskan untuk mengawasi kelancaran dan keberhasilan seluruh pengiriman ini. Jadi, setelah Anda memberi label semua mobil dan mendapatkan mesin di rel, Anda harus memastikan bahwa kereta sudah terpasang dan siap untuk bergulir.

Aturan

  • Satu-satunya input yang harus diambil oleh program Anda adalah string tunggal.
  • Mesin harus selalu berupa output, meskipun kiriman Anda kosong.
  • Setiap mobil hanya dapat menampung satu karakter, jangan memaksakan keberuntungan Anda, Anda dapat merusak barang.
  • Anda hanya perlu mendukung karakter ASCII yang dapat dicetak berikut: _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    Jika Anda akhirnya melakukan lebih banyak, itu juga baik-baik saja, tetapi ini adalah jumlah minimum.
  • 1-2 ruang tambahan dapat diterima, seperti juga satu baris tambahan.
  • Ini adalah , kemenangan byte-count terpendek.


1
Saya tidak berpikir ini sebenarnya kolmogorov-kompleksitas . Berdasarkan meta posting ini pertanyaan ini tentu saja pada garis antara pas dan tidak pas definisi kita dan saya pribadi akan mengatakan bahwa itu tidak cocok dengan tag yang mirip dengan pertanyaan ini yang juga meminta jenis pembungkus tali.
Wheat Wizard


@WheatWizard ini adalah campuran dari beberapa genre. Mesin akan jatuh di bawah kompleksitas kolmogrov, semuanya di bawah ASCII-Art dan mungkin juga jatuh sedikit ke dalam manipulasi string.
Magic Gurita Guci

Saya mendapat kesan bahwa mengompresi pola kereta yang sebenarnya akan layak untuk tag; tapi saya hanya akan menghapusnya untuk menghentikan argumen.
Magic Octopus Urn

Jawaban:


4

05AB1E , 101 99 byte

Upaya pertama yang naif.

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

Cobalah online!


Yah, kodenya tidak menyerupai kereta api, tetapi ia menang sekarang.
Magic Gurita Guci

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

Saya tidak berpikir mesin itu sendiri dapat dikompresi, tetapi mungkin itu mungkin.

Cuplikan tes


Banyak karakter berulang, harus dimungkinkan untuk memeras lebih banyak byte dari itu.
orion

17
Orang hampir dapat melihat kereta dikemas dalam kode sumber :-)
Luis Mendo

15
Terpilih terutama karena kode menyerupai kereta
Rohan Jhunjhunwala

Poin bonus karena berjalan langsung di browser!
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_@>$$$$>,#

Cobalah online!

Penjelasan

Mobil dan mesin dikodekan sebagai dua set lima string pada baris 3 hingga 12. Nilai karakter dimatikan oleh 1 sehingga untuk menghindari harus berurusan dengan tanda kutip ganda yang tidak dapat digunakan dalam string Befunge.

Kode berfungsi dengan membangun set karakter lengkap yang diperlukan untuk membuat kereta di tumpukan. Untuk setiap jalur output, string mobil yang sesuai pertama kali ditambahkan ke tumpukan, diulang sebanyak yang diperlukan untuk kargo, dan kemudian satu salinan dari string mesin yang sesuai.

Setelah setiap baris dibangun, sepasang panah ke kiri dari string diganti dengan panah kanan, sehingga iterasi berikutnya dari loop mengikuti jalur yang berbeda melalui kode, menggunakan sepasang string yang berbeda untuk mobil dan mesin.

Setelah semua data dibangun di stack, ada loop render akhir yang menuliskan karakter, mengurangi 1 setiap kali untuk memperhitungkan pengkodean awal.

Sebagai bonus, sumber dirancang dalam bentuk menara meriam , jika kereta diserang. Pegolf menghancurkan menara pistol saya.


Pegolf menghancurkan menara pistol saya, LOL. +1. Namun, itu mengalahkan C # dan 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];

Mengambil input dari STDIN; jalankan bersama -nR.

Mengompresi mesin atau gerbong akan membutuhkan lebih banyak kode untuk didekompresi daripada menghemat penyimpanan.
Saya tidak melihat potensi di sini.


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

@ JörgHülsermann Yea posting ini kuno. :)
Titus

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

Contoh:

print f('Python')

memberi

    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 Bytes

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

Contoh:

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

Mungkin tidak valid! Jika dijalankan tanpa args, ia akan mencoba dan mencetak satu string kosong, dan terlihat seperti:

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

Namun jika dijalankan dengan string input kosong, string itu akan kembali dengan benar:

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

(agak) Tidak Disatukan:

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

Kompresi terpendek di Powershell adalah di +'c'*xmana c adalah char dan x adalah jumlah pengulangan, dan itu hanya untuk trailing atau pengulangan terkemuka, setiap pengulangan string-pusat akan membutuhkan tambahan +dan tambahan "- jadi tidak ada gunanya di mana Saya dapat melihat kompresi menghemat ruang apa pun, dan satu-satunya perangkat char yang diulang ___adalah hanya 3 karakter.

Penjelasan:

$l=($a=$args[0]).Length Ambil arg pertama, masukkan $ a, lalu ambil panjang $ a dan masukkan $ l, ini adalah satu-satunya variabel yang Anda butuhkan.

" o O O"+" ___ "*$l sebagian besar bit lainnya mengikuti format bagian kiri ini dan kemudian bagian kanan dikalikan jumlah karakter yang diperlukan.

" o "+([char[]]$a|%{" | $_ |"})loop ( |%{}) melalui $ a sebagai array char, jadi foreach (char $_ in $a)untuk versi non-pipeline, kemudian masukkan char ke dalam teks.

ini adalah pendekatan yang sangat sederhana, tetapi karena saya tidak dapat menemukan cara yang baik untuk memampatkan string melewati ini sepertinya itu yang paling berguna.

diselamatkan 1 Byte berkat briantist! dan di sini saya berpikir ini tidak akan menjadi lebih pendek ..


Anda tidak perlu menangani tanpa args :).
Magic Octopus Urn

@carus melakukan komputasi yay, terima kasih telah memberi tahu saya.
colsw

Bagus! Anda dapat menyimpan 1 byte dengan mengubah [char[]]$ake $a[0..$l] :)
briantist

ah menggunakan char array sebelum saya nyatakan $ldan benar-benar lupa. Terima kasih untuk itu!
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);

    }
}

Contoh

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

1
Saya tahu ini sudah setengah tahun, tetapi Anda bisa bermain golf cukup banyak (juga dengan menghilangkan spasi): 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 bytes ) Atau bahkan lebih jika Anda menggantinya new java.util.Scanner(System.in).nextLine()dengan v[0]input alternatif ( 279 bytes ) Cobalah di sini .
Kevin Cruijssen

2

Perl, 137 byte

132 byte kode + 5 byte untuk -pFflag.

ascii_train.pl:

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

Perhatikan bahwa saya menambahkan -atanda pada kode, tetapi itu hanya karena versi lama dari Perl memerlukan -asaat -Fdigunakan.

Untuk menjalankannya:

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

Input harus diberikan tanpa baris akhir final ( echo -nmisalnya dengan).

Penjelasan:
Dari apa yang saya lihat, kira-kira ide yang sama dengan jawaban JavaScript ETHProduction.
Tidak banyak yang terjadi: sayangnya polanya sedikit terlalu pendek untuk membuat xoperator layak digunakan.
Pertama, s/./ | $& | /gmengelilingi setiap karakter dari input dengan |(dan spasi) untuk membentuk tingkat kedua kereta.
Kemudian di dalam tali panjang itu, segala sesuatu di antara !dan garis baru adalah pola yang ingin kami ulangi untuk membuat mobil. Pengulangan itu dilakukan berkat regex s/!(.*)/$1x@F/ge. (Saya menggunakan !karena input tidak dapat menampungnya).


1

C #, 277 Bytes

Golf:

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

Tidak Disatukan:

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

Pengujian:

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

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

Dan...

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

tidak ada yang istimewa terjadi di sini .. hanya membuat setiap baris dan bergabung dengan mereka dengan baris baru.

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 Bytes

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

Cobalah online

Keluaran:

    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┼

Coba Di Sini!

Penjelasan:

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

Diperluas

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

Contoh dijalankan

$ 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

Cobalah online


0

Excel VBA, 218 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input dari jarak [A1]dan keluaran ke jendela langsung 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)]

Diformat agar mudah dibaca

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

Output Sampel

    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-'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.