Konwertuj liczbę szesnastkową (dowolnego rozmiaru) na liczbę binarną.
Wejście POSITIVE liczba szesnastkowa z początku. Ważny wkład będzie zawsze dopasować następujące wyrażenia regularnego: . Jeśli dane wejściowe nie są poprawną liczbą szesnastkową, to znaczy wszystko, co nie pasuje do tego wyrażenia regularnego, dane wyjściowe powinny być . 0x
0x[0-9a-fA-F]+
0
Dane wyjściowe
Szesnastkowy przekształcony na binarny.
Wygrywanie
oryginalnych zasad Code-Golf, najniższa ilość ugryzień (bytes)
.
Przykłady
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
code-golf
base-conversion
Hashim Kayani
źródło
źródło
#0ac4
nadal jest ważny przypadek testowy?X
jest to duża litera).00011010
Odpowiedzi:
Pyth, 15 bajtów
Wyjaśnienie:
Pakiet testowy
Z wyjaśnieniem zasad (które
0x
muszą być małymi literami) w PO, możesz usunąćr0
dla 13 bajtów.źródło
Python 2,
67626059 bajtówWypróbuj online!
Wersja, w której występują błędne dane wejściowe (27 bajtów):
Wypróbuj online!
źródło
05AB1E , 11 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
0XFF
.0x
więc powiedziałbym, że konkretny przypadek testowy jest nieprawidłowy.Å?
lub 10 bajtów przy użyciu starszego typu .Partia, 402 bajty
Pobiera dane wejściowe na STDIN. 8 linii jest następnie w większości marnowanych podczas sprawdzania poprawności danych wejściowych, więc interesujące linie to linia 11, która zastępuje każdą cyfrę szesnastkową jej ekwiwalentem binarnym, ale z powodu ograniczeń wsadowych, wiodącą
.
linią 12, która usuwa wszystkie.
s, i linią 14 , który usuwa wiodące zera. Jednak nie udaje się to dla takich danych wejściowych,0x0
więc „unieważniam” te, co oznacza, że zamiast tego wyprowadzane jest 0.źródło
PHP,
66 6563 bajtówuruchomić jako potok z
-F
.Bez tego
0x
najgorszym problemem byłoby to, że oba z nichhexdec
ibase_convert
po prostu ignorowałyby znaki, które nie są hexami; ale przy tym i tak musi nastąpić jawna kontrola ważności.45 bajtów bez
0x
:źródło
echo stristr($a=$argn,"0X")==$a?decbin(hexdec(ltrim($a,Xx0))):0;
Czy to miła alternatywa? Powinien działać dla podanych przypadkówhexdec
ibase_convert
).echo decbin(hexdec(preg_filter("#^0x([a-f\d]+$)#i","$1",$argn)));
<?=
zamiastecho
opcji -FJavaScript (ES6),
109108 bajtówDziała dla dowolnego rozmiaru wejściowego.
Przypadki testowe
Pokaż fragment kodu
źródło
0x1fffffffffffff
- akaNumber.MAX_SAFE_INTEGER
- i zwraca zaokrąglone wyniki poza tym. Na szczęście dwa duże przypadki testowe są poprawnie zaokrąglone.1
bitem w wyniku. Nawiasem mówiąc, czy potrzebujesz$
pierwszego wyrażenia regularnego?$
. Chodzi o to, aby uzyskać końcowe zero, jeśli nie ma1
w ogóle wyniku.REXX, 45 bajtów
źródło
Siatkówka , 149 bajtów
(zwróć uwagę na końcowy znak nowej linii)
Wypróbuj online!
Oto alternatywne rozwiązanie kosztem 7 bajtów: Wypróbuj!
źródło
perl, 25
(kod 24 + 1 flaga -n)
źródło
JavaScript (ES6),
116111 bajtówNie ogranicza się do 53 bitów precyzji. Edycja: Zapisałem 5 bajtów, przepisując moją konwersję cyfr, co również zmniejsza moje wymagania językowe do ES6.
źródło
0x00101011
, przepraszam.Kod maszynowy 8086 - 63 bajty
Działa dla dowolnego wejścia do 125 znaków (maksymalna długość wiersza poleceń w DOS)
źródło
JavaScript (ES6),
535249505245 bajtów(Niekonkurencyjny, ponieważ nie obsługuje danych wejściowych o dowolnym rozmiarze; właśnie miałem szczęście z przykładowymi danymi wejściowymi)
źródło
CJam , 24 bajty
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES6), 107 znaków
źródło
Perl 6 , 35 bajtów
źródło
JavaScript, 63 bajty
źródło