বাইনারি আউটপুট কোয়েটার-কাল্পনিক বেস নম্বর


17

কোনও ফাংশন বা প্রোগ্রাম লিখুন যা কোয়ার্টার-কাল্পনিক ভিত্তিকে বাইনারি অঙ্ক হিসাবে প্রদর্শিত হবে out সংখ্যা বেস 2 i , যেখানে আমি -1 এর বর্গমূল। I এর আরও তথ্যের জন্য কমপ্লেক্স নম্বর দেখুন । প্রতিটি আসল অবস্থান 0 থেকে 3 (চতুর্ভুজ) থেকে যেতে পারে, কারণ প্রতিটি আসল এবং কল্পিত অংশ পূর্ববর্তী বাস্তব এবং কাল্পনিক অংশের চেয়ে -4 গুণ বড় হয়। বাইনারি মধ্যে চতুরাত্মক ডিজিটের নিম্নরূপ: , , & ।0: 001: 012: 103: 11

ডিজিট পজিশনের ভাঙ্গন:

re   im       16 -8i  -4  2i   1 -0.5i, etc.
 4    0        1   0   3   0   0        (quaternary representation)
              01  00  11  00  00        (binary representation)

সংখ্যাটি 1001100001x16 + 3x-4 = 16 + -12 = 4।

re   im       16 -8i  -4  2i   1 -0.5i, etc.
 0    5        0   0   0   3   0   2    (quaternary representation)
              00  00  00  11  00 .10    (binary representation)

সংখ্যাটি 1100.13x2 i + 2x-0.5 i = 6 i + - i = 5 i

আপনার কোডটি এক সংখ্যক সংখ্যার সংখ্যা নেবে, যা পূর্ণসংখ্যার বা ভাসমান পয়েন্ট হতে পারে এবং জটিল সংখ্যাটিকে বাইনারি অঙ্কের স্ট্রিং হিসাবে আউটপুট দেয়। প্রথম সংখ্যাটি আসল হবে, দ্বিতীয় ইনপুট নম্বরটি হবে কাল্পনিক মান। বাইনারি পয়েন্ট কেবলমাত্র 1 এর নীচে শূন্য নম্বরের অবস্থানের জন্য মুদ্রণ করা আবশ্যক (যেমন -0.5 i , -0.25, 0.125 i ইত্যাদি পজিশনের কোনওটি যদি শূন্য-বিন্দু না থাকে )) অন্য কোনও সংখ্যা না থাকলে বাইনারি পয়েন্টের অবিলম্বে একক শূন্য অঙ্ক ব্যতীত শীর্ষস্থানীয় এবং পিছনের শূন্যগুলি অনুমোদিত নয়। আউটপুট অবশ্যই বাইনারি পয়েন্ট দিয়ে শুরু করা উচিত নয় (* 00.1- ভুল, 0.1- ডান, * .1- ভুল, * 0.10- ভুল)। আপনি ধরে নিতে পারেন যে সমস্ত ইনপুট সংখ্যার সীমাবদ্ধ বাইনারি উপস্থাপনা থাকবে।

পরীক্ষার নম্বর:

re   im            output
 0    0                 0
 1    0                 1
 2    0                10
 3    0                11
 4    0         100110000
-1    0             10011
-2    0             10010
-3    0             10001
 0    1               100.1
 0    2               100
 0    3              1000.1
 0    4              1000
 0   -1                 0.1
 0   -2           1001100
 0   -3           1001100.1
 3    4              1011
 4    3         100111000.1
 6   -9         101110010.1
-6    9       10011100110.1
-9   -6           1110111
 0.5 14.125   10011001101.001001

দ্রষ্টব্য: সমস্ত পূর্ণসংখ্যার মানের আউটপুট শেষ হবে .1 কল্পিত অংশটি বিজোড় হলে ।

স্ট্যান্ডার্ড কোড-গল্ফ


4
এটি একটি ভাল চ্যালেঞ্জ, তবে ব্যাখ্যাটি পুরোপুরি পরিষ্কার হতে পারে। আপনার প্রক্রিয়াটি স্পষ্ট করা উচিত: এটি জটিল সংখ্যা থেকে একটি আন্তঃবাহিত চতুর্ভুজ উপস্থাপনা, বাইনারি উপস্থাপনা ম্যাপিংয়ে যায় 0 → 00, 1 → 01, 2 → 10, 3 → 11
লিন

@ মরিস আপনার মন্তব্যকে সম্বোধন করার জন্য আমি পুরো গুচ্ছ সম্পাদনা করেছি। যদি আমি আরও উন্নতি করতে পারি তবে আমাকে জানান।
সিজে ডেনিস

2
যদি এটি বাইনারি পুনরাবৃত্তি হয়?
লিকি নুন

1
@ ল্যাকিয়ুনুন এটি চ্যালেঞ্জের ঠিক বলেছেন: "আপনি ধরে নিতে পারেন যে সমস্ত ইনপুট সংখ্যার সীমাবদ্ধ বাইনারি উপস্থাপনা থাকবে" "
মেগো

উত্তর:


2

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

f=x=>[0,...x.toString(16)].reverse().map(d=>s=d<'.'?s:d<`0`?d+s.slice(0,-1):`${(c=+`0x${d}`+(c>>4)+m^m)>>2&3}${c&3}`+s,c=s='.',m=x<0?3:12)&&s
g=(s,t,n=s.indexOf`.`,m=t.indexOf`.`)=>n<m?g(0+s,t):n>m?g(s,0+t):t[s.length]?g(s+0,t):s.replace(/\d/g,(c,i)=>`${t[i]>>1}${t[i]&1}${c>>1}${c&1}`).replace(/^0+(\d)|\.?0*$/g,'$1')
(r,i)=>g(f(r),f(i/2))

fএকটি সংখ্যাকে বেসে রূপান্তর করে -4( .সংখ্যাটি পূর্ণসংখ্যা হলে পেছনের সাথে )। gদুই বেস লাগে -4নম্বর, তাদের প্যাড একই দৈর্ঘ্য এবং উভয় প্রান্তে .অবস্থান সবকিছু বেস থেকে, সংখ্যা একসাথে shuffles, ধর্মান্তরিত 4বেস2 , তারপর অবশেষে সামনের এবং পিছনের শূন্য রেখাচিত্রমালা।

ব্যাখ্যা: প্রদত্ত জটিল সংখ্যার সংশোধিত-বেসে 2iপ্রতিনিধিত্ব করতে আমাদের 2iবেসের 2i²(অর্থাত্ -4) জটিল অংশের প্রকৃত অংশ এবং অর্ধেক (যেমন কল্পিত অংশকে ভাগ করে নেওয়া ) উপস্থাপন করতে হবে, অঙ্কগুলি একসাথে স্থানান্তরিত করতে হবে এবং তারপরে তাদের বেস থেকে রূপান্তর করতে হবে 4বেস করতে 2। বেসে একটি আসল সংখ্যা উপস্থাপনের জন্য -4আমরা বেস 4রূপান্তরটি দিয়ে শুরু করি । বিকল্প অঙ্কগুলির সঠিক চিহ্ন রয়েছে (ধনাত্মক সংখ্যার ক্ষেত্রে, এটি সম পজিশনে অঙ্কগুলি; negativeণাত্মক সংখ্যার ক্ষেত্রে, এটি বিজোড় অবস্থানের অঙ্কগুলি) তবে বাকী অঙ্কগুলিতে ভুল চিহ্ন রয়েছে এবং একটি সংশোধন প্রয়োগ করা প্রয়োজন। উদাহরণ:

 0 -> 000 -> 000 (no correction needed)
 4 -> 010 -> 130 }
 8 -> 020 -> 120 } (correction includes carry)
12 -> 030 -> 110 }

আপনি দেখতে পাচ্ছেন, সংশোধনটি 8মূল সংখ্যাটি বিয়োগ করে 8। তবে কিছুটা বেশি সুবিধাজনক গণনা হ'ল মূল সংখ্যা, প্লাস 3, জোর 3 (আসলে 32-বিট সংখ্যার গাণিতিকটিতে আমরা কেবল লিখতে পারি+0xCCCCCCCC^0xCCCCCCCC একসাথে পুরো সংখ্যাটি রূপান্তর করতে পারি)। অবশেষে সংশোধনটি বিকল্প অঙ্কগুলিতে প্রযোজ্য তাই বেসে প্রাথমিক রূপান্তর করা সহজ 16যা স্বয়ংক্রিয়ভাবে বেস 4সংখ্যাগুলির জোড় তুলবে, তারপরে হয় যথাযথ 3বা 0xCযথাযথ উপাদান ব্যবহার করে সঠিক করুন। এটি কেবল চিহ্নটিকে উপেক্ষা করার জন্য রয়ে গেছে -


0

পার্ল - 313 বাইট

যেহেতু কেউই এখনও কোনও উত্তর পোস্ট করেনি আমি ভেবেছিলাম আমি এটিকে নিজেই সরিয়ে ফেলব।

$r=$ARGV[0];$i=$ARGV[1]/2;$m=1;while($r!=int($r)||$i!=int($i)){$c++;$m*=-1;$i*=4;$r*=4}while($r||$i){$r-=($d[$n++]=$r/$m%4)*$m;$i-=($d[$n++]=$i/$m%4)*$m;$m*=-4}$_=join("",map({sprintf"%02b",$_}reverse splice(@d,$c*2)))||"0";@d and$_.=".".join("",map({sprintf"%02b",$_}reverse@d));s/^0+1/1/;s/(\.\d*1)0+$/$1/;print

আমি নিশ্চিত যে এটি আরও গল্ফ করার অনেক সুযোগ রয়েছে।

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