পাওয়ার গ্রিড রিসোর্স ব্যয়


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 ব্যয় হবে, মোট ব্যয় হবে This. এটি 20 ইউনিট উপলব্ধ রাখে। দ্বিতীয় খেলোয়াড় যদি কয়লার 4 ইউনিট কিনতেও চান তবে ব্যয় হবে (2 * 2 + 2 * 3) = 10।

চ্যালেঞ্জ

আপনার চ্যালেঞ্জটি হ'ল এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা বাজারে উপস্থিত সেই সংস্থানটির প্রদত্ত পরিমাণ রয়েছে বলে ধরে নিলে একটি নির্দিষ্ট সংস্থার প্রদত্ত পরিমাণ কেনার ব্যয় গণনা করে।

আপনার জমাটি কোনও যুক্তিসঙ্গত ইনপুট ফর্ম্যাট এবং কোনও ক্রমে, নিম্নলিখিত প্যারামিটারগুলিতে গ্রহণ করা উচিত:

  • সংস্থার ধরণ - [সি, ও, জি, ইউ] এর মধ্যে একটির নিশ্চয়তা রয়েছে।
  • বাজারে যে সংস্থানটি উপস্থিত রয়েছে তার পরিমাণ - একটি অ-নেতিবাচক পূর্ণসংখ্যা হিসাবে গ্যারান্টিযুক্ত। যদি উত্সের ধরণটি U না হয় তবে এটি 24 এর চেয়ে বেশি হবে না the যদি উত্সের ধরণটি U হয় তবে এটি 12 এর চেয়ে বড় হবে না।
  • কোনও খেলোয়াড় কিনতে যে সংস্থানটি কিনতে চান - এটি গ্যারান্টিযুক্ত একটি অ-নেতিবাচক পূর্ণসংখ্যা যা বাজারে ইতিমধ্যে উপস্থিত পরিমাণের চেয়ে কম বা সমান।

আউটপুটটি অনুরোধ করা সংস্থার ব্যয় হওয়া উচিত।

অতিরিক্ত বিধি

  • প্রদত্ত সূত্রগুলি কেবল চিত্রণমূলক উদ্দেশ্যে, নিজের পছন্দমতো ব্যয় গণনা করার যে কোনও পদ্ধতি ব্যবহার করতে নির্দ্বিধায়।
  • বিভিন্ন রিসোর্সের ধরণের (সি, ও, জি, ইউ) জন্য লেটার কোডগুলি তাদের নিম্ন কেস সমতুল্য দ্বারা প্রতিস্থাপিত হতে পারে। আপনি সংখ্যার জন্য বর্ণগুলিও ফর্মের মাধ্যমে 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)?
কাটেনকিও

@ কেটেনকিয়ো নো, বিশ্লেষণে ইনপুটগুলি বৈধ হওয়ার গ্যারান্টিযুক্ত হিসাবে রয়েছে detailed ণ): আইএমও কোড গলফ মধ্যে পরীক্ষার সময়ে ত্রুটি ক্লান্তিকর, তাই আমি এটা দিয়ে দূরে সম্পন্ন করেছি
সোক

পারফেক্ট, চশমা থেকে এটি মিস করে থাকতে পারে। আমার জমা দেওয়ার জন্য পোষ্টটি করতে
যাবেন

আমি মনে করি পরীক্ষার ক্ষেত্রে কিছু ত্রুটি রয়েছে। আমি ডাবল চেক করেছি এবং পেয়েছি f(G, 11, 4) = 22এবং f(O, 10, 7) = 44
পূর্কাকুডারী

@ Pietu1998 তুমি একেবারে ঠিক আছে, কীভাবে করবেন নিশ্চিত নন আমি যে ভুল পেয়েছিলাম: \ এখন সম্পাদনা
সোক

উত্তর:


3

জাভাস্ক্রিপ্ট (ES6), 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 বাইট

-X বাইটের জন্য @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

আইডিয়নে চেষ্টা করে দেখুন


1
আপনি max(18-2*a,13-a)জায়গায় করতে পারেন [18-2*a,13-a][a>4]
xnor

3

বেফুঞ্জ, 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
পিপিসিজিতে আপনাকে স্বাগতম!
ফ্যানটাসি

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 বাইট বাঁচানোর জন্য ল্যাকইনুনকে ধন্যবাদ: 5 বাইটের (25-y+(y-1)%3)/3চেয়ে কম 8-math.floor((y-1)/3)এবং এটির বসানোর কারণে আমাকে আরও একটি বাইট পেতে দেয় gain

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

@ পিটু 1998 এটি লুয়া 5.3। আমি 5.2 সম্পর্কে জানি না, তবে 5.3 এ তারা যখন হেক্সাডেসিমাল মান গঠন না করে তখন এগুলি সম্পর্কে তাদের অভিযোগ করবে না। উদাহরণস্বরূপ, 6andকাজ করবে না কারণ 6aএকটি হেক্স মান, তবে 6anতা নয়।
কাটেনকিও

8-math.floor((y-1)/3)সত্যিই(25-y+(y-1)%3)/3
লিকি নুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.