Dada una entrada de una cadena con bytes que puede estar en binario, octal o hexadecimal, genera el equivalente ASCII de la cadena.
La entrada se proporcionará en el siguiente formato, por ejemplo:
501200100001147
que representa
0x50 0o120 0b01000011 0x47
que es equivalente (en ASCII) a
PPCG
Binario, octal y hexadecimal siempre se proporcionarán con 8, 3 y 2 dígitos respectivamente.
Para los propósitos de este desafío, solo se debe admitir ASCII imprimible. Esta es la gama 32..126
inclusive. Por lo tanto, es imposible que haya ambigüedad. Tenga en cuenta que
Una cadena representa binario si y solo si comienza con ay
0
su segundo carácter es a0
o a1
. Todos los caracteres ASCII imprimibles tienen su bit alto desactivado en binario (es decir, comienzan con a0
), y ninguno de ellos comienza con00
o01
en hexadecimal u octal.Con el binario fuera del camino, tenga en cuenta que todos los caracteres ASCII imprimibles comienzan con
2
-7
en hexadecimal y0
-1
en octal. Por lo tanto, es posible distinguir inequívocamente entre hex y octal también.
Puede suponer que la entrada hexadecimal se proporciona en minúsculas o mayúsculas, lo que sea más conveniente.
Regex hace que la parte de análisis del desafío sea semi-trivial. No quiero prohibir el uso de regex directamente, pero si tiene una solución que no sea regex por más tiempo que su contraparte que usa regex, no dude en publicarla junto con la respuesta "real" de todos modos, ya que estaría interesado para verlo también :)
Como se trata de código golf , el código más corto en bytes ganará.
Casos de prueba:
In Out
-----------------------------------
501200100001147 | PPCG
5C01101111100 | \o@
313206306400110101 | 12345
2A200530402C | * + ,
0011111100111111 | ??
<empty string> | <empty string>
fuente
0[01]{7}
lugar de0[01].{6}
.ES6,
8680 bytesSolución basada en expresiones regulares:
Solución recursiva no regex para 95 bytes:
fuente
Python 3, 165 bytes
Sin expresiones regulares
fuente