ASCII कला पीढ़ी


13

कार्य

एक प्रोग्राम या फ़ंक्शन लिखें जो चौड़ाई wऔर ऊंचाई की एक छवि लेता है h, और दो पूर्णांक a <= w/2और b <= h/2, आयाम ax के साथ छवि के एक एएससीआई कला प्रतिनिधित्व को आउटपुट करता है b

एससीआई कला को निम्न चरणों के माध्यम से उत्पन्न किया जाना चाहिए (या उसी आउटपुट के साथ एक और प्रक्रिया):

  1. आकार बदलें wएक्स hके लिए छवि 2aएक्स 2b(x, y)आकार के आकार में पिक्सेल का रंग निम्नलिखित कोनों के साथ आयत के अंदर मूल छवि से सभी पिक्सेल के रंगों के औसत के बराबर होना चाहिए:

    (floor[x * w/2a], floor[y * h/2b])
    (ceil[(x+1) * w/2a], ceil[(y+1) * h/2b])
    
  2. आकार की छवि को लाल, हरे और नीले रंग के घटकों के औसत से हटाकर, प्रत्येक घटक को इस औसत पर सेट करके लिया जाना चाहिए।

  3. नीचे दिए गए नियमों का पालन करते हुए, पिक्सेल के प्रत्येक 2x2 ब्लॉक के लिए एक चरित्र का उत्पादन किया जाना चाहिए:

    • चलो e = 3 - floor[color/64], जहां रंग शीर्ष-बाएँ पिक्सेल के रंग के लाल घटक को संदर्भित करता है (सीमा 0..255 में)। आइए f, gऔर hइस मान को देखें, लेकिन क्रमशः ऊपर-दाएं, नीचे-बाएँ और नीचे-दाएँ पिक्सेल के लिए।
    • आज्ञा देना zकी औसत हो e, f, g, h
    • निम्न के अनुरूप वर्ण को आउटपुट करें (सफेद एक पिक्सेल का प्रतिनिधित्व करता है जहां 3 - floor[color/64]शून्य है, और ग्रे नॉनज़रो का प्रतिनिधित्व करता है)।
    • सभी पिक्सेल शून्य हैं= एक स्थान आउटपुट ( )
    • टॉप लेफ्ट पिक्सल नॉनजेरो हैया शीर्ष दायाँ पिक्सेल नॉनज़रो है= आउटपुट "यदि e (or f) >= 2और 'अन्यथा।
    • बायीं ओर का पिक्सेल नॉनजरो हैया बॉटम राइट पिक्सल नॉनजेरो है= आउटपुट ,यदि g (or h) >= 2और .अन्यथा।
    • शीर्ष पिक्सेल नॉनज़रोया नीचे पिक्सेल नॉनज़रो= आउटपुट-
    • बाएँ पिक्सेल नॉनज़रोया सही पिक्सेल नॉनज़रो= आउटपुट;
    • टॉप लेफ्ट, नीचे राइट पिक्सल नॉनजरो = आउटपुट \
    • ऊपर दाईं ओर, नीचे बाएँ पिक्सेल नॉनज़ेरो = आउटपुट /
    • शीर्ष बाएँ पिक्सेल शून्य = आउटपुट J
    • शीर्ष दायां पिक्सेल शून्य = आउटपुट L
    • नीचे बाएँ पिक्सेल शून्य = आउटपुट 7
    • निचला दायाँ पिक्सेल शून्य = आउटपुट P
    • सभी नॉनवेज
      • z = 1: आउटपुट *
      • z = 2: आउटपुट C
      • z = 3: आउटपुट #

अन्य नोट: उपरोक्त चरणों में लिए गए सभी औसत पूर्णांक विभाजन (यानी 0 की ओर गोल) का उपयोग करना चाहिए।

आप छवियों को पढ़ने के लिए एक पुस्तकालय का उपयोग कर सकते हैं, लेकिन पुस्तकालयों का उपयोग रीसाइज़िंग और डीसैचुरेशन चरणों के लिए नहीं किया जा सकता है।

इनपुट

आपका कार्यक्रम डेटा के तीन टुकड़ों में ले जाएगा:

  • एक छवि। यह चित्र आपकी पसंद के किसी भी प्रारूप में हो सकता है (जैसे PNG, PPM)
  • अस्सी कला की चौड़ाई (वर्णों की संख्या में)
  • अस्सी कला की ऊंचाई (पात्रों की संख्या में)

इनपुट STDIN के माध्यम से पढ़ा जा सकता है, एक कमांड-लाइन तर्क के रूप में पारित किया जाता है, एक चर के रूप में संग्रहीत किया जाता है, आदि।

उत्पादन

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

उदाहरण

सभी चित्र विकिपीडिया से लिए गए और सार्वजनिक डोमेन में जारी किए गए। आपका कार्यक्रम सभी छवियों और मान्य इनपुट के लिए काम करने की उम्मीद है।

नींबू का चित्र

चौड़ाई = 52, ऊंचाई = 25:


            .-- *** - ----        
          - ********** एल .-- .-- 7 ---- पी-       
        ।जे****************। । ********* \।      
       , ****************** L \ J ********** '।     
      - ********************। जम्मू *********** एल /     
     जे*********************; ./*************.L    
    ; ********************* पी.जे. **************; 7;   
   । *************************************;   
   ;********************** ;***************;जे*।  
   ***********************************  
   सी ***************************************  
   सी ********************** जे *****************;  
   सी*********************; **************** **।  
   ********************** '*****************   
  जे *************************************   
 ।   
 ; ******************** C "'P ***********   
 "7 ****************** C" '********** P। ** C;    
     '* सी *************'; ********* - जे ** सी.पी.     
      '* C ********** P 7 ** 7 ** P / - **** P      
        - * CCCCC * P- '7 ******** P'       
          '---' --- '          

चौड़ाई: 70, ऊंचाई: 3:

         ---------------------------। .----------------        
    जे ******************************************* ***/जे**;   
  ---------- ********* P --------- '-------------------- - '        

आलू

चौड़ाई: 50, ऊँचाई: 25:





        ।जे---                                     
      .J * पी --- जे * एल--।          
     जे *** 'एल-जे *********** -        
    जे ****; **************** एल       
   ;*****' ।जे********************     
   जे **** 7 ***************************  
   ** सीसी *; । ********* एलजे *********** पी   
   ** C * P 'J ***************************    
   7 * सी * एल ************************;     
   जम्मू * सी **; **********************;     
  जे.सी. ** सी **। ; ; ******** सीसीसी * सी ** CCCC **      
  "7 ***** L। 7 ***** CCCCCC **** CC ** '      
     - *****। -J - ** C * C * CC ****** CC * '       
      ; ** सीसी ***; '** सीसीसी ***** CCCC *;        
       '- **** - - *** सीसीसीसीसी *** -         
                               '------'           




क्लिपआर्ट नमूना

चौड़ाई: 26, ऊँचाई: 17:

    -, एल 
  जे - ** एल। सी। # 
 जे '; * पीएल, सी # " 
.PP 7. JC7P  
;; * जे ;; , C'C;  
जे; सीसी; एल सी "#   
* एल 7-पी? *; पीसी   
7CL *** J * PC '#   
'7 # C * C # P'; P JC # C- 
 J # CCC # L .JC # CJCC ## C;
; # - - #, CCC # CCCCCCCC
;*।- -।सी; ; CCCCCCCCCCCC
; **** जे ** एल; सीसीसीसीसीसीसीसीसीसीसी;
; *******; 'CCCCCCCCCCCP
'*******' CCCCCCCCCCC '
 '* P-7 *' '' CCCCP '-  
               '---       

यह , इसलिए सबसे छोटा उत्तर जीतता है।


2
शांत शांत चुनौती चुनौती .... ....
Abr001am

जब आप छवि इनपुट कहते हैं, तो क्या आपका नाम फ़ाइल नाम है? या वास्तविक छवि डेटा?
सैपरकैवल

@ सिस्पिरिवल या तो ठीक है
es1024

जवाबों:


6

जावास्क्रिप्ट 752, 701

function Z(I,a,b){
    var C=document.createElement('canvas')
    var W=C.width=I.width,H=C.height=I.height,X=C.getContext('2d')
    X.drawImage(I,0,0)
    a*=2,b*=2,W/=a,H/=b
    for(var o=a*b,x=0,y=0,T="",S=[],V;--o;){
        var A=~~(x*W),B=~~(y*H)
        var d=X.getImageData(A,B,(((x+1)*W)<<0)-A,(((y+1)*H)<<0)-B).data
        for(var i=0,p=0,L=d.length;i<L;i+=4)p+=(d[i]+d[i+1]+d[i+2])/3
        p/=L/4
        S[x]=3-(p>>6)
        if(x%2&&y%2){
            var e=V[x-1],f=V[x],g=S[x-1],h=S[x],z=(e+f+g+h)>>2,B=0,c
            B|=e>0?8:0,B|=f>0?4:0,B|=g>0?2:0,B|=h>0?1:0
            c=" ..-';\\J'/;L-7P*".charAt(B)
            c=c=="'"&&(e>1||f>1)?'"':c
            c=c=="."&&(g>1||h>1)?",":c
            T+=c=="*"?z>2?"#":z>1?"C":c:c
        }
        if(++x==a)x=0,y++,V=S,T+=y%2?"\n":"",S=[]
    }
    return T
}

उदाहरण:

var items = {
    lemons: {w:52, h:25},
    spuds: {w:50, h:25},
    tux: {w:26, h:17}
};

for(var k in items) {
    var val = items[k];
    var img = new Image();
    img.onload = function() {
        console.log(Z(this,this.w,this.h));
    }
    img.src=k+'.png';
    img.w = val.w;
    img.h = val.h;
}

नींबू:

            .--JJL--                   .---.        
          -**********-.--          .--7----P-       
        .J***************L.       .*********\.      
       .******************L      \J**********'.     
      .********************.     ;***********L/     
     J*********************;   ./*************.L    
    ,*********************P    -**************;7;   
    **********************'   .***************;;*   
   ;**********************    ;***************;;*.  
   ***********************    *******PP*******'J*;  
   ***********************    *******P;*******.**;  
   ***************7*******    J******;J*******;**;  
   **********************;    ****************.**;  
   **********************'    ***************P;**'  
  J*********************P     ***************/***   
 .**********************      7*************'J**P   
 ;*********************"      '\***********PJ***'   
 "7*******************"        '**********P.***;    
     '***************'         ;*********-J***P     
      '************P'           7*-7**P/-****P      
        -*******P-               '7********P'       
          '---                       -----          

spuds:

         J---                                     
      .J*P                     .---*L--.          
     J***'                L -J***********-        
    J****                ;****************L       
   ;*****'             .J******************L*     
   J***L7              ************************P  
   **CC*    .         .*********L'***********P-   
   **C*P    '         J**********************-    
   7*C*L              **********************;     
   J*C**.             **********************;     
  JC**C**      .      7********CCC****CCCC**      
  "7*****L     .       7*****CCCCCC****CC**'      
     -****L. .J         -**C*C**C*******C*'       
      ;**CC***;          '**CCC*****CCCC*;        
       '-****-             --**CCCCCC***-         
                               '------'           

टक्स:

                       ,L 
  --**L                C#'
 J';*P-L             ,C#" 
 P  7  7.           ,C7P  
;; J J ;;          ,C"C;  
;; C C  L          C" C   
*L 7-P ;*         ;P  #   
;CL***J**         C'  #   
'7#C*C#C'        ,P JC#C- 
 J#CCC#L      .JCCLJCC##C,
.#-   -#,     JCC#CCCCCCCC
;C.- -.*;    .CCCCCCCCCCCC
;L***J**C    ;CCCCCCCCCCCC
;*******P    'CCCCCCCCCCCP
'*******"     CCCCCCCCCCC'
 '*P-7*'      "CCCCP "--  
               '---       

2

आईडीएल 8.3, 588 597 588 बाइट्स

मुझे आपकी तुलना में थोड़ा अलग मान मिल रहा है, मुझे यकीन नहीं है कि क्यों ... मैंने सब कुछ के लिए पूर्णांक विभाजन किया। लेकिन यह अन्यथा शानदार काम करता है ... क्या ये परिणाम स्वीकार्य हैं? बहुत बेहतर अब, हालांकि अभी भी किसी कारण के लिए समान नहीं है।

pro c,m,a,b
e=2*a
f=2*b
s=size(m,/d)/[1.,e,f]
g=intarr(3,e,f)
u=floor([0:e-1]*s[1])
x=ceil([1:e]*s[1])-1
v=floor([0:f-1]*s[2])
y=ceil([1:f]*s[2])-1
n=(x-u)#(y-v)
for k=0,2 do for i=0,e-1 do for j=0,f-1 do g[k,i,f-j-1]=total(m[k,u[i]:x[i],v[j]:y[j]],/i)/n[i,j]
g=3-total(g/192,1,/i)
t=intarr(4,a,b)
for i=0,3 do t[i,*,*]=g[rebin([0:a-1]*2+i mod 2,a,b),rebin(2#[0:b-1]+i/2,a,b)]
w=total((t ne 0)*rebin(2^[0:3],4,a,b),1,/i)
for i=0,3 do w+=(w eq 2^i)*(t ge 2)[i,*,*]*(18-2^i+i/2)
w+=(w eq 15)*(total(t,1,/i)/4-1)
print,strmid(' '+"''"+'-.;/P.\;7-LJ*C#",',w[*],1),f='('+strtrim(a,2)+'A1)'
end

परीक्षण के मामलों:

IDL> c,read_png('lemons.png'),52,25


            .-J***L-.                 .----.        
          -**********L.--          .J-*LJJ**-       
        .J****************.       J*********J.      
       ,*******************      /J**********7.     
      J********************.    ;J***********L*     
     J*********************;   .\*************/L    
    ;*********************P    ***************;*;   
   .C*********************'   ;***************;**   
   J**********************    J***************;**.  
   ***********************    ****************'**;  
   C*********************C    ********J*******;**;  
   C**********************    *******************;  
   C*********************P   ;****************7**;  
  .**********************'    ***************PJ**'  
  J*********************P     ***************\***   
 .**********************      7*************'***P   
 ;********************C"      ;************PJ**C'   
 "7******************C"        ***********PJ***;    
     '*C*************"         ;*********7J**CP     
      '*C*********CP'           7*****P\-***CP      
        -*CCCCC*P-               '7********P"       
          '---                       -----          

IDL> c,read_png('lemons.png'),70,3
        --------J**********L--------.       .-----------------        
   .J*****************************P'    -*************************;   
  ---------*************P-------         '------7**********P-----  
IDL> c,read_png('potatoes.png'),50,25





         J-"-                                     
      .J*'                     ----JL--           
     -*C*                 * -J***********-        
    J*C*L                ;****************L       
   .*C*-*              .J********************     
   J*CC;-              ********************C**CP  
   *CC#*    7         .**********************P-   
   *CCC;    '         J**********************-    
   7CCCL              **********************;     
   JCCC*.             ****C*C*****CCCC*CC***;     
  ;C*CCCL      .      ;***CC*CCCCCCCCCCCCC**      
  "--*CCC;             7***CCCCCCCCCCCCCCC*'      
     '7CC*L.  .         -*CCCCCCCCCCCCCCCP'       
       7CCCCC*'           7CC#CCCCCCC###P         
        '-7P-'             '-7CC######C-          
                                 '-'              




IDL> c,read_png('penguin.png'),26,17
                       ,L 
      ,                C# 
 "  #- ;             ,##" 
 ;  -  ;            ,#7;  
;" - - ";          ,#"J"  
;  # #  ;          #" #   
;; .-. ,;         ;;  #   
;#-***-#;         #   #   
 7#C*C#P         ,P -C#C, 
 J##-##L       JCCL-CC#CC,
,#"   "#,     JCC#CCCCCCCL
;L.- -.C;    ,CCCCCCCCCCCC
;***L***;    ;CCCCCCCCCCCC
;*******;     CCCCCCCCCCC;
 *** ***"     CCCCCC7CCCP 
 '*P--*'      "CCCCP "-"  
                --"       
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.