Dado um display de 7 segmentos com alguns segmentos ativados e desativados, encontre uma sequência de dígitos (0-9), de modo que, após alternar os segmentos correspondentes para cada dígito, todos os segmentos sejam desativados.
Exemplo
_
_ [3] => | [1] => [OFF]
_ |
Números e seus segmentos correspondentes:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Regras
Codegolf - menor entrada ganha.
Entrada
Uma lista não vazia de segmentos ativados, fornecida como
Uma sequência de números. Os segmentos são numerados de cima para baixo, da esquerda para a direita; a partir de 0 ou 1. Os números não precisam estar em ordem.
Um único dígito de 7 bits. MSB / LSB não especificado (portanto, você pode escolher).
Caracteres não numéricos entre números são permitidos (mas não precisam ser suportados).
Por exemplo. para número 7
: 136
ou 1010010
ou0100101
Resultado
Uma sequência de números a serem "aplicados" ao visor. Não é restrito de forma alguma, como a ordem dos dígitos. Por exemplo. para o estado inicial correspondente ao número 1
, saídas válidas seria 1
, 111
, 010
, etc.
Uma saída alternativa é um dígito de 10 bits (novamente, MSB / LSB é sua escolha). Por exemplo. para 1
como entrada, a saída seria 1000000000
ou 0000000001
.
Algumas combinações têm várias soluções não repetitivas, por exemplo. os segmentos correspondentes à letra maiúscula H
podem ser desativados por 013
, mas também 489
e 0258
.
Se não existir uma solução (que eu acredito que não seja possível), a saída está vazia.
fonte
301
paraH
).17
,08
e1479
. As soluções para os segmentos verticais superiores, da esquerda para a direita, são39
e59
. As soluções para os segmentos verticais inferiores, da esquerda para a direita, são56
e2389
.2
nem sempre é necessário, porque você pode substituí-lo com qualquer um0468
,1358
ou1369
, dependendo se você quer um0
,8
ou9
em sua resposta, mas não há nenhuma maneira de eliminar7
a todos, e eu acho que você tem que ter pelo menos um de1
e3
.Respostas:
Geléia ,
2625 bytesExperimente online!
Recebe a entrada como um número inteiro de 7 bits. Retorna a forma binária de um número inteiro de 10 bits.
Este bruto apenas força todas as possibilidades. Remova o
Ḣ
para obter todas as saídas possíveis ou substitua-o por umX
para obter uma saída possível aleatória.Programa de Visualização Mágica!
Como funciona
fonte
“wØ][:koR¶z‘
) pode conter um erro. Seu número9
não possui o segmento inferior (compare9
em sua visualização com o da descrição da tarefa). Caso contrário, muito bom, especialmente a visualização!JavaScript (ES6), 60 bytes
Isso funciona porque:
fonte
JavaScript (ES6),
1171071018684 bytesEconomizou 15 bytes graças a Neil
Recebe a entrada como um número inteiro de 7 bits, onde o LSB é o segmento superior. Retorna um número inteiro de 10 bits em que o LSB é um dígito
0
.Demo
Mostrar snippet de código
fonte
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
. Ou se você assumir que existe uma respostaf=(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
, você pode economizar mais 8 bytes, removendo o83
eo,91,75
e usark+2
.Mathematica, 40 bytes
(Pode-se jogar mais escolhendo a saída para cada segmento com cuidado e alternando entre LSB e MSB.)
Tome entrada como uma lista de posições, por exemplo,
{2,4,5,7}
e envie um número de 10 bits (384
=0110000000
em binário) na ordem MSB (0, ..., 9).No exemplo, corresponde a
e a saída corresponde a
{7,8}
.Explicação:
Os números mágicos (lista codificada) são a saída retornada para cada segmento. (codificado em binário) E, se um número aparecer na lista duas vezes, o efeito é o mesmo de não aparecer, portanto, o XOR bit a bit é usado. Nós apenas precisamos XOR a saída do valor possível dos segmentos ativados.
fonte
Gelatina , 12 bytes
Experimente online!
Isso não força bruta e é notavelmente mais curto que minha outra solução. Recebe a entrada como uma lista de segmentos ativados e as saídas como LSB é o segmento superior.
Saída como lista de movimentos de dígitos.
Como funciona
Isso vai ser rápido
fonte
1*use digit 1 + 2*use digit 2 + 4*use digit 3 ... 64*use digit 7
, e então reduz-os em XOR @ ais523. O achatamento funcionaria em uma lista de dígitos usados, com mais caracteres.