सामान्य वाक्य


16

एक प्रोग्राम या फ़ंक्शन लिखें, जो एक इनपुट स्ट्रिंग और एक मानक विचलन देता है σ, उस स्ट्रिंग को सामान्य वितरण वक्र के साथ माध्य 0और मानक विचलन के साथ आउटपुट करता है σ

सामान्य वितरण वक्र

yहर किरदार की समन्वय cहै:

यहाँ छवि विवरण दर्ज करें

σइनपुट के रूप में कहां दिया गया है, और कहांx है xकी धुरी समन्वय c

  • स्ट्रिंग के केंद्र में वर्ण है x = 0। यदि स्ट्रिंग की लंबाई समान है, तो दो मध्य वर्णों में से किसी एक को केंद्र के रूप में चुना जा सकता है।
  • वर्णों को चरणों के द्वारा अलग किया जाता है 0.1(जैसे केंद्र के बाईं ओर का वर्णx = -0.1 , मध्य वाले के दाईं ओर एक है x = 0.1, आदि)।

स्ट्रिंग मुद्रण

  • वर्णों की तरह रेखाएँ, के चरणों से अलग हो जाती हैं 0.1
  • प्रत्येक वर्ण yअपने स्वयं के yमान के सबसे निकट मान वाले रेखा पर मुद्रित होता है (यदि मान दो पंक्तियों के मानों के बीच में ठीक है, तो सबसे बड़े मान के साथ एक का चयन करें (जैसे roundआमतौर पर रिटर्न कैसे मिलता है)1.0 जाता है 0.5)।
  • उदाहरण के लिए, यदि yकेंद्र मूल्य (यानी अधिकतम मूल्य) है की समन्वय 0.78और yपहले चरित्र का समन्वय कर रहा है 0.2, तो 9 लाइनों जाएगा: केंद्र चरित्र लाइन पर मुद्रित किया जा रहा 0है और पहले चरित्र लाइन पर मुद्रित किया जा रहा 8

इनपुट और आउटपुट

  • आप σप्रोग्राम तर्क, STDINअपनी दलील या अपनी भाषा में कुछ भी, के रूप में इनपुट (स्ट्रिंग और ) दोनों ले सकते हैं।
  • स्ट्रिंग में केवल मुद्रण योग्य होगा ASCII वर्ण होंगे। स्ट्रिंग खाली हो सकती है।
  • σ > 0
  • आप आउटपुट को STDOUTफ़ाइल में प्रिंट कर सकते हैं , या इसे किसी फ़ंक्शन ( जब तक है) से वापस कर सकते हैं यह एक स्ट्रिंग है और प्रत्येक पंक्ति के लिए स्ट्रिंग की सूची नहीं कहेंगे)।
  • एक अनुगामी नई रेखा स्वीकार्य है।
  • अनुगामी रिक्त स्थान तब तक स्वीकार्य होते हैं जब तक वे रेखा को अंतिम पंक्ति की लंबाई से अधिक नहीं बनाते (इसलिए अंतिम पंक्ति में कोई अनुगामी स्थान स्वीकार्य नहीं होता)।

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

σ    String

0.5  Hello, World!

     , W     
   lo   or   
  l       l  
 e         d 
H           !



0.5  This is a perfectly normal sentence

                tly                
              ec    n              
             f       o             
            r         r            
           e           m           
          p             a          
        a                l         
      s                    se      
This i                       ntence



1.5  Programming Puzzles & Code Golf is a question and answer site for programming puzzle enthusiasts and code golfers.

                                                d answer site for p                                               
                                      uestion an                   rogramming                                     
                      Code Golf is a q                                        puzzle enthusia                     
Programming Puzzles &                                                                        sts and code golfers.



0.3  .....................

          .          
         . .         

        .   .        

       .     .       


      .       .      

     .         .     
    .           .    
   .             .   
...               ...

स्कोरिंग

यह ,

                 nsw                 
                a   er               
              t                      
             s         i             
            e           n            
           t                         
         or               by         
       sh                   te       
so the                        s wins.



1
मुझे लगता है कि अंतिम परीक्षा के मामले में शीर्ष पंक्ति में 3 बिंदु होने चाहिए, न कि 1.
एडिसन

@addison मेरे पास इस कंप्यूटर पर मेरा संदर्भ कार्यान्वयन नहीं है, लेकिन मुझे नहीं पता कि मीगो को एक अलग परिणाम क्यों मिला। परिणाम वह अपने कोड के साथ प्राप्त करता है बहुत "अवरुद्ध" लगता है। मुझे लगता है कि पल के लिए उस परीक्षण के मामले को नजरअंदाज करें।
जूल

1
@ TheBikingViking मैं वह पास कर दूँगा, यह ठीक है।
घातक

जवाबों:


2

साइफन के साथ पायथन 3 , 239 233 बाइट्स

from scipy import stats,around,arange
def f(s,t):
 l=len(t);p=[];y=around(stats.norm.pdf((arange(l)-l//2)*.1,scale=s),1)*10
 for i in range(l):p+=[[' ']*(max(y)-y[i])];p[i]+=[t[i]]+[' ']*(y[i]-y[0])
 for j in zip(*p):print(*j,sep='')

एक फ़ंक्शन जो मानक विचलन sऔर स्ट्रिंग के तर्क के माध्यम से इनपुट लेता है t, और परिणाम को STDOUT में प्रिंट करता है।

यह काम किस प्रकार करता है

from scipy import stats,around,arange  Import the statistics, rounding and range functions
                                       from SciPy
def f(s,t):                            Function with input standard deviation s and string
                                       t
l=len(t);p=[]                          Define the much-used length of t as l and initialise
                                       the print values list p
arange(l)                              Generate a list of integer x values in [0,l)...
...-l//2*.1                            ...and scale such that 0 is at the middle character
                                       and the x-step is 0.1
stats.norm.pdf(...,scale=s)            Generate a list containing the y values for each x
                                       value by calling the normal probability
                                       density function scaled with s...
y=around(...,1)                        ...round all values to 1 decimal place...
...*10                                 ...and multiply by 10 to give the vertical index of
                                       each character
for i in range(l):...                  For all characters in t...
p+=[[' ']*(max(y)-y[i])]               ..add the number of lines below the character as
                                       spaces...
p[i]+=[t[i]]+[' ']*(y[i]-y[0])         ...add the character and the number of lines above
                                       the character as spaces

This leaves p containing a list for each desired output line, but transposed.

for j in zip(*p):...                   For every output line in the transpose of p...
print(*j,sep='')                       ...print the output line

Ideone पर इसे आज़माएं


2

रूबी: 273 254 बाइट्स

->n,s{j,o,g,r,l=-(n.size/2),[],0,{}
n.gsub(/./){(r[((2*Math::PI)**-0.5*10*Math.exp(-(j/1e1)**2/2/s/s)/s).round]||="")<<$&
j+=1}
r.sort.map{|y, c|o<<(l ?$/*(y-l-1):"")+(" "*g)+(c[0,(h=c.size)/2])+(" "*(n.size-g*2-h))+(c[h/2,h])
g+=h/2
l=y}
puts o.reverse}

18 बाइट बचाने के लिए केविन लाउ के लिए एक बड़ा धन्यवाद !


1
लंबोदर को परेंस की जरूरत नहीं है: ->n,s{...ठीक है। कई चर असाइन करते समय आपको कोष्ठक की आवश्यकता नहीं होती है: o,g,r,l=[],0,{}ठीक काम करता है। $/के स्थान पर इस्तेमाल किया जा सकता है ?\n। ऑर्डर ऑफ ऑपरेशंस का मतलब है कि आपको अपनी सभी बहुओं को लाइन में 5 पर रखना होगा। putsस्वचालित रूप से सरणियों को प्रकट करता है और छपाई करते समय उन्हें नई लाइनों के साथ अलग करता है। थोड़ा n.gsub(/./){...बाहर धड़कता है n.each_char{...क्योंकि आप बाहर ले जा सकते हैं |c|और $&जहां कोई भी उल्लेख किया cगया था। अपने हैश मान तार (के साथ शुरू बनाने ||=""नहीं ||=[]) और आप बदल सकते हैं c[...]*""करने के लिएc[...]
मूल्य इंक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.