বড় বেস, ছোট অঙ্ক


19

ধ্রুবক নির্দিষ্ট করার জন্য জে ভাষার একটি অত্যন্ত নির্বোধ বাক্য গঠন রয়েছে । আমি বিশেষত একটি দুর্দান্ত বৈশিষ্ট্যে মনোনিবেশ করতে চাই: স্বেচ্ছাসেবী বেসগুলিতে লেখার ক্ষমতা।

আপনি লিখতে পারেন XbYজন্য Xকোনো নম্বর এবং Yকারাকাস কোন স্ট্রিং, তারপর জে কী ব্যাখ্যা দেবেন Yবেস হিসাবে Xনম্বর, যেখানে 0মাধ্যমে 9তাদের স্বাভাবিক অর্থ আছে এবং aমাধ্যমে z35 থেকে 10 প্রতিনিধিত্ব করে।

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

অদ্ভুত বিষয়টি হ'ল আপনি কেবল 0 থেকে 35 পর্যন্ত সংখ্যাগুলি আপনার বেস-যেকোন অঙ্ক হিসাবে ব্যবহার করতে পারেন কারণ আপনার ব্যবহারযোগ্য চিহ্নগুলির সংগ্রহটি কেবল 0-9 এবং অ্যাজ সমন্বিত।

সমস্যাটি

আমি এই প্রোগ্রামটি ব্যবহার করে আমাকে 2,933,774,030,998 এর মতো গল্ফ ম্যাজিক নম্বরগুলিতে সহায়তা করার জন্য একটি প্রোগ্রাম চাই । ঠিক আছে, ঠিক আছে, সম্ভবত এটি বড় নয়, আমি আপনার পক্ষে সহজ হব। তাই ...

আপনার কাজটি এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হয় যা ইনপুট হিসাবে N1 এবং 4,294,967,295 (= 2 32 -1) এর মধ্যে একটি (সাধারণত বড়) দশমিক সংখ্যা নেয় এবং আউটপুট / ফর্মটির সংক্ষিপ্ত প্রতিনিধিত্ব প্রদান করে XbY, যেখানে Xইতিবাচক পূর্ণসংখ্যা Yহয় is অক্ষরে অক্ষরে গঠিত একটি স্ট্রিং (0-9 এবং এজে, কেস সংবেদনশীল), এবং Yবেস Xসমানতে ব্যাখ্যা করা N

যদি প্রতিটি উপস্থাপনের XbYউপস্থাপনের দৈর্ঘ্য অঙ্কের সংখ্যার চেয়ে বড় বা সমান হয় তবে Nতার Nপরিবর্তে আউটপুট । অন্যান্য সমস্ত সম্পর্কের ক্ষেত্রে, আপনি সংক্ষিপ্ত উপস্থাপনগুলির কোনও অজানা উপসেট আউটপুট করতে পারেন।

এটি কোড গল্ফ, তাই খাটো আরও ভাল।

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

      Input | Acceptable outputs (case-insensitive)
------------+-------------------------------------------------------
          5 | 5
            |
   10000000 | 79bkmom  82bibhi  85bgo75  99bauua  577buld
            | 620bq9k  999baka
            |
   10000030 | 85bgo7z
            |
   10000031 | 10000031
            |
   12345678 | 76bs9va  79bp3cw  82bmw54  86bjzky  641buui
            |
   34307000 | 99bzzzz
            |
   34307001 | 34307001
            |
 1557626714 | 84bvo07e  87brgzpt  99bglush  420blaze
            |
 1892332260 | 35bzzzzzz  36bvan8x0  37brapre5  38bnxkbfe  40bij7rqk
            | 41bgdrm7f  42bek5su0  45bablf30  49b6ycriz  56b3onmfs
            | 57b38f9gx  62b244244  69b1expkf  71b13xbj3
            |
 2147483647 | 36bzik0zj  38br3y91l  39bnvabca  42bgi5of1  48b8kq3qv
 (= 2^31-1) | 53b578t6k  63b2akka1  1022b2cof  1023b2661  10922bio7
            | 16382b8wv  16383b8g7  32764b2gv  32765b2ch  32766b287
            | 32767b241
            |
 2147483648 | 512bg000  8192bw00
            |
 4294967295 | 45bnchvmu  60b5vo6sf  71b2r1708  84b12mxf3  112brx8iv
 (= 2^32-1) | 126bh5aa3  254b18owf  255b14640  1023b4cc3  13107bpa0
            | 16383bgwf  21844b9of  21845b960  32765b4oz  32766b4gf
            | 32767b483  65530b1cz  65531b1ao  65532b18f  65533b168
            | 65534b143  65535b120

কিছু প্রতিনিধিত্ব কিছু সংখ্যার সমান কিনা সে সম্পর্কে আপনি যদি অনিশ্চিত হন তবে আপনি চেষ্টা করুন অনলাইনের মতো কোনও জে ইন্টারপ্রেটার ব্যবহার করতে পারেন । শুধু টাইপ করুন stdout 0":87brgzptএবং জে থুতু আউট হবে 1557626714। মনে রাখবেন যে এই সমস্যাটি কেস-সংবেদনশীল না হওয়া সত্ত্বেও জে কেবলমাত্র ছোট হাতের অক্ষর গ্রহণ করে।

কিছু সম্ভবত সহায়ক তত্ত্ব

  • সব জন্য Nকম 10,000,000, দশমিক উপস্থাপনা অন্য কোন ছোট হিসাবে এবং অত: পর একমাত্র গ্রহণযোগ্য আউটপুট। যে কোনও কিছু সংরক্ষণ করতে আপনার নতুন বেসে কমপক্ষে চার অঙ্কের সংক্ষিপ্ত হওয়া প্রয়োজন এবং বেসটি 99 এর চেয়ে বেশি হলে আরও বেশি।
  • এর বর্গমূলের সিলিং পর্যন্ত ঘাঁটিগুলি পরীক্ষা করার পক্ষে এটি যথেষ্ট N। কোনো বড় বেস জন্য বি , Nবেস সবচেয়ে দুটি সংখ্যা হতে হবে বি , তাই প্রথম বার যখন আপনি একটি বৈধ প্রথম সংখ্যা সঙ্গে কিছু প্রায় এ পাবেন বিN/ 35। তবে সেই আকারে আপনি সর্বদা দশমিক প্রতিনিধির চেয়ে কম পরিমাণে বড় থাকবেন, তাই চেষ্টা করার কোনও মানে নেই। মনে মনে, সিল (বর্গক্ষেত্র (বৃহত্তম সংখ্যা আমি আপনাকে এই সমস্যার সমাধান করতে বলব)) = 65536।
  • যদি 36 এর চেয়ে কম বেসে আপনার কোনও উপস্থাপনা থাকে তবে বেস 36 প্রতিনিধিত্ব কমপক্ষে সংক্ষিপ্ত হবে। সুতরাং 36 টিরও কম ঘাঁটিতে দুর্ঘটনাক্রমে সংক্ষিপ্ত সমাধানগুলি নিয়ে আপনাকে চিন্তা করতে হবে না example উদাহরণস্বরূপ, 35bzzzzzz1,892,332,260 এর উপস্থাপনা সেই বেসের জন্য একটি অস্বাভাবিক অঙ্ক ব্যবহার করে, তবে 36bvan8x0একই দৈর্ঘ্য রয়েছে।

লল, 1557626714 = 420 ব্লাজ ^ _ ^
ড্রকোয়ারিয়াস

উত্তর:


9

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

স্ট্রিং হিসাবে ইনপুট নেয়।

n=>[...Array(7e4)].reduce(p=>p[(r=++b+(g=x=>x?g(x/b|0)+(x%b).toString(36):'b')(n)).length]?r:p,n,b=2)

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

এনবি: স্নিপেট ফাংশনে পুনরাবৃত্তির সংখ্যা 600 এর মধ্যে সীমাবদ্ধ যাতে পরীক্ষার কেসগুলি দ্রুত সম্পন্ন হয়। (এটি অন্যথায় কয়েক সেকেন্ড সময় লাগবে))


এটির সাথে কাজ করার জন্য যদি আমার সংখ্যাটি খুব বেশি হয় তবে আমি কীভাবে এটি ঠিক করব? পুনরাবৃত্তিগুলি বাড়ানো সাহায্য করবে বলে মনে হয় না।
ফ্রেউনিফ্রোগ

N<232

"পার্নিশিয়াস সংখ্যাগুলি" দেখুন, 2136894800297704.
ফ্রাউনফ্রগ

@ ফ্রাউনফ্রোগ আপনি পুনরাবৃত্তির সংখ্যা বাড়িয়ে এবং এরMath.floor(x/b) পরিবর্তে ব্যবহার করে এটি প্রক্রিয়া করতে সক্ষম হতে পারেন x/b|0। (তবে আমি এটি পরীক্ষা করিনি))
আর্নৌল্ড

1
এটা কাজ করেছে! ধন্যবাদ.
ফ্রাউনফ্রোগ

3

রুবি , 118 বাইট

এটি অন্য প্রশ্নের সাথে যুক্ত ছিল এবং আমি লক্ষ্য করেছি যে এখানে অনেক উত্তর নেই, তাই আমি এটিকে শট দেওয়ার সিদ্ধান্ত নিয়েছি।

ভিতর দিয়ে হেটে যেতে সব ঘাঁটি প্রয়োজন এবং সকল বৈধ জে সংখ্যা বাক্য গঠন করা ইনপুট সহ আপ করুন। যদিও এটি 1-8 এড়িয়ে যায়, কারণ যে কোনও উপায়ে বেস -10 উপস্থাপনার চেয়ে কম হবে way এটি একটি সুন্দর নিষ্পাপ সমাধান, সমস্ত বিষয় বিবেচনা করা হয়, যেহেতু এটি digitsডিজিটগুলি পাওয়ার জন্য বিল্টিনকে কল করে , তবে যেহেতু এটি সর্বনিম্ন উল্লেখযোগ্য অঙ্কের সাথে শুরু হয় reverseতবে আসল সংখ্যাটি পেতে আমাদের এটি করা উচিত, সুতরাং এটি সম্ভবত উন্নত হতে পারে।

এটা ধীরগতির. সুতরাং, soooooo অবিশ্বাস্যভাবে ধীর। উদাহরণস্বরূপ, 34307000-এ তিনবার সময় বেরিয়েছে। আমরা পারে বর্গমূল সঙ্গে যেতে বা এমনকি এর Arnauld পছন্দের 7e4সময় বাঁচাতে, কিন্তু যে খরচ অতিরিক্ত বাইট, কেন বিরক্ত?

->n{([n.to_s]+(9..n).map{|b|d=n.digits b;"#{b}b"+d.reverse.map{|i|i.to_s 36}*''if d.all?{|i|i<36}}-[p]).min_by &:size}

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

অনলাইনে ডাব্লু / স্কয়ার্ট চেষ্টা করে দেখুন যাতে সবকিছু সময়মতো শেষ হয়


1

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

[¼35ݾãvtîEyNβQižhA«yèJ'bìNìDgIg@i\}q

10000000ã4

চূড়ান্ত if-বিবৃতি ব্যতীত DgIg@i\}এটি এখনও নিম্ন মানের জন্য পরীক্ষা করা যেতে পারে, এটি বাস্তবে কাজ করে কিনা তা যাচাই করতে: অনলাইনে চেষ্টা করে দেখুন।

আমি পরে (সম্ভবত আরও দীর্ঘ তবে) আরও কার্যকর সমাধান নিয়ে আসতে পারি কিনা তা দেখতে পাবে।

ব্যাখ্যা:

[              # Start an infinite loop:
 ¼             #  Increase the counter variable by 1 (0 by default)
 35Ý           #  Push a list in the range [0, 35]
 ¾ã            #  Take the cartesian product of this list with itself,
               #  with chunks-sizes equal to the counter variable
 v             #  Loop `y` over each of these lists:
  t            #   Take the square-root of the (implicit) input-integer
   î           #   Ceil it
  E            #   Loop `N` in the range [1, ceil(square(input))]:
   yNβ         #    Convert list `y` to base-`N`
   Qi          #    If it's equal to the (implicit) input-integer:
     žh        #     Push string "0123456789"
       A«      #     Append the lowercase alphabet
     yè        #     Index each value in list `y` into this string
     J         #     Join the characters to a single string
     'bì      '#     Prepend a "b"
        Nì     #     Prepend the number `N`
     D         #     Duplicate it
      g        #     And pop and push the length of this string
       Ig      #     Also push the length of the input
         @i }  #     If the length of the string is >= the input-length:
           \   #      Discard the duplicated string
     q         #     Stop the program
               #     (after which the result is output implicitly;
               #      or if the string was discarded and the stack is empty, it will
               #      implicitly output the implicit input as result instead)

1
চিত্তাকর্ষক উত্তর! আমি মনে করি আপনি একটি নিয়ম অনুপস্থিত রয়েছেন, যদিও: "যদি প্রতিটি উপস্থাপনের XbYউপস্থাপনের দৈর্ঘ্য অঙ্কের সংখ্যার চেয়ে বেশি বা সমান হয় তবে Nতার Nপরিবর্তে আউটপুট ।" যখন আপনি প্রথম 10 মিলিয়ন সংখ্যা আবৃত আছে, আমি সন্দেহ যে একটি ইনপুট 10000031মত ফিরে কিছু দিতে হবে 26blmoof। সংখ্যাটি বৈধ, তবে দৈর্ঘ্য ইনপুটটির সমান, সুতরাং এটি পরিবর্তে ইনপুটটি ফিরিয়ে নেওয়া উচিত।
মান কালি

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