Задача Bin to Hex (Numeral Systems) .toString(16) not working

tasks

#1

Здравейте, за задача BIN TO HEX Предполагам , че при хекс 2 на 15-та цифри не позволява .String(16)?
Защото за 2 на 52-ра е лимита , но явно на децимал, а при хекс става нещо като 2 на 15*16-та ли ? И затова не може с удобното и практично .toString(16), след като се обърне в децимал?


#2

Здравей,

Не разбирам какъв точно е въпросът :slight_smile:

Дали можеш да обясниш малко по-подробно?

Пешо


#3

Здравей, тъй като съществува за JavaScript метода " .toString(16)" за преобразуване на decimal число в неговата hexadecimal форма, питам дали тази задача от telerik. judge https://judge.telerikacademy.com/problem/02bintohex - ‘‘Bin to Hex’’ , може да се реши с помощта на въпросния метод?

Пробвах , тъй като входът е Binary , първо да превърна него в decimal и новополученото число да преобразувам на Hexadecimal с .toString(16) , но не се получава - и въпросът ми е дали не знам как да приложа метода, или просто той не работи за по-големи стойности, каквито са тези в задачата ?


#4

Не мисля че идеята на тази задача е да се използва вградената функционалност. Съветвам ви да ибягвате да решавате задачата с 2 реда код, с built in feature, освен ако не ви кажат да го използвате, или ако целта е друга. Има много прост начин за преобразуване от bin към hex и той е като от bin се преобразува в dec след което от dec в hex.
0101 = 3 = 3
1110 = 14 = E
1010 = 10 = A
101 1110 = 3E
Делиш си числото на четворки и си смяташ така. Супер simple e и лесно за имплементация! Гарантирам ти че минава по този начин решена, защото така съм я направил.


#5

Да, така е, така изглеждат всички Best Solutions и се учудих защо никой не я е решил с вградената функционалност, пробвах се с нея като втори начин да видя дали ще стане, но някъде бъркам.
Затова питам как се решава с вградената функционалност, тъй като пробвах И с нея, но не се получава, предполагам заради границите й ? Искам да знам защо не стана с вгр.ф. и как да стане с нея, респективно, дали изобщо може да стане с нея при тези граници в условието…
иначе мерси!!


#6

С градената функционалност може да стане ако string-a който ти подават го разделиш на всеки 12 символа cast-неш към integer и след това с toString(16) и накрая конкатенираш. Може и всеки 4 или 8 символа


#7

Благодаря, може ли да ми кажеш къде съм сбъркала, че да получа този грешен отг., следвайки предложението ти за решение:
//Input= ‘000110100010101100111100010011010101111001101111’,
//Output= 1A2B3C4D5E6F
let input = gets().toString().match(/.{1,12}/g).map(Number);//[ 110100010, 101100111100, 10011010101, 111001101111 ]
let result = ‘’;
for (let i = 0; i < input.length; i+=1) {
result += input[i].toString(16).toUpperCase();
}
print(result);//68FFE2A178A0944FC254B3E43519D82E6337 //…!=1A2B3C4D5E6F


#8
let input = gets().match(/.{1,12}/g),
result = '';
for (let i = 0; i < input.length; i+=1) {
  result += parseInt(input[i], 2).toString(16).toUpperCase();
}
print(result);
// Проверка
print("1A2B3C4D5E6F");

#9

Еха, мерси !
парсването със запетая ‘, 2)’ какво прави?

Много ценно!


#10

Посочва в каква бройна система е стойността, предполагам.
Тук има обяснение и хубави примери – parseInt() | MDN


#11

Благодаря още веднъж!!!


#12

Ъпдейт: всъщност това решава само първия кейс…


#13

Съжалявам за пропуска горе. Преди да се използва .match() трябва да се сложат нужното количество нули в началото и самият .match() трябва да се коригира.
while (input.length%4!=0) {
input=0+input;
}
input = input.match(/.{1,4}/g);


#14

Да, това работи - супер!
Благодаря много!