বাইনারি বাইনারি সম্প্রসারণ


9

সাধারণত, আমরা প্রতিটি সংখ্যার 2 0বা পাওয়ার সহ ক্ষমতা সহ 1নির্ধারিত করে বাইনারি অঙ্কগুলিতে একটি সংখ্যাকে বিভক্ত করি :

25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1

পছন্দ 0এবং 1হয় ... খুব বাইনারি না। আমরা 2 এর ক্ষমতার সাথে প্রসারিত করে সত্য বাইনারি প্রসারণ সম্পাদন করব , তবে এর গুণক 1বা -1পরিবর্তে:

25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1

এখন এটি বাইনারি দেখাচ্ছে।

যে কোনও ধনাত্মক সংখ্যা দেওয়া আছে তা দেখার জন্য এটি তুচ্ছ হওয়া উচিত:

  • প্রতিটি বিজোড় সংখ্যার অসীম অনেকগুলি সত্য বাইনারি প্রসার থাকে
  • প্রত্যেকটি সংখ্যার কোনও সত্যই বাইনারি সম্প্রসারণ নেই

সুতরাং, সত্যিকারের বাইনারি প্রসারণটি সু-সংজ্ঞায়িত করার জন্য, আমাদের সম্প্রসারণটি সর্বনিম্ন হওয়া দরকার , অর্থাৎ সবচেয়ে কম দৈর্ঘ্যের সাথে।


যেকোন ধনাত্মক, বিজোড় পূর্ণসংখ্যা দেওয়া n, এর সত্য বাইনারি সম্প্রসারণকে সর্বাধিক উল্লেখযোগ্য অঙ্ক থেকে সর্বনিম্ন উল্লেখযোগ্য অঙ্কে (অথবা বিপরীত ক্রমে) ফিরুন।

নিয়মাবলী:

  • এই যেমন , আপনার পক্ষে লক্ষ্যটি করা উচিত সম্ভাব্যতম সংক্ষিপ্ততম বাইট গণনায় এটি করা। বিল্টিনগুলি অনুমোদিত।
  • সহগের প্রতিনিধিত্ব করতে এবং তালিকাভুক্ত করতে পারে এমন যে কোনও আউটপুট গ্রহণযোগ্য: একটি অ্যারে, বিভাজকগুলির সহ সহগের একটি স্ট্রিং ইত্যাদি ...
  • স্ট্যান্ডার্ড গল্ফিং লফোলগুলি প্রয়োগ হয়।
  • আপনার প্রোগ্রামটির আপনার ভাষার স্ট্যান্ডার্ড পূর্ণসংখ্যার আকারের মানগুলির জন্য কাজ করা উচিত।

পরীক্ষার কেস

25 -> [1,1,1,-1,-1]
47 -> [1,1,-1,1,1,1]
1 -> [1]
3 -> [1,1]
1234567 -> [1,1,-1,-1,1,-1,1,1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,1,1]

সম্পর্কিত তবে বেশ আলাদা different
জিউসেপে

4
সাধারণ অ্যালগরিদম: বেস 2 তে রূপান্তর করুন, 0 এর -1 এর সাথে প্রতিস্থাপন করুন, এলএসডিটিকে সামনে রাখুন।
জোশিয়াহ উইনস্লো

ভয়েইল: আমি নিম্নগামীদের ব্যাখ্যা দিচ্ছিলাম না, আমি কেবল তাদের ভাষায় বেস-রূপান্তর কমান্ড রয়েছে এমন লোকদের জন্য একটি অ্যালগরিদমের রূপরেখা দিচ্ছিলাম।
জোশিয়ার উইনস্লো

যেহেতু আপনি সত্যই বাইনারি হওয়ার বিষয়ে তত আগ্রহী, আমরা কি যথাযথ স্থান-মানের সাথে প্যাক বিট হিসাবে মানটি আবার দুটি রাষ্ট্রের নতুন ব্যাখ্যা দিয়ে দিতে পারি? অর্থাত বৈদ্যুতিকভাবে এটি শুধু উচ্চ বা কম ভোল্টেজ (অথবা যাই হোক না কেন), এবং এটি আমার দোষ না যদি মান debuggers প্রিন্ট 0পরিবর্তে -1কম ভোল্টেজ রাষ্ট্রপক্ষে। বিটগুলি গ্রহণকারী কলকারী তাদের অর্থ কী তা জানে। (এটি একটি অ-তুচ্ছ বিট-ম্যানিপুলেশন ব্যায়াম থেকে ঘোরান ডান কেবলমাত্র তখনই কাজ যদি এটা 32 উল্লেখযোগ্য বিট আছে এখনও যেমন একটি 5-বিট সংখ্যা 5. একটি ঘোরান প্রস্থ প্রয়োজন।)
পিটার Cordes

আউটপুটটিতে কি বিভাজক অন্তর্ভুক্ত করা দরকার? কি 111-1-1জন্য একটি বৈধ আউটপুট 25?
অলিভার

উত্তর:


7

জাপট , 6 বাইট

¤é r0J

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

ব্যাখ্যা:

¤é r0J  // Test input:                  25
¤       // Binary the input:            11001
 é      // Rotate 1 chars to the right: 11100
   r0J  // Replace 0s with -1:          111-1-1

1
আহ, আবর্তন; কারণেই এটি আমার পক্ষে কাজ করছে না।
শেগি

2
আবর্তিত??? dagnabbit।
জিউসেপ

3

পাইথ ,  12  11 বাইট

|R_1.>jQ2 1

এখানে চেষ্টা করুন!


কিভাবে?

| R_1।> JQ2 1 সম্পূর্ণ প্রোগ্রাম।

      jQ2 ইনপুটটিকে বাইনারি তালিকায় রূপান্তর করুন।
     ।> 1 চক্রাকারে উপরের তালিকাটি 1 টি জায়গায় ডানদিকে ঘোরান।
| আর -1 -1 সহ বিকল্প 0
               সুস্পষ্টভাবে আউটপুট।

প্রথমে, আমরা লক্ষ্য করেছি যে টাস্কটি কেবল " 0বাইনারি লেখার ক্ষেত্রে -1s এর পরিবর্তে এবং 1 জায়গায় ডানদিকে স্থানান্তরিত"। - আমাদের ঠিক কি করা উচিত! বাইনারি রূপান্তরটি আমাদের 0গুলি এবং 1গুলিগুলির একটি তালিকা দেয় । আমাদের এখানে যা করা উচিত তা হ'ল রূপান্তরিত 0করার জন্য একটি গোলাপী উপায় খুঁজে পাওয়া -1। বিটওয়াইজ অপারেটর |(বিটওয়াইস ওআর) আমাদের বন্ধু। বাইনারি উপস্থাপনার উপরের মানচিত্রটি |এবং এর সাথে স্থানান্তরিত -1। যদি বর্তমান সংখ্যাটি হয় তবে 0তা রূপান্তরিত হয় -1


আমি মনে করি না এর চেয়ে ভাল উপায় আর নেই। ;)
জোশিয়াহ উইনস্লো

@ জোসিয়াহ উইনস্লো আমি করি ... এটি সন্ধান করার চেষ্টা করছি
মিঃ এক্সকোডার

হুঁ? অ্যালগরিদমটি সর্বোত্তম বলে মনে হচ্ছে, কারণ এটি পাইথকে আমি জানি না।
জোশিয়াহ উইনস্লো

পছন্দ করেছেন সিন্ট্যাক্টিকাল আরও ভাল উপায়, অ্যালগোরিদমিক আরও ভাল উপায় নয়।
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার এবং এখন সত্যিই আমার পক্ষে কমপক্ষে কিছু নেই।
এরিক আউটগল্ফার



2

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

অবশ্যই আরও ভাল উপায় আছে, তবে এটি আমার কাছে ...

->$a {grep {$a==[+] @^a.reverse Z+< ^∞},[X] (1,-1)xx $a.base(2).chars}

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

ব্যাখ্যা : এটি এমন একটি ফাংশন যা একটি যুক্তি ( ->$a) গ্রহণ করে। আমরা প্রথমে প্রয়োজনীয় সহগের সংখ্যা পেয়েছি ( $a.base(2).charsবেস 2 উপস্থাপনে = অক্ষরের সংখ্যা), তারপরে Xসেই বহু জোড়ের একটি কার্টেসিয়ান পণ্য ( ) তৈরি করি (1,-1)। ( [X]উপায়: এর সাথে নিম্নলিখিত তালিকাটি হ্রাস করুন X)) সুতরাং আমরা 1s এবং -1 এর সমস্ত সম্ভাব্য সংমিশ্রনের একটি তালিকা পেয়েছি। তারপরে আমরা grepপ্রদত্ত নম্বরটি এনকোড করে কেবলমাত্র তালিকা ( ) ফিল্টার করি $a। একটি মাত্র আছে, তাই আমরা সহগের সাথে একটি তালিকার একটি তালিকা পাই।

গ্রেপ ব্লক এটি করে: তার যুক্তিটিকে তালিকা হিসাবে গ্রহণ করে ( @^a) এটি বিপরীত করে এবং 0,1,2,..."বাম বিট শিফট" অপারেটরটি ব্যবহার করে অসীম তালিকার সাথে জিপ করে +<। সংক্ষিপ্ত তালিকাটি হ্রাস হওয়ার সাথে সাথে জিপিং বন্ধ হয়ে যায় (আমাদের পক্ষে ভাল!) আমরা তারপরে সমস্ত ফলাফলের সংমিশ্রণ করি এবং এটি প্রদত্ত সংখ্যার সাথে তুলনা করি। আমাদের ব্যবহার করতে হয়েছিল .reverseকারণ ওপি দাবি করে যে সহগগুলি সবচেয়ে উল্লেখযোগ্য থেকে কমপক্ষে তাৎপর্যপূর্ণভাবে ক্রমে থাকা উচিত।




1

জে, 11 বাইট

1-~2*_1|.#:

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

অ্যালগরিদমের জন্য @ জোসিয়াহ উইনস্লোকে ধন্যবাদ।

রূপান্তরকে সংক্ষিপ্ত করার বিষয়ে কোনও চিন্তাভাবনা? আমার চিন্তাভাবনা-ফিট ব্যবহার করা !.(এনভিএম, এটি কেবল রূপান্তরটির সহনশীলতা পরিবর্তন করে)।

ব্যবহার {-take 1 টি অক্ষর দ্বারা আর।

_1 1{~_1|.#:

1

জাভা 8, 101 বাইট

n->{String s=n.toString(n,2);return(s.charAt(s.length()-1)+s.replaceAll(".$","")).replace("0","-1");}

পোর্ট অফ @Oliver এর Japt উত্তর সঙ্গে কয়েক .. আরো বাইট;)

এই স্ট্রিং পদ্ধতির পরিবর্তে গাণিতিক পদ্ধতির ব্যবহার করে অবশ্যই গল্ফ করা যেতে পারে।

ব্যাখ্যা:

এখানে চেষ্টা করুন।

n->{                             // Method with Integer parameter and String return-type
  String s=n.toString(n,2);      //  Convert the Integer to a binary String
  return(s.charAt(s.length()-1)  //  Get the last character of the binary String
    +s.replaceAll(".$","")       //   + everything except the last character
   ).replace("0","-1");          //  Then replace all zeroes with -1, and return the result
}                                // End of method

1

আর , 90 88 46 বাইট

function(n)c((n%/%2^(0:log2(n))%%2)[-1],1)*2-1

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

কার্যকরী অলিভার এর এলগরিদম , কিন্তু বিপরীত ক্রম আয় ডিজিটের। যেহেতু আমরা নিশ্চিত যে nহয় না এমনকি, অন্তত গুরুত্বপূর্ণ বিট (প্রথম) সর্বদা 1, তাই আমরা এটি অপসারণ এবং একটি সংযোজন 1জন্য রোমশ করার জন্য আর ধন্যবাদ অনুকরণ ঘূর্ণন শেষ আমাকে পেয়ে আমার গণিত সমাধানের জন্য

কেবলমাত্র নির্বাণ rev( )ফুটার মধ্যে ফাংশান কল প্রায় একই আদেশ মান ফেরত পাঠাবেন।

আসল উত্তর, ৮৮ বাইট:

function(n,b=2^(0:log2(n)))(m=t(t(expand.grid(rep(list(c(-1,1)),sum(b|1))))))[m%*%b==n,]

বেনামে ফাংশন; সংযুক্ত কলামের নাম সহ বিপরীত ক্রমে মানগুলি প্রদান করে ।

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

ব্যাখ্যা:

function(n){
 b <- 2^(0:log2(n))         # powers of 2 less than n
 m <- expand.grid(rep(list(c(-1,1)),sum(b|1))) # all combinations of -1,1 at each position in b, as data frame
 m <- t(t(m))               # convert to matrix
 idx <- m%*%b==n            # rows where the matrix product is `n`
 m[idx,]                    # return those rows
}

আমি আউটপুটটিকে বৈধ বলে বিবেচনা করব না; নিশ্চিতকরণের জন্য চ্যালেঞ্জ লেখককে জিজ্ঞাসা করার পরামর্শ দিন।
শেগি

@ শেগি বিপরীত আদেশটি স্পষ্টভাবে অনুমোদিত: from the most significant digit to the least significant digit (or in reversed order).তাই এটি পুরোপুরি গ্রহণযোগ্য হওয়া উচিত।
জিউসেপে

1
বিপরীত ক্রম , বিপরীত লক্ষণ নয়। অর্থ বৈধ আউটপুট 25, উদাহরণস্বরূপ, হতে হবে [1,1,1,-1,-1]বা [-1,-1,1,1,1]
শেগি

1
@ শেগি আহ, আপনি ঠিক বলেছেন, আমি গণিতকে ভুল করেছি! 2*bits - 1পরিবর্তে হওয়া উচিত 1-2*bits। ধন্যবাদ.
জিউসেপে




0

গল্ফস্ক্রিপ্ট, 14 13 14 বাইট

-1 বাইট কারণ আমি ভুলে গিয়েছিলাম % +1 বাইট কারণ আমিও ভুলে গেছি ইনপুট একটি স্ট্রিং।

~2base{.+(}%)\

1
আপনি যদি ধরে নিতে চলেছেন যে ইনপুটটি পূর্ণসংখ্যার হিসাবে আসে তবে {}এটির একটি ব্লক করার জন্য আপনার কোডটি মোড়ানো উচিত । সম্পূর্ণ প্রোগ্রামগুলি কেবল স্ট্রিং হিসাবে ইনপুট পেতে পারে।
পিটার টেলর

উম ... কি? আমি বোঝাতে চাইছি, সংখ্যাটি একটি সংখ্যার স্ট্রিংয়ের পরিবর্তে পূর্ণসংখ্যা হিসাবে ধাক্কা দেওয়া হচ্ছে।
জোশিয়াহ উইনস্লো

সেক্ষেত্রে আপনার উত্তরটি সম্পূর্ণ প্রোগ্রাম নয় এবং তাই অবশ্যই একটি "ফাংশন" হওয়া উচিত , বা গল্ফস্ক্রিপ্টের ক্ষেত্রে একটি ব্লক। সুতরাং এটি {2base{.+(}%\}15 বাইট জন্য। একইভাবে আপনার সিজেএম উত্তর।
পিটার টেলর

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

গল্ফস্ক্রিপ্টের সাথে আমার কিছুটা পরিচিতি রয়েছে । ( এবং সিজাম ) আপনি যদি দাবি করতে চান যে এটি একটি সম্পূর্ণ প্রোগ্রাম আপনার সাথে এটির উপসর্গ করা দরকার ~
পিটার টেলর 21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.