Você provavelmente todos sabem o display de 7 segmentos que pode exibir, entre outras coisas todos os dígitos de :
Desafio
Consideramos apenas os segmentos , sua tarefa é decodificar um único dígito, considerando quais segmentos estão ativados.
Isso pode ser codificado como um número inteiro de 8 bits. Aqui está uma tabela de cada dígito com sua representação binária e os valores little-endian e big-endian correspondentes:
Regras e E / S
- A entrada será uma das
- número inteiro único (como na tabela acima, uma das duas ordens fornecidas)
- uma lista / matriz / .. de bits
- uma sequência composta por caracteres
ABCDEFG
(você pode assumir que está classificada, como um exemploABC
codifica ), o caso deles é a sua escolha (não com maiúsculas e minúsculas)
- Saída será o dígito que codifica
- Você não pode assumir entradas inválidas (inválido significa que não há dígito correspondente)
Testes
Como esse desafio permite múltiplas representações, consulte a tabela.
Respostas:
JavaScript (ES6), 26 bytes
Recebe entrada em little Endian.
Experimente online!
fonte
Python 3 , 18 bytes
Experimente online!
Usa entradas little-endian. Contém um
\x7F
byte bruto .Python 2 , 27 bytes
Experimente online!
fonte
Wolfram Language (Mathematica) , 41 bytes
Experimente online!
Usa a coluna little-endian de números inteiros como entrada. Ignore o aviso de sintaxe.
Para uma entrada X, primeiro pegamos o X mod 41 e depois o resultado 11. O resultado é o mod 11 distinto, para que possamos extraí-los de uma tabela. Por exemplo, 126 mod 41 mod 11 é 3, portanto, se tornarmos a posição 3 igual a 0, obteremos a resposta correta para uma entrada de 126.
A tabela é
9[,6,0,8,2,3,1,7,5,4]
. Parte 0 é a cabeça, que é9
. Falta a parte 1, portanto, éNull
para salvar um byte: nunca precisamos participar da parte 1. Então a parte 2 é6
, a parte 3 é0
, e assim por diante, como de costume.Resposta de Jonathan Allan nos dá
1[4,9,8,6,2,0,5,3,7][[384~Mod~#~Mod~13]]&
. Isso não é mais curto, mas evita o aviso de sintaxe!Língua Wolfram (Mathematica) ,
2725 bytes(Há algum personagem aqui que não aparece muito, desculpe. Clique no link abaixo e você verá.)
Experimente online!
Isso é tudo sobre forçar brutalmente uma string a ser inserida,
Hash
para que os hashes acabem tendo os valores corretos, mod 11. Mais força bruta provavelmente pode nos levar a uma solução ainda mais curta.fonte
Gelatina , 12 bytes
Aceita um número inteiro little-endian.
Experimente online!
Esta é a implementação ingênua, pode haver uma maneira de obter um código de terser.
fonte
Python 2 , 31 bytes
Experimente online! aceita entrada como little-endian.
fonte
Java (JDK) , 32 bytes
Experimente online!
Créditos
fonte
JavaScript (Node.js) , 25 bytes
Aceita um número inteiro little-endian.
Experimente online!
Portas para 31 bytes em Python com
lambda n:'1498620537'[384%n%13]
fonte
Espaço em branco , 152 bytes
Obrigatório "os S, T e L não estão realmente lá, são apenas representações visíveis dos comandos".
Experimente online!
Termina com um erro.
Sintaxe equivalente a montagem:
fonte
brainfuck ,
474176154 154151149137 bytesToma uma sequência de oito
0
e1
inclui a primeira0
para o ponto decimal.(como na segunda coluna da tabela na postagem)
Dígito de saída de 0 a 9.
Experimente online!
Algoritmo
Observando o estado de um segmento específico, podemos dividir um conjunto de dígitos possíveis em subconjuntos menores. Abaixo está a árvore de pesquisa binária estática usada no meu código. A subárvore esquerda corresponde ao estado ON do segmento, a direita corresponde ao estado OFF do segmento.
Algumas observações úteis para jogar golfe
+++++
pelos dois valores e depois+
apenas por seis.+
comandos se adicionarmos 2 ao valor da saída com antecedência. Nesse caso, precisamos diminuí-lo para0
e1
somente e obter vantagem para outros dígitos.fonte
Retina , 96 bytes
Experimente online! Pode não ser o melhor caminho, mas é uma maneira interessante de programar no Retina. Explicação:
Tenta capturar os casos interessantes. As capturas positivas simplesmente capturam a letra, se estiver presente. O comprimento da captura é, portanto, 1 se estiver presente e 0 se estiver ausente. Os casos especiais são capturas 4 e 6, que existem apenas se D ou E estão ausentes, respectivamente. Eles só podem ser expressos em decimal como
$#4
e$#6
mas é tudo o que precisamos aqui. As capturas são então construídas em uma sequência cujo comprimento é o número desejado. Por exemplo, se escrevermos6*$1
, essa sequência terá comprimento 6 se A estiver presente e 0 se estiver ausente. Para escolher entre diferentes expressões, usamos$.
(para as capturas positivas) ou$#
(para as capturas negativas) que são avaliadas como 0 ou 1 e isso pode ser multiplicado pela cadeia até agora.F
é repetido 6 vezes eB
duas vezes (por concatenação, pois é mais golfista). No entanto, o resultado é ignorado, a menos que ambosE
eG
estejam presentes. Isso lida com os casos de2
,6
e8
.F
é repetido 5 vezes e, seB
estiver presente, é adicionado uma sexta vez mais um 3 extra (representado por uma sequência constante de comprimento 3). No entanto, o resultado é ignorado, a menos queD
esteja presente eE
ausente. Isso lida com os casos de3
,5
e9
.A
é repetido 6 vezes, eG
repetido 3 vezes, e um acréscimo1
adicional (representado por um caractere constante entre os dois porque é mais golfista). No entanto, o resultado é ignorado, a menos queD
esteja ausente. Isso lida com os casos de1
,4
e7
.As strings acima são então concatenadas e o comprimento obtido. se nenhuma das opções acima se aplicar, nenhuma sequência será gerada e seu comprimento será, portanto
0
.As seqüências resultantes (antes que o comprimento seja obtido) são as seguintes:
fonte
MATL , 14 bytes
Entrada é um número que representa os segmentos no formato little-endian.
Experimente online!
Explicação
fonte
Perl 5- pl, 24 bytes
Experimente online!
Toma inteiros little-endian.
fonte
Ruby , 29 bytes
Experimente online!
fonte
Japonês, 15 bytes
Pega o valor big-endian como entrada.
Tente
Explicação
A cadeia contém os caracteres em cada um dos pontos de código dos valores big endian;
Ud
obtém o caractere no ponto de código da entrada eb
encontra o índice na string.fonte
Neim , 15 bytes
Explicação:
Experimente online!
fonte
Stax , 12 bytes
Execute e depure
A entrada é um pequeno número inteiro endian.
Ele usa a mesma constante de string que a solução MATL de Luis.
fonte
TI-BASIC (TI-83 + / 84 + series), 15 bytes
Usa entrada little-endian. Os hashes são bastante comuns no TI-BASIC, então eu escrevi uma função hash brute-forcer para casos como este.
Temos um pouco de sorte aqui, pois o multiplicador tem 9 dígitos e não os 10 esperados.
fonte
05AB1E ,
17161512 bytes-1 byte graças a @ErikTheOutgolfer .
-1 byte, criando uma porta da resposta Mathematica de @MishaLavrov .
-3 bytes graças a @Grimy .
Experimente online ou verifique todos os casos de teste .
Explicação:
Veja este 05AB1E ponta do meu (seção Como comprimir grandes inteiros? ) Para entender por que
•NŽyf¯•
é99608231754
.fonte
128в
. Esqueceu que existe um constructo para128
ser dividido pela metade256
. Obrigado!¦C•26¤æÈÛµÀš•2ô₂+sk
(19).Carvão, 17 bytes
Tente!
Resposta do porto do Japão .
fonte