যারা বন্ধ করুন [বন্ধ]


12

আপনার কাজটি হ'ল সংখ্যক সংখ্যক এবং কেবলমাত্র অপারেটর +বা ব্যবহার করে একটি প্রাকৃতিক সংখ্যা তৈরি করা -। উদাহরণস্বরূপ, সাত নম্বর লেখা যেতে পারে 1+1+1+1+1+1+1=7, তবে এটি হিসাবে লেখা যেতে পারে 11-1-1-1-1=7। প্রথমটি একটি ব্যবহার করে 7, তবে পরেরটি কেবল ব্যবহার করে 6। আপনার কাজটি হ'ল ন্যূনতম সংখ্যাকে যে কোনও প্রাকৃতিক সংখ্যার ইনপুট প্রদেয় ব্যবহার করা যেতে পারে তা ফিরিয়ে দেওয়া n

এটি কোড গল্ফ, তাই বাইটে সংক্ষিপ্ততম বৈধ কোডটি জয়ী।

পরীক্ষার মামলা

ইনপুট => আউটপুট

0 => 2 (since 1-1=0)
7 => 6
121 => 6
72 => 15
1000 => 7
2016 => 21

ভাল প্রথম চ্যালেঞ্জ। আমি আরও পরীক্ষার কেস সহ পরামর্শ দেব। "ভ্যালিড আউটপুটস" কি একটি ভুল, একটি একক আউটপুট রয়েছে তা প্রদত্ত? এছাড়াও, 0 একটি বৈধ ইনপুট, এবং যদি তাই হয় তবে আউটপুটটি কী হওয়া উচিত?
xnor

এটি একটি আকর্ষণীয় চ্যালেঞ্জ। আপনি আউটপুট, পরিবর্তন জন্য একটি ব্যাখ্যা যোগ করতে পারেন VALID OUTPUTS। এটি আপনার পছন্দ, তবে সাধারণত বড় আকারের অক্ষরের পরিবর্তে সাহসী বা তির্যক লোকেরা (তারা এটিকে জোরের পরিবর্তে চেঁচানোর মতো দেখায়)। সাহসী হয় **bold text**, এবং তির্যক হয় *italics text*। আপনি ### Textগা bold়-এর পাঠ্যের জন্যও ব্যবহার করতে পারেন । যাই হোক, পিপিসিজিতে আপনাকে স্বাগতম!
NoOneIsHere

আপনার কম্পিউটার-পঠনযোগ্য টেবিল বা টেস্ট কেসের তালিকা তৈরি করা উচিত যা লোকেরা তাদের কোড চালাতে পারে। এই টিপ দেখুন ।
xnor

6
আমি এই প্রশ্নটি বন্ধ করতে ভোট দিচ্ছি কারণ এই প্রশ্নটি কোডফাইটস / চ্যালেঞ্জগুলিতে বর্তমান (সক্রিয় !!) গল্ফ চ্যালেঞ্জের একটি সদৃশ । এমনকি যদি ওপি কোডফাইটসের মূল চ্যালেঞ্জের লেখকও (যা আমি সন্দেহ করি), কোডফাইটে চ্যালেঞ্জটি আর সক্রিয় না হওয়া অবধি প্রশ্নটি বন্ধ করে দেওয়া উচিত।
জাকুব

1
@ জাকুব সরাসরি লিঙ্কটি সহায়ক হতে পারে তবে আমি সম্মত। আমি ভোট বন্ধ করব।
NoOneIsHere

উত্তর:


3

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

f=(n,z=2,m=n*9+'',r=m.replace(/./g,1))=>n?m.length+(m<'55'?f(n- --r/10,0)-1:f(r-n,0)):z
Input: <input type="number" oninput="result.textContent=f(this.value)"> Result: <span id="result"></span>

জাভাস্ক্রিপ্টের পূর্ণসংখ্যার সীমাতে আপনি যে মুহুর্তে চলতে শুরু করছেন তা প্রায় 10 14 15 পর্যন্ত কাজ করা উচিত । ব্যাখ্যা:

f=(                             Recursive function
 n,                             Parameter
 z=2,                           Zero workaround
 m=n*9+'',                      Magic
 r=m.replace(/./g,1)            Find repunit not less than than n
)=>n?                           Nothing to do if n is zero
 m.length+                      Assume subtracting from repunit
 (m<'55'?                       Should we subtract from repunit?
  f(n- --r/10,0)                No, so subtract previous repuint
   -1:                          Which is one 1 shorter
  f(r-n,0)):                    Subtract from repunit
 z                              Return special case if n is zero

এটি n*9দু'বার যাদু ব্যবহার করে ; প্রথমত, এটি আমাকে পরবর্তী পুনর্নির্মাণের দৈর্ঘ্য দেয়, দ্বিতীয়ত, যদি প্রথম দুটি অঙ্ক এর চেয়ে বেশি n*9হয় 55বা তার চেয়ে বেশি হয়, তবে আমাদের nপরবর্তী পুনর্মুক্তটি বিয়োগ করতে হবে, অন্যথায় আমাদের পূর্ববর্তী পুনরাবৃত্তিটি বিয়োগ করতে হবে (যা 1 এবং বিয়োগ করে গণনা করা হয়) 10 দ্বারা বিভাজক)। এটি 10 15 পর্যন্ত কাজ করা উচিত ।


2

পাইথ, 19 16 বাইট

ffqQvs+R1Y^c3"+-

পরীক্ষা স্যুট

ব্রুট ফোর্স অ্যালগোরিদম। প্রয়োজনীয় স্ট্রিংগুলি এমন সমস্ত তালিকা গ্রহণের মাধ্যমে উত্পন্ন হয় যার উপাদানগুলির ['+', '-', '']দৈর্ঘ্য দৈর্ঘ্যের দৈর্ঘ্যের দৈর্ঘ্যের 1s সংখ্যার সমান, প্রতিটিকে 1 যুক্ত করে এবং একটি একক স্ট্রিংকে সংযুক্ত করে। এই স্ট্রিংগুলি পরে ইনপুটটির সাথে মূল্যায়ন করা হয় এবং তুলনা করা হয়। একটি সফল স্ট্রিং না পাওয়া পর্যন্ত এটি পুনরাবৃত্তি হয়।

নেতৃস্থানীয় কিছু স্ট্রিং +বা -পরীক্ষিত হয় তবে এটি কোনও সমস্যা নয়। যদিও ইনপুটটি নেতিবাচক থাকলে তা হবে।

এটি খুব ধীর হয়ে যাওয়ার আগে এটি 9 দৈর্ঘ্য পর্যন্ত চলতে পারে।

ব্যাখ্যা:

ffqQvs+R1Y^c3"+-
ffqQvs+R1Y^c3"+-"T    Implicit variable introduction
                      Q = eval(input())
f                     Starting with T = 1 and counting upwards, repeat until true.
                      The value of T where the result is first true is output.
           c3"+-"     Chop "+-" into thirds, giving ['+', '-', '']
          ^      T    Form every list with those elements of length T.
 f                    Filter over those lists, lambda var Y.
      +R1Y            Append a 1 to each element of the list.
     s                Concatenate.
    v                 Eval.
  qQ                  Compare for equality with the input.
                      The inner filter will let through the successful cases.
                      The outer filter will stop when there is a successful case.

2

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

f=(n,i=3)=>eval([...s=i.toString(3)].map(d=>"-+"[d]||"").join`1`+".0")-n?f(n,i+1):s.length-1
n = <input type="number" oninput="R.textContent=f(this.value)" /><pre id="R"></pre>

ব্যাখ্যা

পুনরাবৃত্তি ফাংশন। এই উত্পন্ন সব সম্ভব একাধিক বিন্যাসন 1গুলি পারেন দ্বারা পৃথক +, -অথবা কিছুই। এটা একটা বেস -3 সংখ্যা বৃদ্ধিশীল, এটা ডিজিটের একটি অ্যারের মধ্যে বাঁক, প্রতিটি অঙ্ক রূপান্তর মাধ্যমে এই কাজটি করে 0করতে -, 1করতে +এবং 2একটি খালি স্ট্রিং, তারপর তাদের সাথে যোগদান একসাথে 1গুলি। ফলস্বরূপ স্ট্রিংটি evalএকটি জাভাস্ক্রিপ্ট বিবৃতি হিসাবে ডি যা সমীকরণের ফলাফল প্রদান করে।

অপারেটরগুলি 1(যেমন +1+1+1+) এর মধ্যে এস এর সাথে যুক্ত হওয়ার কারণে সেখানে রয়েছে length - 1 1। প্রথম অপারেটর উপেক্ষা করা হয় (কারণ +1= 1, <nothing>1= 1এবং এটি একটি সংখ্যা তাই একটি নেতৃস্থানীয় সেখানে হবে না 0জন্য -) এবং চূড়ান্ত অপারেটর এছাড়াও (সংযোজন করে উপেক্ষা করা হয় .0সমীকরণ থেকে)।

উচ্চতর আউটপুট সংস্করণ, 96 বাইট

অন্যান্য সংস্করণ পুনরাবৃত্তি কল স্ট্যাক সীমাবদ্ধতার কারণে আউটপুটগুলি 10 ডলারের বেশি ফেরত দিতে পারে না। এই সংস্করণটি পুনরাবৃত্তির পরিবর্তে লুপের জন্য ব্যবহার করে, সুতরাং এটি আউটপুটগুলিকে ~ 33 ডলারে ফিরিয়ে দিতে পারে। প্রয়োজনীয় সময়ের পরিমাণ তাত্পর্যপূর্ণভাবে বৃদ্ধি পায় যদিও আমি এটি পরীক্ষার প্রস্তাব দিই না।

n=>eval('for(a=3;eval([...s=a.toString(3)].map(d=>"-+"[d]||"").join`1`+".0")-n;)a++;s.length-1')

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