একটি সংখ্যার বিসিডি পার্থক্য সন্ধান করুন


20

বিসিডির পার্থক্য

একটি পূর্ণসংখ্যা এন দেওয়া হয়, প্রতিটি দশমিক অঙ্ককে তার 4-সংখ্যার বাইনারি উপস্থাপনার পরিবর্তে বিসিডিতে ( বাইনারি-কোডড দশমিক ) রূপান্তর করুন

 234 -> 0 0 1 0 0 0 1 1 0 1 0 0

তারপরে অন্যান্য পুনর্বিন্যাস ব্যতীত এই তালিকার দ্বারা উপস্থাপনযোগ্য বৃহত্তম এবং ক্ষুদ্রতম সংখ্যাগুলি সন্ধান করতে বাইনারি অঙ্কগুলির তালিকাটি ঘোরান।

max: 1 1 0 1 0 0 0 0 1 0 0 0  (the entire list rotated left 6 times)
min: 0 0 0 0 1 0 0 0 1 1 0 1 (the entire list rotated right 2 times)

বিটগুলির তালিকাটিকে নিয়মিত বাইনারি হিসাবে গণ্য করে এবং বৃহত্তম থেকে ক্ষুদ্রতমকে বিয়োগ করুন: এই সংখ্যাগুলিকে দশমিক দশকে ফিরিয়ে আনুন:

1 1 0 1 0 0 0 0 1 0 0 0 -> 3336
0 0 0 0 1 0 0 0 1 1 0 1 -> 141

3336 - 141 -> 3195

আউটপুট হ'ল প্রাপ্ত বৃহত্তম এবং ক্ষুদ্রতম সংখ্যার পার্থক্য।

পরীক্ষার কেস:

234 -> 3195
1234 -> 52155
12 -> 135
975831 -> 14996295
4390742 -> 235954919
9752348061 -> 1002931578825

উত্তর:


7

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

1 বাইট সংরক্ষণের জন্য জেনি_ম্যাথিকে ধন্যবাদ।

i=IntegerDigits;Max@#-Min@#&[#~FromDigits~2&/@NestList[RotateRight,Join@@i[i@#,2,4],#]]&

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

এই ভয়ঙ্কর অদক্ষ কারণ তা উত্পন্ন হয়, এন এর স্কুবা BCD এর ঘুর্ণন এন , কোন দিকে বেশি দরকার হয়। আমরা এই একটি বিট আরো ফল সংরক্ষণ করে কার্যকরী করতে পারেন Join@@মধ্যে kএবং প্রতিস্থাপন #সঙ্গে শেষে Length@k। এটি আমাদের সহজেই একটি স্ক্যাটারপ্লট তৈরি করতে দেয়:

এখানে চিত্র বর্ণনা লিখুন

আমি স্থানীয় কাঠামো এবং সামগ্রিক বিশৃঙ্খলার বৈপরীত্য দ্বারা সত্যই আগ্রহী।


Max@#-Min@#&একটি বাইট সংরক্ষণ করে। ঠিক আছে?
J42161217

@ জেনি_ম্যাথি হ্যাঁ, ধন্যবাদ! :)
মার্টিন এন্ডার

1
আমি আমাদের সমাধানগুলি Max@#-Min@#&[#~FromDigits~2&/@Partition[s=Join@@(i=IntegerDigits)[i@#,2,4],Tr[1^s],1,1]]&89 89 বাইট এবং দক্ষ থেকে তৈরি করেছি । ধিক্কার!
J42161217

প্রকৃতপক্ষে প্লটটি পুনরাবৃত্ত প্যাটার্ন h এই "বিশৃঙ্খলা মেঘ" প্রতি 10 happen n ঘটে (প্লটটি "লাফিয়ে লাফিয়ে একটি নতুন তৈরি করে"): 1-9,10-99,100-999... এখানে কিছু আলাদা জুম রয়েছে: imgur.com/RXLMkco
J42161217

@ জেনি_ম্যাথী নিশ্চিত, তবে এই অন্তরগুলির মধ্যে কাঠামোটি খুব বিশৃঙ্খল প্রদর্শিত হয় (কেবলমাত্র আরও ছোট আকারের স্কেলগুলির সাথে কাঠামোগুলি সহ)।
মার্টিন ইন্ডার

6

জেলি , 13 বাইট

Dd4d2FṙJ$ḄṢIS

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

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

Dd4d2FṙJ$ḄṢIS  Main link. Argument: n

D              Decimal; convert n to base 10 (digit array).
 d4            Divmod 4; map each digit d to [d/4, d%4].
   d2          Divmod 2; map each [d/4, d%4] to [[d/8, d/4%2], [d%4/2, d%2]].
     F         Flatten the resulting 3D binary array.
      ṙJ$      Take all possible rotations.
         Ḅ     Convert each rotation from binary to integer.
          Ṣ    Sort the resulting integer array.
           I   Take the forward differences.
            S  Take the sum.


4

পাওয়ারশেল , 153 বাইট

$b=[char[]]-join([char[]]"$args"|%{[convert]::toString(+"$_",2).PadLeft(4,'0')})
($c=$b|%{$x,$y=$b;[convert]::ToInt64(-join($b=$y+$x),2)}|sort)[-1]-$c[0]

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

বোকা দৈর্ঘ্য .NET কল থেকে / বাইনারি থেকে রূপান্তর কল সত্যিই এখানে দৈর্ঘ্য bleat। ;-)

আমরা ইনপুট হিসাবে গ্রহণ করি $args, এটি একটি স্ট্রিংয়ে মুড়িয়ে charরাখি , তারপরে একে অ্যারে হিসাবে কাস্ট করি । আমরা প্রতিটি সংখ্যার উপরে লুপ করি, বেসকে convertঅঙ্কটি অঙ্ক করি (অর্থাত্, অঙ্কটি বাইনারি সংখ্যায় রূপান্তর করে), তারপরে এটিকে চার-অঙ্কের বাইনারি সংখ্যা তৈরি করতে। এর ফলে প্রাপ্ত স্ট্রিংয়ের অ্যারেটি তখন একটি একক স্ট্রিংয়ে এড হয়ে যায় এবং সেভ করার আগে এটি - অ্যারে হিসাবে পুনরায় কাস্ট করা হয় ।toString2.padLeft-joinchar$b

এরপরে, আমরা লুপ করব $b, যা নিশ্চিত করে যে আমরা প্রতিটি ঘূর্ণনের জন্য যথেষ্ট সময় লুপ করব। প্রতিটি পুনরাবৃত্তি, আমরা প্রথম অক্ষরটি ছাঁটাই করি $xএবং বাকী অক্ষরগুলি $yএকাধিক অ্যাসাইনমেন্ট ব্যবহার করে। তারপরে, আমরা এগুলিকে আবার একত্রিত $b=$y+$xকরে প্রথম উপাদানটিকে শেষের দিকে নিয়ে যেতে, অর্থাৎ কার্যকরভাবে একটিকে অ্যারে ঘোরানো। যে -joinএকটি স্ট্রিং, যা ইনপুট হিসাবে ব্যবহার করা হয় মধ্যে ed convertবাইনারি বেস থেকে স্ট্রিং ঘুরে কল 2একটি মধ্যে Int64। আমরা তখন সেই sortসমস্ত ফলাফলের সংখ্যাটি রেখে এগুলিতে স্টোর করি $c। অবশেষে, আমরা সবচেয়ে [-1]বড়টি গ্রহণ করি এবং ক্ষুদ্রতমকে বিয়োগ করি [0]। এটি পাইপলাইনে রেখে গেছে এবং আউটপুট অন্তর্ভুক্ত।


4

ওহম ভি 2 , 15 বাইট

€b4Ü. 0\;Jγó↕]a

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

ব্যাখ্যা:

€b4Ü. 0\;Jγó↕]a  Main wire, arguments: a (integer)

€       ;        Map the following over each digit of a...
 b                 Convert to binary
  4Ü               Right-justify w/ spaces to length 4
    . 0\           Replace all spaces with zeroes
         J       Join together binary digits
          γó     Get all possible rotations and convert back to decimal
            ↕    Find the minimum *and* maximum rotation
             ]a  Flatten onto stack and get the absolute difference

4

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

f=
n=>(g=m=>Math[m](...[...s=(`0x1`+n-0).toString(2)].map(_=>`0b${s=0+s.slice(2)+s[1]}`)))`max`-g`min`
<input type=number min=0 oninput=o.textContent=f(this.value)><pre id=o>

সম্পাদনা: @ রিকহিচকককে 11 বাইট সংরক্ষণ করা হয়েছে @ বুদ্ধিমানের জন্য 1 টি বাইট সংরক্ষণ করা হয়েছে। ব্যাখ্যা: 0x1উপসর্গটি ইনপুটটিকে হেক্সাডেসিমাল সংখ্যা হিসাবে পুনর্বিবেচিত করে, যার বাইনারি মূল সংখ্যার বিসিডির সাথে 1 উপসর্গযুক্ত (আমার মনে হয় এটি 4 টি সংখ্যার একাধিক প্যাডিংয়ের কোনও উপায়ের চেয়ে গল্ফিয়ার) । উপসর্গটি বাদ দিয়ে, যা 1 থেকে 0 থেকে পরিবর্তিত হয়, ফলস্বরূপ স্ট্রিংটি প্রতিটি সম্ভাব্য অবস্থানে ঘোরানো হয় এবং বাইনারি থেকে দশমিক দিকে রূপান্তরিত হয়। অবশেষে সর্বাধিক এবং সর্বনিম্ন বিয়োগ করা হয়।


1
@ রিকহিচকক স্ট্রলটি ডাবল ব্যাকটিক্সে মুড়ে দিন ... যদি আপনি এমন কিছু লিখতে না চান তবে আপনার .join`` ক্ষেত্রে ট্রিপল ব্যাকটিকস ইত্যাদির প্রয়োজন নেই
নীল

হেক্সাডেসিমাল ব্যবহার করার জন্য ভাল ধারণা। 11 টি বাইট এর মতো সংরক্ষণ করুন:n=>(g=m=>Math[m](...[...s=(+`0x1${n}`).toString(2).slice(1)]‌​.map(_=>`0b${s=s.sli‌​ce(1)+s[0]}`)))`max`‌​-g`min`
রিক হিচকক

1
@ রিকহিটকক ধন্যবাদ, এটি আমাকে সাহায্য করেছে ... স্লাইস ... আরও একটি সরিয়ে অন্য 7 বাইট বন্ধ slice!
নিল

1
m=>Math[m]কৌতুক মহান। সম্ভবত পরিবর্তন (+`0x1${n}`)করার ('0x1'+n-0)বা অনুরূপ?
ইটিএইচ প্রডাকশন

3

পাইথন 2 , 115 113 বাইট

b="".join(format(int(n),"04b")for n in`input()`)
b=[int(b[s:]+b[:s],2)for s in range(len(b))]
print max(b)-min(b)

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



3

হুশ , 18 বাইট

§-▼▲mḋUMṙNṁȯtḋ+16d

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

একটি ডিজিটকে তার 4-বিট বাইনারি উপস্থাপনায় রূপান্তর করার জন্য একটি ছোট্ট উপায় থাকতে হবে ...

ব্যাখ্যা

§-▼▲mḋUMṙNṁȯtḋ+16d
                 d    Get the list of digits of the input
          ṁȯ          For each digit...
              +16      add 16
             ḋ         convert to binary
            t          drop the first digit
       MṙN            Rotate the list by all possible (infinite) numbers
      U               Get all rotations before the first duplicated one
    mḋ                Convert each rotation from binary to int
§-▼▲                  Subtract the minimum from the maximum value

3

এপিএল (ডায়ালগ) , 31 বাইট

পুরো প্রোগ্রাম বডি। STDIN থেকে সংখ্যার জন্য অনুরোধ জানানো হয়। প্রিন্টগুলি ফলাফল STDOUT এ।

(⌈/-⌊/)2⊥¨(⍳≢b)⌽¨⊂b←,⍉(4/2)⊤⍎¨⍞

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

 STDIN থেকে পাঠ্য লাইনের জন্য প্রম্পট

⍎¨ প্রতিটি (চরিত্র) নির্বাহ (মূল্যায়ন)

()⊤ নিম্নলিখিত নম্বর সিস্টেমে এনকোড (অ্যান্টি-বেস):

4/2 চার বাইনারি বিট

 TRANSPOSE

, অভ্যাস (সমতল)

b← সংরক্ষণ করুন b( বি ইনারি জন্য)

 ঘেরযুক্ত (যাতে আমরা প্রতিটি ঘোরার জন্য এই পুরো তালিকাটি ব্যবহার করব)

()⌽¨ নীচের প্রতিটি পরিমাণে (বাম দিকে) ঘোরান:

≢b এর দৈর্ঘ্য b

আমি যে এর ndices

2⊥¨ বেস -2 থেকে প্রতিটি ডিকোড করুন।

() এটিতে নিম্নলিখিত টিসিট ফাংশনটি প্রয়োগ করুন

⌈/ সর্বাধিক (-আরসাক)

- ঋণচিহ্ন

⌊/ মিনিট (-আরসাক)


(⍳≢b) ⌽¨⊂b ←: আপনি সহজে এই বিট trainify পারে
ngn

বা আরও ভাল - ব্যবহার (≢, /, ⍨) সুস্পষ্ট (⍳∘≢⌽¨⊂) পরিবর্তে
ngn



2

রুবি , 96 91 বাইট

->n{r=""
n.digits.map{|d|r="%04b"%d+r}
s=r.chars.map{(r=r[1..-1]+r[0]).to_i 2}
s.max-s.min}

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

  • প্রদর্শনের জন্য ধন্যবাদ 5 বাইট সংরক্ষণ করা

-> n {r = "" n.digits.map {| d | r = "% 04b"% d + r} s = r.chars.map {(আর = আর [1 ..- 1] + আর [ । 0]) to_i 2} s.max-s.min} 91 বাইট হওয়া উচিত
displayname

@ ডিসপ্লেনাম হা, হ্যাঁ, আপনি ঠিক বলেছেন। আপনাকে ধন্যবাদ
মনিকা পুনরায় স্থাপন করুন - notmaynard



2

রেটিনা , 96 89 বাইট

.
@@@$&
@(?=@@[89]|@[4-7]|[2367])
_
T`E`@
\d
_
.
$&$'$`¶
O`
_
@_
+`_@
@__
s`(_+).*\W\1

_

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

.
@@@$&

@প্রতিটি অঙ্কের উপসর্গ তিনটি । (এগুলি 0বিসিডির প্রতিনিধিত্ব করে তবে গল্ফায়ার)

@(?=@@[89]|@[4-7]|[2367])
_

পরিবর্তন @করার জন্য গুলি _গুলি (প্রতিনিধিত্বমূলক 1উপযুক্ত যেখানে স্কুবা BCD এর গুলি)।

T`E`@
\d
_

বিসিডির শেষ অঙ্কটি ঠিক করুন।

.
$&$'$`¶

সমস্ত ঘূর্ণন তৈরি করুন।

O`

তাদের আরোহী ক্রমে বাছাই করুন।

_
@_
+`_@
@__

এগুলি অ্যানারিতে রূপান্তর করুন।

s`(_+).*\W\1

_

অন্তর্বর্তী সংখ্যাগুলি অগ্রাহ্য করে শেষ সংখ্যা থেকে প্রথমটি বিয়োগ করুন এবং দশমিক রূপান্তর করুন।


%বাইনারি থেকে অ্যানারি রূপান্তরকরণের জন্য কোনও ব্যবহারের প্রয়োজন নেই এবং আপনি বাইনারি বাদে0 এবং অন্যান্য অক্ষর ব্যবহার করে আরও কয়েকটি বাইট সংরক্ষণ করতে পারেন 1: tio.run/##K0otycxL/…
মার্টিন

@ মার্টিন ইন্ডার ওহ, আমি মনে করি যে আমি যখন আপনার বাইনারি রূপান্তর রুটিনগুলির মধ্যে একটি ব্যবহার করতে ব্যর্থ হয়েছি তখন থেকে তারিখটি হয়েছিল ...
নীল

2

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

r=foldl1
f x=max#x-min#x
f#x|s<-show x=r((+).(2*)).r f.take(sum$4<$s).iterate(drop<>take$1)$do d<-s;mapM(pure[0,1])[1..4]!!read[d]

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

ব্যাখ্যা / অবহেলিত

আমরা ব্যবহার করতে যাচ্ছেন যেহেতু foldl1((+).(2*))দশমিক বাইনারি থেকে রূপান্তর করতে, আমরা পাশাপাশি ব্যবহার নাও করতে পারে maximumএবং minimumবরং foldl1 max(অথবা সঙ্গে একই minযথাক্রমে) এবং একটি সংক্ষিপ্ত ব্যবহারr = foldr1

এখন, একটি অপারেটরকে সংজ্ঞায়িত করি f#xযা বিসিডিতে রূপান্তর xকরে, সমস্ত ঘূর্ণন উত্পন্ন করে, এগুলি ব্যবহার করে হ্রাস করুন fএবং এটি দশমিক রূপান্তর করুন:

f # xs
  | s <- show xs
  = foldr1 ((+).(2*))                             -- convert from binary to decimal
  . foldr1 f                                      -- reduce by either max or min
  . take (4 * length s)                           -- only keep 4*length s (ie. all "distinct" rotations)
  . iterate (drop<>take $ 1)                      -- generate infinite list of rotations
  $ do d<-s; mapM (pure[0,1]) [1..4] !! read [d]  -- convert to BCD

এই অপারেটরটি একবারে একবার ব্যবহার করা maxএবং একবারে minতাদের ফলাফলগুলি বিয়োগ করার ক্ষেত্রে এটি কেবল বিষয় :

f x = max#x - min#x


2

জাপট -x , 20 বাইট

®¤ùT4쬣ZéY ì2Ãn äa

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

অঙ্কের অ্যারে হিসাবে ইনপুট।

ব্যাখ্যা:

®¤                      #Map each digit to base 2
  ùT4Ã                  #Pad each one to 4 places
      ¬                 #Join them to a single binary string
       ¬                #Split them to an array of single characters
        £      Ã        #For each index Y in that array:
         ZéY            # Get the array rotated Y times
             ì2         # Convert the array from binary to decimal
                n       #Sort the results
                  äa    #Get the absolute difference between each element
                        #Implicitly output the sum

1
আপনি -x2 বাইট সংরক্ষণ করতে পতাকা ব্যবহার করতে পারেন ।
অলিভার


1

পাইথ, 24/26 বাইট

s.+Smi.>Gd2l=Gsm.[\04.Bs

উদ্ধৃত স্ট্রিং হিসাবে ইনপুট নেয়। যদি পূর্ণসংখ্যা হিসাবে ইনপুট নেওয়ার প্রয়োজন হয় তবে 26 বাইট; সেক্ষেত্রে সংযোজন dz

পরীক্ষার কেস (স্ট্রিং হিসাবে ইনপুট, 24 বাইট)

পরীক্ষার কেস (সংখ্যা হিসাবে ইনপুট, 26 বাইট)


1

জে, 43 বাইট

3 :'(>./-<./)#.(i.@#|."0 1]),}.#:8,"."0":y'

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

কখনও কখনও স্বচ্ছ শৈলী জিনিসগুলিকে কঠিন করে তোলে। তবে সম্ভবত এটির উপায় করার উপায় আছে যা এর চেয়ে অনেক বেশি সংক্ষিপ্ত। আমি মনে করি আমি সংখ্যাটি অন্য সংখ্যায় বিভক্ত করার আরও ভাল উপায় মনে করি "."0@":তবে আমি এটি পুনরায় মনে করতে পারি না ...

ব্যাখ্যা

3 :'(>./-<./)#.(i.@#|."0 1]),}.#:8,"."0":y'
                                         y  the input (integer)
                                       ":   convert to string
                                   "."0     evaluate each char (split to digits)
                                 8,         prepend 8
                               #:           debase 2
                             }.             behead (remove the 8)
                            ,               ravel (flatten)
               (i.@#|."0 1])                create a list of rotations
                    |.    ]                   rotate the list
                      "0 1                    for each number on the left
                i.@#                          range 0 ... length - 1
             #.                             convert rotations back to base 10
    (>./-<./)                               max minus min

8 টি প্রিপেন্ডিং এবং অপসারণ হ'ল তা নিশ্চিত করা যে সঠিক শূন্যের সংখ্যা উপস্থিত রয়েছে (জে তার অ্যারেগুলিকে তাদের সর্বোচ্চ দৈর্ঘ্যের উপাদানটির আকার হিসাবে পুনরায় আকার দেবে এবং বাইনারিতে এটি 8 টি সংখ্যা যাতে এটি ব্যবহার করা হয়)।


1

এপিএল (এনএআরএস), 34 টি অক্ষর, 68 বাইট

{(⌈/-⌊/)2⊥¨{⍵⌽a}¨⍳≢a←∊⍉(4⍴2)⊤⍎¨⍕⍵}

কিছুটা ছোট পরীক্ষা:

  h←{(⌈/-⌊/)2⊥¨{⍵⌽a}¨⍳≢a←∊⍉(4⍴2)⊤⍎¨⍕⍵}
  h 9752348061
1002931578825
  h 0
0

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