কোড গল্ফ সিমুলেটেড গল্ফ


13

গল ইয়ার্ডেজ, সবুজ মাপ, একটি স্লাইস এঙ্গেল এবং সর্বাধিক দূরত্বের একটি তালিকা দেওয়া হয়েছে, গল্ফ স্কোর গণনা করুন ।

অনুমিতি

  • পৃথিবী সমতল
  • সমস্ত সবুজ বৃত্তাকার হয়
  • স্লাইস এঙ্গেল -45 থেকে 45 ডিগ্রির মধ্যে হবে এবং ডিগ্রিতে দেওয়া হবে
  • একই মেট্রিকের সমস্ত দূরত্ব (গজ বা মিটারগুলি কোনও ব্যাপার নয়)
  • সীমা, বাধা বা ডগলগের বাইরে নেই
  • যে কোনও গর্তে সর্বোচ্চ স্কোর 8
  • সমস্ত শটগুলি গর্তের সাথে আরও স্লাইস কোণে কোণ দ্বারা নির্ধারিত দিকটিতে গর্তের সর্বাধিক দূরত্ব বা দূরত্বের কম ভ্রমণ করে।
  • শুরু এবং শেষ পয়েন্টের মধ্যে সরল রেখা বা ইউক্লিডিয়ান দূরত্ব হিসাবে দূরত্ব পরিমাপ করা হয়।
  • সমস্ত গর্তের সমস্ত শটের জন্য সর্বোচ্চ দূরত্ব এবং স্লাইস কোণ একই
  • গল্ফার সবসময় সবুজ একবারে (বা সবুজ ঠিক প্রান্তে) একবার দ্বি-পুটস।

উদাহরণ

আসুন হ্যাকারটি পরীক্ষার কেস # 5 থেকে গর্ত # 2 এর জন্য নীচে দেখুন। হ্যাকার 320 গজ বলটি আঘাত করতে পারে তবে সর্বদা 30 ডিগ্রি টুকরো টুকরো করে। যদি আমরা সাধারণতার ক্ষতি ছাড়াই ধরে নিই যে টি বাক্সটি {0,0 at এবং সবুজ {497,0 at এ রয়েছে, তবে তিনি নিম্নলিখিত পয়েন্টগুলিতে শট মারবেন, 7 তম শটে সবুজটিতে পৌঁছে যাবেন:

{{0.,0.},{277.128,-160.},{547.543,-131.372},{569.457,7.67088},{502.872,37.2564},{479.159,7.92741},{490.646,-7.85868},{500.078,-4.22987}}

এই মুহুর্তে, প্রয়োজনীয় দুটি পুটের কারণে তার স্কোর 9 হবে, সুতরাং অনুমিতি অনুসারে তার জন্য চূড়ান্ত স্কোরটি 8 এ আচ্ছাদিত হয়ে যায়।

গ্রাফিকালি, এটি দেখতে এটির মতো হবে: এখানে চিত্র বর্ণনা লিখুন

পরীক্ষার কেস

সমস্ত পরীক্ষার ক্ষেত্রে স্ট্যান্ডার্ড 18-হোল কোর্স রয়েছে

Case#1
{MaxDistance->280,SliceAngle->10,HoleDistances->{181,368,161,416,158,526,377,427,509,148,405,443,510,494,396,388,483,172},GreenDiameters->{26,18,17,23,27,23,21,23,25,21,19,24,21,23,25,24,22,22}}
Scores: 
{4,5,4,5,4,5,5,5,5,4,5,5,5,5,5,5,5,4}
Output: 85

Case#2 (same course as Test Case #1, shorter more accurate golfer)
{MaxDistance->180,SliceAngle->5,HoleDistances->{181,368,161,416,158,526,377,427,509,148,405,443,510,494,396,388,483,172},GreenDiameters->{26,18,17,23,27,23,21,23,25,21,19,24,21,23,25,24,22,22}}
Scores:
{4,5,4,5,4,6,5,5,6,4,5,5,6,6,5,5,5,4}
Output: 89

Case#3 (Same golfer as test case #1, shorter course)
{MaxDistance->280,SliceAngle->10,HoleDistances->{147,497,110,528,409,118,196,154,134,514,374,491,131,138,523,478,481,494},GreenDiameters->{32,16,36,25,32,20,30,30,33,29,25,26,26,25,33,28,21,28}}
Scores:
{4,5,4,5,5,4,4,4,4,5,5,5,4,4,5,5,5,5}
Output: 82

Case#4 (Same course as test case #3)
{MaxDistance->180,SliceAngle->5,HoleDistances->{147,497,110,528,409,118,196,154,134,514,374,491,131,138,523,478,481,494},GreenDiameters->{32,16,36,25,32,20,30,30,33,29,25,26,26,25,33,28,21,28}}
Scores:
{3,6,3,6,5,4,4,3,3,5,5,5,3,3,5,5,6,5}
Output: 79

Case#5 (Hacker)
{MaxDistance->320,SliceAngle->30,HoleDistances->{147,497,110,528,409,118,196,154,134,514,374,491,131,138,523,478,481,494},GreenDiameters->{32,16,36,25,32,20,30,30,33,29,25,26,26,25,33,28,21,28}}
Scores:
{6,8,5,8,7,6,6,6,6,8,8,8,6,6,8,8,8,8}
Output: 126

বিধি

  • ইনপুট জন্য যে কোনও বিন্যাস ব্যবহার করা যেতে পারে। আউটপুট হ'ল সিমুলেটেড স্ট্রোকের সংখ্যা, সুতরাং পূর্ণসংখ্যা হওয়া উচিত।
  • এটি তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর w স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।

5
অনুমানের অধীনে কেন "পৃথিবী সমতল"?
জো কিং

আমরা কী ধরে নিতে পারি যে বলটি MaxDistanceগর্তের মধ্যে যেতে 6 টির বেশি শট লাগবে না কখনও ?
ইটিএইচ প্রোডাকশনগুলি 22:58

1
@ জোকিং মূলত, যাতে গোলক জ্যামিতির চেয়ে বিমানটি ব্যবহার করা হয়; দ্বিতীয়ত কারণ গোলাকার মুরগি অনুমান করার প্রয়োজন ছিল না :)
কেলি লোডার 22'18

@ ইথ প্রডাকশনস, ভাল আপনি করতে পারেন তবে এটি অপ্রয়োজনীয়। আমি মনে করি সম্ভবত আপনি বোঝাতে চেয়েছেন GreenDiameter/2যে ক্ষেত্রে হ্যাঁ, যেহেতু স্কোরটি 8 এ ক্যাপড এবং সেখানে সবসময় 2 টি পুট থাকে।
কেলি লোডার 22'18

চিন্তা করবেন না, আমি এই প্রশ্নটি কীভাবে বুঝিয়েছি তা বলেছি ;-) আমার কৌশলটি যেটির উপর নির্ভর করে তা আমার বর্তমান উত্তরের
তুলনায় খুব কমই

উত্তর:


10

জাভাস্ক্রিপ্ট (ES7), 128 126 বাইট

(m,a,D,S,t=0)=>S.map((s,i)=>t+=(r=(f=d=>d>s/2?1+f((l=d<m?d:m,l*l+d*d-2*d*l*Math.cos(a*Math.PI/180))**.5,s):2)(D[i]))<8?r:8)&&t

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

কারণ বল থেকে কেবল গর্তের দূরত্ব এবং বলের স্থানাঙ্কগুলি নয়, আমরা একটি অ্যালগরিদম লিখতে পারি যা গণনা করে যে প্রতিটি শট দিয়ে বলটি গর্তের কাছে কতটা কাছে যায়, তারপরে বলটি সবুজ না পৌঁছানো পর্যন্ত বারবার চালানো। তবে আমরা কীভাবে এটি করব?

এমএস পেইন্ট সংশোধন সহ বলের চলাফেরার ব্যাখ্যা দিয়ে ওপির সহায়ক ডায়াগ্রামটি পুনরায় ব্যবহার করুন:

গল্ফ বিজ্ঞান

আমাদের এই সংখ্যাগুলিতে অ্যাক্সেস রয়েছে:

  • ডি , বল থেকে গর্তের বর্তমান দূরত্ব;
  • θ , স্লাইস কোণ; এবং
  • l , শটের দৈর্ঘ্য (সর্বনিম্ন ডি এবং সর্বোচ্চ শটের দৈর্ঘ্য)।

এবং লক্ষ্যটি হল এক্স , শট নেওয়ার পরে বল থেকে গর্তের দূরত্ব।

প্রথমে আমরা লক্ষ করি যে a এবং b কেবল যথাক্রমে l cos cos এবং l sin are । আমরা দেখতে পারি যে পিথাগোরাসের উপপাদ্য দ্বারা, এক্স হিসাবে প্রতিনিধিত্ব করা যাবে বর্গমূল (খ 2 + + (ডিএ) 2 ) । এটি প্রসারিত করে, আমরা পেয়েছি

x = sqrt(b^2 + (d - a)^2)
  = sqrt((l*sin(θ))^2 + (d - l*cos(θ))^2)
  = sqrt((l^2 * sin^2(θ)) + (d^2 - 2*d*l*cos(θ) + l^2 * cos^2(θ))
  = sqrt(l^2 * sin^2(θ) + l^2 * cos^2(θ) + d^2 - 2dl*cos(θ))
  = sqrt(l^2 * (sin^2(θ) + cos^2(θ)) + d^2 - 2dl*cos(θ))
  = sqrt(l^2 * 1 + d^2 - 2dl*cos(θ))
  = sqrt(l^2 + d^2 - 2dl*cos(θ))

এবং সুতরাং, বল থেকে গর্তের নতুন দূরত্ব স্কয়ারটি হবে (l 2 + d 2 - 2dl cos θ) । তারপরে আমরা সবুজ এর ব্যাসার্ধের মধ্যে এই দূরত্বটি পেতে যে পুনরাবৃত্তিগুলি লাগে তা গণনা করি, সেই গর্তটির চূড়ান্ত স্কোর পেতে 2 যোগ করুন এবং 8 এ টুপি দিন।

(যে ইশারা গণনার আমি প্রত্যক্ষ ফল হয় দেশ @ LegionMammal978 ধন্যবাদ cosines আইন ...)


মজার ব্যাপারটি যথেষ্ট, যখন বলটি তার সর্বোচ্চ শটের চেয়ে গর্তের কাছাকাছি থাকে, l = d এবং আমরা সূত্রটি আরও খানিকটা সহজ করতে পারি:

x = sqrt(l^2 + d^2 - 2dl*cos(θ))
  = sqrt(d^2 + d^2 - 2d^2*cos(θ))
  = sqrt(2d^2 - 2d^2*cos(θ))
  = sqrt(d^2(2 - 2cos(θ)))
  = d * sqrt(2 - 2cos(θ))

বাকী পুনরাবৃত্তির # সন্ধানের জন্য, আমরা কেবল তখন ডি / আর (যেখানে r = সবুজ এর ব্যাসার্ধ) খুঁজে পেতে পারি এবং স্কয়ারটি (2 - 2cos (θ)) দ্বারা বিভাজন করতে পারি , তারপরে ফলাফলটির সিলিংটি নিয়ে 2 টি যোগ করতে পারি দুর্ভাগ্যক্রমে, এটি কেবলমাত্র ছোট ডি এবং সর্বোচ্চ শট দৈর্ঘ্যের সন্ধানের মতো ছোট বলে মনে হচ্ছে না ।


এটি দেখতে বেশ শক্ত দেখাচ্ছে। সুযোগ পেলে আপনি কি একটি টিআইও লিঙ্ক পোস্ট করতে পারেন?
কেলি লোদার 22'18

1
@ কেলিলাউডার অবশ্যই, সম্পন্ন
ইটিএইচ প্রডাকশনগুলি

2
আপনার চূড়ান্ত সমীকরণটি কি মহাসাগরীয় আইনগুলির প্রত্যক্ষ পরিণতি হবে না?
LegionMammal978

@ লেজিমনম্যামাল ৯78৮ আমার ধারণা এটি হবে ... দুঃখিত, আমার ত্রিকোণমিতিটি
খানিকটা

1
@ কামোরোসো94 এটি একটি ভাল ধারণা হতে পারে। ব্যবহার .017453345 ডিগ্রির কোসাইনগুলিতে মাত্র 2.38e-7 এর একটি ত্রুটি দেয়, তাই এটি কাজ করার পক্ষে যথেষ্ট নগণ্য হতে পারে। আসলে এখন আমি এটি দেখতে পাচ্ছি, 71/4068(= 355/113 / 180) আরও ভাল, মাত্র 4.135e-10 এর ত্রুটি দেওয়া ...
ETH প্রোডাকশনগুলি

3

পার্ল 5 , 144 138 + 12 ( -MMath::Trig) = 150 বাইট

সূত্রটি সরলকরণের জন্য EEP প্রডাকশনগুলির কয়েকটি বাইট ব্যবহার করে শেভ করে

sub p{$_=pi/180*pop;$m=pop;for$b(@_[0..17]){$s=!++$c;1while++$s<6&&$_[17+$c]/2<($b=sqrt$b*$b+($h=$m<$b?$m:$b)**2-2*$h*$b*cos);$t+=$s+2}$t}

এটি অনলাইন চেষ্টা করুন!

ইনপুট ফর্ম্যাটটি কিছুটা বদলেছে:

Hole 1 distance
Hole 2 distance
...
Hole 18 distance
Hole 1 green diameter
...
Hole 18 green diameter
Maximum distance
Slice angle

2

জুলিয়া 0.6 , 106 বাইট

S(m,t,D,G)=(s(m,d,g,v=2)=d<=g/2?v<8?v:8:(l=d<m?d:m;s(l,(d^2+l^2-2d*l*cosd(t))^.5,g,v+1));sum(s.([m],D,G)))

এটি অনলাইন চেষ্টা করুন!

ইটিএইচ প্রডাকশনগুলির উত্তরের ভিত্তিতে ।

ব্যাখ্যা

  • s(m,d,g,v=2)=...ফাংশনটি সংজ্ঞায়িত করুন sযা একটি গর্তের জন্য পুনরাবৃত্তভাবে স্কোর গণনা করে।
  • sum(s.([m],D,G))sপ্রতিটি গর্তের জন্য প্রয়োগ করুন এবং ফলাফলের যোগফল দিন। .সিঙ্গেলটন সম্প্রসারণ সহ উপাদান ভিত্তিক ফাংশন অ্যাপ্লিকেশন। উদাহরণ:min.([1],[2,3]) = [min(1,2), min(1,3)]
d<=g/2?v<8?v:8:(l=d<m?d:m;s(...)) #
d<=g/2?       :                   # is the ball on the green?
       v<8?v:8                    # yes -> return min(v,8)
               (l=d<m?d:m;s(...)) # no  ->
                                  # calculate new distance using ETHproductions' formula
                                  # increment current score
                                  # call s recursively
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.