সংখ্যার সরলীকরণ


16

কীভাবে, আপনি টিভি স্ক্রিনে এক সেকেন্ডের জন্য উপস্থিত or বা--সংখ্যার ফোন নম্বরটি মনে করতে পারবেন না ?! নীচে বর্ণিত বিশেষ কৌশলটি ব্যবহার করে আপনি একটি হাঁটার ফোনবুকে পরিণত হবে!

স্পষ্টতই, সংখ্যার 402চেয়ে সংখ্যাটি মনে রাখা সহজ 110010010এবং সংখ্যার 337377চেয়ে সংখ্যাটি মনে রাখা সহজ 957472। এর অর্থ হ'ল একদিকে মুখস্থ সংখ্যাটি যতটা সম্ভব কম সংখ্যক হওয়া উচিত এবং অন্যদিকে, এটি সংখ্যায় যতটা সম্ভব পুনরাবৃত্তি সংখ্যার সমন্বিত হওয়া বাঞ্ছনীয়।

মনে রাখতে অসুবিধার জন্য একটি মানদণ্ড হিসাবে, আমরা সংখ্যায় অঙ্কের সংখ্যা এবং সংখ্যায় বিভিন্ন অঙ্কের সংখ্যার যোগফল নিয়ে থাকি। একটি মুখস্থ নম্বর অন্য নম্বর সিস্টেমে লেখা যেতে পারে, তবে সম্ভবত এটি মনে রাখা সহজ হবে। উদাহরণস্বরূপ, 65535হেক্সাডেসিমাল নোটেশনে নম্বরটি দেখতে মনে হচ্ছে FFFF

কার্য

জটিলতার মানদণ্ড হ্রাস করতে আপনার সংখ্যা সিস্টেমের ভিত্তি বাছাই করার জন্য একটি প্রোগ্রাম লিখতে হবে। সংখ্যা পদ্ধতির বেসটি 2 থেকে 36 এর মধ্যে হতে হবে 0-9এবং তারপরে সংখ্যাটি এবং ইংরেজি বর্ণগুলি A-Zসংখ্যাটি উপস্থাপন করতে ব্যবহার করা যেতে পারে।

ইনপুট

ইনপুটটিতে 1 থেকে 999999999 পর্যন্ত দশমিক পূর্ণসংখ্যা থাকে।

আউটপুট

আউটপুটে অবশ্যই সংখ্যা ব্যবস্থার ভিত্তি থাকতে হবে (2 থেকে 36 পর্যন্ত), মুখস্তকরণ জটিলতার মানদণ্ডকে ন্যূনতম করে এবং নির্বাচিত নম্বর সিস্টেমে সংখ্যাটি এক স্থান দ্বারা পৃথক করা উচিত। যদি বেশ কয়েকটি ঘাঁটি মানদণ্ডের জন্য একই মান দেয় তবে তাদের মধ্যে ক্ষুদ্রতমটি চয়ন করুন।

মন্তব্য

  • বর্ণগুলি অবশ্যই বড় ( A-Z) হবে।

পরীক্ষার কেস

ইনপুট আউটপুট

1              2 1

2              3 2

65535       16 FFFF

123          12 A3


16
দুর্দান্ত চ্যালেঞ্জ, তবে এটির জন্য আরও পরীক্ষার কেস দরকার।
গ্রিমি

7
এছাড়াও, আউটপুট ফর্ম্যাটটি কিছুটা কঠোর, আপনি উদাহরণস্বরূপ দুটি উপাদানের একটি অ্যারে, বেস এবং স্ট্রিংকে বা বিপরীত ক্রমে মঞ্জুরি দেওয়ার অনুমতি দিতে বা অন্য কোনও চরিত্র দ্বারা পৃথক করতে চাইবেন। এছাড়াও, আমি ধরে নিচ্ছি যে আপনি সংখ্যার সংখ্যার সাথে সংখ্যার যোগ যোগ করেন তবে আপনি এটি স্পষ্ট করতে চাইতে পারেন।
এরিক দ্য আউটগল্ফার

8
আমি কি এর a-zপরিবর্তে ব্যবহার করতে পারি A-Z?
নীল

5
আমরা কি পরিবর্তে সংশ্লিষ্ট নম্বরগুলি ব্যবহার করতে পারি A-Z?
flawr

8
যেমন দেখুন: @VerNick পরের বার আপনি যদি অনুরূপ চ্যালেঞ্জ আমি উভয় এই অনুরোধের মঞ্জুরি হিসাবে তারা শুধু একটি অপ্রয়োজনীয় জটিলতা যা নিরুৎসাহিত করা হয় সুপারিশ করবে লিখতে এখানে
flawr

উত্তর:


6

পার্ল 6 , 55 54 বাইট

-1 বাইট জো কিংকে ধন্যবাদ।

{~map({$^b,.base($b)},2..36).min:{@$_+.Set}o*[1].comb}

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


1
আপনি এর @$_সাথে প্রতিস্থাপন করতে পারেন @_এবং এটি এখনও কার্যকর হয়।
স্যারবোগম্যান

2
@ সিরবোগম্যান এটি খুব কম পরীক্ষার ক্ষেত্রে কাজ করতেই ঘটে।
নওহানহোহফ

এটা বোধগম্য. একেবারেই ঠিক মনে হয়নি।
স্যারবোগম্যান

5

পাইথন 2 , 150 149 127 144 বাইট

lambda n:min((len(c(n,b))+len(set(c(n,b))),b,c(n,b))for b in range(2,37))[1:]
c=lambda n,b,s='':n and c(n/b,b,chr(n%b+48+7*(n%b>9))+s)or s or'0'

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


পাইথন 3 , 136 বাইট

lambda n:min((len((*c(n,b),*{*c(n,b)})),b,c(n,b))for b in range(2,37))[1:]
c=lambda n,b,s='':n and c(n//b,b,chr(n%b+48+7*(n%b>9))+s)or s

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


পাইথন 3.8 (প্রাক রিলিজ) , 131 বাইট

lambda n:min((len((*(x:=c(n,b)),*{*x})),b,x)for b in range(2,37))[1:]
c=lambda n,b,s='':n and c(n//b,b,chr(n%b+48+7*(n%b>9))+s)or s

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


c কোনও বেস 10 সংখ্যাকে যে কোনও বেসে (2-3-6) রূপান্তর করে এবং প্রথম (বেনামে) ফাংশনটি সবচেয়ে ছোট ফলাফল খুঁজে পায়।


5

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

-1 বাইট কেভিন ক্রুইজসেনকে ধন্যবাদ

₆LBāøΣнDÙìg}1è

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

অথবা আর) যোগ করুন the শেষে নির্দিষ্ট আউটপুট ফর্ম্যাটের সাথে যথাযথভাবে মানিয়ে নিতে, তবে অন্যান্য বেশিরভাগ উত্তর বিরক্ত করে না।

ব্যাখ্যা:

₆L          # range 1..36
  B         # convert the input to each of those bases
   āø       # enumerate (pair each element with its 1-based index)
Σ     }     # sort by
     g      # length
 н          # of the first element
    ì       # concatenated to
  DÙ        # itself, uniquified
1è          # take the second entry (first will always be base 1)

1
এর ₆L©B®øপরিবর্তে -1 বাইট ব্যবহার করে₆LεBy‚}
কেভিন ক্রুইজসেন

1
ধন্যবাদ কেভিন ক্রুজসেন! অন্য -1 ব্যবহার করে āমনে হচ্ছে আপনি সর্বদা সেইটির কথা ভুলে যান।
গ্রিমি

হ্যাঁ, আমি সত্যিই করছি .. আমি আজকের এই চ্যালেঞ্জের সাথে এটি মনে রেখেছিলাম, এটি কোনও উপায়ে সহায়তা করেছিল তা নয়, হাহা এক্সডি
কেভিন ক্রুইজসেন

@ রিচার্স আপনি উত্তরটি পড়েছেন বলে মনে হয় না। আমি এমন একটি সংস্করণ লিঙ্ক করেছি যা কঠোর আউটপুট প্রয়োজনীয়তা মেনে চলে এবং আমি কেন এটির মূল সংস্করণ তৈরি করিনি তা ব্যাখ্যা করি।
গ্রিমি

চার্জ হিসাবে গ্রিমিকে দোষী করা হয়েছে আপনাকে বিরক্ত করার জন্য দুঃখিত.
পুনরাবৃত্তি

4

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

সম্পাদনা করুন: কঠোর আউটপুট ফর্ম্যাট মেনে চলতে +16 অকেজো বাইট

n=>(g=m=>--b>2?g(m<(v=new Set(s=n.toString(b)).size+s.length)?m:(o=b+' '+s.toUpperCase(),v)):o)(b=37)

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


আহ, আমি সেই অংশটি মিস করেছি
টিফিল্ড

4

জাপট ভি 2.0a0 -gS, 24 23 বাইট

সুন্দর নয়, তবে এটি কাজটি করে। সম্পূর্ণ অপ্রয়োজনীয় প্রয়োজনের জন্য +2 বাইটস যে আউটপুট বড় হবে।

37o2@sX u ¸iXÃñÈÌiXÌâ)l

চেষ্টা করে দেখুন

37o2@sX u ¸iXÃñÈÌiXÌâ)l     :Implicit input of integer
37o2                        :Range [2,37)
    @                       :Map each X
     sX                     :  Convert the input to a base-X string
        u                   :  Uppercase
          ¸                 :  Split on spaces (there are none, so this returns a singleton array)
           iX               :  Prepend X
             Ã              :End map
              ñ             :Sort by
               È            :Pass each X through the following function
                Ì           :  Last element of X
                 i          :  Prepend
                  XÌâ       :    Last element of X, deduplicated
                     )      :  End prepend
                      l     :  Length
                            :Implicit output of the first sub-array, joined with spaces

হ্যাঁ, এটি দুর্দান্ত কাজ করে তবে বর্ণগুলি অবশ্যই বড় হাতের হতে হবে।
ভের নিক বলছেন মনিকা পুনরায়

1
@ ভার্নিক, কেন? এটি চ্যালেঞ্জের একেবারে কিছুই যোগ করে না।
শেগি

... আমার ধারণা পরবর্তী জিনিসটি "এক জায়গার দ্বারা পৃথক" হয়ে যাবে। দেখে মনে হচ্ছে আউটপুট ফর্ম্যাটটি এই চ্যালেঞ্জের উপর খুব কঠোর করা হয়েছে, এবং মন্তব্যগুলি থেকে দেখে মনে হচ্ছে এটি পরিবর্তন হবে।
জোনাথন অ্যালান

@ জোনাথান অ্যালান, ভাগ্যক্রমে আমি পতাকা পরিবর্তনের সাথে এটিকে "ফিক্স" করতে পারি।
শেগি


3

Zsh , 85 বাইট

for b ({36..2})x=$[[#$b]$1]&&x=${x#*\#}&&a[$#x+${#${(us::)x}}]=$b\ $x
a=($a)
<<<$a[1]

লুপ জন্য ভিতরে বিবৃতি এই সংখ্যা ব্যবহার জন্য ...&&...&&...চেয়ে খাটো {...;...;...;}

for b ({36..2})                   # order decreasing: smaller bases overwrite larger ones
    x=$[[#$b]$1] && \             # set x to [base]#[num] 
    x=${x#*\#} && \               # strip leading [base]#
    a[$#x+${#${(us::)x}}]=$b\ $x  # use score as index to store "[base] [number]"
#            ${(us::) }           # (s::)plit into characters, take (u)nique
a=($a)                            # remove empty elements from array
<<<$a[1]                          # print out the first element (smallest score)

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

এখানে একটি 81-বাইট সমাধান রয়েছে যা [base]#[num]পরিবর্তে ফর্মটিতে প্রিন্ট করে:

for b ({36..2})x=$[[#$b]$1]&&y=${x#*\#}&&a[$#y+${#${(us::)y}}]=$x
a=($a)
<<<$a[1]

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



2

কাঠকয়লা , 38 বাইট

Nθ≔EE³⁴↨θ⁺²ιL⁺ιΦι⁼λ⌕ικη≔⁺²⌕η⌊ηηIη ↥⍘θη

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

Nθ

পূর্ণসংখ্যা ইনপুট করুন।

≔EE³⁴↨θ⁺²ι

এটি বেস 2 থেকে বেস 36 এ রূপান্তর করুন ...

L⁺ιΦι⁼λ⌕ικη

... প্রতিলিপি, সংক্ষিপ্তকরণ এবং দৈর্ঘ্য নিন।

≔⁺²⌕η⌊ηη

সর্বনিম্ন জটিলতার সূচক নিন এবং বেস পেতে 2 যোগ করুন।

Iη ↥⍘θη

উপরের ক্ষেত্রে বেস এবং পূর্ণসংখ্যাটি সেই বেসে রূপান্তরিত হয়।


2

স্ট্যাক্স , 19 বাইট

Ç╛;ⁿY3█↕(╖S♪*ò▌?½╦l

এটি চালান এবং এটি ডিবাগ করুন

কোনও অভিনব অ্যালগরিদম নেই, কেবল সোজা ব্রুট ফোর্স। প্রোগ্রামের প্রায় এক তৃতীয়াংশ হ'ল নির্ভুল আউটপুট নিয়মের জন্য ফর্ম্যাট-র্যাংলিং।

বোনাস প্রোগ্রাম: [1..1000] এর আউটপুট


2

জেলি , 25 বাইট

bⱮ36µQL+LN)Mḟ1Ḣ,ị‘ịØBʋ¥⁸K

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

একটি মোনাডিক লিঙ্কটি একটি পূর্ণসংখ্যাটিকে তার যুক্তি হিসাবে গ্রহণ করে এবং পছন্দসই বিন্যাসের জেলি স্ট্রিংটি ফিরিয়ে দেয়। যদি একটি দ্বি-আইটেমের তালিকা গ্রহণযোগ্য আউটপুট (বেশিরভাগ চ্যালেঞ্জ অনুসারে) হয়, তবে 2 বাইট সংরক্ষণ করতে পারে। বেস 1 যদি ইনপুট হিসাবে 1 এর প্রান্তের ক্ষেত্রে গ্রহণযোগ্য হয় তবে আরও 2 বাইট সংরক্ষণ করতে পারে।






1

ওল্ফ্রাম ভাষা (গণিত) , 109 111 বাইট

Print[a=OrderingBy[#~IntegerDigits~Range@36,Tr[1^#]+Tr[1^Union@#]&,1][[1]]," ",ToUpperCase[#~IntegerString~a]]&

+2: স্থির। রোমানকে ধরার জন্য ধন্যবাদ

OrderingBy গাণিতিক 12.0 তে চালু হয়েছিল, টিআইও এখনও আপডেট হয় নি বলে মনে হয় না।


"যদি বেশ কয়েকটি ঘাঁটি মানদণ্ডের জন্য একই মান দেয় তবে তাদের মধ্যে ক্ষুদ্রতমটি চয়ন করুন" ": OrderingByএই প্রয়োজনীয়তার সাথে সামঞ্জস্য হয় না।
রোমান

হয়তো সঙ্গে কিছু MinimalBy, এটি পছন্দ ?
রোমান

@ রোমান তাই না? আমি যতদূর বলতে পারি, এটি দুটি সূচকের আপেক্ষিক ক্রম সংরক্ষণ করে যার একই মান রয়েছে ..
অ্যাটিনিট

2
যুক্তি দিয়ে 123, আপনার সমাধান 36 3Fপ্রয়োজনীয় পরিবর্তে প্রিন্ট করে 12 A3। থেকে OrderingBy[123~IntegerDigits~Range@36, Tr[1^#] + Tr[1^Union@#] &]আমি উত্তর পেতে {36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 6, 5, 11, 10, 9, 8, 7, 4, 3, 2, 1}, তাই কোনও পুনরায় ক্রম সমতুল্য এন্ট্রি স্বাভাবিক ধৃষ্টতা এখানে উপেক্ষা করা বলে মনে হয়। আমার $Version"ম্যাক ওএস এক্স x86 (64-বিট) (এপ্রিল 7, 2019) এর জন্য" 12.0.0 "
রোমান

আহ, আপনি ঠিক বলেছেন। এটা লক্ষ্য করে আমার খারাপ।
অ্যাটিনিট

1

সি (ঝনঝন) , 165 বাইট

n,i=2,j,p=99,r,m,x;char*g,*_,b[74][37];t(n){for(;g=b[i],i<37;r=j<p?_=g,p=j,i:r,++i)for(j=0,m=n;m;m/=i,*--g=x+=x>9?87:48)j+=b[i+36][x=m%i]++?1:2;printf("%i,%s",r,_);}

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

এন // ইনপুট

, i = 2 // বেস 2 থেকে 36 পর্যন্ত পুনরাবৃত্তিকারী

, j // বর্তমান জটিলতা

, পি = 99 // সেরা জটিলতা

, আর // ফলাফল = পুনরুক্তি

, m // এন টেম্প কপি

, x; // মি% i

চর * জি // বর্তমান স্ট্রিং পিটিআর

, * _ // সেরা আরআর পিটিআর

এ, বি [74] [37]; // বাফার

/ * [৩ + + ৩]] = [ব্যবহৃত অক্ষরের জন্য স্ট্রিং + পরীক্ষা পেয়েছে] * /

T (ঢ) {

(; g = b [i]), // মুভি পিটিআর জন্য

   i<37 ; 
   r=j<p?_=g,p=j,i:r, // save best solution

   ++i){//for every base

(j = 0, এম = এন; এম; এম / = আই, // এক্সট্রাক্ট ডিজিটের জন্য)

   *--g=x+=x>9?87:48)
   // move ptr backward for printf use and transform to ascii value

ঞ + + = খ [আমি + 36] [X = মি% i টি] ++, 1: 2; // চরিত্রের তুলনায় বর্ধিত বাইট

// এবং যদি এটি 0 ইনক্রিমেন্ট জে ব্যবহৃত নতুন অক্ষরের জন্য 2: 1 এবং অঙ্কের গণনার জন্য 1 ছিল

// অন্যথায় কেবলমাত্র অঙ্কগুলি গণনা + সরানো পয়েন্টার ter

// প্রিন্টফ ("% s -", ​​ছ); // পরীক্ষা

// প্রিন্টফ ("r% ip% ij% i \ n", আর, পি, জে); // পরীক্ষা

}

printf, ( "% i টি,% s-", R,: _); // আউটপুট

}


1
163 বাইট একাধিকবার কল করা যায়।
সিলিংক্যাট

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