สนามกอล์ฟ ASCII


60

ลองพิจารณารถขบวน ASCII ทั้งเจ็ดนี้

เครื่องยนต์ (E)

            __
======      \/
| [] |=========
|              )
================
 O-O-O   O-O-O \\

รถยนต์นั่งส่วนบุคคล (P)

===============
| [] [] [] [] |
===============
 O-O       O-O

Boxcar (B)

===============
|-|-|  |  |-|-|
===============
 O-O       O-O

เรือบรรทุกน้ำมัน (T)

 _____---_____
(             )
===============
 O-O       O-O

สิ่งที่กระโดด (H)

_______________
\ | | | | | | /
===============
 O-O       O-O

Flatbed (F)

===============
 O-O       O-O

คาโบส (C)

    =====
====|   |====
| []     [] |
=============
 O-O     O-O

เขียนโปรแกรมที่ให้ลำดับตัวอักษรEPBTHFCผลลัพธ์เป็นตัวแทนรถไฟ ASCII ใช้--สำหรับข้อต่อรถยนต์ อักขระอินพุตทางซ้ายสุดกลายเป็นรถยนต์รถไฟที่อยู่ขวาสุด รถไฟหันหน้าไปทางขวาเสมอ

ตัวอย่างเช่นการป้อนข้อมูลของEEHTBPFCควรผลิต

                                                                                                                __                __
    =====                                                                                           ======      \/    ======      \/
====|   |====                   ===============  ===============   _____---_____   _______________  | [] |=========   | [] |=========
| []     [] |                   | [] [] [] [] |  |-|-|  |  |-|-|  (             )  \ | | | | | | /  |              )  |              )
=============--===============--===============--===============--===============--===============--================--================
 O-O     O-O    O-O       O-O    O-O       O-O    O-O       O-O    O-O       O-O    O-O       O-O    O-O-O   O-O-O \\  O-O-O   O-O-O \\

รายละเอียด

  • นี่คือรหัสกอล์ฟ โปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ
  • ลำดับของตัวอักษรอย่างน้อยหนึ่งตัวใด ๆEPBTHFCเป็นอินพุตที่ถูกต้อง
  • โปรแกรมของคุณจะต้องสามารถส่งออกรถยนต์ทั้ง 7 ประเภทได้ตามที่ปรากฏด้านบน
  • รับอินพุตจากบรรทัดคำสั่งหรือโดยตรงจากผู้ใช้ (เช่นกล่องข้อความ) ส่งออกไปยัง stdout (เครื่องหมายคำพูดรอบอินพุตเป็นปกติ)
  • ความสูงของเอาต์พุตควรเป็น 6 หรือความสูงสูงสุดที่ต้องการสำหรับรถยนต์รถไฟที่ถูกดึงออกมา
  • อย่าใส่คัปปลิ้ง ( --) ที่ด้านหน้าของรถคันแรกหรือด้านหลังของรถคันสุดท้าย


จะมีEที่ด้านหน้าและจะมีEที่ตรงกลางหรือไม่?
มาร์ตินเอนเดอร์

1
"โปรแกรมที่สั้นที่สุดชนะ" => เรานับจำนวนไบต์หรือตัวอักษรหรือไม่?
xem


1
อีกคำถามที่เกี่ยวข้อง: codegolf.stackexchange.com/q/4690/9498
Justin

คำตอบ:


21

Perl, 265 ไบต์

เนื่องจากรายการนี้มีไบต์ที่ไม่สอดคล้องกับอักขระ ASCII ที่พิมพ์ได้จึงไม่สามารถคัดลอกวางที่นี่โดยตรง แต่ฉันกำลังให้มันเป็นฐานสิบหกแทน ผู้ใช้บนระบบ Unix-ish สามารถสร้างสคริปต์ขึ้นมาใหม่โดยป้อน hex dump ต่อไปนี้ไปยังxxd -rคำสั่ง:

0000000: 7573 6520 436f 6d70 7265 7373 275a 6c69  use Compress'Zli
0000010: 623b 6576 616c 2075 6e63 6f6d 7072 6573  b;eval uncompres
0000020: 7320 2778 daad 9241 6b83 3014 c7ef f914  s 'x...Ak.0.....
0000030: ef10 6add f67c 5ed6 8b06 c646 476f dda1  ..j..|^....FGo..
0000040: 3723 c183 1d85 8212 c740 087e f625 a6a3  7#.......@.~.%..
0000050: b1f6 24fd 3de1 3d7f e8fb e790 b74a 74ed  ..$.=.=......Jt.
0000060: f9f4 c3e9 25cf a328 6310 a094 6b4c 8c78  ....%..(c...kL.x
0000070: 2569 5406 8a12 8cf8 c7ab 09b1 ff71 0222  %iT..........q."
0000080: 833d da02 b874 2981 c10d 3333 df74 39c1  .=...t)...33.t9.
0000090: f531 d6dc 0f03 8f9f 9666 a12d 7021 6e7a  .1.......f.-p!nz
00000a0: 6416 2807 228e dd99 3584 c40f cc52 53ac  d.(."...5....RS.
00000b0: 9160 82a2 4559 0bcd a22c ff2e 1cc1 0e63  .`..EY...,.....c
00000c0: 9d09 6f85 25b8 13b3 8470 3fe3 5c27 a1eb  ..o.%....p?.\'..
00000d0: df5a 7735 b44d 2b86 9eb6 5fef 87dd e707  .Zw5.M+..._.....
00000e0: a5b8 219d b1ae eaed 3743 4709 f1aa d83c  ..!.....7CG....<
00000f0: f1d5 3357 257d 6be7 1039 9186 63a3 214d  ..3W%}k..9..c.!M
0000100: 9257 f607 1251 a1e7 27                   .W...Q..'

สคริปต์ใช้ Perl 5.10 sayคุณลักษณะและอื่น ๆ perl -M5.010จะต้องมีการทำงานกับ ใช้อาร์กิวเมนต์บรรทัดคำสั่งเดียวประกอบด้วยตัวอักษรEPBTHFCและผลลัพธ์การจัดเรียงรถไฟรถ ตัวอย่างเช่นอินพุตFEHสร้างเอาต์พุตต่อไปนี้:

                             __                     
                 ======      \/                     
_______________  | [] |=========                    
\ | | | | | | /  |              )                   
===============--================--===============
 O-O       O-O    O-O-O   O-O-O \\  O-O       O-O   

โค้ดที่สามารถอ่านได้ที่จุดเริ่มต้นของสคริปต์จะทำการคลายบีบอัดสตริงที่บีบอัดด้วย zlib ที่มีเนื้อความของสคริปต์และทำการวิเคราะห์ ในที่สุดโค้ดที่คลายการบีบอัดจะมีลักษณะดังนี้:

@a=split$/,<<'';
            __    
======      \/    
| [] |=========   
|              )  
================--
 O-O-O   O-O-O \\ 


===============  
| [] [] [] [] |  
===============--
 O-O       O-O   


===============  
|-|-|  |  |-|-|  
===============--
 O-O       O-O   


 _____---_____   
(             )  
===============--
 O-O       O-O   


_______________  
\ | | | | | | /  
===============--
 O-O       O-O   




===============--
 O-O       O-O   

    =====      
====|   |====  
| []     [] |  
=============--
 O-O     O-O   

$i=reverse pop=~y/EPBTHFC/0-6/r;
say$i=~s/./$a[6*$&+$_]/gr=~s/--$//r for 0..5

โปรดทราบว่ารถยนต์รถไฟทุกคันมีเบาะที่มีช่องว่างยาวเท่ากันและรวมคัปปลิ้ง (ซึ่งถอดออกจากรถขวาสุดโดยลูปเอาท์พุท) การบีบอัด DEFLATE ที่ใช้โดย zlib นั้นดีมากในการบีบอัดข้อมูลซ้ำดังนั้นจึงไม่จำเป็นต้องลองและบีบอัดด้วยมือ

โปรดทราบว่านี่เป็นความพยายามครั้งแรกอย่างรวดเร็ว ฉันแน่ใจว่ามันจะเป็นไปได้ที่จะโกนความยาวหลายไบต์ด้วยการเล่นกับรูปแบบต่าง ๆ เช่นการจัดลำดับรถรางในแหล่งที่มา


62

Python 464

from curses import*
E,P,B,T,H,F,C='eJyNkM0NgDAIhe9MwVEPpBN0AxMHsKaLdHgfpVr7E+NHUyCQR4C5EiP5jKXBUeLj5ORvkDes5DtEiHeBoWo+hI36NtN9XurrRaVMQTSTEBizPo3+SGBBICLZ0/K9y0whtlDA/Gruj8SwyaRJA9tSPz16qmdTxqO9VeAvC5VloQ=='.decode('base64').decode('zlib').split('L')
i=[s.split('\n')for s in map(eval,raw_input()[::-1])]
h=max(sum(map(bool,s))for s in i)
w=initscr()
x=0
for t in i:[w.addstr(y,x,t[y+6-h])for y in range(h)];x+=len(t[-2])
w.addstr(h-2,x-2,'  ')
w.getch()
endwin()

ฉันไปหาแนวทางโดยใช้คำสาป มันไม่สามารถแข่งขันได้จริงๆ แต่ฉันสนุกกับมัน (~ 630 ไบต์):

รถไฟ

from curses import*
E,P,B,T,H,F,C='eJyFkMENwCAIRe9M8Y/tgTiBGzTpALVxEYcvSFqiNO2DCAb8BgCnVsodu5ZEDceJlm/kPrBSniDsLCY1i6VsNDeZ6uMt1GEKMJU3ARYD1DX7F5DRBGbukZbvKeL7OkJF/nZL/wJxhrlFE6vooYtuviwlrso1JF745GMr'.decode('base64').decode('zlib').split('L')
i=[s.split('\n')for s in map(eval,raw_input()[::-1])]
h=max(sum(map(bool,s))for s in i)
w=initscr()
m=w.getmaxyx()[1]
for o in range(-sum(2+len(t[-2])for t in i),m):
 x=o
 for t in i:
  if m>x>o:w.addnstr(h-2,max(x,0),'--'[max(0,-x):],m-x);x+=2
  [w.addnstr(y,max(x,0),t[y+6-h][max(0,-x):],m-x)for y in range(h)if x<m];x+=len(t[-2])
 w.move(h,0);w.refresh();w.clear();napms(90)
endwin()

10
ว้าวภาพเคลื่อนไหวนั้นยอดเยี่ยมมาก! (+1) GIF แบบเคลื่อนไหวทำงานในโพสต์ดังนั้นคุณสามารถแก้ไขรูปภาพจริงแทนที่จะเป็นลิงค์ซึ่งจะทำให้โซลูชันของคุณดูสมจริงยิ่งขึ้น ;)
Doorknob

2
@Doorknob ขอบคุณ ฉันจะใส่ภาพ - ฉันไม่แน่ใจว่า GIF เคลื่อนไหวจะน่ารำคาญเกินไปหรือไม่
grc

24
@grc น่ารำคาญ? คุณแน่ใจหรือว่าคุณไม่ได้หมายถึงน่ากลัว
nderscore

4
ไม่มีอะไรดีไปกว่า ASCII GIF ศิลปะ +1!
Chris Cirefice

4
ส่งไปที่ Homebrew! sl2.0
Kroltan

8

Python ( 582 488 476 450 Chars)

import sys
A=sys.argv[1]
h=0
c='eJyVkrEKAzEIhnef4h97g9x+kOVKS7d2uK0peZE8fNXQS3NCpb+BREU/YnIhfKkUgJKpBfIsgYrnCzV9pIFBE6WDCHcWk1zbMy0PGovg/GMPw+6rujwaAY0CWtb/ESwG6NJTjNhChMxQxMy2g06/R+URtxBRRlGWC3SbY8Q1vkXgh4gz+Qb7v7Jy/US1P7TKP3NvbG3fy/V/Cw=='.decode('base64').decode('zlib').split(':')
C={}
for x in c:X=x.split('\n');C[X[0]]=X[1:-1]
for c in A:h=max(h,1+('F..CE'.find(c)+1or 3))
for y in range(6-h,6):print(' -'[y==4]*2).join(C[c][y]for c in A[::-1])

ascii-Salad เป็นสตริงที่บีบอัด zlib ที่เข้ารหัส 64 ที่มีตัวเลข ...


1. string.decode('base64')2. j=lambda y:y==4and'--'or' '3. เยื้องพื้นที่ 1 รายการ 4. for c in A[::-1]:i.append(C[c][y])5.f.append(j(y).join(i)
seequ

นอกจากนี้ 6 บรรทัดสุดท้ายอาจเป็นfor l in((y==4and'--'or' ').join(C[c][y]for c in A[::-1])for y in range(6-h,6)):print l
seequ

1
ฉันเสนอการแก้ไขพร้อมการปรับปรุงบางอย่าง
seequ

1
มาคิดว่ามันบรรทัดสุดท้ายอาจจะเป็นfor y in range(6-h,6):print(y==4and'--'or' ').join(C[c][y]for c in A[::-1])
seequ

@TheRare รวมการปรับปรุงครั้งที่สองของคุณ (!) ไว้ด้วย! เจ้า!
max.haredoom

7

Python, 402 369

import sys
for n in range(6):
 l= sys.argv[1][::-1]
 for x,y in zip("EPBTHFC",range(0,42,6)):
  l=l.replace(x,'eJytktsNgCAMRVfpp340TMAHEziAGBZhePvgLYmGeGosXqQXSAEqIfDbWUElb0SKcF4QbUaljr0srCA6OJCC5jV7cDAyUYY6eQPlic9/kleqoKNVL6QANkmj37zohglElMzK9naJy16hhxRPR6ph/jzXB2XBS76bZpQa3Hex7Qpm1hOtg+Yb0a6PSA=='.decode('base64').decode('zlib').split('A')[y+n]).strip('-')
 print l

ขอบคุณสำหรับการปรับปรุง ugoren!


ขอบคุณสำหรับการจัดรูปแบบรหัสของฉัน! ฉันค่อนข้างใหม่สำหรับสิ่งนี้และโดยสุจริตฉันไม่รู้ว่าฉันกำลังทำอะไรอยู่
Elveone

1
บันทึกตัวอักษรบางตัว: range(6),for x,y in zip("EPBTHFC",range(0,42,6)):
ugoren

4

Javascript,> 471 ไบต์

อึอึอยู่เหนือคะแนนที่ดีที่สุดแล้วและฉันก็ยังไม่ได้พิมพ์มันทุกอย่างตามลำดับ แต่ฉันใช้เวลาบ่ายนี้และยังต้องการแสดงมัน

function c(i){
    var i=i.replace(/f/,"=15r h 7h").match(/(\D)(\d+)?/g),
    s={
        's':'\\',
        'w':' []',
        'b':' |',
        'h':'O-O',
        't':'-|',
        'r':'\n'
    }
    ,
    a=[];
    for(j in i){
        x=/(\D)(\d+)?/g.exec(i[j]),
        a[j]=x[1],
        n=x[2]/1,
        o="";
        while(x[2]&&0<n--)o+=a[j];
        a[j]=o||a[j];
    }
    r=a.join('');
    for(j in s)r=r.replace(RegExp(j,"g"),s[j]);
    return r;
}
E=" 12_2r=6 6s/r|wb=9r| 14)r=16r h-O 3h-O ss",
P="r2=15r|w4brf",
B="r2=15r|t2 b bt2rf",
T="r2 _5-3_5r( 13)rf",
H="r2_15rsb6 /rf",
F="r4f",
C="r 4=5r=4| 3|=4r|w 4wbr=13r h 5h";
console.log(c(C));

เพียงconsole.log(c(L)); // L=train car letterและมันจะพิมพ์รถคันเดียวในคอนโซล ฉันรู้ว่ามีการตัดแต่งจำนวนมากที่ฉันสามารถทำได้แม้เพียงแค่นี้ แต่ฉันก็ยอมแพ้ : P


6
ฉันต้องทำมัน: jsfiddle.net/34w2z
William Barbosa

3
@WilliamBarbosa ฮ่าฮ่าฉันปัญญาอ่อน ฉันชอบ "สิ่งนี้วิเศษอะไรรหัสของฉันกำลังเคลื่อนไหว" และค้นหาสิ่งที่คุณเปลี่ยนไปในสคริปต์เพื่อให้เลื่อน ... จากนั้นขยับตาของฉันขึ้นไปที่ HTML อ่า<marquee>เจ้าปีศาจมารร้าย ทำไมพวกเขาถึงไม่คัดค้านคุณ?
Phil Tune

4
@WilliamBarbosa ฉันเชื่อว่าคุณพบการใช้งานที่ถูกต้องสำหรับแท็กนี้เท่านั้น
Mike Clark

3

Java (583 ตัวอักษร)

ด้วยการบีบอัดโฮมเมดขั้นพื้นฐาน - ไม่แน่ใจว่ามันมีประสิทธิภาพมาก แต่ :-) สตริงรถไฟ (เช่นEEHTBPFC) จะต้องถูกส่งผ่านเป็นพารามิเตอร์

class C{public static void main(String[]a){String s="",y="thAthA",x=" *!*h*!* A",q="vjA",r=q+x+y;String[]m=("hP78A^\\#$8A% &' %j.,A%hh) Ajj.A *!*!*8*!*!* /A"+y+q+"% &' &' &' &' %A"+r+q+"%!%!%,%,%!%!%A"+r+" [9[ A(tP)A"+r+"ss+A# % % % % % % $A"+r+y+q+x+"tPADRDAF%8%FA% &'P&' %AvRA *!*P*!* ").split("A");for(int l,z,i,j=0;j<6;j++){for(i=a[0].length()-1;i>=0;i--){z=a[0].charAt(i);r=m["EPBTHFC".indexOf(z)*6+j];for(int c:r.toCharArray()){c-=32;for(l=0;l<=c/12;l++)s+=" -=\\/|[]()O_".charAt(c%12);}if(i>0)for(l=0;l<(z=='E'&&j!=4?1:2);l++)s+=j==4?"-":" ";}s+="\n";}System.out.println(s);}}

กางออก:

class C{
    public static void main(String[]a){
        String s="",y="thAthA",x=" *!*h*!* A",q="vjA",r=q+x+y;
        String[]m=("hP78A^\\#$8A% &' %j.,A%hh) Ajj.A *!*!*8*!*!* /A"+y+q+"% &' &' &' &' %A"+r+q+"%!%!%,%,%!%!%A"+r+" [9[ A(tP)A"+r+"ss+A# % % % % % % $A"+r+y+q+x+"tPADRDAF%8%FA% &'P&' %AvRA *!*P*!* ").split("A");
        for(int l,z,i,j=0;j<6;j++){
            for(i=a[0].length()-1;i>=0;i--){
                z=a[0].charAt(i);
                r=m["EPBTHFC".indexOf(z)*6+j];
                for(int c:r.toCharArray()) {
                    c-=32;
                    for(l=0;l<=c/12;l++)
                        s+=" -=\\/|[]()O_".charAt(c%12);
                }
                if(i>0)for(l=0;l<(z=='E'&&j!=4?1:2);l++)s+=j==4?"-":" ";
            }
            s+="\n";
        }
        System.out.println(s);
    }
}

3

C #, 758 664 603 562bytes

ไม่ใช่คะแนนที่ยอดเยี่ยม 200 ไบต์หรือมากกว่านั้นในสตริงที่เข้ารหัสไม่ดีและประมาณ 80 ไบต์ที่ใช้ในการถอดรหัส ทำลายรหัสของการใช้จ่ายในการแยกข้อต่อของเครื่องยนต์! ตอนนี้มันเหลือช่องว่างสีขาวที่ด้านหน้าของรถไฟซึ่งไม่เป็นระเบียบ แต่อยู่ในกฎและมันก็มีมิติของรหัสข้อมูลที่เข้ารหัสยากซึ่งเป็นสิ่งที่ฉันลังเลที่จะทำในตอนแรก

using c=System.Console;class P{static void Main(){string d=c.ReadLine(),a="",z=@"99 1_5 4=78 5=5 \/1 3=|2 |3=14 29= 4_2-4_ 14_| [] |8= | []4 [] |14 | [] [] [] [] 1|-|-|1 |1 |-|-|(12 )\ | | | | | | /|13 )103= O-O4 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O-O2 O-O-O c";int j=0,e;foreach(var h in z)if(h>47&&h<58)j=j*10+h-48;else for(j++;j>0;j--)a+=h;int[]x={0,13,28,43,58,73,88,104};for(;j<6;j++){z="";foreach(var h in d)z=a.Substring(j*104+x[e="CFPBTHE".IndexOf(h)],x[e+1]-x[e])+(j==4?"--":"  ")+z;c.WriteLine(z.Replace("c ",@"\\").Trim('-'));}}}

ฟอร์แมตเล็กน้อย:

using c=System.Console;
class P{static void Main(){
    string d=c.ReadLine(),a="",z=@"99 1_5 4=78 5=5 \/1 3=|2 |3=14 29= 4_2-4_ 14_| [] |8= | []4 [] |14 | [] [] [] [] 1|-|-|1 |1 |-|-|(12 )\ | | | | | | /|13 )103= O-O4 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O-O2 O-O-O c";

    int j=0,e;

    foreach(var h in z)
        if(h>47&&h<58)
            j=j*10+h-48;
        else
            for(j++;j>0;j--)
                a+=h;

    int[]x={0,13,28,43,58,73,88,104};

    for(;j<6;j++)
    {
        z="";
        foreach(var h in d)
            z=a.Substring(j*104+x[e="CFPBTHE".IndexOf(h)],x[e+1]-x[e])+(j==4?"--":"  ")+z;
        c.WriteLine(z.Replace("c ",@"\\").Trim('-'));
    }
}}

สตริงถูกบีบอัดอย่างง่าย ๆ โดยการแทนที่อักขระซ้ำด้วยการแสดงสตริงของจำนวนอักขระตามด้วยอักขระ (ลบ 1) หรือเพียงแค่อักขระถ้ามีเพียงหนึ่งตัวเท่านั้น (ฉันต้องการติดกับ ASCII และหลีกเลี่ยงการทำอะไร ที่ระดับ sub-char) ตัวเข้ารหัส (ไม่รวมอยู่ในคะแนน):

string compress(string str)
{
    str += (char)0; // too lazy to write a proper loop
    string res = "";

    char prev = str[0];
    int count = 1;

    for (int i = 1; i < str.Length; i++)
    {
        char cur = str[i];
        if (cur != prev)
        {
            if (count != 1)
                res += (count - 1).ToString();
            res += prev;

            prev = cur;
            count = 1;
        }
        else
        {
            count++;
        }
    }

    return res;
}

3

นี่คือทางออกของฉันใน PHP (รองรับ v5.4), 512bytes อาจจะสั้นกว่านี้ก็ได้ แต่ลองสร้างงานด่วนเพื่อลองทำดู

<?php $m=array_combine(str_split('EPBTHFC'),explode('$',gzinflate(base64_decode('jZDBDYAwCEXvfwoOHvRAnKAzOICYLtLhhVYlrY320RQI5BMgcmJEyJRUViTaD0rhRvOKBaEBtLGa1ooXmdA2FdXnJfQ0rgkW9RRYjcieRQMKupzCzNlj/t6jIxBrIDrdbR1QwH+PRaVkn107+cWM971cxPwJ'))));$t=['','','','','',''];$i=str_split(strrev(strtoupper($argv[1])));foreach($i as $w=>$n){$c=$m[$n];$c=explode("\n",$c);foreach($t as $j=>&$p){$p.=str_pad($c[$j],$n=='E'?18:($n=='C'?15:17),$j==4?'-':' ');if($w==count($i)-1)$p=rtrim($p,' -');}}echo implode("\n",$t)."\n";

นี่เป็นเวอร์ชันที่กระจายออกเพื่อให้อ่านง่าย:

<?php
$m=array_combine(
    str_split('EPBTHFC'),
    explode('$',
        gzinflate(
            base64_decode(
                'jZDBDYAwCEXvfwoOHvRAnKAzOICYLtLhhVYlrY320RQI5BMgcmJEyJRUViTaD0rhRvOKBaEBtLGa1ooXmdA2FdXnJfQ0rgkW9RRYjcieRQMKupzCzNlj/t6jIxBrIDrdbR1QwH+PRaVkn107+cWM971cxPwJ'
            )
        )
    )
);
$t=['','','','','',''];
$i=str_split(strrev(strtoupper($argv[1])));
foreach($i as $w=>$n)
{
    $c=$m[$n];
    $c=explode("\n",$c);
    foreach($t as $j=>&$p)
    {
        $p.=str_pad($c[$j],$n=='E'?18:($n=='C'?15:17),$j==4?'-':' ');
        if($w==count($i)-1)$p=rtrim($p,' -');
    }
}
echo implode("\n",$t)."\n";

2

Python ขนาด 491 ไบต์

import zlib as z,sys,base64 as d
y=eval(z.decompress(d.b64decode('eNqlksEOwiAMhl/lv1WTkd1NdtFovLmDt7HwIOK729LJmJDY6F8SyA/0g6YPOtNhIhQKAaCOhiS1fJ+siGlGHN5Sa6N9vriKLdwcB+/r7D3NHY2fYCRI7dT50kPyiM0zUCKUCiEe/yA6DkCGrKzEu5XIVWc559Iszu5bYdvEq5UYtmLH8/fW6K3Ei/mPP1W+QTxVxCVXbtklk3RnLHtG1OqYkqOU5wsfZZmx')))
w=sys.argv[1][::-1]
x=[""]*6
v=range
u=len(w)
for j in v(6):
 for i in v(u):
  if j==5 and w[i]=='E':k="\\ "
  elif j==4 and i!=u-1:k="--"
  else:k="  "
  x[j]+=y[w[i]][j]+k
for q in x:print q

ฉันชอบที่มันออกมาแม้ว่ามันจะไม่ใช่ผู้ชนะ


คุณอาจจะเปลี่ยนif j==5...x[j]+=y[w[i]][j]+kไปx[j]+=y[w[i]][j]+('\\ 'if j==5 and w[i]=='E'else'--'if j==4 and i!=u-1 else' ')เพื่อประหยัดบิต (นอกจากนี้คุณสามารถใส่แท็บแทนช่องว่างสองช่องที่อยู่ด้านหน้าx[j]...)
Calvin's Hobbies

1

GNU sed , 491 bytes

s/./& #/g
s:E:0S__s%1esss\\/s%2|bpef %3|Ss)%4E=@5 o-Os o-O \\\\:g
s/P/zE%3|bbbbp%4E@5ut/g
s/B/zE%3|-|-|s|s|-|-|%4E@5ut/g
s/T/z l---l %3(S )%4E@5ut/g
s:H:zlll%3\\pppppp /%4E@5ut:g
s/F/zSs %3Ss %4E@5ut/g
s/C/0S %1ssf==ss%2f=|spf=%3|bssbp%4ee=@5 ts t/g
s/z/0Ss %1Ss %2/g
s/%/s%/g
s/@/--%/g
s/u/ tss /g
s/t/os/g
s/S/ssssss/g
s/s/  /g
s/E/eef/g
s/e/ff/g
s/f/===/g
s/b/ []/g
s/p/ |/g
s/o/O-O/g
s/l/_____/g
s/^/0123456;/
:
s/([0-6])(.*;)\1([^%#]+)[%#](.*)/\1\3!\2\4/
t
s/(--!)?[1-6]/\n/g
s/[0!;]//g

ลองออนไลน์!

คำอธิบาย

นี่เป็นรูปแบบการบีบอัดที่กำหนดเองขั้นสูง บรรทัดแรกจะต่อท้ายแต่ละตัวอักษรในอินพุตเว้นวรรคและ#เพื่อทำเครื่องหมายจุดสิ้นสุดของแต่ละส่วน:

s/./& #/g

7 บรรทัดถัดไปแทนที่ตัวอักษรแต่ละตัวด้วยการบีบอัดภาพของภาพ ASCII ที่เกี่ยวข้อง:

s:E:0S__s%1esss\\/s%2|bpef %3|Ss)%4E=@5 o-Os o-O \\\\:g
s/P/zE%3|bbbbp%4E@5ut/g
s/B/zE%3|-|-|s|s|-|-|%4E@5ut/g
s/T/z l---l %3(S )%4E@5ut/g
s:H:zlll%3\\pppppp /%4E@5ut:g
s/F/zSs %3Ss %4E@5ut/g
s/C/0S %1ssf==ss%2f=|spf=%3|bssbp%4ee=@5 ts t/g

14 บรรทัดถัดไปทำ "คลายการบีบอัด" ตัวอย่างเช่นการSคลายการบีบอัดถึงหกses และการsขยายการบีบอัดถึงสองช่องว่างดังนั้นSกลายเป็น 12 ช่องว่าง

s/z/0Ss %1Ss %2/g
s/%/s%/g
s/@/--%/g
s/u/ tss /g
s/t/os/g
s/S/ssssss/g
s/s/  /g
s/E/eef/g
s/e/ff/g
s/f/===/g
s/b/ []/g
s/p/ |/g
s/o/O-O/g
s/l/_____/g

#แตกสายของรถแต่ละคันจะนำหน้าด้วยเลขบรรทัดและรถแต่ละคันจะถูกยกเลิกโดย ส่วนที่เหลือของรหัสจะเติม0123456;(หมายเลขบรรทัดและตัวคั่น) ไปยังพื้นที่รูปแบบจากนั้นในวงจะแทนที่แต่ละหลักด้วยบรรทัดที่สอดคล้องกันของรถยนต์แต่ละคัน

s/^/0123456;/
:
  s/([0-6])(.*;)\1([^%#]+)[%#](.*)/\1\3!\2\4/
  t

ในที่สุดมันจะตัดพื้นที่รูปแบบเป็นเส้นโดยแยกเป็นตัวเลขและล้างอักขระที่ไม่เกี่ยวข้อง:

s/(--!)?[1-6]/\n/g
s/[0!;]//g

มีห้องพักมากมายสำหรับการปรับปรุงที่นี่ ฉันไม่ได้เข้มงวดกับการหาชุดบีบอัดที่เหมาะสมที่สุดและการใช้ตารางการค้นหาแทนการแยก 14 รายการs///gจะเป็นเรื่องง่าย ฉันอาจจะหรืออาจจะไม่ก๋วยเตี๋ยวด้วยนี้อีก


1

Python 3 , 529 ไบต์

a=['']*6
T,R="EPBTHFC",{'S':' '*3,'E':'='*3,'W':'[] ','U':'_'*5,'P':'| ','H':'O-O'}
A=('SSSS__  ',)+('S'*5,)*5+('SSSS ',),('EESS\/  ',)+('S'*5,)*5+('S E==S ',),('PW|EEE ','E'*5,'E'*5,' U---U ','U'*3,'S'*5,'E=|S|E='),('P SSSS)','PWWWW|','|-|-P P |-|-|','(SSSS )','\ PPPPPP/','S'*5,'PWS W|'),('E'*5+'=--',)+('E'*5+'--',)*5+('EEEE=--',),(' H-OSH-O \\\\ ',)+(' HSS HS',)*5+(' HS  HS',)
for C in input():
 for I in range(6):
  a[I]=A[I][T.index(C)]+'  '*(I<4)+a[I]
  for k in R:a[I]=a[I].replace(k,R[k])
a[4]=a[4][:-2]
[*map(print,a)]

ลองออนไลน์!

คิดว่าฉันจะโพสต์มันเพราะมันไม่ได้ใช้การบีบอัดใด ๆ ซึ่งแตกต่างจากคำตอบส่วนใหญ่ที่นี่


1

C (gcc) , 501 499 490 489 484 ไบต์

-2 -9 -1 -5 ไบต์ขอบคุณที่ceilingcat

#define A": O-Og O-O:o=:"
char*p,*q,s[80];j,k,n;main(i,a)char**a;{for(i=6;i--;puts(q))for(k=strlen(a[1]);k--;*q=0,printf("%-*s%s",j?j^6?15:13:16,s,k?i^1?!j*!i+"  ":"--":q)){j=index(p="EPBTHFC",a[1][k])-p;for(n=j*6+i,p=" O-O-Oc O-O-O \\\\:p=:|n ):| [] |i=:f=f \\/:l __"A"| [] [] [] [] |:o=::"A"|-|-|  |  |-|-|:o=::"A"(m ): e_c-e_::"A"\\ | | | | | | /:o_::"A":::: O-Oe O-O:m=:| []e [] |:d=|c |d=:d e=::";n--;)for(;*p++-58;);for(q=s;*p^58;p++)for(n=*p>96&*p<123?*p++-96:1;n--;)*q++=*p;}}

ลองออนไลน์!


@ceilingcat ไชโย!
Gastropner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.