ASCII ट्रेन गोल्फ


60

इन सात ASCII ट्रेन कारों पर विचार करें।

इंजन (E)

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

यात्री कार (पी)

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

बॉक्सकार (B)

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

टैंकर (टी)

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

हॉपर (एच)

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

फ्लैटबेड (F)

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

काबोज़ (C)

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

एक प्रोग्राम लिखें, जब वर्णों का एक क्रम दिया जाता है EPBTHFC, तो यह --कार कपलिंग के लिए एएससीआईआई ट्रेन प्रतिनिधित्व का आउटपुट देता है। सबसे बाएं इनपुट वर्ण सबसे सही ट्रेन कार बन जाते हैं। ट्रेन हमेशा सही का सामना कर रही है।

उदाहरण के लिए, एक इनपुट का 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 कार प्रकारों को आउटपुट करने में सक्षम होना चाहिए, जैसा कि वे ऊपर दिखाई देते हैं।
  • कमांड लाइन से या सीधे उपयोगकर्ता से इनपुट लें (जैसे संदेश बॉक्स)। स्टडआउट के लिए आउटपुट। (इनपुट के आसपास के उद्धरण ठीक हैं।)
  • आउटपुट की ऊंचाई या तो 6 होनी चाहिए या खींची जाने वाली ट्रेन कारों के लिए आवश्यक अधिकतम ऊंचाई होनी चाहिए।
  • --पहली कार के पीछे या आखिरी कार के पीछे कपल्स न लगाएं ।


क्या हमेशा Eआगे की तरफ होगा और Eबीच में कहीं हो सकता है ?
मार्टिन एंडर

1
"सबसे छोटा कार्यक्रम जीतता है।" => क्या हम बाइट्स या वर्णों की गणना करते हैं?
xem


1
एक अन्य संबंधित प्रश्न: codegolf.stackexchange.com/q/4690/9498
जस्टिन

जवाबों:


21

पर्ल, 265 बाइट्स

चूंकि इस प्रविष्टि में बाइट्स होते हैं जो मुद्रण योग्य ASCII वर्णों के अनुरूप नहीं होते हैं, इसलिए इसे सीधे यहां कॉपी-पेस्ट नहीं किया जा सकता है। इसके बजाय, मैं इसे हेक्स डंप के रूप में प्रदान कर रहा हूं। यूनिक्स-ईश सिस्टम पर उपयोगकर्ता 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..'

स्क्रिप्ट पर्ल 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

ध्यान दें कि सभी ट्रेन कारों में एक समान लंबाई के लिए रिक्त स्थान के साथ उनकी पंक्तियाँ होती हैं, और इसमें युग्मन शामिल होता है (जो आउटपुट लूप द्वारा सबसे दाहिनी कार से छीन लिया जाता है)। Zlib द्वारा उपयोग किया गया DEFLATE संपीड़न इस तरह के दोहराए गए डेटा को संपीड़ित करने में बहुत अच्छा है, इसलिए इसे हाथ से प्रयास करने और संपीड़ित करने की कोई आवश्यकता नहीं है।

ध्यान दें कि यह एक त्वरित पहला प्रयास है। मुझे यकीन है कि स्रोत में ट्रेन कारों को फिर से व्यवस्थित करने जैसे विविधताओं के साथ खेलते हुए लंबाई से कई बाइट्स दाढ़ी करना संभव होगा।


62

पायथन, 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 पोस्ट में काम करते हैं, इसलिए आप एक लिंक के बजाय वास्तविक छवि को संपादित कर सकते हैं, जो आपके समाधान को कट्टर बना देगा। ;)
दरवाज़े

2
@Doorknob धन्यवाद। मैं छवि डालूँगा - मुझे यकीन नहीं था कि अगर एक एनिमेटेड GIF बहुत कष्टप्रद होगा।
जीसी

24
@ गुस्सा आ रहा है? क्या आप वास्तव में AWESOME का मतलब नहीं हैं?
अंडरस्कोर

4
ASCII कला gif से बेहतर कुछ नहीं है। +1!
क्रिस क्रेफ़िस

4
इसे Homebrew को भेजें! sl२.०
क्राल्टन

8

पायथन ( 582 488 476 450 शुल्क)

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

आस्की-सलाद एक बेस 64 एनकोडेड ज़्लिब-कम्प्रेस्ड स्ट्रिंग है जिसमें आंकड़े हैं ...


1. string.decode('base64')2. j=lambda y:y==4and'--'or' '3. 1-अंतरिक्ष for c in A[::-1]:i.append(C[c][y])f.append(j(y).join(i)
संकेत

इसके अलावा, अंतिम 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
मैंने कुछ सुधारों के साथ एक संपादन की पेशकश की।
२१

1
इसके बारे में सोचने के लिए आओ, अंतिम पंक्ति हो सकता हैfor y in range(6-h,6):print(y==4and'--'or' ').join(C[c][y]for c in A[::-1])
seequ

@ TheRare अपने दूसरे (!) सुधार को शामिल करें! तेरा!
मैक्सिममेडूम

7

अजगर, 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

सुधार के लिए धन्यवाद, बदसूरत!


मेरा कोड फ़ॉर्मेट करने के लिए धन्यवाद! मैं इसके लिए नया हूं और ईमानदारी से कहूं तो मुझे नहीं पता कि मैं क्या कर रहा हूं।
एल्वॉन

1
: कुछ वर्ण सहेजें range(6),for x,y in zip("EPBTHFC",range(0,42,6)):
ugoren

4

जावास्क्रिप्ट,> 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और यह कंसोल में एक ही कार को प्रिंट करेगा। मुझे पता है कि बहुत सारी ट्रिमिंग है मैं बस इतना भी कर सकता था, लेकिन मैंने हार मान ली। : पी


6
मुझे यह करना था: jsfiddle.net/34w2z
विलियम बारबोसा

3
@IlliamBarbosa हाहा, मैं मंदबुद्धि हूं। मैं ऐसा था, "यह कैसा जादू है? मेरा कोड बढ़ रहा है।" और इसे स्क्रॉल करने के लिए आपने स्क्रिप्ट में जो कुछ भी बदला है, उसके लिए सभी खोज कर रहे हैं ... फिर मेरी आंखों को HTML तक स्थानांतरित कर दिया। आह, <marquee>तुम शैतान का सामना करो। उन्होंने कभी आपको अपदस्थ क्यों किया?
फिल ट्यून

4
@WilliamBarbosa मुझे विश्वास है कि आपने इस टैग के लिए केवल और केवल वैध उपयोग किया है।
माइक क्लार्क

3

जावा (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

सी #, 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), या सिर्फ चरित्र यदि उनमें से केवल एक है (मैं एएससीआईआई के साथ रहना चाहता था और कुछ भी करने से बचना चाहता था उप-चार स्तर पर)। एनकोडर (स्कोर में शामिल नहीं):

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

पायथन, 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]...।)
केल्विन के

1

GNU sed , 491 बाइट्स

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डीकंप्रेस छह से s, और एक sडीकंप्रेस से दो स्पेस तक, इसलिए S12 स्पेस बन जाता है।

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///gs के बजाय लुकअप टेबल का उपयोग करना एक आसान जीत होगी। मैं इसके साथ कुछ और नूडल कर सकता हूं या नहीं।


1

पायथन 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 बाइट्स सीलिंगकैट के लिए धन्यवाद ।

#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 चीयर्स!
गैस्ट्रोपनर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.