সংখ্যাগুলিকে বাইনারিতে রূপান্তর করুন ... তবে আপনাকে পাশাপাশি দ্বিগুণ ব্যবহার করার অনুমতি দেওয়া হচ্ছে


20

এই নম্বরফিলি ভিডিওতে উল্লিখিত "বাইনারি, তবে দ্বিগুণ" সংখ্যার ভিত্তিতে , একটি ফাংশন লিখুন যা ইনপুট হিসাবে একক সংখ্যা নেয় এবং "বাইনারি" সিস্টেমে সেই সংখ্যার সমস্ত প্রকারভেদ আউটপুট করে যেখানে দু'জনের অনুমতি রয়েছে।

বিধি

  • কোডটি অবশ্যই একটি ফাংশন / পদ্ধতি হতে হবে, পুরো প্রোগ্রাম নয়
  • ইনপুটটি একটি পূর্ণসংখ্যা যা ফাংশনের একমাত্র পরামিতি হিসাবে পাস হয়
  • আউটপুট হ'ল ইনপুট নম্বরটির সমস্ত বৈধ প্রকরণ যা "বাইনারি, তবে দ্বিগুণ" স্বরলিপিতে রূপান্তরিত হয়
  • আউটপুট হ'ল ফাংশনটির রিটার্ন মান, তবে যতক্ষণ না এটি স্পষ্ট থাকে ততক্ষণ যেকোন বিন্যাসে থাকতে পারে (যেমন, 3 ইনস, 3 স্ট্রিং, কমা / স্পেস ডিলিমিটেড স্ট্রিং, ইনটস অ্যারে ইত্যাদি), ক্রমটি গুরুত্বহীন
  • ফলাফল অর্জনের জন্য কোনও ভাষা অন্তর্নির্মিত ফাংশন ধারণ করার সম্ভাবনা কম ঘটলে, এটি অনুমোদিত নয়
  • বাইটের মধ্যে সংক্ষিপ্ততম কোডটি বিজয়ী

আউটপুট ব্যাখ্যা

উদাহরণস্বরূপ, আপনি যদি নম্বরটি পাস করে থাকেন তবে আপনি 9এটিকে বাইনারি হিসাবে রূপান্তর করতে পারেন 1001, তবে 2আপনি প্রতিটি পজিশনে অনুমতি দিলে আপনি এটিকে 201(যেমন 2*4 + 0*2 + 1*1), বা 121(যেমন 1*4 + 2*2 + 1*1) হিসাবে এই টেবিলের মতো দেখিয়ে লিখতে পারেন :

+----+----+----+----+
| 8s | 4s | 2s | 1s |
+----+----+----+----+
|  1 |  0 |  0 |  1 |
|  0 |  2 |  0 |  1 |
|  0 |  1 |  2 |  1 |
+----+----+----+----+

সুতরাং, যদি পাস হয়ে যায় তবে 9আপনার ফাংশনটিতে তিনটি সংখ্যা ফিরে আসা দরকার 1001, 201এবং 121

বিন্যাস শৃঙ্খলা এতক্ষণ এটা সুস্পষ্ট যেমন (অর্থাত অপ্রাসঙ্গিক হয়, [121,201,1001], "0201 0121 1001", ("1001","121","201")বৈধ ফলাফল নেই যখন একটি ইনপুট দেওয়া 9)।

উদাহরণ

  • 2 => 10, 2
  • 9 => 1001, 201, 121
  • 10 => 1010, 210, 202, 1002, 122
  • 23 => 2111, 10111
  • 37 => 100101, 20101, 100021, 20021, 12101, 12021, 11221


1
দুই? বাইনারি? এই কোয়ান্টাম কম্পিউটিং?
ম্যাথু রোহ

উত্তর:


10

গল্ফস্ক্রিপ্ট (25 বাইট) / সিজেম ( 19 17 বাইট)

GolfScript:

{:^.*,{3base}%{2base^=},}

এটি একটি বেনামে ফাংশন তৈরি করে (বেনাম ফাংশনগুলির অনুমতি সম্পর্কে মেটা আলোচনা দেখুন )।

অনলাইন ডেমো

সিজেমের একটি সরল অনুবাদ হ'ল (বেশ কয়েকটি চরিত্রের শেভ করার জন্য মার্টিন বাটনারকে ধন্যবাদ জানাই )

{:X_*,3fb{2bX=},}

ব্যবচ্ছেদ

{             # Function boilerplate
  :^          # Store parameter as variable ^
  .*          # Square parameter - see detailed explanation below
  ,{3base}%   # Produce an array of 0 to ^*^-1 in ternary
  {2base^=},  # Filter to those which evaluate to ^ in binary
}

স্কোয়ারিং অপারেশনের কারণ হ'ল আমাদের বৃহত্তর সম্ভাব্য মান পর্যন্ত পুনরাবৃত্তি করতে হবে যার বাইনারিতে ব্যাখ্যা হওয়া ত্রৈমাসিক উপস্থাপনা সমান ^। যেহেতু 2 = 10, "সাধারণ" বাইনারি প্রতিনিধিত্ব ^হ'ল এটি গুরুত্বপূর্ণ। যদি আমরা এটিকে ত্রৈমাস্ত্রিতে রূপান্তর করি তবে আমরা দেখতে পাই যে "সবচেয়ে খারাপ" কেস 2 এর শক্তি ln 3/ln 2 ~= 1.585


আমি বাজি ধরলাম একটি সিজেএম অনুবাদ অনেক ছোট হবে।
অপ্টিমাইজার

1
@ অপ্টিমাইজার এগিয়ে যান ;-)
জন ডিভোরাক

GolfScript? মানুষ আমি এমন
নুব

8

পাইথন 2 (59 বাইট)

S=lambda n,B="":[B][n:]or~n%2*S(n/2-1,"2"+B)+S(n/2,`n&1`+B)

(আড্ডায় সহায়তা করার জন্য @grc, @xnor এবং @ পিটারটেলরকে অনেক ধন্যবাদ)

সাধারণ পুনরাবৃত্তি, সাথে কল করুন S(23)বা অনুরূপ।

ব্যাখ্যা

সাধারণ ধারণাটি হ'ল যদি nএর বাইনারি সম্প্রসারণ a এ শেষ হয় 1তবে কোনও সিউডো-বাইনারি ("বাইনারি, তবে দ্বিগুণ") এর প্রসারণও অবশ্যই a এর সাথে শেষ হওয়া উচিত 1। অন্যথায় এটি 0বা দিয়ে শেষ হতে পারে 2

সুতরাং আমরা শেষ বিট তাকান n, বিভাজন এবং সেই অনুযায়ী শাখা।

ব্যবচ্ছেদ

S=lambda n,B="":           # Lambda expression
[B][n:]or                  # Short circuit, return [B] if n==0 else what follows
~n%2*                      # Keep next list result if n is even else turn into []
S(n/2-1,"2"+B)             # Add a "2" to B, recurse
+
S(n/2,`n&1`+B)             # Add "0" or "1" to B depending on n's last bit, recurse

ভেরিয়েবল:

  • n: আমরা সিউডো-বাইনারি সম্প্রসারণের সংখ্যাটি খুঁজতে চাই
  • B: একটি সিউডো-বাইনারি স্ট্রিং ডান থেকে বামে নির্মিত হচ্ছে

5

বাশ + কোর্টিলস, 77

f()(seq `dc -e2o$1p`|sed '/[3-9]/d;s/.*/&n9P2i&pAi/'|dc|grep -Po ".*(?= $1)")

( TABএটি গ্রেপ এক্সপ্রেশনের একটি চরিত্র))

এটি এই নিয়মটি কিছুটা নমন করছে:

"ফলাফল অর্জনের জন্য কোনও ভাষা অন্তর্নির্মিত ফাংশন ধারণ করার সম্ভাবনা কম ঘটলে, এটি অনুমোদিত নয়"

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

seqদশমিক হিসাবে পার্স করা, এন এর মান বাইনারি উপস্থাপনার অবধি সমস্ত দশমিক সংখ্যার একটি তালিকা তৈরি করে। তারপরে সমস্ত সংখ্যা যাতে {0,1,2। ব্যতীত অন্য কিছু থাকে তা ফিল্টার করে আউট করা হয়। তারপরে dcবাকী সংখ্যাগুলি বাইনারি হিসাবে বিশ্লেষণ করে দেখতে কোনটি n এ ফিরে যায়।

বাশ ফাংশনগুলি কেবল "রিটার্ন" স্কেলারের পূর্ণসংখ্যার 0-255 করতে পারে। সুতরাং আমি তালিকাটি মুদ্রণের স্বাধীনতাকে আমার "ফিরতে" যাওয়ার উপায় হিসাবে STDOUT এ নিচ্ছি। এটি শেল স্ক্রিপ্টগুলির জন্য ইডিয়োমেটিক।

আউটপুট:

$ f 2
2   
10  
$ f 9
121 
201 
1001    
$

4

হাস্কেল, ৮২

t n=[dropWhile(==0)s|s<-mapM(\_->[0..2])[0..n],n==sum[2^(n-i)*v|(i,v)<-zip[0..]s]]

এটি কেবল একটি নিষ্ঠুর শক্তি সমাধান। এটি খুব অদক্ষ, কারণ এটি 3 poss n সম্ভাবনার মধ্য দিয়ে ক্রাচ হওয়ার আশা করা হচ্ছে।


3

জেলি , 10 বাইট, ভাষা পোস্টডেটস চ্যালেঞ্জ

ṗ@3Ḷ¤Ḅ=¥Ðf

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

ইনপুট সমান একাধিক হাইপারবিট পর্যন্ত একটি ব্রাশফোর্স সমাধান (এই ফর্ম্যাটটি "হাইপার্বাইনারি" হিসাবে পরিচিত)। যেমন, এটি অবিশ্বাস্যভাবে অক্ষম, ও (3 এন ) এ চলছে ।

ব্যাখ্যা

ṗ@3Ḷ¤Ḅ=¥Ðf
ṗ@            Construct all lists with the given length, and elements taken from
  3Ḷ¤         the list [0,1,2]
        Ðf    then take only those elements which
     Ḅ=¥      when interpreted as binary, equal {the original number}

2

পিএইচপি, 138 বাইট

function p($v,$i=0,$r=""){global$a;if($v==0)$a[]=$r?:0;elseif($v>0)for(;$l<3;)p($v-2**$i*$l,$i+1,+$l++.$r);}p($argv[1]);echo join(",",$a);

ভাঙ্গন

function p($v,$i=0,$r=""){
    global$a;
    if($v==0)$a[]=$r?:0;  # fill result array
    elseif($v>0) # make permutations
        for(;$l<3;)
            p($v-2**$i*$l,$i+1,+$l++.$r); #recursive
}
p($argv[1]);
echo join(",",$a); # Output


1

কে, 21 বাইট

পিটার টেলরের গল্ফস্ক্রিপ্ট উত্তরের মতো একই পদ্ধতি ব্যবহার করে

{X@&x=2/:'X:3\:'!x*x}

উদাহরণ:

k) {X@&x=2/:'X:3\:'!x*x}9
(1 2 1;2 0 1;1 0 0 1)
k) {X@&x=2/:'X:3\:'!x*x}10
(1 2 2;2 0 2;2 1 0;1 0 0 2;1 0 1 0)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.