জটিল বাইনারি নম্বর


36

আসুন ইতিবাচক পূর্ণসংখ্যার থেকে গাউসিয়ান পূর্ণসংখ্যার কাছে একটি সরল, লক্ষ্যমাত্রার ম্যাপিং তৈরি করি যা জটিল সংখ্যা যেখানে আসল এবং কল্পিত অংশগুলি পূর্ণসংখ্যা হয়।

একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে, উদাহরণস্বরূপ 4538, এটি কোনও অগ্রণী ব্যক্তির সাথে বাইনারে প্রকাশ করুন 0:

4538 base 10 = 1000110111010 base 2

চলার যেকোনটি সরান 0:

100011011101

এক বা একাধিকের যে কোনও রান 0একক দিয়ে প্রতিস্থাপন করুন +:

1+11+111+1

সবগুলি 1এর সাথে প্রতিস্থাপন করুন i:

i+ii+iii+i

ফলস্বরূপ জটিল এক্সপ্রেশন মূল্যায়ন এবং সরলিকৃত গাউসিয়ান পূর্ণসংখ্যা আউটপুট:

i+ii+iii+i = i+i*i+i*i*i+i = 2i+i^2+i^3 = 2i+(-1)+(-i) = -1+i

আউটপুটটি traditionalতিহ্যগত গাণিতিক উপায়ে প্রকাশ করা যেতে পারে, বা বাস্তব এবং জটিল অংশগুলির জন্য দুটি পৃথক পূর্ণসংখ্যা হিসাবে দেওয়া যেতে পারে। জন্য 4538উদাহরণস্বরূপ, এর মধ্যে যে কোনো জরিমানা করা হবে:

-1+i
i-1
-1+1i
(-1, 1)
-1 1
-1\n1

মত ইনপুট জন্য 29যেমন mathy ফরম্যাট আউটপুট 0, 0iবা 0+0iসব জরিমানা হয়।

ব্যবহার jপরিবর্তে (বা অন্য কিছু) iযে যদি আপনার ভাষায় জন্য আরো স্বাভাবিক জরিমানা।

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


শিরোনাম থেকে আমি ভেবেছিলাম যে চ্যালেঞ্জটি 4+2j100+10j
বাইনারিগুলির

উত্তর:


22

এমএটিএল , 7 বাইট

BJ*Y'^s

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

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

4538উদাহরণস্বরূপ ইনপুট বিবেচনা করুন ।

B     % Implicit input. Convert to binary
      % STACK: [1 0 0 0 1 1 0 1 1 1 0 1 0]
J*    % Multiply by 1i
      % STACK: [1i 0 0 0 1i 1i 0 1i 1i 1i 0 1i 0]
Y'    % Run-length encoding
      % STACK: [1i 0 1i 0 1i 0 1i 0], [1 3 2 1 3 1 1 1]
^     % Power, element-wise
      % STACK: [1i 0 -1 0 -1i 0 1i 0]
s     % Sum of array. Implicit display
      % STACK: -1+1i

2
এমএটিএল-তে 7 বাইট, এবং আমি ম্যাটল্যাব-তে 58 টির সেরাটি পেতে পারি ... আপনি সেখানে খুব সুন্দর একটি ভাষা তৈরি করেছেন! =)
স্টিভি গ্রিফিন

1
গ্রাফিং বা প্লট করার ক্ষেত্রে @ স্টিভি গ্রিফিন সহজেই শোতে সেরা, সম্ভবত ম্যাট্রিক্স গাণিতিকের জন্যও আমি তাঁকে পোস্ট দেখেছি এমন দুর্দান্ত উত্তরগুলি থেকে।
ম্যাজিক অক্টোপাস উরন

13

জেলি , 8 বাইট

BŒgaıP€S

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

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

BŒgaıP€S  Main link. Argument: n (integer)

B         Convert to binary.
          If n = 4538, this yields [1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0].
 Œg       Group equal elements.
          This yields [[1], [0, 0, 0], [1, 1], [0], [1, 1, 1], [0], [1], [0]].
   aı     Logical AND with the imaginary unit.
          This yields [[ı], [0, 0, 0], [ı, ı], [0], [ı, ı, ı], [0], [ı], [0]].
     P€   Product each.
          This yields [ı, 0, -1, 0, -ı, 0, ı, 0].
       S  Sum.
          This yields -1+ı.

10

পাইথন 2, 53 বাইট

f=lambda n,k=0:(n and f(n/2,n%2*(k or 1)*1j))+~n%2*k

এটি গল্ফ করার চেষ্টা করা হয়েছে এবং এটি গল্ফযোগ্য বলে মনে হচ্ছে তবে আমি এটিএমএর বাইরে ...


1
এটি (k or 1)সর্বোত্তম বলে মনে হচ্ছে না, তবে কেবলমাত্র আমি যা ভাবতে পারি তা হ'ল (k+0**k)...
ETH প্রোডাকশনগুলি

@ এথ প্রডাকশনগুলি আমার চিন্তাভাবনাগুলি হুবহু, তবে দুর্ভাগ্যক্রমে 0**kk
জটিলগুলির

6

গণিত, 44 38 বাইট

Tr[1##&@@@Split[I*#~IntegerDigits~2]]&

ব্যাখ্যা

#~IntegerDigits~2

ইনপুটটি বেস 2 তে রূপান্তর করুন ( 4538হয়ে যায় {1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0})

I*

দ্বারা গুন I( {1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0}হয়ে {I, 0, 0, 0, I, I, 0, I, I, I, 0, I, 0})

Split

রান দ্বারা বিভক্ত ( {I, 0, 0, 0, I, I, 0, I, I, I, 0, I, 0}হয়ে {{I}, {0, 0, 0}, {I, I}, {0}, {I, I, I}, {0}, {I}, {0}})

1##&@@@ ...

২ স্তরে পণ্যটি সন্ধান করুন ( {{I}, {0, 0, 0}, {I, I}, {0}, {I, I, I}, {0}, {I}, {0}}হয়ে ওঠে {I, 0, -1, 0, -I, 0, I, 0})

Tr

ফলাফলের সমষ্টি করুন। ( {I, 0, -1, 0, -I, 0, I, 0}হয়ে -1 + I)


বিয়োগ 1 বাইট:Tr[Times@@@(I*Split@RealDigits[#,2][[1]])]&
মার্টিন

1
@ মার্টিন ওয়েল, আমি আপনার সংখ্যাটি Iআগে গুণিত করার ব্যবহারটি ব্যবহার করেছিলাম , তবে IntegerDigitsসংক্ষিপ্ত হয়ে শেষ করেছি।
जंगহওয়ান মিন

হ্যাঁ - অনেক ভাল :)
মার্টিন


5

জাভাস্ক্রিপ্ট (ES6), 67 64 বাইট

f=(n,q=0,a=[0,0])=>q|n?f(n/2,n&1?q+1:q&&0*(a[q&1]+=1-(q&2)),a):a
<input oninput="O.innerHTML=f(this.value)" type="number" step=1 min=0 value="4538">
<pre id=O></pre>

2-উপাদান অ্যারের হিসাবে আউটপুট।

ব্যাখ্যা

যেহেতু জাভাস্ক্রিপ্টের কাল্পনিক সংখ্যা নেই, তাই আমাদের পৃথক ভেরিয়েবলের আসল এবং কল্পিত অংশগুলির ট্র্যাক রাখতে হবে। এটি করার সবচেয়ে সহজ উপায়টি আসল অংশটি প্রথম সহ একক অ্যারেতে। আমি যেমন প্রতিনিধিত্ব করা হয় [0,1] , আমি 2 (অথবা -1 ) হিসেবে [-1,0] , আমি 3 (অথবা -i ) হিসাবে [0, -1] , এবং আমি 4 (অথবা 1 ) হিসাবে [1 , 0]

প্রথমত, আমরা বারবার সংখ্যাটিকে 2 দ্বারা বিভক্ত করে প্রতিটি বাইনারি উপস্থাপনায় প্রতিটি রান সংগ্রহ করি। প্রত্যেকটি রান এন বেশী অনুরূপ আমি এন । এটি দ্বি-আইটেমের অ্যারেতে সূচি n এবং 1 এ আইটেমটিতে 1 - (n & 2) যুক্ত করার সাথে সম্পর্কিত । সুতরাং আমরা কি।

আমার সম্ভবত আরও ব্যাখ্যা যুক্ত করা উচিত, তবে অন্য কী ব্যাখ্যা করার দরকার তা আমি ভাবতে পারি না। আপনার যে কোনও প্রশ্ন থাকতে দ্বিধা বোধ করবেন।


5

পাইথন, 199 129 124 116 94 90 71 63 61 বাইট

print sum(1j**len(s)for s in bin(input())[2:].split('0')if s)

ইনপুটটি কেবলমাত্র সংখ্যা।
আউটপুট ফর্ম্যাটে রয়েছে (a+bj), যেখানে jকল্পিত ইউনিট। 0jপরিবর্তে আউটপুট হবে(0+0j)

প্রথমে বাইনারি রূপান্তর করুন। '0b'বন্ধ কাটা । পেছনের শূন্যগুলি মেরে ফেলুন। সীমানা হিসাবে শূন্যের একটি ব্লক ব্যবহার করে বিভক্ত করুন। প্রতিটি ব্লকের মানচিত্র 1j ** len। তারপরে, পুরো জিনিসটির যোগফল নিন।

প্লাসে রূপান্তর না করে -70 বাইট
-5 বাইট রেজেেক্স সংক্ষিপ্ত।
-8 বাইট দুটি অপ্রয়োজনীয় ভেরিয়েবলগুলি থেকে মুক্তি পেয়ে কেবল একবার ডাকা হয়েছিল। আমার অদ্ভুত জিনিসের পরিবর্তে জটিল সংখ্যা ব্যবহার করে
-22 বাইট আমাকে জটিল সংখ্যা সম্পর্কে অবহিত করার জন্য @ ডেনিসের জবাবকে ধন্যবাদ!
-4 বাইটগুলি বুঝতে পেরে এটি mapআর কিছু বাদ দিয়ে তালিকার বোঝাপড়া করার একটি অভিনব উপায়।
-19 বাইটগুলি রেগেজ সহ ত্রুটিগুলি j ** 0এড়াতে এবং এড়ানো থেকে সামান্য আরকেন পদ্ধতিতে স্যুইচ করে । @ গ্রিফিনের মন্তব্যে অনুপ্রাণিত ধন্যবাদ! :)
-8 বাইট সরিয়ে ifশেষ অংশ।
-২ বাইট পরিবর্তে জেনারেটর এক্সপ্রেশন হিসাবে বর্গাকার বন্ধনীগুলি সরিয়ে 2 বাইট সংরক্ষণের জন্য @ গ্রিফিনকে ধন্যবাদ!


আমি বেশ কিছু অনুরূপ কিছু পেয়েছি তাই আলাদা উত্তর পোস্ট করব না, যদিও কিছুটা খাটোsum(1j**x.count('1')for x in bin(input()).split('0')if x)
গ্রিফিন

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

@ গ্রিফিন আমি আর একটি সমাধান পেয়েছি 1যা দৈর্ঘ্যের চেয়ে গণনার পরিবর্তে আপনার সমাধানের সমান দৈর্ঘ্যের, এটি 0xঅংশটিকে প্রথমে সামনে নিয়ে যায় । ifশেষ পর্যন্ত সরানোর ধারণার জন্য ধন্যবাদ ; আমি জানি না যে অন্যথায় কাজ করে!
হাইপারনিউট্রিনো

আপনার তালিকা বোঝার দরকার নেই। বর্গক্ষেত্র বন্ধনীগুলি এটি একটি জেনারেটর এক্সপ্রেশন হিসাবে সরান
গ্রিফিন

@ গ্রিফিন ওহ। ঠিক আছে, ধন্যবাদ! আমি মনে রাখব যে ভবিষ্যতের গল্ফিংয়ের জন্য
হাইপারনিউটারিনো

4

ম্যাটল্যাব, 58 বাইট

@(x)eval([strrep(strrep(dec2bin(x),48,43),49,'i*1'),'.0'])

dec2bin(x) % converts the decimal value to a binary string of 1s and 0s.
strrep(dec2bin(x),48,43) % Substitutes ASCII character 48 with 43 (0s become +)
strrep(___,49,'i*1')     % Substitutes ASCII character 49 with 'i*1'
                         % 1s become 'i*1' (this is the gem)
eval([___,'.0']          % Appends .0 in the end and evaluates the expression.   

285প্রক্রিয়াটি বর্ণনা করার জন্য ব্যবহার করা যাক :

temp1 = dec2bin(285)
      = 100011101

temp2 = strrep(temp1,48,43)
      = 1+++111+1

সৌভাগ্য যে 1+++1ঠিক যেমন আচরণ করবে 1+1, মতলব যাতে উপরে মূল্যায়ণ হবে: 1+111+1

temp3 = strrep(temp2,49,'i*1')
      = i*1+++i*1i*1i*1+i*1

এখন এই strrepকলটিই আসল মণি! i*1জন্য serোকানোর মাধ্যমে 1আমরা সত্যিই সুন্দর কিছু পেতে। যদি কেবল একটি থাকে 1, আমরা কেবল i*1যা পাই তা পাওয়া যায় i। একাধিক তারপর আরো হন i*1পুনরাবৃত্তি পরার এবং একটি ক্রম মধ্যে ঘনিভূত: i*1i*1i*1i*1। যেহেতু i==1iম্যাটল্যাব এবং 1i*1==iএই কেবল হল: i*i*i*i

temp4 = [temp3,'.0']
      = i*1+++i*1i*1i*1+i*1.0

সংযোজন .0এখানে অপ্রয়োজনীয় বলে মনে হয় তবে এর শেষ অক্ষরটি temp3যদি একটি হয় তবে এটির প্রয়োজন +। আমরা কেবল একটি শূন্য যুক্ত করতে পারি না, যেহেতু এটি i*10উপরের ক্ষেত্রে দেয় এবং ফলস্বরূপ ভুল ফলাফল।

এবং পরিশেষে:

eval(temp4)
0.0000 + 1.0000i

এটি বিভিন্ন কারণে অষ্টাভে কাজ করে না। strrepASCII- মানগুলি ইনপুট হিসাবে নিতে পারে না, এটির জন্য প্রকৃত অক্ষর ( '0'পরিবর্তে 48) প্রয়োজন needs এছাড়াও, +++কেবল +অক্টাভেতে মূল্যায়ন করে না , কারণ এটি বৃদ্ধি / হ্রাস শর্টকাট x++এবং x--


1
সর্বদা ব্যবহারের জন্য +1 eval:-P আপনি 1iপরিবর্তে ব্যবহার করতে পারবেন না 1*i?
লুইস মেন্ডো

1
ওহ আপনি এটি অন্যভাবে ব্যবহার করছেন। খুব চালাক!
লুইস মেন্ডো

ধন্যবাদ :-) আমি অবশ্যই স্বীকার করব, আমি এই i*1অংশটি নিয়ে বেশ সন্তুষ্ট ছিলাম ...
স্টিভি গ্রিফিন


2

গণিত, 84 বাইট

ToExpression[#~IntegerString~2~StringTrim~"0"~StringReplace~{"0"..->"+","1"->"I "}]&

বেনামে ফাংশন। ইনপুট হিসাবে একটি সংখ্যা নেয় এবং আউটপুট হিসাবে একটি জটিল নম্বর প্রদান করে।


6
বাহ, আমি অবাক হয়েছি যে ম্যাথামেটিকায় এর জন্য বিল্ট-ইন নেই!
হাইপারনিউটারিনো

2

গণিত, 75 বাইট

ToExpression[#~IntegerString~2~StringReplace~{"1"->"I ","0"..->"+"}<>"-0"]&

23 মিনিট আগে লেজিওনম্যামাল 978 পোস্ট করা প্রায় একই সমাধানটি স্বাধীনভাবে নিয়ে এসেছিল! (-1 এর বর্গমূলের জন্য ম্যাথমেটিকার অভ্যন্তরীণ প্রতীক) এর 1সাথে প্রতিস্থাপন I কাজ করে কারণ স্পেসগুলি প্রতিবেশী অভিব্যক্তিগুলির গুণকের হিসাবে বিবেচিত হয়। অন্যান্য সমাধানে আমি যে স্থানটি সংরক্ষণ করেছি, যার প্রয়োজনটি এড়িয়ে চলার StringTrimদ্বারা সর্বদা সংযোজন করা হয় -0: বাইনারি সংখ্যাটি যদি শেষ হয় 1, তবে এই অভিব্যক্তিটি শেষ হয় ...I-0যার মধ্যে এটির মান প্রভাবিত করে না; যখন বাইনারি সংখ্যাটি '0' এ শেষ হয়, তবে এই অভিব্যক্তিটি শেষ হয় ...+-0যা "নেতিবাচক 0 যোগ করুন" হিসাবে বিভক্ত হয় এবং এভাবে পিছনের চিহ্ন চিহ্ন থেকে মুক্তি পায়।


2

মতলব, 99 বাইট

function c=z(b)
c=0;b=strsplit(dec2bin(b),'0');for j=1:numel(b)-isempty(b{end});c=c+i^nnz(b{j});end

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

z(656) = 3i
z(172) = -1 + 2i
z(707) = -2 + i
z(32)  = i
z(277) = 4i

2

হাস্কেল, 102 91 89 87 বাইট

0%a=a
n%c@[a,b]|odd n=div n 2%[-b,a]|d<-div n 2=zipWith(+)c$d%[mod d 2,0]
(%[0,0]).(*2)

বারবার দুটি দিয়ে ভাগ করে বিটটি পরীক্ষা করে। i^(number of odds)যেখানে a+b*iএনকোড করা হয়েছে [a,b]এবং *iসেখানে [a,b]↦[-b,a](90 ডিগ্রি দ্বারা আবর্তন) এর সঞ্চালক রাখে । প্রাথমিকটি (*2)হ'ল প্রথম বিটের জন্য অনুসন্ধান এড়ানো।

ব্যবহার (উদাহরণগুলির জন্য @ ওউেনমর্গানকে ধন্যবাদ):

(%[0,0]).(*2)<$>[656,172,707,32,277]
[[0,3],[-1,2],[-2,1],[0,1],[0,4]]

1

জাভা, 172 বাইট

l->{int i=0,j=i;for(String x:l.toString(2).split("0")){int a=x.length();j+=a&1>0?(a&3>2?(a-3)/-4+1:(a-3)/4+1):0;i+=a&1<1?(a&3>1?(a-3)/4+1:(a-3)/-4+1):0;}return i+"|"j+"i";}

1

ক্লোজার, 183 বাইট

#(loop[x(clojure.string/split(Integer/toString % 2)#"0+")y[0 0]a 0](if(= a(count x))y(recur x(let[z([[1 0][0 1][-1 0][0 -1]](mod(count(x a))4))][(+(y 0)(z 0))(+(y 1)(z 1))])(inc a))))

আমাকে কি এটি করার অনুমতি দেওয়া হচ্ছে?

ফাংশনটি এর মতো ব্যবহার করুন:

(#(...) {num}) -> (Wrap the # function in brackets first!)

1

আসলে , 35 বাইট

├'0' aÆô' @s"j+"j'jo`"1j*1"'1τ(Æ`Y≡

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

ব্যাখ্যা:

├'0' aÆô' @s"j+"j'jo`"1j*1"'1τ(Æ`Y≡
├                                    binary representation of input
 '0' aÆ                              replace 0s with spaces
       ô                             trim leading and trailing spaces
        ' @s                         split on spaces
            "j+"j                    join with "j+"
                 'jo                 append "j"
                    `"1j*1"'1τ(Æ`Y   do until the string stops changing (fixed-point combinator):
                     "1j*1"'1τ(Æ       replace "11" with "1j*1"
                                  ≡  evaluate the resulting string to simplify it

মোটামুটি সমকক্ষ পাইথন 3 কোড:

a='j+'.join(bin(eval(input()))[2:].replace('0',' ').strip().split())+'j'
b=0
while a!=b:b,a=a,a.replace("11","1j*1")
print(eval(a))

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


'0 এর সাথে বিভক্ত হওয়া '0@sএবং ``░কোনও পিছনে থাকা খালি স্ট্রিংগুলি ছাঁটাতে ব্যবহার করা আপনাকে চারটি বাইট সংরক্ষণ করতে হবে।
শার্লক

1

জেলি , 10 বাইট

এটি ডেনিসের জেলি জবাবের চেয়ে ভাল নয়, তবে আমি যাইহোক জেলি উত্তরটিতে আমার হাতটি চেষ্টা করতে চেয়েছিলাম। গল্ফিং পরামর্শ স্বাগত! এটি অনলাইন চেষ্টা করুন!

BŒrm2Ṫ€ı*S

Ungolfing

BŒrm2Ṫ€ı*S   Main link. Argument: n (integer)

B            Convert n to binary.
 Œr          Run-length encode the binary list.
   m2        Every 2nd element of the run_length encoding, getting only the runs of 1s.
     Ṫ€      Tail each, getting only the lengths of the runs.
       ı*    The imaginary unit raised to the power of each run (as * is vectorized).
         S   Sum it all into one complex number.

উপরের লিঙ্কে ইনপুট 1 রিটার্ন 1 জ 1 ইনপুট 2 রিটার্ন 1 জে .... এটি কি ঠিক?
রোজলুপ

@ রোসলুপ হ্যাঁ, ঠিক আছে? যেহেতু আমরা 0 এর trailing অপসারণ, 1 => 1 => 1jসমতূল্য 2 => 10 => 1 => 1j
শার্লক

1

আসলে , 15 বাইট

গল্ফিং পরামর্শ স্বাগত! এটি অনলাইন চেষ্টা করুন!

├'0@s``░`lïⁿ`MΣ

Ungolfing:

         Implicit input n.
├        Convert n to binary.
'0@s     Split by '0's.
``░      Filter out non-truthy values.
`...`M   Map over the filtered result, a list of runs of '1's.
  l        Yield the length of the run of '1's.
  ïⁿ       Yield the imaginary unit to the power of that length.
Σ        Sum all of this into one complex number.

0

এক্সিয়াম, 140, 131, 118 108 বাইট tes

b(x)==(s:=0;repeat(x=0=>break;r:=x rem 2;repeat(x rem 2=1=>(r:=r*%i;x:=x quo 2);break);s:=s+r;x:=x quo 2);s)

% আমি কাল্পনিক ব্যয়বহুল ng অসম্পূর্ণ

sb(x:NNI):Complex INT==
  r:Complex INT;s:Complex INT:=0
  repeat
    x=0=>break
    r:=x rem 2
    repeat
       x rem 2=1=>(r:=r*%i;x:=x quo 2)
       break
    s:=s+r
    x:=x quo 2
  s

ফলাফল

(3) -> b 4538
   The type of the local variable r has changed in the computation.
   We will attempt to interpret the code.
   (3)  - 1 + %i
                                                    Type: Complex Integer
(4) -> b 29
   (4)  0
                                                    Type: Complex Integer
(5) -> sb 299898979798233333333333333339188888888888888888222
   Compiling function sb with type NonNegativeInteger -> Complex Integer
   (5)  - 7 + 12%i
                                                    Type: Complex Integer
(6) -> b 299898979798233333333333333339188888888888888888222
   (6)  - 7 + 12%i
                                                    Type: Complex Integer

0

পার্ল 6 ,  40  46 বাইট

আমি মোটামুটি দ্রুত এটি নিয়ে এসেছি

*.base(2).comb(/1+/).map(i***.chars).sum

দুর্ভাগ্যবশত এটা বর্তমানে ভুল Rakudo উপর বাস্তবায়ন MoarVM
say i ** 3; # -1.83697019872103e-16-1i

সুতরাং আমাকে পরবর্তী সেরা কাজটি করতে হয়েছিল:

*.base(2).comb(/1+/).map({[*] i xx.chars}).sum

সম্প্রসারিত:

*\             # Whatever lambda
.base(2)       # convert to a Str representation in base 2
.comb(/ 1+ /)  # get a list of substrings of one or more 「1」s
.map({         # for each of those

  [*]            # reduce using 「&infix:<**>」
    i xx .chars    # 「i」 list repeated by the count of the characters matched

}).sum          # sum it all up

টেস্ট:

.say for (4538, 29).map:

    *.base(2).comb(/1+/).map({[*] i xx.chars}).sum

# -1+1i
# 0+0i


0

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

for($n=$argv[1];$n|$i;$n>>=1)$n&1?$i++:($i?$i=0*${$i&1}+=1-($i&2):0);echo"(${0},${1})";

ইটিএইচ প্রডাকশনগুলি - সমাধান হিসাবে প্রায় একই; পুনরাবৃত্তির পরিবর্তে কেবল পুনরাবৃত্তি।
কমান্ড লাইন থেকে ইনপুট নেয়, ভেরিয়েবল সেট করে ${0}এবং ${1}


0

টিআই-বেসিক (টিআই -৪৪ প্লাস সিই), 70 বাইট

Prompt X
0→S
0→N
While X
If remainder(X,2
Then
N+1→N
int(X/2→X
Else
S+i^Nnot(not(N→S
X/2→X
0→N
End
End
S+i^Nnot(not(N

বাইনারি স্ট্রিংতে রূপান্তর করার জন্য কোনও বিল্টিন নেই, (কোনও স্ট্রিংকে বিশ্লেষণ করার জন্য নেই), সুতরাং এই প্রোগ্রামটি ম্যানুয়ালি 2 দ্বারা বিভক্ত হয়, প্রতিবার 1 দেখায় এন বাড়িয়ে তোলে এবং এস N (এন> 0) এ পুনরায় সেট করে এন যদি এটি একটি শূন্য দেখায়।



0

আর , 54 বাইট

function(n,x=rle(n%/%2^(0:log2(n))%%2))sum(1i^x$l*x$v)

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

n%/%2^(0:log2(n))%%2বাইনারি সংখ্যাগুলির একটি ভেক্টর গণনা করে। রান-লেংথ এনকোডিংটি ব্যবহার করে আমরা complexযথাযথ যোগফল গণনা করতে আর এর ধরণটি ব্যবহার করি , x$valuesশূন্যগুলি অপসারণের জন্য গুণিত করে ।

একটি complexউপাদান একটি ভেক্টর প্রদান করে।

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