পোকেবল সিমুলেটর


26

পোকেমন ভিডিও গেমগুলিতে, প্লেয়ারকে বন্য প্রাণীকে ছোট ছোট বল প্রয়োগ করতে এবং তাদের লড়াইয়ের প্রশিক্ষণ দেওয়ার জন্য বিশ্বে পাঠানো হয়। অবশ্যই, সবাই জানেন যে লড়াইয়ের জন্য কেউ পোকেমন খেলেন না । সিরিজের আসল ড্র হ'ল পোকেমন নিজেই ধরা! আপনার কাজ হ'ল একটি ক্যাপচার প্রচেষ্টার সময় পোকবল অনুকরণ করা। এই চ্যালেঞ্জটি প্রজন্মের ভি ক্যাপচার সূত্রটি ব্যবহার করবে যা নীচে:

a = (((3 * এইচপি_ম্যাক্স - 2 * এইচপি_কন্টেন্ট) * হার * বোনাস_বল) / 3 * এইচপি_ম্যাক্স) * বোনাস_ স্ট্যাটাস

HP_maxলক্ষ্য পোকেমন সর্বাধিক এইচপি সমান। HP_currentলক্ষ্য পোকেমন বর্তমান এইচপি সমান। rateএটি bonus_ballপোকেমনের ক্যাচ রেট, নিক্ষিপ্ত পোকেবলের গুণক এবং bonus_statusএটি 2.5 হয় যদি লক্ষ্য পোকেমন ঘুমন্ত বা হিমায়িত হয়, 1.5 লক্ষ্য লক্ষ্য পোকেমন পক্ষাঘাতগ্রস্থ, বিষাক্ত বা পোড়া হয় এবং অন্যথায় 1।

সন্ধানের পরে a, আপনি তিনটি পর্যন্ত "শেক চেক" করতে পারবেন। শেক চেক সফল হওয়ার সম্ভাবনা হ'ল 65536 / (255 / a)^(1/4)। যদি এই চেকগুলির কোনও একটি ব্যর্থ হয়, পোকেমন তার বলটি থেকে পালিয়ে যায়। তিনটি চেক সফল হলে পোকেমন ধরা পড়ে!

দ্রষ্টব্য: যখনই কোনও বিভাগ সম্পাদিত হয়, ফলাফলটি 1/4096 এর একাধিকতে গোল হয়। এটি সাধারণত একটি তাত্পর্যপূর্ণ বিশদ, তবে এটি আপনার প্রোগ্রামে অবশ্যই জবাবদিহি করতে হবে।

আপনার চ্যালেঞ্জটি হ'ল এমন একটি প্রোগ্রাম লিখুন যা শেক চেকগুলি কার্যকর করে এবং চেকগুলির স্থিতিটি অবিচ্ছিন্ন করতে প্রিন্ট করে। স্টিডিনে, আপনার প্রোগ্রামটি পোকেমন সর্বাধিক এইচপি, লক্ষ্য পোকেমনের ক্যাচ রেট এবং পোকবলের নাম পাবেন (কমপক্ষে নীচে বিশদগুলি) will সর্বাধিক এইচপি এবং ক্যাচ রেট উভয়ই পূর্ণসংখ্যা হওয়ার গ্যারান্টিযুক্ত, অন্যদিকে পোকবলের নাম সর্বদা একটি স্ট্রিং। এই ইনপুটটি কোনও ক্রমে আসতে পারে এবং কোনও সীমিত অক্ষর (গুলি) এর সাথে আপনার পক্ষে উপযুক্ত, যতক্ষণ এটি সামঞ্জস্যপূর্ণ। অনুমান করুন যে ইনপুটটি সঠিক, কোনও ত্রুটি পরিচালনার প্রয়োজন নেই।

আপনার সমর্থন করার জন্য প্রয়োজনীয় পোকবোলগুলির নাম এবং তাদের ধরা গুণকগুলি এখানে তালিকাভুক্ত রয়েছে:

  Poke | 1
 Great | 1.5
 Ultra | 2
Master | 255

আপনি ধরে নিতে পারেন যে লক্ষ্যটি ঘুমন্ত এবং 1 এইচপিতে রয়েছে। আউটপুট জন্য প্রত্যাশিত বিন্যাসটি হ'ল:

(First check failed)
(no output)

(Second check failed)
*shake*

(Third check failed)
*shake*
*shake*
*shake*

(All checks pass)
*shake*
*shake*
*shake*
Click!

(এটি কোনও টাইপো নয়, আপনার প্রোগ্রামটি কখনই কেবল দু'বার কাঁপতে পারে না))

এটি , সুতরাং আপনার স্কোরটি আপনার প্রোগ্রামের উত্স কোডের বাইট গণনা। সর্বনিম্ন স্কোর জয়।

বোনাসেস!

আমি বললাম আপনি যে হতে পারে অনুমান পোকেমন 1 এইচপি এবং ঘুমিয়ে রয়েছে। বিকল্পভাবে, আপনি ব্যবহারকারীকে পোকেমনের বর্তমান এইচপি এবং ইনপুট করার অনুমতি দিতে পারেন bonus_status। পোকেমনের বর্তমান এইচপি সর্বদা তার সর্বোচ্চ এইচপি এর সমান বা তার চেয়ে কম পূর্ণসংখ্যার bonus_statusহবে এবং সর্বদা 2.5, 1.5 বা 1 হয় either 2.5 যদি তাদের সরবরাহ না করা হয়। এর মধ্যে একটি বাস্তবায়নের জন্য আপনি আপনার স্কোর থেকে 15 পয়েন্ট বা উভয়ের জন্য 25 টি বিয়োগ করতে পারেন ।

অতিরিক্তভাবে, আপনি সমালোচনামূলক ক্যাপচারগুলি প্রয়োগ করতে পারেন। যদি একটি সমালোচনা ক্যাপচার হয়, কেবলমাত্র একটি ঝাঁকুনি পরীক্ষা করা হয়। যদি ব্যর্থ হয়, প্রোগ্রামটি নিঃশব্দে প্রস্থান করে। যদি পাস হয়ে যায় তবে ফলাফলগুলি:

*shake*
Click!

খেলোয়াড় আরও বেশি পোকেমন সংগ্রহ করায় সমালোচনামূলক ক্যাপচারগুলি আরও সাধারণ হয়ে ওঠে, তবে সরলতার জন্য আমরা ধরে নিতে পারি যে তারা ইতিমধ্যে "তাদের সবাইকে" ধরে ফেলেছে। যদি 0 এবং 2047 এর মধ্যে এলোমেলোভাবে উত্পন্ন সংখ্যাটি a2.5 টি দ্বারা গুণিত (প্রথম গণনার ফলাফল) এর চেয়ে কম হয় তবে এটি একটি সমালোচনামূলক ক্যাপচার। সমালোচনা ক্যাপচারের জন্য সমর্থন আপনাকে আপনার স্কোর থেকে 25 পয়েন্ট অপসারণ করতে দেয় ।

আপনি সমর্থনের জন্য বেছে নিতে পারেন এমন আরও অনেক পোকবাল রয়েছে। তাদের নাম এবং ক্যাচ মাল্টিপ্লায়ারগুলি এখানে তালিকাভুক্ত রয়েছে:

Safari | 1.5
 Sport | 1.5
  Lure | 3
   Net | 3
  Dusk | 3.5
  Dive | 3.5
  Moon | 4
  Fast | 4
 Quick | 5
  Love | 8

এই প্রতিটি বলের জন্য আপনি সমর্থন যুক্ত করেছেন, আপনি নিজের স্কোর থেকে (5 + বলের নামের দৈর্ঘ্য) বিয়োগ করতে পারেন ।

অবশেষে, কিক্সের জন্য, এই সমস্ত বোনাস (বর্তমান এইচপি এবং বোনাস_ স্ট্যাটাস, স্টিডিন, সমালোচনামূলক ক্যাপচারগুলি এবং সমস্ত 10 alচ্ছিক বলগুলি) অর্জন করা আপনাকে এমনকি 150 টি মোট বোনাসের জন্য আপনার স্কোর থেকে সরিয়ে নেওয়া 7 পয়েন্টের অতিরিক্ত পুরষ্কার প্রাপ্ত করবে ।

উদাহরণ ইনপুট / আউটপুট

কেবল আমরা নিশ্চিত হয়েছি যে আমরা সবাই একই পৃষ্ঠায় আছি।

$ ./balls <<< "19,Ultra,255"
*shake*
*shake*
*shake*
Click!

শুভকামনা, এবং শুভ গল্ফিং!


আপনি বর্তমানে যে সম্ভাব্যতাটি দিতে পারেন তা আমি বর্তমানে বিচার করতে পারি না 65536 / (255 / a)^(1/4)তবে আমার সাহস বলে যে এটি 1 এর চেয়ে বেশি? আপনি কি 0 থেকে 65536 এর মধ্যে একটি এলোমেলো সংখ্যার বিপরীতে চেক করেন? এলোমেলো সংখ্যা বড় হলে বা কম হলে চেকটি সফল হয়?
দ্য কনস্ট্রাক্টর

যদি 65536 / (255 / a)^(1/4)1 এর বেশি হয় তবে চেকটি স্বয়ংক্রিয়ভাবে সফল হয়। আমি নিশ্চিত না যে আপনি দ্বিতীয় প্রশ্নটি দ্বারা কী বোঝাতে চাইছেন।
আন্ডারগ্রাউন্ডোমোনাইল

সুতরাং এর rnd < pমানে হল যে চেকটি rnd0 এবং 1 এর
পরিসীমাতে সাফল্যজনক

1
@ ইসমাইল মিগুয়েল আমার মন্তব্যগুলি দেখুন: আপনি 0 থেকে 1 এর মধ্যে একটি এলোমেলো সংখ্যা তৈরি করেন এবং এর সাথে তুলনা করুন 65536 / (255 / a)^(1/4), যদি এলোমেলো সংখ্যাটি কম হয় তবে
শেকের

1
পাঠ্যে রাজ্য হিসাবে পাঠ্য ধরণের পোকেবল, সর্বোচ্চ এইচপি এবং ক্যাচ রেট আপনার প্রোগ্রামের ইনপুট হিসাবে অতীত।
Ptionচ্ছিকভাবে

উত্তর:


3

জে 301-150 = 151

খেলাধুলার জন্য, সমস্ত বোনাস প্রয়োগ করা হয়েছে, যদিও আমি না করাই সম্ভবত ভাল থাকি :)। আমি খুব শীঘ্রই নীচের জিনিসগুলি ব্যাখ্যা করেছি, তবে কেউ সুস্পষ্টভাবে অনুরোধ না করে, বিশদটি ব্যাখ্যা করতে এটি অনেক দীর্ঘ। এটি সমস্ত বল প্রয়োগ করে, সমালোচনা ক্যাপচারগুলি এবং optionচ্ছিক ইনপুট।

tm =: =*./@:+.' '=] NB. Template match, match non-blanks in right with left
balls  =: 'MMLLPGSUNDFQ',.12{.'oauo' NB. space = wildcard.
NB. lookup function: name -> bonus_ball
lookup =: 4 255 3 8 1 1.5 1.5 2 3 3.5 4 5 #~ (tm"1&balls)@(2&{.) 

NB. convert given option
options =: ;".`lookup@.(_=_&".);._2 ,&',' i3 NB. parse options to numeric values
NB. add defaults if necessary
complete =: (, 1 2.5{.~(5-$)) options         
NB. formula
r=: <.&.(*&4096)                              NB. round to 1/4096
NB. a=: ((3*zeroth - 2*thirth)*first*second*fourth)/(3*zeroth)
a=:r(1-3%~2*%/3 0{complete)**/1 2 4{complete  NB. A prime, already divided by 255

NB. Critical captures
crit =: >2r5*[:?11^~2: NB. check for critical, k a
mess =: 2 7$'*shake*Click! '"_ NB. Message template
check =: >"0 [:?(4$2^16)"_     NB. Perform 4 checks
mes2 =: mess#~3(<.,<)]          NB. Construct message from number of passed checks
NB. If critical, just output the message array, else do the 4 tests, and execute mes2 on their running and (meaning count the number of uninterrupted trues)
echo mes2@(+/)@(*./\)@(check"0)@(65536%4%:[:r 255%])`mess@.crit a

এখানে গল্ফ সংস্করণ

NB. Golfed verion
echo(m#~3(<.,<)])@(+/)@(*./\)@(>"0[:?(4$2^16)"_)@(65536%4%:[:r 255%])`(m=:2 7$'*shake*Click! '"_)@.(>2r5*[:?11^~2:)(r=:<.&.(*&4096))(1-3%~2*%/3 0{co)**/1 2 4{co=:(,1 2.5{.~(5-$));(".`(4 255 3 8 1 1.5 1.5 2 3 3.5 4 5 #~((=*./@:+.' '=])"1)&('MMLLPGSUNDFQ',.12{.'oauo')@(2&{.)))@.(_=_&".);._2,&','stdin''

6

পাইথন 249 বাইট - 75 বোনাসের জন্য = 174

আমার প্রথম চেষ্টা সর্বদা গল্ফ করা।

import sys,random
y=sys.argv
d,b,f={10:1,1:1.5,15:2,7:1.5,13:255,-2:3.5,6:3,8:3,0:4,11:5},3*int(y[1]),"*shake*\n"
s=lambda:random.random()*(255*b)**.25<65536*((b-2)*int(y[3])*d[ord(y[2][0])-70]*2.5)**.25
if s():print f*3+"Click!" if s()and s()else f

নির্বাচিত বলগুলি অন্তর্ভুক্ত করার জন্য বোনাস: সাফারি, ক্রীড়া, লুরি, নেট, সন্ধ্যা, ডুব, দ্রুত, দ্রুত

আমাকে 8 * 5 + 6 + 5 + 4 + 3 + 4 + 4 + 4 + 5 = 75 বোনাস পয়েন্ট দেওয়া হচ্ছে

[সম্পাদনা] প্রতিটি বার বিভাগটি ব্যবহার না করে 12 টি ভগ্নাংশ বিটকে গোল করতে হবে

[edit2] পোকেবল অভিধানটি অনুকূলিত করুন


আমি মনে করি আপনি 1/4096 (প্রশ্নের স্টেটস Note: Whenever any division is performed, the result is rounded down to a multiple of 1/4096.) এর চেয়ে বেশি একটি প্রাকৃতিক ব্যবহার করছেন
TheConstructor

আপনি সম্ভবত সঠিক, আমি সেই অংশটি বেশ বুঝতে পারি নি এবং অন্যান্য উত্তরগুলি দেখে মনে হয়েছিল যে আমি এটি করেছি। আমার ধারণা আমি এই জাতীয় কিছু করা দরকার: r < 65536/(255/a)^(0.25) <=> r*255^(0.25)/a^(0.25) < 65536 <=> r*255^(0.25) < 65536*a^(0.25)সমস্ত বিভাগ বাদ দিতে?
আর্স্টেইন

1/4096 এর অর্থ 12 ভগ্নাংশ বিট। আমার সমাধানটি দেখুন; floor(x*4096)*4096দশমিক জায়গাগুলির মতো আপনি যেমন নিচে নেমে আসেন তেমনই একটি আরও সরাসরি পন্থা ।
দ্য কনস্ট্রাক্টর

ওহ, আমি আপনাকে ধন্যবাদ, ধন্যবাদ। এটি সম্ভবত আপনি যেমনটি সম্পন্ন করেছেন বলে মনে হয় তেমনটিও গুণের ক্ষেত্রে প্রযোজ্য হবে, তবে যেহেতু এটি বিধিগুলিতে বর্ণিত হয়নি ´ আমি এটি সম্পর্কে উদ্বিগ্ন হচ্ছি না। :)
teorsteinn

হ্যাঁ, সম্ভবত তারা নির্দিষ্ট পয়েন্ট গণিত ব্যবহার করে। তবে ওপি কেবল বিভাগকে রাউন্ড করতে বলেছে।
TheConstructor

6

পার্ল 1 (374 - 150 = 224 + মিসিং নোট। বাইটস)

sub h{print "*shake*
";}($x,$h,$_,$c,$s)=split(/,/,<>);$G=$$%(/P/?256:/U/?151:201);$S=$G-($s==1?0:$s==1.5?12:25);
$F=255&int(int($h*255/(/G|S/?8:12))/(int($x/4)||1));sub c{for($i=0;$i<3;$i++){do h();}print "Click!
";exit;}
/M/||$S<0||$S<$c&&$F>$$*$$%255&&do c();$W=int(int($c*100/(/P/?255:/U/?150:200))*$F/255)+($s==1?0:$s==1.5?5:10);$W>9&&do h();$W>29&&do h();$W>69&&do h();

যুক্তি তালিকা:

current hp, max hp, pokéball, catch rate, status, critical capture

হ্যাঁ, আমি সচেতন এটি পুরোপুরি নিয়মগুলি ভঙ্গ করে, তবে আমার কোনও যত্ন নেই। আপনি যদি খেয়াল না করে থাকেন তবে এটি সর্বপ্রথম পোকেমন প্রজন্মের ক্যাপচার অ্যালগরিদম, এর সমস্ত কিরক দিয়ে (গ্রেট বলগুলি আল্ট্রা বলগুলির চেয়ে ভাল, কিছু শর্তে)। এটি অন্তর্ভুক্ত নয় এমনগুলি সহ সমস্ত বৈশিষ্ট্য প্রয়োগ করে (এবং যাইহোক আমি তাদের জন্য পয়েন্টগুলি অন্তর্ভুক্ত করার সিদ্ধান্ত নিয়েছি)। সমালোচনামূলক ক্যাপচারগুলি উপেক্ষা করা হয় (তবে সেগুলি প্রয়োগ করা হয় - কেবল যে তারা ক্যাপচারের হারকে প্রভাবিত করে না), নতুন পোকে বলগুলি অন্যান্য পোকে বলগুলির ডেটা লোড করে।

দয়া করে মনে রাখবেন যে এই উত্তরটি সংক্ষিপ্ত থাকলেও এটি সমস্ত নিয়ম ভঙ্গ করে, সুতরাং এটিকে কেবল একটি মজাদার উত্তর হিসাবে বিবেচনা করুন, এটি গ্রহণ করবেন না। আমি প্রথমে পেরেল 5 এ জেন 5 এর অ্যালগরিদম বাস্তবায়ন করতে যাচ্ছিলাম, তবে আমি সিদ্ধান্ত নিয়েছি - কিছু মজা কেন করা হবে না। এবং হ্যাঁ, আমি আসলে পার্ল 1 সংকলন করেছি এবং এই কোডটি কাজ করে। আপনি যদি এটি পার্লের নতুন সংস্করণে চালনা করেন তবে আপনি অবহেলিত ব্যবহার সম্পর্কে সতর্কতা পেতে পারেন do, তবে আসুন সত্য কথা বলা যাক - পার্ল ১-এ ফাংশনগুলি চালানোর একমাত্র উপায় এটি পার্ল ১ এর নিজস্ব কিছু গণ্ডগোলও রয়েছে (উদাহরণস্বরূপ, আমি পারছি না) /M/পূর্ববর্তী লাইনের সাথে শুরু করে রেখাটি সরান - কেন? - আমি জানি না)।

এছাড়াও, পার্ল 1 এ কোনও এলোমেলো সংখ্যা নেই, সুতরাং আশা করি আপনি মডুলোর জন্য আমাকে হত্যা করবেন না $$। এটি আমার কাছে পাওয়া এলোমেলো সংখ্যার নিকটতম জিনিস।

সম্পাদনা: দেখা যাচ্ছে যে do call()পার্ল 5.19.8 তে পুরানো বাক্য গঠনটি সরানো হয়েছিল। নিশ্চিত হয়ে নিন যে আপনি এই স্ক্রিপ্টটি চালানোর জন্য পার্লের একটি পুরানো সংস্করণ ব্যবহার করেছেন, কেননা এটি প্রদর্শিত হয় যে পার্ল 520 পার্ল 1 স্ক্রিপ্টগুলির সাথে সামঞ্জস্য করবে না।


5

পিএইচপি (746 763 বাইট - সমস্ত বোনাস):

<?if(!$i=fgets(STDIN))die('');parse_str($i,$i);$b=array('poke'=>1,'great'=>1.5,'ultra'=>2,'master'=>255,'safari'=>1.5,'sport'=>1.5,'lure'=>3,'net'=>3,'dusk'=>3.5,'dive'=>3.5,'moon'=>4,'fast'=>4,'quick'=>5,'love'=>8);$s=array('sleep'=>2.5,'frozen'=>2.5,'paralyzed'=>1.5,'poisoned'=>1.5,'burnt'=>1.5,''=>1);$i=array_merge(array('ball'=>'poke','hp'=>array('max'=>25,'current'=>1),'status'=>2.5,'rate'=>255),$i);$l='strtolower';$r='mt_rand';$x='*shake*'.PHP_EOL;$c='Click!'.PHP_EOL;$a=(((3*$i[hp][max])-(2*$i[hp][current]))*$i[rate]*$b[$l($i[ball])])/(3*$i[hp][max])*(is_numeric($i[status])?$i[status]:$s[$l($i[status])]);$a=((pow(65536/(255/$a),0.25)*4096)<<0)/4096;if($r(0,1)>$a)die();echo$x;if($a>1)die($c);if($r(0,1)>$a)die();echo$x,$x;if($r(0,1)>$a)die();echo$c;

এটি ব্যবহার করতে, আপনাকে এসটিডিআইএন-তে 'বল = পোকে ও স্ট্যাটাস = স্লিপ' হিসাবে ইনপুট সরবরাহ করতে হবে।

এইচপি অবশ্যই 'এইচপি [সর্বোচ্চ]' বা 'এইচপি [বর্তমান]' হিসাবে সরবরাহ করতে হবে।

এই কোডটি এখানে পরীক্ষিত হিসাবে কাজ করে ।

আপনি তার নাম বা গুণক দ্বারা স্থিতি সরবরাহ করতে পারেন। ( প্রশ্নে প্রয়োজনীয় নয় )।

এখানে একটি পাঠযোগ্য সংস্করণ:

if(!$info=fgets(STDIN))die('');
parse_str($info,$info);
$balls=array(//list of pokeballs
    'poke'=>1,
    'great'=>1.5,
    'ultra'=>2,
    'master'=>255,
    'safari'=>1.5,
    'sport'=>1.5,
    'lure'=>3,
    'net'=>3,
    'dusk'=>3.5,
    'dive'=>3.5,
    'moon'=>4,
    'fast'=>4,
    'quick'=>5,
    'love'=>8
);
$status=array(//list of status
    'sleep'=>2.5,
    'frozen'=>2.5,
    'paralyzed'=>1.5,
    'poisoned'=>1.5,
    'burnt'=>1.5,
    ''=>1 //in case there is no status
);
$info=array_merge(//this will set the default values
    array(
        'ball'=>'poke',
        'hp'=>array('max'=>25,'current'=>1),
        'status'=>2.5,
        'rate'=>255
    ),
    $info
);
$a=(((3*$info['hp']['max'])-(2*$info['hp']['current']))*$info['rate']*$balls[strtolower($info['ball'])])/(3*$info['hp']['max'])*(is_numeric($info['status'])?$info['status']:$status[strtolower($info['status'])]);
$a=((pow(65536/(255/$a),0.25)*4096)<<0)/4096;//same as $a=floor(pow(65536/(255/$a),0.25)*4096)/4096;

if(mt_rand(0,1)>$a) die();//test 1
echo '*shake*',PHP_EOL;
if($a>1)die('Click!'.PHP_EOL);//if $a>1, catch it (critical catch)

if(mt_rand(0,1)>$a) die();//test 2
echo'*shake*',PHP_EOL,'*shake*',PHP_EOL;

if(mt_rand(0,1)>$a) die();//test 3
echo 'Click!',PHP_EOL;//passed all tests

আমাকে এটি সম্পাদনা করতে হয়েছিল কারণ আমি প্রয়োজনীয়ের চেয়ে অনেক বেশি নির্ভুলতা ব্যবহার করছি।

ফিক্সটি দ্য কনস্ট্রাক্টর সরবরাহ করেছিলেন


আমি মনে করি আপনি 1/4096 এর চেয়ে বেশি একটি প্রাক্কলন ব্যবহার করছেন (প্রশ্নটি নোট Whenever any division is performed, the result is rounded down to a multiple of 1/4096.:)
TheConstructor

এবং আপনি ঠিক বলেছেন। আমি লক্ষ্য করেছি যে আমি বিভাগ থেকে যে কোনও মান ব্যবহার করছি using আপনি যদি চান তবে আপনি আমাকে কিছুটা সহায়তা দিতে পারেন কারণ পিএইচপি-র মধ্যে আরও ছোট স্পষ্টতা কীভাবে 'রাউন্ড' করা যায় সে সম্পর্কে আমার কোনও অভিভাবক ধারণা নেই।
ইসমাইল মিগুয়েল

floor(x*4096)/4096আমার মতো ফিক্সড-পয়েন্ট বিভাগটি আপনি করতে বা প্রয়োগ করতে পারেন ।
দ্য কনস্ট্রাক্টর

আপনার সাহায্যের জন্য ধন্যবাদ। আমি কখনই তা ভাবব না। আমি আমার উত্তর স্থির করেছি।
ইসমাইল মিগুয়েল

3

জাভা, 611

import java.util.*;class P{enum B{DI(35),DU(35),FA(40),GR(15),LO(80),LU(30),MA(2550),MO(40),NE(30),PO(10),QU(50),SA(15),SP(15),UL(20);long v;B(int i){v=((long)i<<12)/(long)10;}}public static void main(String[]y){Scanner s=new Scanner(System.in);B b=B.valueOf(s.next().toUpperCase().substring(0,2));long c=(long)(s.nextDouble()*4096);long m=s.nextLong()<<12;long h=(s.hasNextInt()?s.nextLong():1)<<12;long S=(long)((s.hasNextDouble()?s.nextDouble():2.5)*4096);long p=(65536L<<12)/(long)(Math.sqrt(Math.sqrt((255L<<24)/((((3L*m-2L*h)*c>>12)*b.v>>12<<12)/(3L*m)*S>>12)))*512);Random r=new Random();System.out.print(r.nextInt(65536)<p?"*shake*\n"+(r.nextInt(65536)<p?"*shake*\n*shake*\n"+(r.nextInt(65536)<p?"Click!\n":""):""):"");}}

স্কোর:

  • 729 বাইট
  • -93 সমস্ত বল
  • -25 alচ্ছিক বর্তমান_এইচপি এবং বোনাস_সেটেট

=> 611

প্রোগ্রামটি 12 ভগ্নাংশ-বিট ( 1/4096ডানদিকের বিটটির মান) সহ স্থির-পয়েন্ট-গাণিতিক ব্যবহার করে । জাভা সাধারণত স্থির-পয়েন্ট ব্যবহার না করে প্রত্যাশিত ফলাফলগুলি অর্জনের জন্য কোডের অভ্যন্তরে বেশ কিছু শিফট থাকে। ব্যবহৃত গাণিতিক ক্রিয়াকলাপগুলির জন্য দীর্ঘ সংস্করণ দেখুন, যা গল্ফিংয়ের উদ্দেশ্যে অন্তর্ভুক্ত করা হয়েছে।

যদিও বেশিরভাগ গণনা intমানগুলিতে করা যেতে পারে , বিভাগগুলি এসের সাথে আরও ভালভাবে কাজ করে longকারণ আপনার লভ্যাংশটি আরও 12 বিট দ্বারা বামে স্থানান্তরিত করতে পছন্দসই নির্ভুলতা ধরে রাখতে হবে (অন্যথায় আপনি সমস্ত ভগ্নাংশ-বিট আলগা করুন)।

নমুনা ইনপুট ( ;কেবলমাত্র ইন্টারেক্টিভভাবে চালানো হলে প্রয়োজন যেমন এসটিডিআইএন ইওফ পায় নি): বল, ক্যাচ_রেট, ম্যাক্স_এইচপি

Poke 15 255 ;

নমুনা আউটপুট:

*shake*

নমুনা ইনপুট: বল, ক্যাচ_রেট, ম্যাক্স_এইচপি, কারেন্ট_এইচপি, বোনাস_স্টেট

Moon 42 255 50 1.5

নমুনা আউটপুট:

*shake*
*shake*
*shake*
Click!
import java.math.BigDecimal;
import java.util.Random;
import java.util.Scanner;

class Pokeball {
    static long shift(long i) {
        return i << 12;
    }
    enum B {
        DI(35),DU(35),FA(40),GR(15),LO(80),LU(30),MA(2550),MO(40),NE(30),PO(10),QU(50),SA(15),SP(15),UL(20);
        long v;
        B(int i) {
            v = semiFixedDivision(shift(i),10);
        }
    }

    public static void main(String[] args) {
        final Scanner s = new Scanner(System.in);
        B b = B.valueOf(s.next().toUpperCase().substring(0, 2));
        long catchRate = (long) (s.nextDouble() * 4096);
        long maxHp = shift(s.nextLong());
        long currentHp = shift(s.hasNextInt()?s.nextInt():1);
        long statusBonus = (long) ((s.hasNextDouble()?s.nextDouble():2.5) * 4096);
        long a = fixedMultiplication(fixedDivision(fixedMultiplication(fixedMultiplication(
                semiFixedMultiplication(3, maxHp) - semiFixedMultiplication(2, currentHp), catchRate), b.v),
                                                   semiFixedMultiplication(3, maxHp)), statusBonus);
        println("a=",a);
        long x = fixedFourthRoot(fixedDivision(shift(255), a));
        println("x=",x);
        println("x^4=",fixedMultiplication(fixedMultiplication(x,x), fixedMultiplication(x,x)));
        long p = semiFixedDivision(shift(65536), fixedFourthRoot(fixedDivision(shift(255), a)));
        Random r = new Random();
        System.out.print(r.nextInt(65536) < p ?
                         "*shake*\n" + (r.nextInt(65536) < p ?
                                        "*shake*\n*shake*\n" + (r.nextInt(65536) < p ?
                                                                "Click!\n" :
                                                                "") :
                                        "") :
                         "");
    }

    private static long unshift(long p) {
        return p >> 12;
    }

    private static void println(String s, long v) {
        System.out.print(s);
        println(v);
    }

    private static void println(long v) {
        System.out.printf("%s%n", BigDecimal.valueOf(v).divide(BigDecimal.valueOf(4096)));
    }

    /**
     * Calculates division of {@code a/b} with both number last 12 bits treated as being "right of the dot"
     */
    static long fixedDivision(long a, long b) {
        return (a<<12)/b;
    }

    /**
     * Calculates division of {@code a/b} with {@code a}'s last 12 bits treated as being "right of the dot"
     */
    static long semiFixedDivision(long a, long b) {
        return a/b;
    }
    static long fixedMultiplication(long a, long b) {
        return (a*b) >> 12;
    }
    static long semiFixedMultiplication(long a, long b) {
        return a*b;
    }
    static long fixedFourthRoot(long a) {
        return (long)(Math.sqrt(Math.sqrt(a)) * 512);
    }
}

1

কফিস্ক্রিপ্ট - 317 313 310 307 306 294 270 250 242 বাইট

342 - 25 (পরামিতি) - 75 (12 বল) = 242

_=process.stdin
l=console.log
m=Math
s=m.sqrt
t=['*shake*','Click!']
n=65536
_.resume()
_.setEncoding 'utf8'
_.on 'data',(d)=>
 [A,B,C,E,F]=d.match /\w+/g;E||=1;F||=2.5;i=0;while i++<3
  if n*(s s (3*A-2*E)*B*{P:1,G:1.5,U:2,M:255,S:1.5,L:3,N:3,D:3.5,F:4,Q:5}[C.charAt 0]*F)<m.floor(m.random()*n)*s s 765*A
   break
  l t[0]
 if i>2
  l t[i-3]

ইনপুট আশা করে HP_max,Rate,Ball[,HP_current[,status]]। সমর্থন Moonবা Loveবল না।

এই প্রথম জিনিসটি আমি কখনও গল্ফ করেছিলাম যা কোনও রেইজেক্স নয়, তাই সম্ভবত উন্নতির জন্য আরও জায়গা রয়েছে। আমি নির্লজ্জভাবে ধারণাটি কেবল আংশিক বলের নাম সংরক্ষণ করার জন্য অনুলিপি করেছি। ;) অন্যান্য দুটি বলকে সমর্থন করা কেবল মূল্যবান নয়, এমনকি সমস্ত বোনাস পাওয়ার জন্য অতিরিক্ত +7 দিয়েও নয় ।

উদার সংস্করণ

এই সংস্করণটি শুরুর দিকে আমি সংক্ষিপ্ত সমস্ত সংক্ষিপ্ত নামগুলি বাদ দিলেও বল-লুককে আলাদাভাবে সংজ্ঞায়িত করে।

balls =
  P: 1
  G: 1.5
  U: 2
  M: 255
  S: 1.5
  L: 3
  N: 3
  D: 3.5
  F: 4
  Q: 5

messages = ['*shake*', 'Click!']

process.stdin.resume()
process.stdin.setEncoding 'utf8'
process.stdin.on 'data', (data) =>
  [HP_max, rate, ball, HP_current, status] = data.match /\w+/g
  HP_current ||= 1
  HP_status ||= 2.5
  i = 0
  while i++ < 3
    if 65536 * (Math.sqrt Math.sqrt (3*HP_max - 2*HP_current)*rate*status*balls[ball.charAt 0]) < Math.floor(Math.random()*65536) * Math.sqrt Math.sqrt 765*HP_max
      break
    console.log messages[0]
  if i > 2
    console.log messages[i-3]

সম্ভাব্যতার সূত্রে একটি নোট: আমি সম্পূর্ণ সূত্রটি পুনরায় সাজিয়েছি (লিখিতভাবে লিখে রেখেছি a) যাতে কোনও বিভাজন না থাকে এবং আমি (...)^(1/4)দু'বার স্কোয়ার রুটটি নিয়ে কম্পিউটিং করছি ।


1
দেখে মনে হচ্ছে নজরে রয়েছে আপনার দিকে ওও p-=p%1/4096সত্যই কাজ করছে বলে মনে হচ্ছে। (অনুমান করতেন আপনার কমপক্ষে লেখার দরকার পড়বে p-=p%(1/4096)এবং তারপরেও আমি নিশ্চিত হতে পারি না যে উভয় পক্ষের ভগ্নাংশের জন্য মডুলাস প্রয়োগ করা হয়েছে। ভাল!
TheConstructor

@ কন্সট্রাক্টর হা হা, হ্যাঁ আমাকে আসলে এটি যাচাই করতে হয়েছিল ... এটি আমার কাছে খুব অদ্ভুত লাগছিল, তবে %জেএস-এর কিছু মজার জিনিসের জন্য ব্যবহার করা যেতে পারে। প্রশ্নটি পুনরায় পড়ার পরে, আমি মনে করি এই উত্তরটি যদিও গোলাকার প্রয়োজনীয়তাটি পুরোপুরি পূরণ করে না। আমি মনে করি প্রতিটি বিভাগের পরে রাউন্ডিং প্রয়োগ করা উচিত । আমাকে আমার গণনাটি কিছুটা পুনর্গঠন করতে হবে। ^^
মার্টিন এন্ডার

হ্যাঁ সম্ভবত এখনও ভাল ধারণা
TheConstructor

@ দ্য কনস্ট্রাক্টর আসলে, আমার লেখার দরকার নেই p%(1/4096)। এমনকি আমি পোস্ট করার আগে এটি পরীক্ষা করেছিলাম, তবে কোনওভাবে আমার পরীক্ষার ফলাফল ভুল মনে পড়ে।
মার্টিন ইন্ডার

ক্রোমে চেষ্টা করা; () ছাড়া কাজ করেছেন তবে সবসময় বা সব ব্রাউজারে
নাও হতে পারে

0

আপডেট: (সি #)

বাইট গণনা: 3,600

সমালোচনা: -25

সমস্ত পোকে-বল: -91


মোট = 3,484

[Golfed]

using System;using System.Text;using System.Security.Cryptography;using System.Linq;namespace Pokemon{public class MainClass{private string[] c(string[] i){if(i.Length <= 3){var v1 =i[0][0];var v2 =i[1][0];var v3 =i[2][0];if(v1>='0'&&v1<='9'&&v2>='a'&&v2<='z'&&v3>='0'&&v3<='9')return new string[]{i[0],i[2],i[1]};else if(v1>='0'&&v1<='9'&&v2>='0'&&v2<='9'&&v3>='a'&&v3<='z')return new string[]{i[0],i[1],i[2]};else if(v1>='a'&&v1<='z'&&v2>='0'&&v2<='9'&&v3>='0'&&v3<='9')return new string[]{i[1],i[2],i[0]};else return null;}else return null;}private static void Main(string[] args){while(true){Console.Clear();MainClass _c = new MainClass();Console.Write("Inputs'please:");var i = Console.ReadLine().ToLower();string[] r = _c.c((string[])(i.Split(new Char[]{' ','.',',','\n','\t','!','@','#','$','%','^','&','&','*','(',')','-','_','+','=','?','/','\\'},StringSplitOptions.RemoveEmptyEntries).Select(p=>p.Trim()).ToList()).ToArray());new w("Processing...\n");if(r== null)new w("Too many errors");else new m(r);}}}public class w{public w(string l){Console.WriteLine(l);}}public class m{public m(string[] v){switch (v[2].Substring(0,2)){case "po":c(v[0],v[1],"1");break;case "ul":c(v[0],v[1],"2");break;case "ma":c(v[0],v[1],"255");break;case "gr":case "sa":case "sp":c(v[0],v[1],"1.5");break;case "lu":case "ne":c(v[0],v[1],"3");break;case "du":case "di":c(v[0],v[1],"3.5");break;case "mo":case "fa":c(v[0],v[1],"4");break;case "qu":c(v[0],v[1],"5");break;case "lo":c(v[0],v[1],"8");break;default:new w("Not supported");break;}}private double y(double v){return Convert.ToDouble(((double)1/(double)4096)*(v/Convert.ToDouble(1/4096)-(v%Convert.ToDouble(1/4096))));}private bool i(double v,double r,double b){if(((double)new Random().Next(0,(int)r))>b*v)return true;else return false;}private double f(double r, double h, double b){return 2.5*y((((3.0*h)-2.0)*r*b)/(3.0*h));}private void c(params string[] v){var s =0.0;var x =0;if(int.Parse(v[1])>100&&int.Parse(v[1])<= 255){s =f(double.Parse(v[0]),double.Parse(v[1]),double.Parse(v[2]));x=0;}else if(int.Parse(v[0])>100&&int.Parse(v[0])<= 255){s =f(double.Parse(v[1]),double.Parse(v[0]),double.Parse(v[2]));x=1;}else{new w(String.Format("Which number is the Max HP? :{0} or {1}:",v[0],v[1]));var c_ = int.Parse(Console.ReadLine());s =f((double.Parse(v[0])+double.Parse(v[1]))-double.Parse(v[c_]),double.Parse(v[c_]),double.Parse(v[2]));x=2;}if(((double)new Random().Next(0, 2047))<s*2.5)new w("*shake*\nClick!");else{for(int c_= 0;c_<3;c_++){new w("*shake*");var r =Math.Pow(65536.0/y(255.0/s),0.25);if(i(r,double.Parse(v[x]),2.5)==true){new w("Click!");break;}else;}}Console.ReadKey();}}}

[নিয়মিত]

using System;
using System.Text;
using System.Security.Cryptography;
using System.Linq;

namespace Pokemon
{
    public class MainClass
    {
        private string[] c(string[] i)
        {
            if (i.Length <= 3)
            {
                var v1 =i[0][0];
                var v2 =i[1][0];
                var v3 =i[2][0];
                if(v1>='0'&&v1<='9'&&v2>='a'&&v2<='z'&&v3>='0'&&v3<='9')return new string[]{i[0],i[2],i[1]};
                else if(v1>='0'&&v1<='9'&&v2>='0'&&v2<='9'&&v3>='a'&&v3<='z')return new string[]{i[0],i[1],i[2]};
                else if(v1>='a'&&v1<='z'&&v2>='0'&&v2<='9'&&v3>='0'&&v3<='9')return new string[]{i[1],i[2],i[0]};
                else return null;
            }
            else return null;
        }

        private static void Main(string[] args)
        {
            while(true)
            {
                Console.Clear();
                MainClass _c = new MainClass();
                Console.Write("Inputs'please:");
                var i = Console.ReadLine().ToLower();
                string[] r = _c.c((string[])(i.Split(new Char[]{' ','.',',','\n','\t','!','@','#','$','%','^','&','&','*','(',')','-','_','+','=','?','/','\\'},StringSplitOptions.RemoveEmptyEntries).Select(p=>p.Trim()).ToList()).ToArray());
                new w("Processing...\n");
                if(r== null)new w("Too many errors");
                else new m(r);
            }
        }
    }

    public class w
    {
        public w(string l)
        {
            Console.WriteLine(l);
        }
    }

    public class m
    {
        public m(string[] v)
        {
            switch (v[2].Substring(0,2))
            {
                case "po":
                    c(v[0],v[1],"1");
                    break;
                case "ul":
                    c(v[0],v[1],"2");
                    break;
                case "ma":
                    c(v[0],v[1],"255");
                    break;
                case "gr":
                case "sa":
                case "sp":
                    c(v[0],v[1],"1.5");
                    break;
                case "lu":
                case "ne":
                    c(v[0],v[1],"3");
                    break;
                case "du":
                case "di":
                    c(v[0],v[1],"3.5");
                    break;
                case "mo":
                case "fa":
                    c(v[0],v[1],"4");
                    break;
                case "qu":
                    c(v[0],v[1],"5");
                    break;
                case "lo":
                    c(v[0],v[1],"8");
                    break;
                default:
                    new w("Not supported");
                    break;
            }
        }

        private double y(double v){return Convert.ToDouble(((double)1/(double)4096)*(v/Convert.ToDouble(1/4096)-(v%Convert.ToDouble(1/4096))));}

        private bool i(double v,double r,double b){if(((double)new Random().Next(0,(int)r))>b*v)return true;else return false;}

        private double f(double r, double h, double b){return 2.5*y((((3.0*h)-2.0)*r*b)/(3.0*h));}

        private void c(params string[] v)
        {
            var s =0.0;
            var x =0;
            if(int.Parse(v[1])>100&&int.Parse(v[1])<= 255){s =f(double.Parse(v[0]),double.Parse(v[1]),double.Parse(v[2]));x=0;}
            else if(int.Parse(v[0])>100&&int.Parse(v[0])<= 255){s =f(double.Parse(v[1]),double.Parse(v[0]),double.Parse(v[2]));x=1;}
            else
            {
                new w(String.Format("Which number is the Max HP? :{0} or {1}:",v[0],v[1]));
                var c_ = int.Parse(Console.ReadLine());
                s =f((double.Parse(v[0])+double.Parse(v[1]))-double.Parse(v[c_]),double.Parse(v[c_]),double.Parse(v[2]));
                x=2;
            }
            if (((double)new Random().Next(0, 2047))<s*2.5)new w("*shake*\nClick!");
            else
            {
                for(int c_= 0;c_<3;c_++)
                {
                    new w("*shake*");
                    var r =Math.Pow(65536.0/y(255.0/s),0.25);
                    if (i(r,double.Parse(v[x]),2.5)==true){new w("Click!");break;}else;
                }
            }
            Console.ReadKey();
        }    
      }
  }

এটি কোড গল্ফিং। আপনার উত্তরটি হ্রাস করা উচিত (যেমন: সাদা স্থানগুলি বাদ দেওয়া)। আপনি এখনও পঠনযোগ্য সংস্করণ হিসাবে বর্তমান উত্তর সরবরাহ করতে পারেন।
ইসমাইল মিগুয়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.