Dada una pantalla de 7 segmentos con algunos segmentos encendidos y otros apagados, encuentre una secuencia de dígitos (0-9), de modo que después de alternar los segmentos correspondientes para cada dígito, todos los segmentos se apaguen.
Ejemplo
_
_ [3] => | [1] => [OFF]
_ |
Números y sus segmentos correspondientes:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Reglas
Codegolf ⊨ gana la entrada más corta.
Entrada
Una lista no vacía de segmentos que están activados, dada como
Una secuencia de números. Los segmentos están numerados de arriba a abajo, de izquierda a derecha; a partir de 0 o 1. Los números no necesitan estar en orden.
Un solo dígito de 7 bits. MSB / LSB no especificado (por lo tanto, puede elegir).
Se permiten caracteres no numéricos entre números (pero no es necesario que sean compatibles).
P.ej. para número 7: 136o 1010010o0100101
Salida
Una secuencia de números que se "aplicarán" a la pantalla. No está restringido de ninguna manera, como el orden de los dígitos. P.ej. para el estado inicial correspondiente a número 1, salidas válidas sería 1, 111, 010, etc.
Una salida alternativa es un dígito de 10 bits (nuevamente, MSB / LSB es su elección). P.ej. para 1como entrada, la salida sería 1000000000o 0000000001.
Algunas combinaciones tienen varias soluciones no repetitivas, por ejemplo. Los segmentos correspondientes a la letra mayúscula Hse pueden desactivar mediante 013, pero también 489y 0258.
Si no existe una solución (que creo que no es posible), la salida está vacía.
fuente

301paraH).17,08, y1479. Las soluciones para los segmentos verticales superiores, de izquierda a derecha, son39y59. Las soluciones para los segmentos verticales inferiores, de izquierda a derecha, son56y2389.2no siempre es necesario, porque puede reemplazarlo con cualquiera0468,1358o1369, dependiendo de si desea un0,8o9en su respuesta, pero no hay forma de eliminarlo7, y creo que debe tener al menos uno de1y3.Respuestas:
Jalea ,
2625 bytesPruébalo en línea!
Toma la entrada como un entero de 7 bits. Devuelve la forma binaria de un entero de 10 bits.
Este bruto simplemente obliga a todas las posibilidades. Elimine el
Ḣpara obtener todas las salidas posibles o reemplácelo con unXpara obtener una salida posible aleatoria.Programa de visualización mágica!
Cómo funciona
fuente
“wØ][:koR¶z‘) puede contener un error. Su número9carece del segmento inferior (compare9en su visualización con el de la descripción de la tarea). De lo contrario, muy agradable, especialmente la visualización.JavaScript (ES6), 60 bytes
Esto funciona porque:
fuente
JavaScript (ES6),
1171071018684 bytesGuardado 15 bytes gracias a Neil
Toma la entrada como un entero de 7 bits, donde el LSB es el segmento superior. Devuelve un entero de 10 bits donde el LSB es un dígito
0.Manifestación
Mostrar fragmento de código
fuente
f=(n,k=1023)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?k--&&f(n,k):k. O si se asume que existe una respuesta,f=(n,k=0)=>[83,0,57,73,10,71,87,1,91,75].reduce((n,v,i)=>n^=k>>i&1&&v+36,n)?f(n,k+1):k.1-7, puede guardar otros 8 bytes eliminando el83y el,91,75y usandok+2.Mathematica, 40 bytes
(Se puede jugar más al elegir cuidadosamente la salida para cada segmento y cambiar entre LSB y MSB).
Tome la entrada como una lista de posiciones, por ejemplo,
{2,4,5,7}y envíe un número de 10 bits (384=0110000000en binario) en orden MSB (0, ..., 9).En el ejemplo corresponde a
y la salida corresponde a
{7,8}.Explicación:
Los números mágicos (lista codificada) es la salida que se devuelve para cada segmento. (codificado en binario) Y, si un número aparece en la lista dos veces, el efecto es el mismo de no aparecer, por lo que se utiliza XOR a nivel de bits. Solo necesitamos XOR la salida del posible valor de los segmentos activados.
fuente
Jalea , 12 bytes
Pruébalo en línea!
Esto no tiene fuerza bruta, y es notablemente más corto que mi otra solución. Toma la entrada como una lista de segmentos activados, y las salidas como LSB es el segmento superior.
Salida como lista de movimientos de dígitos.
Cómo funciona
Esto va a ser rápido
fuente
1*use digit 1 + 2*use digit 2 + 4*use digit 3 ... 64*use digit 7, luego XOR los reduce @ ais523. El aplanamiento funcionaría en una lista de dígitos utilizados que requiere más caracteres.