आभार तुर्की


10

(उम्मीद है कि यह अभी भी आपके लिए धन्यवाद है)

आपको अपने धन्यवाद डिनर के लिए एक टर्की मिला, लेकिन आप यह नहीं जानते कि इसे समान रूप से कैसे वितरित किया जाए। समस्या यह है, कुछ लोग दूसरों की तुलना में अधिक खाते हैं, इसलिए आपको एक समाधान खोजने की आवश्यकता है

इनपुट

दो इनपुट होंगे। पहला विभिन्न लोगों की एक एससीआई कला होगी।

     o
 o  \|/
\|/  |
 |   |
/ \ / \

ascii- कला विनिर्देशों

प्रत्येक व्यक्ति 3 कॉलम की चौड़ाई लेता है। प्रत्येक व्यक्ति रिक्त स्थान के एक एकल स्तंभ द्वारा अलग किया जाता है। प्रत्येक व्यक्ति का शीर्ष एक है o। नीचे o, की भरपाई 1और -1एक्स में, कर रहे हैं \और /क्रमश:। से oइनपुट में अंतिम पंक्ति से पीछे नहीं कर रहे हैं |, प्रति व्यक्ति इन की राशि उनके "ऊंचाई" है। केवल डेटा जो आपको प्रत्येक व्यक्ति से निकालने की आवश्यकता होगी, उनकी "ऊंचाई" है।


हमेशा कम से कम एक व्यक्ति होगा। प्रत्येक व्यक्ति के पास हमेशा कम से कम 2-ऊंचाई होती है। आपके प्रोग्राम को जो अधिकतम ऊंचाई संभालनी चाहिए, वह कम से कम 64 की ऊंचाई है।

यदि आप आयत बनाने के लिए रिक्त स्थान के साथ गद्देदार इनपुट चाहते हैं, तो कृपया अपने उत्तर में इसे निर्दिष्ट करें।


दूसरा इनपुट टर्की है। टर्की वास्तव में टर्की नहीं है, टर्की के NxMआयामों के अधिक । यदि दूसरा इनपुट है 3x2, तो टर्की के 6 के कुल क्षेत्रफल के साथ 3 * 2 के आयाम हैं।

उत्पादन

आउटपुट एक सूची या आपकी भाषा का निकटतम विकल्प (जैसे एरे) हो सकता है। आप रिक्त स्थान द्वारा अलग किए गए मानों के साथ एक स्ट्रिंग भी आउटपुट कर सकते हैं।

प्रत्येक व्यक्ति के लिए मूल्य उस क्रम में आउटपुट होना चाहिए जिसमें वे इनपुट थे।

चुनौती

आपका लक्ष्य लोगों के बीच टर्की के क्षेत्र को विभाजित करना है।

एक उदाहरण परिदृश्य:

मान लें कि वे दो लोगों को कर रहे हैं, की ऊंचाई के साथ 3और 6, क्रमशः। अगर कोई टर्की है 5x3। टर्की के कुल क्षेत्र को वितरित करने की आवश्यकता होगी 15

अब आप इसे सभी के बीच कैसे वितरित करेंगे? ऐसे:

                    the_persons_height
TurkeyForAPerson = -------------------- * turkey_area
                    sum_of_all_heights

इस का मतलब है, की ऊंचाई के साथ पहले व्यक्ति के लिए 3, वे मिल जाएगा 3/9*15टर्की, या 5दूसरे व्यक्ति की ऊंचाई के साथ, 6वे मिल जाएगा 6/9*15या 10टर्की।

उत्पादन

.जब तक आप बोनस के लिए नहीं चुनते हैं, तब तक आउटपुट में पूरी तरह से अंक शामिल होते हैं, और । उस स्थिति में, इसमें केवल अंक, स्थान ( ) और एक स्लैश ( /) शामिल हो सकते हैं।

पूर्ण उदाहरण

इनपुट:

6x5
     o 
     | 
 o  \|/
\|/  | 
 |   | 
 |   | 
/ \ / \

आउटपुट:

11.25 18.75

बोनस

-20% बोनस: आप एक अंश का उत्पादन करते हैं (सरलीकृत होना चाहिए), इससे कोई फर्क नहीं पड़ता कि यह मिश्रित या अनुचित अंश है।

स्कोरिंग

ये है बाइट्स जीत में इतना कम कोड!


मुझे कुछ याद आ रहा है, लेकिन हमें प्रत्येक व्यक्ति के लिए आउटपुट को दूसरों से अलग कैसे करना चाहिए? यानी आउटपुट में क्या सटीक प्रारूप होना चाहिए?
ETHproductions

@ETHproductions आप सूची में आउटपुट कर सकते हैं, या रिक्त स्थान से अलग हो सकते हैं, मुझे विश्वास नहीं हो रहा है कि मैं यह बताना भूल गया हूं।
17

टर्की आयामों पर एक ऊपरी सीमा है? यानी हर आयाम में हमेशा एक अंक होता है, या यह 11x10 या उससे अधिक हो सकता है?
टॉम कारपेंटर

@TomCarpenter यह कई अंकों का हो सकता है, ऊपरी सीमा जो भी आपकी भाषा का समर्थन करती है
डाउनगैट

जवाबों:


3

पायथ, 23 बाइट्स

mc*vXzG\*dsN=N-/R\|C.z0

यह ऑनलाइन संस्करण में काम नहीं करता है, क्योंकि यह evalटर्की के आकार को निर्धारित करने के लिए उपयोग करता है।

स्पष्टीकरण:

mc*vXzG\*dsN=N-/R\|C.z0   implicit: z = first input line
                    .z    read all other lines
                   C      transpose them
               /R\|       count the "|"s in each column
              -       0   remove 0s in this list (columns with no "|"s)
            =N            assign the resulting list to N
m                         map each value d in N to:
    XzG\*                    replace every letter in z with a "*"
   v                         evaluate the result (does the multiplication)
  *      d                   multiply with d
 c        sN                 divide by sum(N)

4

लैब व्यू, 67 बाइट्स

Im गिनती के बाद मैं क्या मेटा पोस्ट में प्रस्तावित किया है, तो यह तय नहीं है, लेकिन हाँ यहाँ जाता है।

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

रिक्त स्थान के साथ गद्देदार इनपुट अपेक्षित है।

Im गिनती के प्रमुखों और उन रेखाओं से लोगों का आकार प्राप्त करते हैं जहां सिर हैं।


3

जाप , 49 46 बाइट्स

Japt , Ja vaScri pt का छोटा संस्करण है । दुभाषिया

W=UqR y f@Y%4¥1 £Xq'| l -1)£Vq'x r@X*Y,1 *X/Wx

एक सरणी के रूप में आउटपुट। (ध्यान दें कि आपको उद्धरण चिह्नों में से प्रत्येक दो इनपुट को लपेटने की आवश्यकता होगी।)

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

            // Implicit: U = stick-figures, V = turkey size
W=UqR y     // Assign variable W to: split U at newlines, transpose rows with columns,
f@Y%4==1    // take each stick-figure body,
m@Xq'| l -1 // and count the number of "|"s.
)m@Vq'x     // Now map each item X in W to: V split at "x",
r@X*Y,1     // reduced by multiplication, starting at 1,
*X/Wx       // multiplied by X and divided by the total of W.
            // Implicit: output last expression

3

MATLAB 109 * 80% = 87.2 बाइट्स

function o=f(t,p);p=char(strsplit(p,'\n'));a=sum(p(:,2:4:end)=='|');o=rats(prod(sscanf(t,'%dx%d'))*a/sum(a));

तो यह MATLAB फ़ंक्शन है जो दो इनपुट लेता है, पहला टर्की आकार के लिए एक स्ट्रिंग है (उदाहरण के लिए '8x4', और दूसरा स्ट्रिंग है जिसमें लोग शामिल हैं। यह एक स्ट्रिंग देता है जिसमें प्रत्येक व्यक्ति के लिए अनुचित अंश होते हैं।

यह बहुत छोटा हो सकता था, लेकिन नई लाइनें मुश्किल हो गईं। MATLAB आसानी से ;प्रत्येक पंक्ति के लिए एक स्ट्रिंग को विभाजक के रूप में बदल सकता है , लेकिन 25 वर्णों की लागत वाली एक नई रेखा का उपयोग करना मुश्किल साबित होता है:

p=char(strsplit(p,'\n')); % Converts the input person string to a 2D array

लोगों का आकार प्राप्त करना वास्तव में काफी आसान है:

a=sum(p(:,2:4:end)=='|');

यह दूसरे से शुरू होने वाले प्रत्येक चौथे कॉलम को लेता है (जो सभी कॉलम होंगे जहां लोगों के शरीर होंगे), फिर उसे एक सरणी में परिवर्तित करता है जिसमें 1 है जहां बॉडी बिट्स हैं और 0 हैं जहां नहीं हैं। अंत में यह कॉलम-वार करता है जिसके परिणामस्वरूप सरणी aहोती है जो प्रत्येक व्यक्ति के आकार से युक्त 1 डी सरणी होती है।

prod(sscanf(t,'%dx%d'))*a/sum(a)

अगला हम इनपुट स्ट्रिंग से टर्की के आकार को निकालते हैं जो फॉर्म में है %dx%d, यानी एक नंबर फिर 'x' फिर दूसरा नंबर। टर्की क्षेत्र प्राप्त करने के लिए दो संख्याओं के परिणामी सरणी को एक साथ गुणा किया जाता है।

यह प्रत्येक लोगों की ऊंचाई से गुणा किया जाता है, और एक दशमलव संख्या के रूप में प्रत्येक व्यक्ति के लिए टर्की के हिस्से को प्राप्त करने के लिए सभी लोगों की कुल ऊंचाई से भी विभाजित होता है।

rats(...)

बोनस को अर्हता प्राप्त करने के लिए अंतिम चरण - यह बिट कोड 6 वर्णों को लंबा बनाता है, लेकिन बोनस ~ 22 को इसके लायक बनाता है। rats()एक अच्छा कार्य है जो दशमलव संख्या को सरलीकृत अनुचित अंश (13 डीपी के लिए सटीक) में परिवर्तित करता है। इसे दशमलव संख्याओं की एक सरणी (यानी प्रत्येक व्यक्ति के लिए राशि) को खिलाने से प्रत्येक स्ट्रिंग के लिए रिक्त स्थान वाले प्रत्येक स्ट्रिंग में भिन्नता होगी।

rats()एक से अधिक स्थानों को जोड़ने का आउटपुट दिया , लेकिन सवाल यह नहीं कह सकता है - बस यह कहता है कि स्ट्रिंग में केवल अंक, '' और '/' शामिल होने चाहिए।

यह उदाहरण से आउटपुट है (रिक्त स्थान हटाए जाने के लिए मेरे द्वारा जोड़े गए उद्धरण चिह्नों को, वास्तविक आउटपुट में नहीं)

'     45/4          75/4     '

उदाहरण उपयोग:

f('6x5',['     o ' 10 '     | ' 10 ' o  \|/' 10 '\|/  | ' 10 ' |   | ' 10 ' |   | ' 10 '/ \ / \'])

उत्पादन:

'     45/4          75/4     '

यह ऑनलाइन ऑक्टेव दुभाषिया पर भी (चेतावनियों के साथ) काम करता है । आप इसे यहाँ आज़मा सकते हैं । लिंक fएक फ़ाइल में पहले से परिभाषित फ़ंक्शन के साथ एक कार्यक्षेत्र के लिए है । इसलिए आपको केवल उपर दिए गए उदाहरण के उपयोग को शीघ्र में दर्ज करने में सक्षम होना चाहिए।



2

हास्केल 119 बाइट्स

import Data.List
g x=sum[1|y<-x,y>'{']
s#p|(h,_:t)<-span(<'x')s=[g x*read h*read t/g p|x<-transpose$lines p,any(>'{')x]

प्रयोग उदाहरण: "6x5" # " o \n | \n o \\|/\n\\|/ | \n | | \n | | \n/ \\ / \\\n"-> [11.25,18.75]


2

जावास्क्रिप्ट (ईएस 6), 131 बाइट्स

(t,p)=>eval(`h=[];for(s=0;m=r.exec(p);s++)h[i=m.index%l/4|0]=~~h[i]+1;h.map(v=>v/s*${t.replace("x","*")})`,l=p.search`
`+1,r=/\|/g)

भागों की एक सरणी देता है।

व्याख्या

(t,p)=>                      // t = turkey equation, p = ASCII art of people
  eval(`                     // use eval to enable for loop without {} or return
    h=[];                    // h = array of each person's height
    for(s=0;m=r.exec(p);s++) // for each match of "|", s = sum of all heights
      h[i=m.index%l/4|0]=    // i = person index of this match
        ~~h[i]+1;            // increment person's height (~~ casts undefined to 0)
    h.map(v=>v/s*            // divide each height by the sum and multiply by turkey area
      ${t.replace("x","*")}  // since this is inside an eval just convert t to an equation
    )`,                      // implicit: return array of each person's portion

    // These are executed BEFORE the eval (escaping characters would mean more bytes)
    l=p.search`
`+1,                         // l = line length
    r=/\|/g                  // r = regex to match height markers
  )

परीक्षा


1

पायथन 99 बाइट्स

lambda a,b: [`(''.join(i)).count('|')*1.0/a.count('|')*eval(b)` for i in zip(*a.split('\n'))[1::4]]

इनपुट:' o \n | \n o \\|/\n\\|/ | \n | | \n | | \n/ \\ / \\','6*5'

आउटपुट: ['11.25', '18.75']

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