Konvertieren Sie eine Hexadezimalzahl (beliebiger Größe) in eine Binärzahl.
Eingang
A POSITIVE Hexadezimalzahl mit einem 0x
am Anfang. Eine gültige Eingabe entspricht immer dem folgenden regulären Ausdruck : 0x[0-9a-fA-F]+
. Wenn die Eingabe keine gültige Hexadezimalzahl ist, dh alles, was nicht mit diesem regulären Ausdruck übereinstimmt, sollte die Ausgabe sein 0
.
Ausgabe
Das in Binär konvertierte Hexadezimal.
Gewinnen der
Original Code-Golf Regeln, geringste Anzahl von Bissen (bytes)
.
Beispiele
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
quelle
quelle
#0ac4
noch ein gültiger Testfall?X
Großbuchstaben).00011010
Antworten:
Pyth, 15 Bytes
Erläuterung:
Testsuite
Mit einer Regelklärung (die
0x
in Kleinbuchstaben geschrieben sein muss) im OP können Sier0
für 13 Bytes entfernen .quelle
Python 2,
67626059 BytesProbieren Sie es online aus!
Version, die bei ungültiger Eingabe Fehler verursacht (27 Byte):
Probieren Sie es online aus!
quelle
05AB1E , 11 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
0XFF
.0x
Ich würde also sagen, dass ein bestimmter Testfall falsch ist.Å?
oder 10 Bytes unter Verwendung des Legacy .Stapel, 402 Bytes
Nimmt Eingaben auf STDIN vor. 8 Zeilen werden dann meistens für die Eingabevalidierung verschwendet, daher sind die interessanten Zeilen Zeile 11, die jede hexadezimale Ziffer durch ihre binäre Entsprechung ersetzt, jedoch aufgrund von Stapelbeschränkungen durch eine führende
.
Zeile 12, die alle.
s löscht , und Zeile 14 , wodurch führende Nullen entfernt werden. Dies schlägt jedoch für Eingaben wie fehl,0x0
so dass ich diejenigen "ungültig mache", was bedeutet, dass stattdessen 0 ausgegeben wird.quelle
PHP,
66 6563 Byteslaufen als Rohr mit
-F
.Ohne das
0x
wäre das schlimmste Problem, dass beidehexdec
undbase_convert
einfach Zeichen ignorieren, die nicht hexadezimal sind; aber damit muss es trotzdem eine explizite Gültigkeitsprüfung geben.45 Bytes ohne
0x
:quelle
echo stristr($a=$argn,"0X")==$a?decbin(hexdec(ltrim($a,Xx0))):0;
Ist das eine schöne Alternative? Es sollte für die gegebenen Testfälle funktionierenhexdec
undbase_convert
).echo decbin(hexdec(preg_filter("#^0x([a-f\d]+$)#i","$1",$argn)));
<?=
anstelle vonecho
-F OptionJavaScript (ES6),
109108 ByteFunktioniert für jede Eingabegröße.
Testfälle
Code-Snippet anzeigen
quelle
0x1fffffffffffff
- akaNumber.MAX_SAFE_INTEGER
- und liefert darüber hinaus gerundete Ergebnisse. Zum Glück sind die beiden großen Testfälle richtig gerundet.1
Bit im Ergebnis zählen sollen.$
Benötigen Sie übrigens die im ersten regulären Ausdruck?$
. Die Idee ist, die endgültige Null zu erhalten, wenn1
das Ergebnis überhaupt keine enthält .REXX, 45 Bytes
quelle
Netzhaut , 149 Bytes
(Beachten Sie die nachfolgende Newline)
Probieren Sie es online aus!
Hier ist eine alternative Lösung zum Preis von 7 Bytes: Probieren Sie es aus!
quelle
Perl, 25
(Code 24 + 1 Flag -n)
quelle
JavaScript (ES6),
116111 ByteNicht auf 53 Bit Genauigkeit beschränkt. Bearbeiten: Durch das Umschreiben meiner Ziffernkonvertierung wurden 5 Bytes gespeichert, wodurch sich auch meine Sprachanforderungen auf ES6 reduzieren.
quelle
0x00101011
, sorry.8086 Maschinencode - 63 Bytes
Funktioniert für alle Eingaben mit bis zu 125 Zeichen (die maximale Befehlszeilenlänge unter DOS)
quelle
JavaScript (ES6),
535249505245 Byte(Nicht konkurrierend, da es keine Eingaben jeglicher Größe verarbeitet; ich hatte gerade Glück mit den Beispieleingaben)
quelle
CJam , 24 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
JavaScript (ES6), 107 Zeichen
quelle
Perl 6 , 35 Bytes
quelle
Javascript, 63 Bytes
quelle