Probablemente todos conozcan la pantalla de 7 segmentos que puede mostrar, entre otras cosas, todos los dígitos de :
Desafío
Solo consideramos los segmentos , su tarea es decodificar un solo dígito dados los segmentos que están activados.
Esto se puede codificar como un entero de 8 bits, aquí hay una tabla de cada dígito con su representación binaria y los valores little-endian y big-endian correspondientes:
Reglas y E / S
- La entrada será una de
- entero único (como en la tabla de arriba una de las dos órdenes dadas)
- una lista / matriz / .. de bits
- una cadena que consta de caracteres
ABCDEFG
(puede suponer que está ordenada, como un ejemploABC
codifica ), su caso es su elección (no caso mixto)
- La salida será el dígito que codifica
- Puede suponer que no hay entradas inválidas (inválido significa que no hay un dígito correspondiente)
Pruebas
Como este desafío permite múltiples representaciones, consulte la tabla.
Respuestas:
JavaScript (ES6), 26 bytes
Toma entrada en el pequeño Endian.
Pruébalo en línea!
fuente
Python 3 , 18 bytes
Pruébalo en línea!
Utiliza entradas little-endian. Contiene un
\x7F
byte sin procesar .Python 2 , 27 bytes
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) , 41 bytes
Pruébalo en línea!
Utiliza la columna de enteros little endian como entrada. Ignora la advertencia de sintaxis.
Para una entrada X, primero tomamos X mod 41 y luego tomamos el resultado mod 11. Los resultados son distintos del mod 11, por lo que podemos extraerlos de una tabla. Por ejemplo, 126 mod 41 mod 11 es 3, por lo que si hacemos que la posición 3 sea igual a 0, obtenemos la respuesta correcta para una entrada de 126.
La mesa es
9[,6,0,8,2,3,1,7,5,4]
. La parte 0 es la cabeza, que es9
. Falta la parte 1, por lo que esNull
, para guardar un byte: nunca necesitamos tomar la parte 1. Entonces la parte 2 es6
, la parte 3 es0
, y así sucesivamente, como de costumbre.La respuesta de Jonathan Allan nos da
1[4,9,8,6,2,0,5,3,7][[384~Mod~#~Mod~13]]&
. ¡Esto no es más corto, pero evita la advertencia de sintaxis!Wolfram Language (Mathematica) ,
2725 bytes(Aquí hay algún personaje que no aparece, lo siento. Haz clic en el enlace a continuación y lo verás).
Pruébalo en línea!
Esto se trata de forzar con fuerza alguna cadena para
Hash
que los hash terminen teniendo los valores correctos mod 11. Más fuerza bruta probablemente puede llevarnos a una solución aún más corta.fuente
Jalea , 12 bytes
Acepta un entero little endian.
Pruébalo en línea!
Esta es la implementación ingenua, puede haber una manera de obtener un código terser.
fuente
Python 2 , 31 bytes
Pruébalo en línea! toma la entrada como little-endian.
fuente
Java (JDK) , 32 bytes
Pruébalo en línea!
Créditos
fuente
JavaScript (Node.js) , 25 bytes
Acepta un entero little endian.
Pruébalo en línea!
Puertos para 31 bytes en Python con
lambda n:'1498620537'[384%n%13]
fuente
Espacio en blanco , 152 bytes
Obligatorio "las S, T y L no están realmente allí, son solo representaciones visibles de los comandos".
Pruébalo en línea!
Termina en un error.
Sintaxis equivalente tipo ensamblado:
fuente
brainfuck ,
474176154151149137 bytesToma una cadena de entrada de ocho
0
e1
incluye la primera0
para el punto decimal.(como en la segunda columna de la tabla en la publicación)
Salida de dígitos de 0 a 9.
Pruébalo en línea!
Algoritmo
Al observar el estado de un segmento particular, podemos dividir un conjunto de posibles dígitos en subconjuntos más pequeños. A continuación se muestra el árbol de búsqueda binario estático utilizado en mi código. El subárbol izquierdo corresponde al estado del segmento ON, el derecho corresponde al estado del segmento OFF.
Algunas observaciones útiles para el golf.
+++++
ambos valores y luego+
solo seis.+
comandos si agregamos 2 al valor de salida por adelantado. En ese caso hay que disminuirlo para0
y1
única y obtener ventaja para los otros dígitos.fuente
Retina , 96 bytes
Pruébalo en línea! Puede que no sea la mejor manera, pero es una forma interesante de programar en Retina. Explicación:
Intenta capturar los casos interesantes. Las capturas positivas simplemente capturan la letra si está presente. La longitud de la captura es, por lo tanto, 1 si está presente y 0 si está ausente. Los casos especiales son capturas 4 y 6 que existen solo si D o E están ausentes respectivamente. Estos solo se pueden expresar en decimal como
$#4
y,$#6
pero eso es todo lo que necesitamos aquí. Las capturas se construyen en una cadena cuya longitud es el número deseado. Por ejemplo, si escribimos6*$1
, esta cadena tiene una longitud 6 si A está presente y 0 si está ausente. Para elegir entre diferentes expresiones, usamos$.
(para las capturas positivas) o$#
(para las capturas negativas) que se evalúan como 0 o 1 y esto puede multiplicarse por la cadena hasta el momento.F
se repite 6 veces yB
dos veces (por concatenación ya que es más golfista). Sin embargo, el resultado se ignora a menos que ambosE
yG
están presentes. Esto maneja los casos de2
,6
y8
.F
se repite 5 veces, y siB
está presente, se agrega una sexta vez más un extra 3 (representado por una cadena constante de longitud 3). Sin embargo, el resultado se ignora a menos queD
esté presente yE
esté ausente. Esto maneja los casos de3
,5
y9
.A
se repite 6 veces, yG
se repite 3 veces, y se1
agrega un extra (representado por un carácter constante entre los dos porque es más golfista). Sin embargo, el resultado se ignora a menos queD
esté ausente. Esto maneja los casos de1
,4
y7
.Las cadenas anteriores se concatenan y se toma la longitud. si no se aplica ninguno de los anteriores, no se genera una cadena y, por lo tanto, su longitud es
0
.Las cadenas resultantes (antes de tomar la longitud) son las siguientes:
fuente
MATL , 14 bytes
La entrada es un número que representa los segmentos en formato little-endian.
Pruébalo en línea!
Explicación
fuente
Perl 5 -pl, 24 bytes
Pruébalo en línea!
Toma enteros poco endianos.
fuente
Ruby , 29 bytes
Pruébalo en línea!
fuente
Japt, 15 bytes
Toma el valor big-endian como entrada.
Intentalo
Explicación
La cadena contiene los caracteres en cada uno de los puntos de código de los valores big-endian;
Ud
obtiene el carácter en el punto de código de la entrada yb
encuentra su índice en la cadena.fuente
Neim , 15 bytes
Explicación:
Pruébalo en línea!
fuente
Stax , 12 bytes
Ejecutar y depurarlo
La entrada es un pequeño entero endian.
Utiliza la misma constante de cadena que la solución MATL de Luis.
fuente
TI-BASIC (serie TI-83 + / 84 +), 15 bytes
Utiliza entrada little-endian. Los hashes son bastante comunes en TI-BASIC, por lo que escribí una función hash brute-forcer para casos como este.
Tenemos un poco de suerte aquí, ya que el multiplicador tiene 9 dígitos en lugar de los 10 esperados.
fuente
05AB1E ,
17161512 bytes-1 byte gracias a @ErikTheOutgolfer .
-1 byte creando un puerto de la respuesta de Mathematica de @MishaLavrov .
-3 bytes gracias a @Grimy .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Ver este consejo 05AB1E mío (sección Cómo comprimir grandes números enteros? ) Para entender por qué
•NŽyf¯•
es99608231754
.fuente
128в
. Olvidé que hay un lugar para128
ser reducido a la mitad256
. ¡Gracias!¦C•26¤æÈÛµÀš•2ô₂+sk
(19).Carbón de leña, 17 bytes
¡Intentalo!
Puerto de la respuesta de Japt .
fuente