Inspirado por esta pregunta que se inspiró aún más en esta , escriba un programa que tome dos enteros y los agregue de una manera única, realizando una operación OR en los segmentos utilizados para mostrarlos en una pantalla de 7 segmentos. Como referencia, los dígitos se representan de la siguiente manera:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Tenga en cuenta que el 1 usa los dos segmentos a la derecha, no a la izquierda. Hay dos caracteres especiales que se pueden generar de esta manera que no son números. Vea la tabla de adición a continuación:
| 0 1 2 3 4 5 6 7 8 9
--+--------------------
0 | 0 0 8 8 8 8 8 0 8 8
1 | 0 1 a 3 4 9 8 7 8 9
2 | 8 a 2 a 8 8 8 a 8 8
3 | 8 3 a 3 9 9 8 3 8 9
4 | 8 4 8 9 4 9 8 Q 8 9
5 | 8 9 8 9 9 5 6 9 8 9
6 | 8 8 8 8 8 6 6 8 8 8
7 | 0 7 a 3 Q 9 8 7 8 9
8 | 8 8 8 8 8 8 8 8 8 8
9 | 8 9 8 9 9 9 8 9 8 9
Observaciones utiles:
- Cualquier dígito más sí mismo es igual a sí mismo
- 8 más cualquier dígito es igual a 8
- 2 más 1, 3 o 7 es igual a la letra 'a' (debe estar en minúsculas)
- 4 más 7 es igual a 'q' o 'Q', su elección
- Los números deben estar alineados a la derecha, por lo que los dígitos deben agregarse de derecha a izquierda. Si un número tiene más dígitos que el otro, los dígitos adicionales al principio no deberían modificarse. No hay ceros a la izquierda, a menos que el número sea exactamente 0.
- Todos los números serán 0 o mayores. No necesita manejar un signo '-'. (Principalmente porque no hay un buen ajuste para la suma de un '-' y un '1' o '7').
Su programa debe aceptar 2 enteros en cualquier formato que elija, y generar una cadena que contenga su "suma" cuando se calcula de esta manera. Este es el código de golf, por lo que su programa debe ser lo más pequeño posible.
Ejemplos:
- Entrada: 12345, 123. Salida: 12389
- Entrada: 88888, 42. Salida: 88888
- Entrada: 0, 23. Salida: 28
- Entrada: 120, 240. Salida: a80
- Entrada: 270, 42. Salida: 2T8 (o 2q8)
- Entrada: 1234567890, 1234567890. Salida: 1234567890
fuente
Q
ser minúscula? La forma real se pareceq
más bien a unaQ
a
embargo, definitivamente debería ser minúscula, ya que seA
ve completamente diferente.Respuestas:
Bash + Utilidades comunes de Linux, 80
Tenga
^?
en cuenta que en la fuente debe reemplazarse con un carácter ASCII 0x7f.La cadena
s
es cada dígito de 7 segmentos0-9, a, Q
codificado con cada segmento correspondiente a un bit de un carácter ASCII.La
h()
función translitera el número de entrada de decimal a la codificación especificada pors
, luego genera el resultado como una cadena hexadecimal sin procesar.Las dos cadenas hexadecimales sin procesar resultantes se
OR
editan juntas usando la aritmética bash regular, luego se generan mediantedc
elP
comando 's como bytestream. Este bytestream se transcribe de nuevo a decimal + a + Q y se genera.Tenga en cuenta también que cuando se utiliza la
<<<
construcción bash herestring en la función,h()
se agrega implícitamente una nueva línea a la cadena redirigida. Esto no importa: simplemente se traduce al0x0a
final de cada cadena hexadecimal; cuando los dos números hexadecimales seOR
editan juntos, el resultado todavía está0x0a
en el último carácter que no se transcribe y, por lo tanto, simplemente se traduce de nuevo en una nueva línea que se genera después del resultado.Prueba de salida:
fuente
Python 2, 155 bytes
Reemplace el
♥
con unDEL
carácter (0x7F).Llamando
f("12345", "123")
impresiones12389
.fuente
%13
truco. Obviamente, eligió el conjunto que no tenía caracteres por debajo de 40, pero para mi traducción de JavaScript elegí el conjunto más corto. El tercer conjunto es el más largo en JavaScript, lo habría sido111,5,118,117,29,121,123,37,127,125
.JavaScript (ES6),
158144 bytesAhorró 14 bytes robando descaradamente el
%13
truco de @ Lynn .fuente
Java, 170 bytes
Esto es terriblemente largo ... pero de todos modos esto es Java.
Programa completo, con código sin golf
Toda la salida (todo duplicado una vez)
fuente