তিনি এন ইউনিটের কাজ শেষ করতে কত সর্বনিম্ন দিন সময় নেবেন?


10

একজন ব্যক্তির Nকাজ ইউনিট সম্পন্ন করতে হবে ; কাজের প্রকৃতি একই।

কাজের ফাঁসি পেতে, তিনি প্রথম দিনেই একটি ইউনিটের কাজ শেষ করেন

তিনি কাজ সমাপ্তি উদযাপন করতে ইচ্ছুক, তাই তিনি শেষ দিনে একটি ইউনিট কাজ শেষ করার সিদ্ধান্ত নেন ।

একমাত্র সম্পন্ন করার অনুমতি দেওয়া হয় x, x+1বা x-1একটি দিন কাজ ইউনিট , যেখানে xআগের দিন সম্পন্ন কাজের একক।

আপনার কাজটি এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করা যা তিনি কাজের এককগুলিতে সর্বনিম্ন সংখ্যার দিন গণনা করবে N

নমুনা ইনপুট এবং Ouput:

input -> output (corresponding work_per_day table)
-1    -> 0      []
0     -> 0      []
2     -> 2      [1,1]
3     -> 3      [1,1,1]
5     -> 4      [1,1,2,1] or [1,2,1,1]
9     -> 5      [1,2,3,2,1]
13    -> 7      [1,2,2,2,3,2,1]

ইনপুটটি STDINফাংশন আর্গুমেন্টের মাধ্যমে বা কোনও উপযুক্ত উপায়ে নেওয়া যেতে পারে ।

আউটপুট মুদ্রিত হতে পারে বা কোনও ফাংশনের ফলাফল হিসাবে বা কোনও উপযুক্ত উপায়ে।

এটি । সংক্ষিপ্ত সমাধান জিতেছে।


1
ইঙ্গিত: এই পূর্ণসংখ্যা তালিকা সহায়ক হতে পারে।
ফাঁস নুন

1
সুতরাং, কেন ইনপুটটি ইতিবাচক পূর্ণসংখ্যার মধ্যেই সীমাবদ্ধ, যেহেতু কেনি দেখিয়েছেন যে কোনও নেতিবাচক কাজের গণনা অর্জন করা সম্ভব? নাকি প্রতিদিনের কাজটি সর্বনিম্ন শূন্যের মধ্যে সীমাবদ্ধ?
mbomb007

1
আপনি পাইথ উত্তরটি গ্রহণ করলেন কেন? আমার জেলি উত্তরটি 3 বাইট সংক্ষিপ্ত ...
ডেনিস

আরে, @ ডেনিস আমাকে এপ্রোচটি বুঝতে হবে এবং @ কেনি লউ আমাকে এটি বুঝতে সহায়তা করে।
হর্ষগিরি

আমি কোডগল্ফে নতুন তাই এখানে সমস্ত জিনিস পুরোপুরি বুঝতে কিছুটা সময় লাগবে।
হর্ষগিরি

উত্তর:


3

জেলি , 5 বাইট

×4’½Ḟ

এটি @ LeakyNun এর পদ্ধতির একটি বদ্ধ ফর্ম ব্যবহার করে

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

একটি ভাগ্যবান কাকতালীয় কারণে, আসল / জটিল সংখ্যার জন্য / হিসাবে ওভারলোড করা হয় এটি জেলিয়ের তিনটি ওভারলোডেড পরমাণুর মধ্যে একটি।floorreal

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

×4’½Ḟ  Main link. Argument: n (integer)

×4     Compute 4n.
  ’    Decrement; yield 4n - 1.
   ½   Square root; yield sqrt(4n - 1).
       If n < 2, this produces an imaginary number.
    Ḟ  If sqrt(4n - 1) is real, round it down to the nearest integer.
       If sqrt(4n - 1) is complex, compute its real part (0).

1
একটি সহজভাবে হয় না ...
লিকি নুন

1
"ভাগ্যবান কাকতালীয়"
আর্কটরাস

4

পাইথ , 8 বাইট

tfg/*TT4

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

tfg/*TT4   Q is implicitly assigned to the input.
 f         test for T=1,2,3,... returning the first successful case
   /*TT4   whether T * T / 4
  g     Q  is greater than or equal to the input (second argument implied)
t          and subtract 1 from the first successful case

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

সিউডো কোডে:

for(int T=1;;T++)
    if(T*T/4 >= Q)
        return T-1;

বোনাস, 22 বাইট

"-1 এর জন্য 7 ফিরতে হবে"

+tfg/*TT4?>Q0Q-2Q1*4g1

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


3

জাভাস্ক্রিপ্ট (ES2016), 24 বাইট

নীচে ES6 বৈকল্পিকের সংক্ষিপ্ত সংস্করণটি @ ফ্লোরেন্ট এবং এক্সপেনশনেশন অপারেটর (বর্তমানে কেবল ফায়ারফক্সে রাতের বেলা বিল্ডিং বা ট্রান্সপোর্টারগুলিতে) এর জন্য ধন্যবাদ।

n=>(n-1)**.5+(n+1)**.5|0

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

n=>(s=Math.sqrt)(n-1)+s(n+1)|0

এই ক্রম উপর ভিত্তি করে ।

f=n=>(s=Math.sqrt)(n-1)+s(n+1)|0

units.oninput = () => output.value = f(+units.value||0);
<label>Units: <input id="units" type="number" value="0" /></label>
<label>Days: <input id="output" type="number" value="0" disabled /></label>


এমনকি ES2016 (26 অক্ষর) -এর চেয়ে ছোট:f=n=>(n-1)**.5+(n+1)**.5|0
ফ্লোরেন্ট

@ ফ্লোরেন্ট বাহ ধন্যবাদ, আসন্ন ক্ষয়ক্ষতি অপারেটর সম্পর্কে অবগত ছিল না।
জর্জ রিথ

2

জাভাস্ক্রিপ্ট, 32 31 বাইট

f=(q,t=1)=>q>t*t/4?f(q,t+1):t-1

অবরুদ্ধ কোড:

function f(q, t = 1) {
  return q > t * t / 4
    ? f(q, t + 1)
    : t - 1
}

এটি কেনি ল'র আনসার হিসাবে একই অ্যালগরিদম ব্যবহার করে তবে এটি কিছু বাইট সংরক্ষণ করতে পুনরাবৃত্ত ক্লোজার হিসাবে প্রয়োগ করা হয়।

ব্যবহার:

f(-1)  // 0
f(0)   // 0
f(2)   // 2
f(3)   // 3
f(5)   // 4
f(9)   // 5
f(13)  // 7

REPL সমাধান, 23 বাইট

for(t=1;t*t++/4<q;);t-2

শুরুতে যোগ q=স্নিপেট চালানোর জন্য:

q=-1;for(t=1;t*t++/4<q;);t-2 // 0
q=9;for(t=1;t*t++/4<q;);t-2  // 5
q=13;for(t=1;t*t++/4<q;);t-2 // 7

এটি আমার হিসাবে একই পরিবর্তনশীল নামগুলি ব্যবহার করে :)
লিক নুন

এ ঘুরিয়ে একটি বাইট সংরক্ষণ করতে >=পারেন <: ডি
লিকি নুন

@ কেনিলাউ ধন্যবাদ! অনেক দিন হয়ে গেছে যখন আমি গল্ফ করিনি। আমি কিছুটা মরিচা x)
ফ্লোরেন্ট

for(t=1;;)if(t*t++/4>=q)return t-1;মাত্র 36 বাইট :)
লিক নুন

1
@ কেনিলাউ আমি 23 বাইট সমাধান যুক্ত করেছি :)
ফ্লোরেন্ট

2

পাইথন, 28 বাইট

lambda n:max(4*n-1,0)**.5//1

একটি ভাসা আউটপুট। maxসেখানে দিতে হয় 0জন্য n<=0যখন নেতিবাচক বর্গমূল জন্য একটি ত্রুটি এড়ানো।


2

ইউজিএল , 30 25 বাইট

i$+$+dc^l_u^^$*%/%_c=:_do

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

নেতিবাচক ইনপুট জন্য কাজ করে না।

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

i$+$+dc^l_u^^$*%/%_c=:_do
i$+$+d                     #n = 4*input-1
      c                    #i=0
       ^l_     %/%_c=:_    #while      > n:
           ^^$*            #      i**2
          u                #                i = i+1
                       do  #print(i)

পূর্ববর্তী 30-বাইট সমাধান:

iuc^l_u^^$*cuuuu/%_u%/%_c=:_do

অনলাইন দোভাষী এখানে

নেতিবাচক ইনপুট জন্য কাজ করে না।

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

iuc^l_u^^$*cuuuu/%_u%/%_c=:_do
iuc                             #push input; inc; i=0;
   ^l_u             %/%_c=:_    #while        > input:
       ^^$*cuuuu/%_             #      i**2/4
                   u            #                      i = i+1
                            do  #print(i)

1

এমএটিএল, 11 বাইট

E:t*4/G<f0)

অনির্দিষ্টকালের জন্য লুপিংয়ের পরিবর্তে @ কেনেলাউ-তে অনুরূপ অ্যালগরিদম বাদ দিয়ে আমি কিছু বাইট সংরক্ষণ করতে 1 ... 2n থেকে লুপ করি।

অনলাইনে চেষ্টা করে দেখুন!

ব্যাখ্যা

    % Implicitly grab the input
E   % Double the input
:   % Create an array from 1...2n
t*  % Square each element
4/  % Divide each element by 4
G<  % Test if each element is less than G
f   % Get the indices of the TRUE elements in the array from the previous operation
0)  % Get the last index (the first index where T*T/4 >= n)
    % Implicitly display the result.

@ লুইস মেন্ডো এটি নির্দেশ করার জন্য ধন্যবাদ। আপডেট করা হয়েছে!
সুইভর



0

জাভা 8, 30 24 বাইট

n->(int)Math.sqrt(n*4-1)

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

n0 এর চেয়ে বড় কিনা তা পরীক্ষা করার দরকার নেই , কারণ জাভা নেতিবাচক ইনপুটগুলির জন্য Math.sqrtফিরে আসে NaN, যা ইতিমধ্যে ইতিবাচক ইনপুটগুলির জন্য আমরা ব্যবহার করি 0cast ালাইয়ের সাথে পরিণত হয় int


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