নম্বরগুলিকে "বেশিরভাগ স্থান-মান সিস্টেমের মধ্যে" রূপান্তর করা হচ্ছে


11

সংখ্যার একটি সিস্টেম তৈরি করতে দেয় যেখানে একটি সংখ্যার দৈর্ঘ্য মিটারের নবম স্থানের মান (ডান থেকে বামে গণনা) এর সর্ববৃহৎ অঙ্ক সর্বদা মিটার সমান হয় - এন + ১. এই সিস্টেমে বৃহত্তম 5 ডিজিটের সংখ্যার উদাহরণ দেওয়ার জন্য একটি উদাহরণ দেওয়া যায় 12345 লিখিত আছে place নির্দিষ্ট স্থানে সীমাবদ্ধ থাকাকালীন ব্যবহারের জন্য উপলভ্য সংখ্যাগুলির সংখ্যা ব্যতীত অন্য সমস্ত বৃদ্ধি মানসম্মত। যথা যখন কোনও অঙ্ক তার অঙ্কের সীমা ছাড়িয়ে যায় তখন আমরা একটি পরবর্তী অঙ্কে যুক্ত করি।

এই পদ্ধতিতে গণনা কীভাবে উপস্থাপিত হবে তা এখানে:

1; 10; 11; 12; 100; 101; 102; 103; 110; 111; 112; 113; 120; 121; 122; 123; 1000; 1001 ...

আপনার কাজটি এমন একটি ফাংশন লিখুন যা একটি স্ট্যান্ডার্ড বেস 10 নম্বর নেয় এবং এটি আমার নম্বর ব্যবস্থায় রূপান্তর করে।

সংক্ষিপ্ত কোড পছন্দনীয়। বোন চান্স!

** আপনার যদি 9 এর পরে অঙ্কের প্রয়োজন হয় (আপনার উচিত) আপনি চিঠিগুলি ব্যবহার করতে পারেন বা আপনি কোনও তালিকার উপাদান হিসাবে 2 সংখ্যার নম্বর দিতে পারেন।

পরীক্ষার কেস

10 -> 111
20 -> 1003
30 -> 1023
50 -> 1123
100 -> 10035
23116 -> 1234567
21977356 -> 123456789A

আপনি কীভাবে প্রয়োগ করেছেন তার উপর নির্ভর করে শেষ কেসটি চালাতে অবিশ্বাস্যভাবে ধীর হতে পারে। এটি খুব বেশি সময় নেয় বা খুব বেশি স্মৃতি ব্যবহার করে তবে এটি চালানোর দরকার নেই। তবে দ্রষ্টব্য যে এটি দ্রুত চালানোর এবং অল্প স্মৃতি ব্যবহার করার উপায় রয়েছে।


আপনার শেষ মন্তব্যটি দেওয়া হয়েছে, আমরা কি সবসময় অঙ্কগুলি সহ একটি তালিকা ফিরিয়ে দিই?
গ্রেগ মার্টিন

হ্যাঁ, আউটপুট দেওয়ার পক্ষে এটি যুক্তিযুক্ত উপায়, যতক্ষণ না সংখ্যাগুলি সঠিক থাকে
Ando বান্দো

1
আমি এর 100 -> 10035চেয়ে পাচ্ছি 100 -> 10033, আপনি যাচাই করতে পারবেন?
গ্রেগ মার্টিন

@ গ্রেগমার্টিন 10035 ঠিক আছে বলে মনে হচ্ছে। আমি কলম দিয়ে আমার গণনা করেছি এবং প্রোগ্রাম নয় এবং তাই একটি গণনা ত্রুটি করেছি। আমি অনুমান করি যে আমাদের কাছে একটি পুনঃসূচনা পাওয়ার জন্য কম্পিউটার রয়েছে
Ando বান্দো

উত্তর:


4

গণিত, 64 বাইট

Part[Join@@Array[Tuples@Join[{{1}},Array[Range,#-1,3]-1]&,#],#]&

নামী ফাংশন ইতিবাচক পূর্ণসংখ্যার যুক্তি গ্রহণ করে এবং পূর্ণসংখ্যার একটি তালিকা ফিরে দেয়।

Join[{{1}},Array[Range,#-1,3]-1]নেস্টেড তালিকা প্রদান করে { {1}, {0,1,2}, {0,1,2,3}, ..., {0,1,...,#} }। তারপরে Tuplesসমস্ত টিপলসগুলির (সাজানো) সেট ফিরে আসে যার প্রথম উপাদানটি থাকে {1}, যার দ্বিতীয় উপাদানটি থাকে {0,1,2}এবং এইভাবে; এগুলি #এই সংখ্যা পদ্ধতিতে-ডিজিট সংখ্যা। Join@@Array[...,#]সর্বাধিক #অঙ্ক সহ এই সংখ্যায়ন ব্যবস্থায় সমস্ত সংখ্যার একটি অ্যারের প্রদান করে এবং এই জাতীয় সংখ্যাটি Part[...,#]বের করে #

এটি আশাহীনভাবে ধীর! এটা তোলে 9. ইনপুট আপ বৃহত্তর ইনপুট করতে, শেষ প্রতিস্থাপন সেটি পরীক্ষা করার জন্য জরিমানা রান ,#],#]&দিয়ে ,Ceiling[0.9Log[#]]],#]&; এটি আমাদের চাইলে এটির সন্ধানের জন্য সংখ্যা পদ্ধতিতে যথেষ্ট পরিমাণে যেতে প্রয়োজনীয় সংখ্যার উপর আরও বাস্তবসম্মত ক্যাপ রাখে।


3

গণিত, 93 বাইট

Nest[#/.{x___,y_}:>{x,y+1}//.x:{y___,z_:0,w_,v___}/;w>Tr[1^x]-Tr[1^{v}]:>{y,z+1,0,v}&,{0},#]&

প্রথম যুক্তি দিয়ে খাঁটি ফাংশন #। যদি একটি nonnegative পূর্ণসংখ্যা দেওয়া হয়, এটি অঙ্কের সঠিক তালিকা আউটপুট করবে (এমনকি 0সঠিকভাবে হ্যান্ডলগুলিও !)।

ব্যাখ্যা

Nest[f,expr,n]সময় প্রয়োগ fকরার ফলাফল দেয় expr n। এই ক্ষেত্রে, exprতালিকা {0}এবং nইনপুট পূর্ণসংখ্যা #। ফাংশন fজটিল:

# (* Starting with the input # *)
 /. (* Apply the following rule *)
   {x___,y_} (* If you see a list of the form {x___,y} *)
            :> (* replace it with *)
              {x,y+1} (* this *)
                     //. (* Now apply the following rule repeatedly until nothing changes *)
                        x:{y___,z_:0,w_,v___} (* If you see a list x starting with a sequence y of 0 or more elements, 
                                                 followed by an optional element z (default value of 0),
                                                 followed by an element w,
                                                 followed by a sequence v of 0 or more elements *)
                                             /; (* such that *)
                                               w>Tr[1^x]-Tr[1^{v}] (* w is greater than the length of x minus the length of {v} *)
                                                                  :> (* replace it with *)
                                                                    {y,z+1,0,v}& (* this *)

y___,z_:0তালিকার দৈর্ঘ্য বাড়ানোর জন্য দুর্দান্ত ব্যবহার !
গ্রেগ মার্টিন

2
@ গ্রেগমার্টিন জাংহওয়ান মিন গতকাল এটি একই ধরণের সমস্যায় ব্যবহার করেছে ।
নেজিনিসিস

3

পার্ল 6 , 38 বাইট

{map({|[X] 1,|map ^*,3..$_},1..*)[$_]}

একটি ধনাত্মক পূর্ণসংখ্যার ব্যবস্থা করে এবং সংখ্যার প্রতিনিধিত্ব করে পূর্ণসংখ্যার একটি তালিকা আউটপুট দেয়।

ব্যাখ্যা:

{                                    }  # a lambda

 map({                    },1..*)       # for each number length from 0 to infinity,
                                        # offset by 1 to avoid a +1 in next step...

           1,|map ^*,3..$_              # generate the digit ranges, e.g.:
                                        #     length 0  ->  (1)  # bogus, but irrelevant
                                        #     length 1  ->  (1)
                                        #     length 2  ->  (1, 0..2)
                                        #     length 3  ->  (1, 0..2, 0..3)
                                        #     length 4  ->  (1, 0..2, 0..3, 0..4)

       [X]                              # take the cartesian product

      |                                 # slip the results into the outer sequence

                                 [$_]   # Index the sequence generated this way


1

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

i(x:r)|x>length r=0:i r|1<2=1+x:r
i[]=[1]
reverse.(iterate i[]!!)

iবিপরীত ক্রমে সংখ্যাগুলির সাথে সংখ্যা ব্যবস্থায় সংখ্যা বৃদ্ধি করে। iterateশূন্য দিয়ে শুরু হওয়া এই সমস্ত সংখ্যার অসীম তালিকা তৈরি করে যা প্রতিনিধিত্ব করে []। তারপরে যা করা বাকি রয়েছে তা হ'ল !!দাবি করা নম্বর এবং reverseএটি।

শেষ লাইনটি একটি ফাংশন, কোনও ফাংশন সংজ্ঞা নয়, সুতরাং এটি উত্স কোড ফাইলের মতো উপস্থিত হতে পারে না। পরিবর্তে, কেবলমাত্র সোর্স কোডে অন্যান্য রেখাগুলি রাখুন এবং ইন্টারপ্রেটারে শেষ লাইনটি ব্যবহার করুন (বা f=শেষ লাইনে প্রিপেন্ডিং করে ফাংশনটিকে একটি নামের সাথে আবদ্ধ করুন )।

উদাহরণ ব্যবহার:

*Main> reverse.(iterate i[]!!) $ 100
[1,0,0,3,5]

( [5,3,0,0,1]ফলাফলের অনুমোদিত উপস্থাপনা হলে 8 বাইট সংরক্ষণ করা যেত ))


1

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

x=[1]:[n++[d]|n<-x,d<-[0..length n+1]]
(x!!).pred

প্রথম লাইনটি একটি সহায়ক সংজ্ঞা, এবং দ্বিতীয়টি কোনও ফাংশনে মূল্যায়ন করে। এটি একটি পূর্ণসংখ্যার লাগে এবং পূর্ণসংখ্যার একটি তালিকা প্রদান করে। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

আমি xচ্যালেঞ্জ পাঠ্যে উল্লিখিত উপস্থাপনার অসীম তালিকা হিসাবে সংজ্ঞায়িত করেছি ; মূল ফাংশনটি কেবল তার যুক্তি এবং সূচিগুলিকে হ্রাস করে x। প্রথম লাইন এটির মতো কাজ করে:

x=                     -- The list of lists x contains
 [1]:                  -- the list [1], followed by
 [n++[d]|              -- integer d appended to list n, where
  n<-x,                -- n is drawn from x, and
  d<-[0..length n+1]]  -- the new "digit" d is drawn from this range.

আপনি দেখতে পান যে xএটি নিজের দিক দিয়ে সংজ্ঞায়িত হয়েছে, তবে হাস্কেল অলস, সুতরাং এটি কোনও সমস্যা নয়।

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