নায়েমিথের নিয়ম


12

নায়েমিথের নিয়ম দূরত্ব এবং আরোহণের কারণে হাঁটতে বা চলাচলের জন্য প্রয়োজনীয় সময়সীমাটি কার্যকর করতে সহায়তা করে।

একটি পথ ধরে সমানভাবে বিস্তৃত পয়েন্টগুলিতে উচ্চতার একটি খালি খালি তালিকা এবং সেই পথের মোট দূরত্ব মিটারে দেওয়া, আপনি নায়েমিথের নিয়ম অনুসারে প্রয়োজনীয় সময় গণনা করতে হবে।

নায়েমিথের নিয়ম হ'ল আপনার প্রতি পাঁচ কিলোমিটারের জন্য এক ঘন্টা এবং আরোহণের প্রতি 600 মিটারের জন্য অতিরিক্ত ঘন্টা রাখা উচিত।

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

উদাহরণস্বরূপ, প্রদত্ত:

[100, 200, 400, 200, 700, 400], 5000

প্রথম দুটি উপাদানের জন্য [100, 200]আপনার 100 মিটার আরোহণ যা 10 মিনিটের। আপনার সাথে [200, 400]200 মিটার আরোহণ যা 20 মিনিটের, [400, 200]আরোহী নয় তাই এর জন্য কোনও সময় যুক্ত করা হয় না। [200, 700]500 মিটার চড়াই যা 50 মিনিট, এবং অবশেষে [700, 400]আরোহী নয়। পাঁচ কিলোমিটার দূরত্বের জন্য আরও একটি ঘন্টা যুক্ত করা হয়। এটি মোট 140 মিনিট বা 2.333 ... ঘন্টা।

পরীক্ষার কেস

[0, 600] 2500 -> 1.5 OR 90
[100, 200, 300, 0, 100, 200, 300] 10000 -> 2.8333... OR 170
[40, 5, 35] 1000 -> 0.25 OR 15
[604] 5000 -> 1 OR 60
[10, 10, 10] 2000 -> 0.4 OR 24
[10, 25, 55] 1000 -> 0.275 OR 16.5

পরীক্ষার কেসগুলি সমস্তের পুরো মিনিটের ফলাফল হয়, তা কি ইচ্ছাকৃত? ইনপুটগুলি কি পছন্দ মতো [10], 5125বা [10, 25, 55], 1000বৈধ এবং পরিচালনা করার জন্য প্রয়োজনীয়?
- মনিকা

@ সুন্দর হ্যাঁ, তাদের উচিত।
Okx

উত্তর:


6

আর ,  44  43 42 বাইট

function(A,D)sum(pmax(0,diff(A)),D*.12)/10

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

pmaxএকাধিক অন্যান্য উত্তর হিসাবে -1 বাইট ব্যবহার করে

Aসুগন্ধ এবং Dবিচ্ছিন্নতা হিসাবে ইনপুট নেয় এবং কয়েক মিনিটের মধ্যে সময় দেয়।

function(A,D)                                 # take Ascent and Distance
                        diff(A)               # take successive differences of ascents
                 pmax(0,       )              # get the positive elements of those
                                 D*.12        # multiply distance by 0.12
             sum(               ,     )       # take the sum of all elements
                                       /10    # and divide by 10, returning the result


আপনি pryr :: f ব্যবহার করে আরও 4 টি বাইট পেতে পারেন (ফ (যোগ (পিএমএক্স (0, ডিফার (এ))), ডি * .12) / 10) ফাংশনটি ব্যবহার না করে
Shayne03

@ শায়েন03 যা সাইটের এই নিয়মগুলিকে "আর + পিআরআর" এর প্রযুক্তিগতভাবে পরিবর্তিত করবে যা সাইটের নিয়ম অনুসারে বেস আর এর চেয়ে আলাদা একটি ভাষা হিসাবে গণ্য হয়, তাই আমি এটি এটি হিসাবে রাখব। যদিও পরামর্শ জন্য ধন্যবাদ!
জিউসেপে

ব্যাখ্যাটি পাহাড়ের মতো
আকারযুক্ত

3

জাভাস্ক্রিপ্ট (ES6), 50 বাইট

জিউসেপের উত্তরের জন্য 1 বাইট সংরক্ষণ করা হয়েছে (প্রক্রিয়া শেষে 10 দ্বারা বিভাজক)

হিসাবে ইনপুট লাগে ([altitudes])(distance)। মিনিটের মধ্যে সময় দেয়।

a=>d=>a.map(p=n=>d-=(x=p-(p=n))<0&&x,d*=.12)&&d/10

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


2

05 এ বি 1 ই , 15 বাইট

¥ʒ0›}OT÷s₄;6//+

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

মিনিটের মধ্যে সময় ফিরে আসে।

ব্যাখ্যা

              + # sum of ...
¥ʒ0›}OT÷        # the sum of positive deltas of the altitude divided by 10
        s₄;6//  # the distance divided by 83.33333333 (500/6, or the amount of meters per minute) 

আমার মনে যা ছিল ঠিক তেমনটাই। ₄12//পরিবর্তে আমার কেবল পার্থক্য ছিল ₄;6//। আমার কাছ থেকে তাই স্পষ্ট।
কেভিন ক্রুইজসেন


2

পাইথন 2, 62 60 বাইট

Ovs ধন্যবাদ 2 বাইট সংরক্ষণ করা।

lambda e,d:sum((a-b)*(a>b)for a,b in zip(e[1:],e))*.1+d*.012

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

মিনিটের মধ্যে সময় ফিরে আসে।

# add all increasing slope differences together
sum(
    # multiply the difference by 0 if a<b, else by 1
    (a-b)*(a>b)
                # create a list of pairs by index, like [(1,0), (2,1) ...(n, n-1)]
                # then interate thru the pairs where a is the higher indexed item and b is the lower indexed item
                for a,b in zip(e[1:],e)
    )
    # * 60 minutes / 600 meters == .1 min/m
    *.1 
    # 60 minutes / 5000 meters = .012 min/m
    +d*.012


2

পার্ল 6 ,45 39 37 বাইট

6 বাইট জো কিংকে ধন্যবাদ রক্ষা করেছে।

2 বাইট সংরক্ষিত হয়েছে nwellnhof ধন্যবাদ।

(তাদের উভয়কেই ধন্যবাদ, এটি আর আমার আসল জমা দেওয়ার মতো আর দেখায় না :—)))

*.&{sum (.skip Z-$_)Xmax 0}/600+*/5e3

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

প্রথম যুক্তি হ'ল উচ্চতা সহ তালিকা, দ্বিতীয় যুক্তি হ'ল ট্রেকের দৈর্ঘ্য।

পুরো জিনিসটি ওয়েলকোড। যদি কোনও অভিব্যক্তিটি এরূপ হিসাবে স্বীকৃত হয়, তবে প্রতিটিই *একটি যুক্তি।

সুতরাং, *.&{sum (.skip Z-$_)Xmax 0}/600আমরা প্রথম আর্গুমেন্টটি গ্রহণ করি (এর প্রথম ঘটনা *), এবং এটিতে একটি পদ্ধতির মতো নির্মাণ সহ একটি ব্লক ব্যবহার করি .&{}। ব্লকটি একটি যুক্তি (তালিকা) নেয়, যা goesুকে যায় $_, সুতরাং .skipসেই তালিকাটি প্রথম উপাদান ছাড়াই। আমরা এটির মাধ্যমে মৌলিক অ্যারে, উপাদানকে উপাদান অনুসারে বিয়োগ করি Z-। সংক্ষিপ্ত তালিকাটি হ্রাস হওয়ার সাথে সাথে জিপিং বন্ধ হয়ে যায়, যা ঠিক আছে।

তারপরে আমরা ক্রস প্রোডাক্ট অপারেটর ব্যবহার করি Xlist X(op) listসমস্ত সম্ভাব্য জোড়া তৈরি করে যেখানে প্রথম উপাদানটি বাম তালিকার এবং দ্বিতীয়টি ডান থেকে রয়েছে এবং সেগুলি অপারেটর ব্যবহার (op)করে। ফলাফলটি সেক (এক শটের তালিকা) হিসাবে ফিরে আসে। যাইহোক, ডান তালিকার কেবলমাত্র একটি উপাদান রয়েছে, 0, সুতরাং এটি কেবলমাত্র * max 0উপাদান দ্বারা উপাদানকে করে। এটি নিশ্চিত করে যে আমরা কেবল ট্রেকের আরোহী অংশগুলি গণনা করি। তারপরে আমরা এটিকে যুক্ত করব এবং 600 দিয়ে ভাগ করব।

তারপরে আমরা যুক্ত করব */5e3, যেখানে *দ্বিতীয় বারটি ঘটে এবং তাই এটি দ্বিতীয় যুক্তি, এবং এটি 5000 দিয়ে বিভক্ত করুন The যোগটি তখন কয়েক ঘন্টা সময় হয়। (এটি আমাদের কয়েক গুণমানের প্রয়োজনের কয়েক মিনিটের চেয়ে বেশি কার্যকরী *এবং যেকোন স্টার থেকে কোনও স্থান দ্বারা পৃথক করা দরকার *))



@ জোকিং, এটি একটি দুর্দান্ত ব্যবহার X, ধন্যবাদ!
রমিলিজ 6'18

1
প্রকৃতপক্ষে, আমরা X/কেবলমাত্র যোগফলটি 10 ​​দ্বারা ভাগ করে শেষটিকে এড়াতে পারি 39
জো

37 যাই হোক না কেন কোড এবং .&{}(ঘন্টা ফেরত) ব্যবহার করে বাইট
নয়েলহোফ

2

ওকে , 21 বাইট

{y+/0|1_-':x}..1.012*

এটি অনলাইন চেষ্টা করুন! পার্সিং বাগটি আপত্তিজনকভাবে যেখানে .1.012একই রকম .1 .012

              .1.012* /a = [0.1 * input[0], 0.012 * input[1]]
{           }.        /function(x=a[0], y=a[1])
      1_-':x          /  a = subtract pairs of elements from x
    0|                /  a = max(a, 0) w/ implicit map
 y+/                  /  y + sum(a)

-1 স্ট্রেস্টার ধন্যবাদ ।

কে , 23 বাইট

{.1*(.12*y)++/0|1_-':x}

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


{y+/0|1_-':x}..1.012*21 বাইট জন্য? দিয়ে সঞ্চালক শুরু করুন y
রাস্তায়

প্রকৃতপক্ষে! আমি কে কোডে অনুরূপ বর্ধিতকরণ প্রয়োগ করব, তবে দুর্ভাগ্যক্রমে আমার কাছে থাকা কে দোভাষী (2016.08.09) আমার পছন্দ করে না যে ফ্যাশনের কোনও কিছুর সাথে সঞ্চয়ী শুরু করতে পারি। :/
zgrep

1

1
×.12কাজ করে না ?
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার এটি করে, আমি খুব তাড়াহুড়ো করেছিলাম।
এরিক দ্য আউটগল্ফার


1

পাইথ , 15 বাইট

c+*E.12s>#0.+QT

সম্পূর্ণ প্রোগ্রামটি প্রথম আর্গুমেন্ট হিসাবে উচ্চতার সেটটিকে দ্বিতীয় হিসাবে দূরত্ব প্রত্যাশা করে। মিনিটের মধ্যে সময় দেয়।

এটি এখানে অনলাইনে চেষ্টা করে দেখুন , বা এখানে একবারে সমস্ত পরীক্ষার কেস যাচাই করুন

c+*E.12s>#0.+QT   Implicit: Q=input 1, E=input 2
           .+Q    Take the differences between each height point
        >#0       Filter to remove negative values
       s          Take the sum
  *E.12           Multiply the distance by 0.12
 +                Add the two previous results
c             T   Divide the above by 10, implicit print

1

এপিএল (ডায়ালগ ইউনিকোড) , 21 20 18 বাইট

.1×.12⊥⎕,-+/0⌊2-/

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

Heতিহ্যবাহী ফাংশন ইনপুট গ্রহণ করে (ডান থেকে বামে) হিসাবে 1st ⎕= উচ্চতা / গভীরতা, 2nd ⎕= দূরত্ব।

এক তিন বাইট উইজার্ড হওয়ার জন্য @ জিএনএকে ধন্যবাদ ।

কিভাবে এটা কাজ করে:

.1×.12⊥⎕,-+/0⌊2-/  Function;
                   Append 0 to the heights vector;
              2-/  ⍝ Pairwise (2) differences (-/);
            0      Minimum between 0 and the vector's elements;
          +/       ⍝ Sum (yields the negated total height);
         -         ⍝ Subtract from;
   .12⊥⎕,          ⍝ Distance × 0.12;
.1×                ⍝ And divide by 10;

"উইজার্ড" এর জন্য ধন্যবাদ :) আপনাকে পরীক্ষার জন্য এক্সপ্রেশনটি একাধিকবার অনুলিপি করতে হবে না, পরিবর্তে এটি কোনও ট্রেডফ্যানে রেখে দিন ; ,0অপ্রয়োজনীয়, সমস্যাযুক্ত পরীক্ষার জন্য হওয়া উচিত ,604, না604
এনজিএন

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

0

জাভা 8, 89 বাইট

a->n->{int s=0,p=0,i=a.length;for(;i-->0;p=a[i])s+=(p=p-a[i])>0?p:0;return s/10+n/500*6;}

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

ব্যাখ্যা:

a->n->{                   // Method with integer-array and integer parameter and integer return-type
  int s=0,                //  Sum-integers, starting at 0
      p=0,                //  Previous integer, starting at 0
  i=a.length;for(;i-->0;  //  Loop `i` backwards over the array
                 ;        //    After every iteration:
                  p=a[i]) //     Set `p` to the current value for the next iteration
    s+=(p=p-a[i])>0?      //   If the previous minus current item is larger than 0:
         p                //    Add that difference to the sum `s`
        :                 //   Else:
         0;               //    Leave the sum the same
   return s/10            //  Return the sum integer-divided by 10
          +n/500*6;}      //  Plus the second input divided by 500 and then multiplied by 6


0

স্ট্যাক্স , 17 বাইট

ü;█y☼òΓ▀ßîP<<╪⌠öß

এটি চালান এবং স্ট্যাক্সএল.এক্সজে ডিবাগ করুন!

সমস্ত ইনপুট ফ্লোট হিসাবে গ্রহণ করে, যদিও এটি কেবল আনপ্যাক করা সংস্করণে একটি বাইট সংরক্ষণ করে। সম্ভাব্য অসম্ভব; ঠিক এখন কোড গল্ফ ফিরে, আমি কিছুটা মরিচা।

প্যাকযুক্ত (20 বাইট) এবং ব্যাখ্যা:

0!012*s:-{0>f{A/m|++
0!012*                  Float literal and multiplication for distance
      s                 Swap top two stack values (altitudes to the top)
       :-               List of deltas
         {0>f           Filter: keep only positive changes
             {A_m       Map: divide all ascents by 10
                 |++    Add these times to that for horizontal travel
                        Implicit print

0!012*s:-{0>f{A_:m|++ প্যাকেজযুক্ত প্যাকেজযুক্ত 21 টি বাইট এবং এখনও 17 টি প্যাকযুক্ত অবিচ্ছেদ্য ইনপুটগুলির জন্য কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.