বাইনারি থেকে হেক্সাডেসিমাল


10

একটি হেক্সাডেসিমাল সংখ্যা (যে কোনও আকারের) বাইনারি সংখ্যায় রূপান্তর করুন।

শুরুর দিকে
একটি ইতিবাচক হেক্সাডেসিমাল সংখ্যার ইনপুট করুন0x । একটি বৈধ ইনপুট সবসময় নিম্নলিখিত Regex ম্যাচ হবে: 0x[0-9a-fA-F]+। ইনপুট হয়, তাহলে না একটি বৈধ হেক্সাডেসিমেল সংখ্যাকে, যে, কিছু এই Regex মিলে না, আউটপুট হওয়া উচিত 0

আউটপুট
হেক্সাডেসিমাল বাইনারি রূপান্তরিত।


আসল কোড-গল্ফ বিধি জিতেছে , কম পরিমাণে কামড় (bytes)

উদাহরণ

IN: 0x12
OUT: 10010

IN: 0xFF
OUT: 11111111

IN: 0XFF
OUT: 0

IN: #0ac4
OUT: 0

IN: 0x00101011
OUT: 100000001000000010001

IN: 0x525600
OUT: 10100100101011000000000

IN: 0x58f70555118ec400
OUT: 101100011110111000001010101010100010001100011101100010000000000

IN: 0x6669795966AF3000
OUT: 110011001101001011110010101100101100110101011110011000000000000

IN: 0b018474
OUT: 0

IN: 9577383
OUT: 0

IN: -483355
OUT: 0

IN: -0xf9ad92
OUT: 0

7
আপনি যখন বলেন "যদি ইনপুটটি বৈধ হেক্সাডেসিমাল সংখ্যা নয়" তবে কী ধরণের জিনিস হতে পারে? বিভিন্ন বেসে একটি সংখ্যা? একটি অ-সংখ্যার অবজেক্ট? প্রোগ্রামটি ক্র্যাশ করার জন্য তৈরি কিছু বস্তুর মূল্যায়ন করা হয়, সম্ভবত একটি ক্যাচবিল পদ্ধতিতে? সত্যিই, আমি ইনপুট বৈধতা এড়াতে পরামর্শ দিয়েছিলাম; এটি একটি গিরগিটি চ্যালেঞ্জ মত অনুভূত ।
xnor

2
পরীক্ষার কেস থেকে নিয়ম সন্নিবেশ করা ঠিক নয় এবং সম্ভবত চ্যালেঞ্জটি অস্পষ্ট হিসাবে বন্ধ হয়ে যাবে। তদ্ব্যতীত, উদাহরণগুলি আমার কাছে পরিষ্কার নয়। "# 0ac4" দেখে মনে হয় যে কোনও অতিরিক্ত অক্ষর অন্তর্ভুক্ত করা যেতে পারে।
xnor

1
কী ইনপুটগুলি সম্ভব তা সম্পাদনার পরে আমি এখনও পরিষ্কার নই। কি #0ac4এখনও একটি বৈধ পরীক্ষা ক্ষেত্রে?
xnor

5
আপনার দ্বিতীয় টেস্টকেসটি আপনার রেজেক্সের সাথে মেলে না (এটি Xবড় হ'ল)
দাদা

1
আমাদের কী শীর্ষস্থানীয় শূন্যদের যত্ন নেওয়া দরকার? আমরা কি এমন কিছু আউটপুট করতে পারি00011010
ব্যবহারকারীর 41805

উত্তর:


3

পাইথ, 15 বাইট

.B&qr0<z2"0x"vz

ব্যাখ্যা:

             vz  Evaluate the input as a literal, to get a number (casts to integer for hexadecimal input)
      <z2        Select the first two characters of (string) input
    r0           cast to lowercase (0X -> 0x)
   q     "0x"    check whether the text starts with "0x" or "0X" (negative numbers don't) 
  &              If it does, return the casted number
.B               and convert to binary string

পরীক্ষা স্যুট

ওপিতে একটি বিধি স্পষ্টকরণের (এটি 0xঅবশ্যই ছোট হাতের হতে হবে) সাথে, আপনি r013 বাইটের জন্য সরাতে পারেন ।

.B&q<z2"0x"vz


2

05 এ বি 1 , 11 বাইট

Î2£„0xQi¹Hb

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

ব্যাখ্যা

Î             # initialize stack with 0 and push input
 2£           # get the first 2 chars of input
   „0xQ       # compare to "0x"
       i      # if equal
        ¹H    # convert input from base-16 to base-10
          b   # convert to binary

পরীক্ষার কেস নিয়ে কাজ করে না 0XFF
Okx

@ ওকএক্স: প্রশ্নের রেইজেক্স এবং ইনপুট বিভাগ উভয়ই বলেছে যে সঠিক ইনপুটটি শুরু হয় 0xতাই আমি বলতে চাই যে নির্দিষ্ট টেস্ট- কেসটি ভুল।
এমিগানা

1
হ্যাঁ, আমি এটি লক্ষ্য করিনি।
Okx


1

ব্যাচ, 402 বাইট

@echo off
set/ps=
set r=0
if not %s:~0,2%==0x goto g
if %s%==0x goto g
if %s:0=%==x goto g
set t=%s%
for %%h in (0 1 2 3 4 5 6 7 8 9 a b c d e f)do call set t=%%t:%%h=%%
if not %t%==x goto g
set s=%s:~2%
for %%h in (0.0000 1.0001 2.0010 3.0011 4.0100 5.0101 6.0110 7.0111 8.1000 9.1001 a.1010 b.1011 c.1100 d.1101 e.1110 f.1111)do call set s=%%s:%%~nh=%%~xh%%
set r=%s:.=%
:g
echo %r:*1=1%

STDIN এ ইনপুট নেয়। 8 লাইনগুলি তখন বেশিরভাগই ইনপুট বৈধকরণে নষ্ট হয়, সুতরাং আকর্ষণীয় লাইনগুলি লাইন 11, যা প্রতিটি হেক্স ডিজিটকে তার বাইনারি সমতুল্য করে প্রতিস্থাপন করে, তবে একটি ব্যাচ সীমাবদ্ধতার কারণে, একটি শীর্ষস্থানীয় ., লাইন 12, যা সমস্ত .গুলি মুছে ফেলে এবং লাইন 14 , যা নেতৃস্থানীয় 0 টি সরিয়ে দেয়। তবে এটি ইনপুটগুলির মতো ব্যর্থ হয় 0x0সুতরাং 0 এর অর্থ আউটপুট হ'ল আমি তাদের "অকার্যকর" করব।


1

পিএইচপি, 66 65 63 বাইট

<?=decbin(hexdec(preg_filter("#^0x([a-f\d]+$)#i","$1",$argn)));

পাইপ হিসাবে চালান -F

ছাড়া 0x, সবচেয়ে খারাপ সমস্যাটি হ'ল হেক্স নয় এমন চরিত্রগুলিকে উভয়ই উপেক্ষা করুন hexdecএবং base_convertকেবল এটিকেই উপেক্ষা করবেন; তবে এটির সাথে, যাই হোক না কেন একটি স্পষ্ট বৈধতা পরীক্ষা করতে হবে।


45 বাইট ব্যতীত 0x:

<?=decbin(ctype_xdigit($argn)*hexdec($argn));

echo stristr($a=$argn,"0X")==$a?decbin(hexdec(ltrim($a,Xx0))):0;এটি কি চমৎকার বিকল্প? এটি প্রদত্ত
পরীক্ষাগুলির

@ জার্গহেলসারম্যান: এটি দুর্দান্ত বিকল্প, এবং এটি প্রদত্ত সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে তবে এটি বৈধতার জন্য হেক্স মানটি পরীক্ষা করে না (আমার মন্তব্যটি দেখুন hexdecএবং base_convert)।
টাইটাস

আমি জানি এবং আমি মনে করি যে প্রশ্নটি প্রদত্ত টেস্টকেসগুলির সাথে একটি রসিকতা।
জার্গ হালসারম্যান

1
echo decbin(hexdec(preg_filter("#^0x([a-f\d]+$)#i","$1",$argn)));
ক্রিস্টোফ

-2 বাইট <?=এর istead echo -F বিকল্প
Jörg Hülsermann

0

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

যে কোনও ইনপুট আকারের জন্য কাজ করে।

s=>/1.*|0$/.exec((/^0x([\da-f]+)$/i.exec(s)||'_0')[1].replace(/./g,d=>(+`0x1${d}`).toString(2).slice(1)))[0]

পরীক্ষার মামলা


হুম ... 2 অভিজ্ঞ গল্ফাররা যতবার আমার দ্বিগুণেরও বেশি সময় ধরে জেএস সলিউশন জমা দিচ্ছে আমি ভাবছি যে আমি চ্যালেঞ্জটিতে কিছু মিস করেছি কিনা।
শেগি

@ শেগি এটি সমস্ত চ্যালেঞ্জের প্রথম লাইনের ব্যাখ্যার উপর নির্ভর করে। আমি এটিকে বিবেচনা করে দেখলাম যে 'কোনও আকারের' একটি নির্দিষ্ট প্রয়োজনীয়তা ছিল - এবং তাই নীল স্পষ্টতই তা করেছিল।
আরনাউল্ড

@ শেগি শুধু সবার জন্য স্পষ্ট করে বলতে: আপনার পদ্ধতির জন্য 0x1fffffffffffff- অব - পর্যন্ত কাজ করে Number.MAX_SAFE_INTEGERএবং এর বাইরেও গোল ফলাফল আসে returns ভাগ্যক্রমে, দুটি বড় পরীক্ষার কেসটি সঠিকভাবে গোল করা হয়েছে।
আরনাউল্ড

হু, আমি বুঝতে পারি নি যে @ শেগির কোডটি দুর্ঘটনাক্রমে কাজ করেছে; আমি অনুমান করি 1ফলাফলের প্রথম এবং শেষ বিটের মধ্যে আমার দূরত্বটি গণনা করা উচিত ছিল । যাইহোক, আপনার কি $প্রথম রেজিপ্সেপ দরকার?
নীল

@ নীল আমি মনে করি না যে আমি এ থেকে মুক্তি পেতে পারি $1ফলাফলটি না থাকলে চূড়ান্ত শূন্য পাওয়ার ধারণাটি idea
আর্নল্ড


0

রেটিনা , 149 বাইট

.
;$&
T`L`l
f
71
e
70
d
61
c
60
b
51
a
50
9
41
8
40
7
31
6
30
5
21
4
20
3
11
2
10
;(\d{4})
$1
;(\d{3})
0$1
;(\d\d)
00$1
;
000
^(?!0{7}x).*
0
0{7}x0*

(পেছনের নতুন লাইনটি নোট করুন)

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

এখানে 7 বাইটের ব্যয়ে একটি বিকল্প সমাধান রয়েছে: চেষ্টা করে দেখুন!




0

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

f=
s=>/^0x[\da-f]+$/i.test(s)?s.replace(/./g,c=>parseInt(4+c,36).toString(2).slice(-4)).replace(/0+10*(.)/,'$1'):0
<input oninput=o.textContent=f(this.value)><pre id=o>0

নির্ভুলতার 53 বিটের মধ্যে সীমাবদ্ধ নয়। সম্পাদনা করুন: আমার অঙ্কের রূপান্তরটি পুনরায় লিখে 5 টি বাইট সংরক্ষণ করা হয়েছে, যা আমার ভাষার প্রয়োজনীয়তাও ES6 এ হ্রাস করে।


আপনি প্রতিটি অক্ষরকে হেক্স মান হিসাবে মূল্যায়ন করে 13 বাইট দ্বারা দৈর্ঘ্য হ্রাস করতে পারেন। অনলাইনে চেষ্টা করে দেখুন
fəˈnɛtɪk

@ fəˈnɛtɪk এটি উত্থাপিত হিসাবে প্রশ্নের সমাধান করে না।
নীল

এখানে, আমি প্রথম রূপান্তর থেকে নেতৃস্থানীয় শূন্যস্থানগুলি সরিয়েছি এটি অনলাইনে এখনও চেষ্টা করুন 2 বাইট সংক্ষিপ্ত করুন।
fəˈnɛtɪk

@ fəˈnɛtɪk আমি এটি আরনাউল্ডের উত্তরের সাথে সংযুক্ত করেছি এবং এটি 103 এ নামিয়েছি: অনলাইনে চেষ্টা করে দেখুন!
নীল

@ fəˈnɛtɪk অপেক্ষা করুন, এটি পঞ্চম পরীক্ষার ক্ষেত্রে কাজ করে না 0x00101011, দুঃখিত।
নীল

0

8086 মেশিন কোড - 63 বাইট

125 অক্ষর পর্যন্ত কোনও ইনপুট কাজ করে (ডস-এ সর্বাধিক কমান্ড লাইনের দৈর্ঘ্য)

00000000  be 82 00 bf 3f 01 89 fa  ad 3d 30 78 75 24 ac 3c  |....?....=0xu$.<|
00000010  0d 74 22 2c 30 3c 09 76  08 24 df 2c 07 3c 0f 77  |.t",0<.v.$.,.<.w|
00000020  11 b1 04 c1 e0 0c d0 e4  0f 92 c0 0c 30 aa e2 f6  |............0...|
00000030  eb dc ba 3d 01 b0 24 aa  b4 09 cd 21 c3 30 24     |...=..$....!.0$|
0000003f

0

জাভাস্ক্রিপ্ট (ES6), 53 52 49 50 52 45 বাইট

(এটি কোনও আকারের ইনপুট পরিচালনা করে না বলে প্রতিদ্বন্দ্বিতা করে ; আমি স্যাম্পল ইনপুটগুলির সাথে ভাগ্যবান হয়েছি)

f=

h=>+/^0x[\da-f]+$/i.test(h)&&(+h).toString(2)

console.log(f`0x12`);
console.log(f`0XFF`);
console.log(f`#0ac4`);
console.log(f`0x00101011`);
console.log(f`0x525600`);
console.log(f`0x58f70555118ec400`);
console.log(f`0x6669795966AF3000`);
console.log(f`0b018474`);
console.log(f`9577383`);
console.log(f`-483355`);
console.log(f`-0xf9ad92`);


0

সিজেম , 24 বাইট

q2/("0x"={seu:~Gb2bo}&;0

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

ব্যাখ্যা

q      e# Read the input
2/     e# Split it into 2-length segments
(      e# Pull out the first segment
"0x"=  e# Check if it equals "0x"
{      e# If it does, run this block:
 s     e#  Join the segments back together
 eu    e#  Make the string uppercase
 :~    e#  Eval each character (A-K are 10-20)
 Gb    e#  Convert from base 16 to base 10
 2b    e#  Convert to base 2
 o     e#  Output the binary number
}&     e# (end of block)
;0     e# Delete the top stack element and push 0. If the block was run, nothing is left
       e# on the stack, so the program terminates with an error before pushing 0.



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