বৃহত্তম এবং ক্ষুদ্রতম সংখ্যা তৈরি করুন


13

ধাঁধার উপর এই পোস্টে অনুপ্রাণিত । যে ধাঁধা জন্য Spoilers নীচে।

ইনপুট হিসাবে তিনটি ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে, (x, y, z)অন্তর্ভুক্ত ব্যাপ্তিটি তৈরি করুন [x, y], সেই পরিসীমাটিকে একসাথে তৈরি করুন, তারপরে zসম্ভাব্য বৃহত্তম এবং ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যার উত্পাদন করার জন্য অগত্যা-পরপর সংখ্যাগুলি সরিয়ে ফেলুন । শীর্ষস্থানীয় শূন্যগুলি অনুমোদিত নয় (যেমন, সংখ্যাটি অবশ্যই শুরু করা উচিত [1-9])। উভয় ক্রমে এই দুটি সংখ্যা আউটপুট।

বিরক্তিকর পোস্ট থেকে উদাহরণস্বরূপ, ইনপুট জন্য (1, 100, 100), বৃহত্তম সংখ্যা সম্ভব 99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100,
এবং ক্ষুদ্রতম সংখ্যা 10000012340616263646566676869707172737475767778798081828384858687888990919293949596979899100,
থেকে যুক্তিবিজ্ঞান নিচের jafe এর সেখানে পোস্ট উত্তর:

  • আমরা সংখ্যার দৈর্ঘ্য (সংখ্যার একটি নির্দিষ্ট সংখ্যা রয়েছে) প্রভাবিত করতে পারি না, তাই সর্বাধিকের জন্য আমরা সর্বাধিক প্রথম সংখ্যাটি গ্রহণ করি, তারপরে দ্বিতীয় সংখ্যা ইত্যাদি etc.
  • ৮৮ টি প্রথম নন-নাইনগুলি সরিয়ে ফেলুন (অপসারণের জন্য ১ digit সংখ্যা বাকি): 999995051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  • পরবর্তী 17 ডিজিটের মধ্যে বৃহত্তম সংখ্যাটি 7 হয়, সুতরাং এখান থেকে উত্তরের পরবর্তী অঙ্কটি সর্বাধিক 7 টি হতে পারে (আমরা 16 টিরও বেশি অঙ্ক মুছতে পারি না)। সুতরাং 15 নন -7 এর সরান ... (অপসারণের 1 ডিজিট বাকি):999997585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  • এখান থেকে পরবর্তী অঙ্কটি সর্বাধিক 8 হতে পারে সুতরাং মধ্য থেকে একটি অ -8 সরিয়ে ফেলুন: 99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  • অনুরূপ যুক্তিযুক্ত, তবে বিপরীত (যেমন, আমরা 1লিডিংয়ের পরিবর্তে লিডিং 9এস চাই) স্বল্পতম সংখ্যার জন্য।

এখানে একটি ছোট উদাহরণ আছে: (1, 10, 5)

আমরা ব্যাপ্তিটি তৈরি করি 12345678910এবং নির্ধারণ 5করি যে কোন সম্ভাব্য সংখ্যাটি রেখে দিয়ে আমরা কোন অঙ্কগুলি সরাতে পারি। স্পষ্টতই, এর অর্থ আমরা অগ্রণী সংখ্যাটি সর্বোচ্চ করতে চাই, যেহেতু আমরা আউটপুটটির দৈর্ঘ্যকে প্রভাবিত করতে পারি না। সুতরাং, আমরা যদি অপসারণ 12345করি তবে আমাদের সাথে বাকি রয়েছে 678910এবং এটিই আমরা তৈরি করতে সক্ষম বৃহত্তম। সবচেয়ে ছোটটি তৈরি করা কিছুটা কৌতুকপূর্ণ, যেহেতু আমরা 123410ছোটটি সম্ভব হিসাবে ছেড়ে দিয়ে পরিবর্তে মাঝখানে থেকে সংখ্যাগুলি বের করতে পারি ।

কারণ (20, 25, 11), ফলাফলটি বরং বিরক্তিকর, যেমন 5এবং 1

পরিশেষে, এমন জবাবগুলি অগ্রাহ্য করার জন্য যা নেতৃস্থানীয় শূন্যগুলি চেষ্টা করে, যা (9, 11, 3)দেয় 91011ফলস্বরূপ 91এবং 10সবচেয়ে বড় এবং ক্ষুদ্রতম।

আই / ও এবং বিধি

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

অঙ্কের একটি তালিকা আউটপুট হিসাবে গ্রহণযোগ্য?
রোড

নেতৃস্থানীয় শূন্যগুলির সাথে মূল্যায়ন করার সময় একটি পরীক্ষার কেসটি ন্যূনতম বোগাস দেয় - আমার মনে হয় 9, 11, 3তা করবে।
জোনাথন অ্যালান

@ রড ইয়েপ, অঙ্কের একটি তালিকা আউটপুট জন্য ভাল।
অ্যাডমবার্কবার্ক

@ রড আপনি যে বিষয়ে কথা বলছেন তা আমি জানি না, আমি উপরে "আউটপুট" স্পষ্টভাবে টাইপ করেছি। ;-)
অ্যাডমবার্কবার্ক

@ জোনাথন অ্যালান শুভ কল যোগ করা হয়েছে।
অ্যাডমবর্কবার্ক

উত্তর:


5

হাস্কেল , 162 বাইট

l=length
((m,f)%n)s|n>=l s=[]|n>0,(p,c:r)<-span(/=m(f$take(n+1)s))s=c:((m,id)%(n-l p)$r)|1>0=s
(x#y)z=[p%z$show=<<[x..y]|p<-[(maximum,id),(minimum,filter(>'0'))]]

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

জাফে বর্ণিত অ্যালগরিদম ব্যবহার করে। একটি কম দক্ষ পদ্ধতি ব্যবহার করতে সংক্ষিপ্ত হতে পারে, তবে এটি লিখতে আরও মজাদার ছিল :)

%অপারেশন 4 আর্গুমেন্টগুলি (আসলে 3, কিন্তু যাই হোক না কেন) লাগে: mএকটি ফাংশন যা একটি তালিকা থেকে নির্বাচন "অনুকূল" সদস্য (হয় maximumবা minimumআমরা কি চাই তার উপর নির্ভর করে); fযা একটি "ফিল্টার" ফাংশন; nবাদ দেওয়ার অঙ্কের সংখ্যা; এবং sস্ট্রিং। প্রথমে আমরা পরীক্ষা করে দেখি যে এনটি স্ট্রিংয়ে রেখে যাওয়া অঙ্কগুলির সংখ্যার সমান কিনা (আমি >=সুরক্ষার জন্য ব্যবহৃত ছিলাম ) এবং sযদি থাকে তবে বাকীগুলি ফেলে রাখি । অন্যথায় আমরা পরীক্ষা করে দেখি যে এখনও আমাদের অঙ্ক ( n>0) ফেলে দেওয়ার দরকার আছে , তারপরে আমরা spanআমাদের স্ট্রিংটিকে তিনটি টুকরো টুকরো টুকরো করে ফেলব: pড্রপ করার জন্য অঙ্কগুলি, cসর্বোত্তম পৌঁছনীয় অঙ্ক এবংrবাকি স্ট্রিং আমরা এটি একটি প্রাকটিক স্প্যান করে পাস করি যা আমাদের সর্বোত্তম অঙ্কের বিপরীতে সমতার জন্য পরীক্ষা করে। সেই অঙ্কটি n+1সন্ধানের জন্য আমরা স্ট্রিংয়ের প্রথম অঙ্কগুলি গ্রহণ করি, এটি ফিল্টার করি, তারপরে এটি আমাদের "চয়নকারী" ফাংশনে প্রেরণ করি। এখন আমরা কেবল আমাদের সর্বোত্তম অঙ্কটি পাই এবং পুনরাবৃত্তি করবো, যেটি বাদ দিয়েছিল p(সংখ্যার সংখ্যা) বাদ দিয়ে n। লক্ষ্য করুন যে আমরা আমাদের ফিল্টারিং ফাংশনটি পুনরাবৃত্ত কলগুলিতে পাস করি না এবং পরিবর্তে, আমরা এটির সাথে প্রতিস্থাপন করি id। কারণ ফিল্টারটি কেবল সেখানে প্রথম 0 পুনরুক্তার minimumক্ষেত্রে প্রাসঙ্গিক ক্ষেত্রে শীর্ষস্থানীয় 0 টি নির্বাচন এড়ানোর জন্য কেবল সেখানে রয়েছে । এর পরে আমাদের আর কোনও ফিল্টারের দরকার নেই।

%জন্য সত্যিই শুধুমাত্র একটি সাহায্যকারী ফাংশন #যা আমাদের "বাস্তব" ফাংশন, গ্রহণ x, yএবং z। আমরা আমাদের ফাংশন টিউপসগুলির উপর পুনরাবৃত্তি করে এবং সেগুলি এবং সংক্ষিপ্ত স্ট্রিংয়ের %সাথে পাস করার জন্য কেবল কিছুটা পুনরাবৃত্তি এড়াতে একটি তালিকা বোধগম্যতা ব্যবহার করি z। এই স্ট্রিংটি ম্যাজিক মোনাড অপারেটর ব্যবহার করে তৈরি করা হয়েছে (=<<)যা এই প্রসঙ্গে, এর মতো কাজ করে concatMap


3

জেলি , 17 বাইট

r/VDœcL_¥¥ḷ/ƇVṢ.ị

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

সমস্ত সম্ভাবনার গণনা করে তারপরে বৃহত্তম এবং ক্ষুদ্রতম রাখে।

বাম আর্গুমেন্ট: x,yব্যাপ্তিটি তৈরি করতে। ডান যুক্তি: zঅপসারণ মুছে ফেলা হবে।

r/VDœcL_¥¥ḷ/ƇVṢ.ị
r/                 Inclusive range from x to y
  V                Concatenate the digits together
   D               Get the resulting digits
         ¥         Dyad:
        ¥            Dyad:
      L                Length of the list of digits in the concatenated number.
       _               Subtract the number of digits to be removed.
    œc               Combinations without replacement. (remove z digits)
            Ƈ      Keep lists of digits that:
          ḷ/       have a positive first element (no leading zeros).
             V     Combine digits into integers. (vectorizes to ldepth 1)
              Ṣ    Sort the numbers
               .ị  Indexes at value 0.5 which yields the first and last elements.

2

পাইথন 2 , 143 বাইট

import itertools
s,e,r=input()
l=''.join(map(str,range(s,e+1)))
L=[i for i in itertools.combinations(l,len(l)-r)if'0'<i[0]]
print min(L),max(L)

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

এটি লক্ষ্য আকারের সমস্ত সংমিশ্রণ গণনা করে (উপাদান ক্রম সংরক্ষণ করা হয়) এবং এ থেকে সবচেয়ে ছোট / বৃহত্তম নম্বর পেয়ে কাজ করে


ওহ ... আমি অনুমান করি যে খুব বেশি কাজ করে। আমি এমন একটি প্রোগ্রাম তৈরির জন্য সত্যিই কঠোর চেষ্টা করছিলাম যা প্রকৃতপক্ষে নির্বিচারে গণনা করে।
ডন হাজার হাজার

@ রুশমেহতা ব্রুট ফোর্স গণনা এখনও নিরস্তিক, ধীরে ধীরে।
dylnan

2

কাঠকয়লা , 56 বাইট বা 21 + 46 35 = 67 56 বাইট

≔⪫…·NNωθFN≔⌈EθΦθ⁻λνθθ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

≔⪫…·NNωθ

ইনপুট করুন xএবং y, একটি অন্তর্ভুক্ত রেঞ্জ তৈরি করুন এবং সংখ্যাকে একটি স্ট্রিংয়ে যুক্ত করুন।

FN

প্রতিটি অঙ্ক সরিয়ে ফেলার জন্য একবার লুপ করুন।

≔⌈EθΦθ⁻λνθ

বর্তমান স্ট্রিং থেকে প্রতিটি সম্ভাব্য অক্ষর মুছে ফেলা স্ট্রিংগুলির একটি তালিকা তৈরি করুন এবং সর্বোচ্চটি নিন।

θ

ফলাফল মুদ্রণ করুন।

≔⪫…·NNωθF⊕N⊞υωΦθ∧⁼ι⌊Φ✂θκLυ¹∨κIλ⊞Oυω

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

≔⪫…·NNωθ

ইনপুট করুন xএবং y, একটি অন্তর্ভুক্ত রেঞ্জ তৈরি করুন এবং সংখ্যাকে একটি স্ট্রিংয়ে যুক্ত করুন।

F⊕N⊞υω

ইনপুট zএবং এটি বৃদ্ধি। আমি তারপরে সেই দৈর্ঘ্যের একটি তালিকা তৈরি করেছি: আমাকে zনিম্নলিখিত ফিল্টারের অভ্যন্তরে বৃদ্ধি করতে সক্ষম হওয়া দরকার , তবে কেবলমাত্র কমান্ডগুলিকে ইনক্রিমেন্ট ভেরিয়েবলের অনুমতি দেওয়া হয়; PushOperatorতালিকার দৈর্ঘ্য বৃদ্ধি করে এমন একটি লুফোল রয়েছে ।

 θ                      String of digits
Φ                       Filter over characters
         κ              Current index
          Lυ            Length of list i.e. current `z` value
            ¹           Literal 1
       ✂θ               Slice string of digits
      Φ                 Filter over characters
              κ         Outer index
               Iλ       Cast inner character to number
             ∨          Logical OR
     ⌊                  Minimum
   ⁼ι                   Equals the outer character
  ∧              ⊞Oυω   And also push to list i.e. increment `z`
                        Implicitly print

স্লাইসযোগ্য অঞ্চলে কোনও নিম্ন অক্ষর নেই তা পরীক্ষা করে চাওয়া অক্ষরগুলির উপর ফিল্টার করুন। অঞ্চলটি প্রথম z+1অক্ষরগুলি দিয়ে শুরু হয় (যেহেতু zপ্রয়োজনে প্রথম দিকে টুকরো টুকরো করা সম্ভব ) এবং প্রতিটি অক্ষরের জন্য শেষ পয়েন্ট বৃদ্ধি হয়। প্রথম চরিত্রটির জন্য শূন্য না বেছে নেওয়ার যত্ন নেওয়া হয়।

সবচেয়ে দ্রুততম সংখ্যার গণনা করার জন্য দ্রুত অ্যালগরিদম 30 বাইট হয়:

≔⪫…·NNωθF⊕N⊞υωΦθ∧⁼ι⌈✂θκLυ¹⊞Oυω

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। সম্পাদনা করুন: আমি তখন থেকে উপরের দুটিটি দ্বিতীয় 56 বাইট সমাধানে একত্রিত করতে সক্ষম হয়েছি যা উভয় ফলাফল উত্পন্ন করে:

≔⪫…·NNωθF⊕N⊞υω≔⮌υη⟦Φθ∧⁼ι⌈✂θκLυ¹⊞OυωΦθ∧⁼ι⌊Φ✂θκLη¹∨κIλ⊞Oηω

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

≔⪫…·NNωθ

প্রাথমিক স্ট্রিং উত্পন্ন করুন।

F⊕N⊞υω

z+1তালিকার দৈর্ঘ্য হিসাবে প্রতিনিধিত্ব করুন ।

≔⮌υη

তালিকার বিপরীতে এইভাবে এটি ক্লোনিং করুন এবং ফলাফলটি সংরক্ষণ করুন।

দুটি ফলাফল পৃথক লাইনে মুদ্রণ করুন। (এটি করার আরেকটি উপায় হ'ল ফলাফলকে আক্ষরিক \rচরিত্রের সাথে পৃথক করা ))

Φθ∧⁼ι⌈✂θκLυ¹⊞Oυω

সর্বাধিক সম্ভাব্য সংখ্যা তৈরি করুন।

Φθ∧⁼ι⌊Φ✂θκLη¹∨κIλ⊞Oηω

ক্লোন করা তালিকাটি ব্যবহার করে ট্র্যাক রাখতে ক্ষুদ্রতম সম্ভব সংখ্যা তৈরি করুন z


1

জেলি ,  19  18 বাইট

rDẎœcL_⁵Ɗ$ị@Ƈ1ḌṢ.ị

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

অত্যন্ত অদক্ষ, অবশ্যই বিন্দু 1, 100, 100হিসাবে(19292)=305812874887035355118559193163641366325011573739619723360


1

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

ŸSDg³-.Æʒ¬Ā}{Ć`‚

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

পুরো প্রোগ্রাম, এই অনুক্রমে ইনপুট পাঠ: Y, এক্স, Z । অক্ষরের দুটি তালিকার একটি তালিকা আউটপুট করে।

ব্যাখ্যা

ŸSDg³-.Æʒ¬Ā}{Ć`‚    Full program. Inputs: y, x, z.
Ÿ                   Inclusive binary range from x to y. Push [x ... y].
 S                  Dump the digits separately in a list.
  Dg                Duplicate, and use the second copy to get its length.
    ³-              Subtract z from the length.
      .Æ            Retrieve all combinations of length - z elements from the digits.
        ʒ  }        Keep only those that...
         ¬Ā         Don't start with a 0 (head, then Python-style boolean).
            {       Sort the remaining elements.
             Ć      Enclose. Pushes list + list[0] (appends its tail to itself)
              `     Dump all elements separately on the stack.
               ,    Pair, to get the last two, min and max (after enclosing)

ওহ, Ć`‚বেশ স্মার্ট, দুর্দান্ত উত্তর!
কেভিন ক্রুইজসেন

0

মতলব, 95 বাইট

function[m]=f(s,e,c),a=sprintf('%d',s:e);x=str2num(combnk(a,length(a)-c));m=[min(x),max(x)];end

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

সর্বনিম্ন এবং সর্বোচ্চ সহ 1x2 ম্যাট্রিক্স প্রদান করে Return

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

% Full code
function[m]=f(s,e,c),a=sprintf('%d',s:e);x=str2num(combnk(a,length(a)-c));m=[min(x),max(x)];end

% The function
function[m]=f(s,e,c),                                                                       end

                     % Creates the range in a single string
                     a=sprintf('%d',s:e);

                                                   % Gets all the combinations
                                                   combnk(a,length(a)-c)

                                         % Converts the string combinations to integers
                                         x=str2num(                     );

                                                                          % Finds min and max
                                                                          m=[min(x),max(x)];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.