ASCII Treninin Gemisi


45

Hepsi ASCII Treni'ne!

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

En iyi şekilde treni kullanmaya hazır olun, çünkü bineceğiniz treni yapmak üzeresiniz. Bir dize verildiğinde s, yukarıda gösterildiği gibi tamamen şekillendirilmiş bir tren verin. İlk şey çıktısı daima aşağıda gösterildiği gibi dizginizi çekecek olan motordur:

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

Lokomotifin ardından değerli yükünüzün her bir karakterini içeren vagonlar bulunmaktadır. Boşaltma sırasında karışıklıktan kurtulmak için şirketiniz size bu araçların dışını etiketleme görevini vermiştir. Söz konusu arabalar her zaman şöyle görünecek:

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

#"Kargo" içindeki karakterin temsil ettiği yerde tutun. Motoru tüm otomobillere zincirlemek de işinizin bir parçasıdır, çünkü tüm bu gönderinin akıcılığını ve başarısını denetlemekle görevlendirilmiştir. Bu yüzden, tüm arabaları etiketledikten ve motoru raylara yerleştirdikten sonra, trenin monte edildiğinden ve yuvarlanmaya hazır olduğundan emin olmalısınız.

kurallar

  • Programınızın alması gereken tek giriş tek bir dizedir.
  • Gönderiniz boş olsa bile motor her zaman verilmelidir.
  • Her araba sadece bir karakter tutabilir, şansınızı zorlamayın mallara zarar verebilirsiniz.
  • Yalnızca aşağıdaki yazdırılabilir ASCII karakterlerini desteklemeniz gerekir: _-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    Daha fazlasını yaparsanız, bu da iyidir, ancak bu minimum düzeydedir.
  • Tek bir takip eden yeni satır olduğu gibi 1-2 sondaki boşluklar kabul edilebilir.
  • Bu , en kısa bayt sayısı kazanır.


1
Bunun aslında kolmogorov karmaşıklığı olduğunu sanmıyorum . Bu meta yazıya dayanarak bu soru kesinlikle tanımımıza uydurma ile uyuşma arasındaki çizgidedir ve şahsen bir dizi ip sargısı için de sorulan bu soruya benzer bir etikete uymadığını söyleyebilirim .
Buğday Sihirbazı,

5
Bu güzel bir sanattır
CAD97'de

@WheatWizard çoklu türlerin bir karışımı. Motor, ASCII-Art'ın altındaki her şey kolmogrov karmaşıklığına düşecekti ve muhtemelen biraz da dize manipülasyonuna düşüyordu.
Sihirli Ahtapot Urn

Trenin asıl düzenini sıkıştırmanın etikete layık olacağı izlenimini edindim; ama tartışmayı durdurmak için onu kaldıracağım.
Magic Octopus Urn,

Yanıtlar:



37

JavaScript (ES6), 149 144 bayt

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

Motorun kendisinin sıkıştırılabileceğini sanmıyorum ama belki de mümkün.

Test pasajı


Tekrarlanan karakterlerin birçoğu, ondan daha fazla bayt sıkmak mümkün olmalıdır.
orion

17
Birisi neredeyse kaynak kodunda bulunan treni görebiliyor :-)
Luis Mendo

15
Öncelikle kod değiştirilen bir trene benzeyen Upvoted
Rohan Jhunjhunwala

Bonus puanları, tarayıcıda tam orada çalıştığı için!
DGM

6

Befunge, 276 270 bayt

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

Çevrimiçi deneyin!

açıklama

Otomobil ve motor, 3 ila 12 numaralı hatlarda iki beş tel dizisi olarak kodlanmıştır. Befunge dizisinde kullanılamayan çift tırnak ile uğraşmak zorunda kalmamak için karakter değerleri 1 ile kapatılmıştır.

Kod, treni yığında oluşturmak için gereken tüm karakter kümesini oluşturarak çalışır. Her çıktı satırı için, önce istifin üzerine uygun bir araba dizisi eklenir, kargo için gerektiği kadar tekrarlanır ve ardından uygun motor dizisinin bir kopyası.

Her bir çizgi yapıldıktan sonra, dizgilerin solundan aşağı okların bir çifti sağ ok ile değiştirilir, böylece döngünün bir sonraki yinelemesi, otomobil için farklı bir çift dizisi kullanarak kod boyunca farklı bir yol izler. motor.

Tüm veriler yığında oluşturulduktan sonra, ilk şifrelemeyi hesaba katmak için her seferinde 1 çıkartan karakterleri yazan son bir oluşturma döngüsü vardır.

Bir bonus olarak, tren saldırı altında olması durumunda, kaynak bir taret şeklinde tasarlanmıştır . Golfçüler silah taretimi mahvetti.


Golfçüler silah taretimi mahvetti, LOL. +1. Yine de, C # ve Java'yı atıyor.
Zacharý

6

PHP, 218 211 204 187 183 bayt

    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'den girdi alır; ile koş -nR.

Motoru veya vagonu sıkıştırmak, sıkıştırmayla açmak için depoda kaydettiğinden daha fazla kod gerektirir.
Burada daha fazla potansiyel göremiyorum.


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

@ JörgHülsermann Yea bu yazı eskidi. :)
Titus

4

Python 2,176 bayt

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

Örnek:

print f('Python')

verir

    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 Bayt

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

Örnek:

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

Muhtemelen Geçersiz! Hiç bir argüman olmadan çalıştırılırsa, boş bir dize yazdırmaya çalışır ve şöyle görünür:

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

Boş bir giriş dizesiyle çalıştırıyorsanız, doğru bir şekilde dönecektir:

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

(tür) Ungolfed:

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

Powershell'deki en kısa sıkıştırma, +'c'*xc'nin char ve x'in tekrarlama sayısı olduğu ve bu, sadece izleyen veya önde gelen tekrarlar için olacak, herhangi bir merkez-string tekrarlamanın bir ekstra +ve bir ekstraya ihtiyacı olacaktır "- yani burada hiçbir anlamı yoktur. Herhangi bir yerden tasarruf sağlayan sıkıştırma görebilirsiniz ve sadece tekrarlanan karakter kümesi ___sadece 3 karakterdir.

Açıklama:

$l=($a=$args[0]).Length İlk argümanı alın, $ a içine koyun, sonra $ a uzunluğunu alın ve $ l içine koyun, ihtiyacınız olan tek değişken bunlar.

" o O O"+" ___ "*$l diğer bitlerin çoğu sol bölümün bu biçimini izler ve ardından sağ bölüm gerekli karakterlerin sayısının katlarıdır.

" o "+([char[]]$a|%{" | $_ |"})loop ( |%{}) 'dan $ a' ya char dizisi olarak, yani foreach (char $_ in $a)pipeline olmayan bir versiyon için, char 'i metne yerleştirin.

bu son derece basit bir yaklaşımdır, ancak bunu geçtikten sonra dizeleri sıkıştırmanın iyi bir yolunu bulamadığım için en kullanışlı gibi görünüyor.

Britanist sayesinde 1 Byte kurtarıldı! ve burada bunun daha kısa sürmeyeceğini düşünüyordum.


Hiçbir hata yapmanıza gerek yoktu :).
Magic Octopus Urn,

@carusocomputing yay, bana bildirdiğiniz için teşekkür ederiz.
Aralık'ta

Güzel! Sen değiştirerek 1 byte kaydedebilirsiniz [char[]]$aiçin $a[0..$l] :)
briantist

ah ilan vermeden önce char array kullanıyordu $lve tamamen unutmuştum. Bunun için teşekkürler!
colsw

2

Java, 361 bayt

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

    }
}

Örnek

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

1
Bunun yarıya bir yıl oldu biliyorum ama (kaldırarak boşluklarla da) golf biraz can: 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 bayt ) Veya daha da değiştirmek durumunda new java.util.Scanner(System.in).nextLine()olan v[0]alternatif girdi olarak ( 279 bayt ) Burada deneyin .
Kevin Cruijssen

2

Perl, 137 bayt

-pFBayraklar için 132 bayt kod + 5 bayt .

ascii_train.pl:

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

Not I ekledi -akodunda bayrağı, ancak Perl eski sürümleri gerektirdiğinden teklif sadece -azaman -Fkullanılır.

Çalıştırmak için:

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

Giriş ( echo -nörneğin) ile son bir yeni satır olmadan sağlanmalıdır .

Açıklama:
Gördüğüm kadarıyla, ETHProduction'ın JavaScript cevabıyla aynı fikir.
Çok fazla bir şey yok: ne yazık ki desenler xkullanılmaya değer bir iş yapmak için biraz kısa .
İlk olarak, trenin ikinci seviyesini oluşturmak için s/./ | $& | /ggirişin her karakterini |(ve boşlukları) çevreler .
Sonra bu uzun telin içinde, !yeni bir hat ile yeni hat arasındaki her şey , arabaları inşa etmek için tekrarlamak istediğimiz bir kalıptır. Bu tekrar regex sayesinde yapılır s/!(.*)/$1x@F/ge. ( !Girdi içeremediğinden kullandım ).


1

C #, 277 Bayt

golfed:

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

Ungolfed:

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

Test yapmak:

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

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

Ve...

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 bayt

Burada özel bir şey olmuyor .. sadece her bir çizgiyi yaratın ve onlara yeni çizgilerle katılın.

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 Bayt

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

Çevrimiçi deneyin

Çıktı:

    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 bayt

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

Burada dene!

Açıklama:

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

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

Expanded

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

Örnek çalışma

$ 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

Çevrimiçi deneyin


0

Excel VBA, 218 Bayt

Menzilden giriş alan [A1]ve VBE giriş penceresine çıkış yapan anonim VBE giriş penceresi işlevi

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

Okunabilirlik için biçimlendirilmiş

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

Örnek çıktı

    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-'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.