पावर ग्रिड संसाधन लागत


14

पावर ग्रिड संसाधन लागत

परिचय

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

नियम पुस्तिका से लिया गया संसाधन बाजार का एक चित्रण

1---- | 2---- | 3---- | 4---- | 5---- | 6---- | 7---- | 8---- | 10  | 12
CCC   | CCC   | CCC   | CCC   | CCC   | CCC   | CCC   | CCC   |  U  |  U
OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | 14  | 16
GGG   | GGG   | GGG   | GGG   | GGG   | GGG   | GGG   | GGG   |  U  |  U

जब संसाधन खरीदे जाते हैं, तो उन्हें बाजार के बाईं ओर से लिया जाता है, जहां वे सबसे सस्ते होते हैं। जब बाजार में नए संसाधन जोड़े जाते हैं, तो उन्हें दाईं ओर से जोड़ा जाता है। जैसा कि देखा जा सकता है, यह एक आपूर्ति और मांग संतुलन पैदा करता है - यदि किसी विशेष प्रकार के अधिक संसाधन खरीदे जा रहे हैं तो प्रत्येक दौर की भरपाई की जा रही है, उस संसाधन की कीमत बढ़ जाएगी। इसी तरह, अगर यह कम है, तो लागत कम हो जाएगी।

कोयला, तेल और कचरा सभी एक ही दर पर लागत में बड़े पैमाने पर होते हैं, जबकि यूरेनियम बहुत तेजी से बढ़ता है। एक गैर-यूरेनियम संसाधन लागत की एक इकाई 8 - floor((<units available> - 1) / 3)। यूरेनियम की एक इकाई की लागत 13 - <units available>अगर 5 या अधिक इकाइयाँ उपलब्ध हैं, और 18 - (2 * <units available>)अन्यथा।

उदाहरण के लिए, खेल की शुरुआत में कोयले की सभी 24 इकाइयां खरीदने के लिए उपलब्ध हैं। यदि पहला खिलाड़ी कोयले की 4 इकाइयाँ खरीदना चाहेगा, तो पहली तीन इकाइयों की लागत प्रत्येक 1 होगी, और 4 की लागत 2 होगी, जिससे कुल लागत 5. यह 20 यूनिट उपलब्ध होगी। यदि दूसरा खिलाड़ी कोयले की 4 इकाइयाँ खरीदना चाहेगा, तो लागत (2 * 2 + 2 * 3) = 10 होगी।

चुनौती

आपकी चुनौती एक प्रोग्राम या फ़ंक्शन लिखना है जो किसी विशेष संसाधन की दी गई राशि को खरीदने की लागत की गणना करता है, यह मानते हुए कि बाजार में मौजूद उस संसाधन की दी गई राशि है।

आपके प्रस्तुतिकरण को किसी भी उचित इनपुट प्रारूप और किसी भी क्रम में, निम्नलिखित मापदंडों को स्वीकार करना चाहिए:

  • संसाधन प्रकार - [C, O, G, U] में से एक होने की गारंटी है।
  • उस संसाधन की मात्रा जो बाजार में मौजूद है - एक गैर-नकारात्मक पूर्णांक होने की गारंटी। यदि संसाधन प्रकार U नहीं है, तो यह 24 से अधिक नहीं होगा। यदि संसाधन प्रकार U है, तो यह 12 से अधिक नहीं होगा।
  • उस संसाधन की राशि जिसे एक खिलाड़ी खरीदना चाहता है - एक गैर-नकारात्मक पूर्णांक होने की गारंटी देता है जो बाजार में पहले से मौजूद राशि से कम या बराबर है।

आउटपुट अनुरोधित संसाधनों की लागत होना चाहिए।

अतिरिक्त नियम

  • दिए गए सूत्र केवल दृष्टांत उद्देश्यों के लिए हैं, अपनी पसंद की लागतों की गणना के किसी भी तरीके का उपयोग करने के लिए स्वतंत्र महसूस करें।
  • विभिन्न संसाधन प्रकारों (C, O, G, U) के लिए अक्षर कोड को उनके निचले मामले समकक्षों द्वारा प्रतिस्थापित किया जा सकता है। आप संख्याओं के लिए अक्षरों को प्रतिस्थापित कर सकते हैं, या तो फ़ॉर्म में C=0, O=1, G=2, U=3याC=1, O=2, G=3, U=4
  • यह , इसलिए बाइट्स में सबसे छोटा सबमिशन विजेता होगा।
  • यदि आपके सबमिशन में पिछले अनुभाग में निर्दिष्ट से भिन्न ऑर्डर या प्रारूप में इनपुट की आवश्यकता है, तो आपको विवरण प्रदान करना चाहिए।

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

टेस्ट केस प्रारूप:

resource type, amount in market, amount to buy
> result

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

C, 24, 4
> 5

C, 20, 4
> 10

O, 3, 3
> 24

U, 1, 1
> 16

C, 1, 1
> 8

G, 0, 0
> 0

O, 10, 7
> 44

U, 12, 4
> 10

G, 11, 4
> 22

क्या हम मानते हैं कि इनपुट कानूनी हैं, या डे हमें चीजों को संभालना है f("O",1,5)?
काटेन्केओ

@Katenkyo नहीं, जैसा कि कल्पना में विस्तृत है कि इनपुट वैध होने की गारंटी है। कोड गोल्फ में IMO त्रुटि जाँच थकाऊ है इसलिए मैंने इसे दूर किया है: o)
सोक

बिल्कुल सही, याद किया जा सकता है कि ऐनक में। मेरे प्रस्तुत करने के लिए पोस्ट न करें :)
काटनेंको

मुझे लगता है कि परीक्षण के मामलों में कुछ त्रुटियां हैं। मैंने डबल चेक किया और मिला f(G, 11, 4) = 22और f(O, 10, 7) = 44
पुरकाकूदरी

@ Pietu1998 आप बिल्कुल सही कह रहे हैं, मुझे यकीन नहीं है कि मुझे वह गलत कैसे मिला: \ संपादन अब
सोक

जवाबों:


3

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

f=(t,m,b)=>b&&(t>2?m>4?13-m:18-m*2:9+~(~-m/3))+f(t,m-1,b-1)

लेता है type, market_amountऔर buy_amountतर्क के रूप में।type0 और 3 के बीच पूर्णांक है।

डेमो


4

पायथन 3, 71 69 बाइट्स

-2 बाइट्स के लिए @xnor को धन्यवाद

f=lambda r,a,b:b and[8-int(~-a/3),max(18-2*a,13-a)][r>2]+f(r,a-1,b-1)

एक फ़ंक्शन जो शून्य-अनुक्रमित संसाधन प्रकार के तर्क के माध्यम से इनपुट लेता है r, उपलब्ध aराशि और खरीदने के लिए राशि b, और लागत लौटाता है।

यह इस तथ्य का उपयोग करता है कि Trueऔर पायथन में Falseसमान 1और 0बूलियन अभिव्यक्तियों को सूचियों में अनुक्रमित करने की अनुमति देता है।

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

f=lambda r,a,b           Function with input resource type r, amount available a and amount
                         to buy b
b and...                 Base case: return 0 if b=0
[8-int(~-a/3),...][r>2]  If not uranium, yield the unit cost 8-floor((a-1)/3)...
max(18-2*a,13-a)         ..else yield the current uranium unit cost
...f(r,a-1,b-1)          Decrement a and b, then pass to function
...+...                  Add the cost of each unit to give the total cost
:...                     Return the above

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


1
के max(18-2*a,13-a)स्थान पर कर सकते हैं [18-2*a,13-a][a>4]
xnor

3

Befunge, 142 बाइट्स

&2`#v_&&>:!#v_\:1-3/8\-v
v:&&<   ^-1\ -1p15+g15 <
v>#<v       <
! v5<
# 1:
>^g-
| 81
\ 4\
: *-
4 -1
` .p
# @^15+g15<
>:49+\-   ^
|
>:2*92*\- ^

यहाँ यह कोशिश करो!इनपुट को 3 पूर्णांक के रूप में लेता है, जहां संसाधन प्रकार 0,1,2,3 है। आउटपुट एक पूर्णांक है।

कोई विचार नहीं अगर यह किसी भी बेहतर गोल्फ हो सकता है। वहाँ बहुत ज्यादा व्हाट्सएप नहीं है, लेकिन नए किस्से शायद आहत करते हैं।


3

पायथन 2.7, 85 बाइट्स:

F,G,H=input();B=0;exec"B+=[[18-(2*G),13-G][G>5],8-((G-1)/3)][F!='U'];G-=1;"*H;print B

आर। कप के जवाब के आधार पर, लेकिन आप अतिरिक्त / फर्श विभाजन के लिए हटाकर 85 तक बाइट को नीचे कर सकते हैं। क्योंकि ये सभी पूर्णांक हैं, यह स्वचालित रूप से एक संपूर्ण संख्या में नीचे आ जाता है।


1
PPCG में आपका स्वागत है!
फंतासी

2

पायथन 2.7, 86 बाइट्स:

F,G,H=input();B=0;exec"B+=[[18-(2*G),13-G][G>5],8-((G-1)//3)][F!='U'];G-=1;"*H;print B

प्रारूप में एक सरणी द्वारा इनपुट लेता है [resource type, units available, units to purchase]। आउटपुट एक पूर्णांक है। समय के साथ गोल्फ खेलने की कोशिश करेंगे।

यह ऑनलाइन की कोशिश करो! (Ideone)


2

लुआ, 107 101 बाइट्स

पुनरावर्ती फ़ंक्शन जिसे साथ बुलाया जाना है f(resource,stock,buy)। संसाधन को 0 और 3 के बीच एक संख्या होना चाहिए। आउटपुट लौटे मूल्य के माध्यम से किया जाता है।

मुझे 6 बाइट बचाने के लिए धन्यवाद LeakyNun: 5 बाइट्स (25-y+(y-1)%3)/3से कम है 8-math.floor((y-1)/3)और मुझे इसके प्लेसमेंट के कारण एक और बाइट हासिल करने की अनुमति है।

function f(x,y,z)return z<1 and 0or(x<3 and(25-y+(y-1)%3)/3or(y<5 and 18-y*2or 13-y))+f(x,y-1,z-1)end

Ungolfed

function f(x,y,z)                      -- define a function f with 3 parameters
  return z<1                           -- if we don't buy anything else
           and 0                       --   return 0
         or(                           -- else
           x<3                         --   if we're not buying Uranium
             and (25-y+(y-1)%3)/3      --     return 8-floor((stock-1)/3)                       
           or(y<5                      --   elseif there's less than 5 Uranium left
                and 18-y*2             --     return 18-stock*2
              or 13-y))                --   else return 13-stock
         +f(x,y-1,z-1)                 -- if we bought this iteration
                                       -- add f(resource,stock-1,toBuy-1) 
                                       -- to the returned value
end

आप निम्न स्निपेट को कॉपी-पेस्ट करके इस कोड का ऑनलाइन परीक्षण कर सकते हैं ।

function f(x,y,z)return z<1 and 0or(x<3 and(25-y+(y-1)%3)/3or(y<5 and 18-y*2or 13-y))+f(x,y-1,z-1)end
print(f(1,24,4))
print(f(2,20,4))
print(f(0,10,7))
print(f(3,1,1))
print(f(3,12,4))

@ Pietu1998 यह Lua 5.3 है। मैं 5.2 के बारे में नहीं जानता, लेकिन 5.3 में यह उनके बारे में शिकायत नहीं करेगा जब वे हेक्साडेसिमल मान नहीं बना रहे हैं। उदाहरण के लिए, 6andकाम नहीं करेगा क्योंकि 6aएक हेक्स मान है, लेकिन 6anनहीं है।
कटेन्को जू १२'१६

8-math.floor((y-1)/3)वास्तव में है(25-y+(y-1)%3)/3
लीक नून
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.