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
: 136
o 1010010
o0100101
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 1
como entrada, la salida sería 1000000000
o 0000000001
.
Algunas combinaciones tienen varias soluciones no repetitivas, por ejemplo. Los segmentos correspondientes a la letra mayúscula H
se pueden desactivar mediante 013
, pero también 489
y 0258
.
Si no existe una solución (que creo que no es posible), la salida está vacía.
fuente
301
paraH
).17
,08
, y1479
. Las soluciones para los segmentos verticales superiores, de izquierda a derecha, son39
y59
. Las soluciones para los segmentos verticales inferiores, de izquierda a derecha, son56
y2389
.2
no siempre es necesario, porque puede reemplazarlo con cualquiera0468
,1358
o1369
, dependiendo de si desea un0
,8
o9
en su respuesta, pero no hay forma de eliminarlo7
, y creo que debe tener al menos uno de1
y3
.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 unX
para obtener una salida posible aleatoria.Programa de visualización mágica!
Cómo funciona
fuente
“wØ][:koR¶z‘
) puede contener un error. Su número9
carece del segmento inferior (compare9
en 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 el83
y el,91,75
y 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
=0110000000
en 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.