Inspirado por essa pergunta, que foi inspirada por essa , escreva um programa que use dois números inteiros e os adicione de uma maneira única, executando uma operação OR nos segmentos usados para exibi-los em um display de 7 segmentos. Para referência, os dígitos são representados da seguinte maneira:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Observe que o 1 usa os dois segmentos à direita, não à esquerda. Existem dois caracteres especiais que podem ser produzidos dessa maneira e não são números. Veja a tabela de adição abaixo:
| 0 1 2 3 4 5 6 7 8 9
--+--------------------
0 | 0 0 8 8 8 8 8 0 8 8
1 | 0 1 a 3 4 9 8 7 8 9
2 | 8 a 2 a 8 8 8 a 8 8
3 | 8 3 a 3 9 9 8 3 8 9
4 | 8 4 8 9 4 9 8 Q 8 9
5 | 8 9 8 9 9 5 6 9 8 9
6 | 8 8 8 8 8 6 6 8 8 8
7 | 0 7 a 3 Q 9 8 7 8 9
8 | 8 8 8 8 8 8 8 8 8 8
9 | 8 9 8 9 9 9 8 9 8 9
Observações úteis:
- Qualquer dígito mais ele mesmo se iguala
- 8 mais qualquer dígito é igual a 8
- 2 mais 1, 3 ou 7 é igual à letra 'a' (deve estar em minúscula)
- 4 mais 7 é igual a 'q' ou 'Q', sua escolha
- Os números devem estar alinhados à direita, para que os dígitos sejam adicionados da direita para a esquerda. Se um número tiver mais dígitos que o outro, os dígitos extras no início deverão permanecer inalterados. Não há 0's iniciais, a menos que o número seja exatamente 0.
- Todos os números serão 0 ou mais. Você não precisa manipular um sinal de '-'. (Principalmente porque não há um ajuste adequado para a soma de um '-' e um '1' ou '7'.)
Seu programa deve aceitar 2 números inteiros em qualquer formato que você escolher e gerar uma string contendo sua "soma" quando calculada dessa maneira. Isso é código-golfe, então seu programa deve ser o menor possível.
Exemplos:
- Entrada: 12345, 123. Saída: 12389
- Entrada: 88888, 42. Saída: 88888
- Entrada: 0, 23. Saída: 28
- Entrada: 120, 240. Saída: a80
- Entrada: 270, 42. Saída: 2Q8 (ou 2q8)
- Entrada: 1234567890, 1234567890. Saída: 1234567890
code-golf
kolmogorov-complexity
Darrel Hoffman
fonte
fonte
Q
ser minúsculo? A forma real pareceq
mais do que umaQ
a
definitivamente deve ser menor que caso, já queA
parece completamente diferente.Respostas:
Bash + utilitários comuns do Linux, 80
Observe que a
^?
fonte deve ser substituída por um caractere ASCII 0x7f.A string
s
é cada dígito de 7 segmentos0-9, a, Q
codificado com cada segmento correspondente a um bit de um caractere ASCII.A
h()
função translitera o número de entrada de decimal para a codificação especificada pors
e gera o resultado como uma sequência hexadecimal bruta.As duas seqüências de caracteres hexadecimais brutas resultantes são
OR
editadas em conjunto usando aritmética bash regular e, em seguida, são geradas pelo comandodc
sP
como um bytestream. Este bytestream é então transliterado de volta para decimal + a + Q e saída.Observe também que, ao usar a
<<<
construção bash herestring na função,h()
uma nova linha é anexada implicitamente à string redirecionada. Isso não importa - é simplesmente traduzido0x0a
no final de cada sequência hexadecimal; quando os dois números hexadecimais sãoOR
editados juntos, o resultado ainda está0x0a
no último caractere que não é transliterado e, portanto, simplesmente se converte em uma nova linha que é produzida após o resultado.Saída de teste:
fonte
Python 2, 155 bytes
Substitua
♥
por umDEL
caractere (0x7F).Chamando
f("12345", "123")
impressões12389
.fonte
%13
truque funciona. Obviamente, você optou pelo conjunto que não tinha caracteres abaixo de 40, mas na minha tradução em JavaScript eu escolhi o conjunto mais curto. O terceiro conjunto é o mais longo em JavaScript, teria sido111,5,118,117,29,121,123,37,127,125
.JavaScript (ES6),
158144 bytesEconomizou 14 bytes roubando descaradamente o
%13
truque de @ Lynn .fonte
Java, 170 bytes
Isso é terrivelmente longo ... mas, de qualquer forma, é Java.
Programa completo, com código não bloqueado
Todas as saídas (todas duplicadas uma vez)
fonte