Esse desafio é trazido a você por inspiração real (e trágica). Recentemente, a linha numérica no meu teclado tem sido um pouco esporádica. As teclas 1-9
funcionam algumas vezes - mas outras vezes não têm resultado. Como um programador ávido, isso é horrível! (Veja esse ponto de exclamação? É assim que você sabe que eles estão trabalhando no momento.) Não só preciso dos números, mas também dos símbolos!@#$%^&*(
são completamente ineficazes metade do tempo também! Como programador em C, em vez de tirar um tempo da minha agenda ocupada de rabiscar o código para consertar meu laptop, fiquei mais interessado em solucionar o problema. Ao longo das últimas semanas, lentamente, todos os literais numéricos no meu código foram substituídos por hexadecimal, para que eu não precise procurar por números para copiar e colar. No entanto, alguns números não são fáceis de digitar sem as teclas 1-9
. Por exemplo, o número 1
não pode ser escrito de maneira tão simples em hexadecimal, e eu tentei substituir 1
s no meu código por 0xF - 0xE
. As únicas chaves que são afetadas são 1-9
, por isso, manter o pleno uso de símbolos como +
, -
, e /
. No entanto, não posso usar multiplicação ou parênteses, pois*
e (
são frequentemente quebrados. Isso leva ao seu desafio.
Entrada
Um número inteiro, n
para stdin ou equivalente do seu idioma. Se desejar, o número inteiro pode ser precedido ou seguido por uma nova linha ou outro caractere de espaço em branco. Como alternativa, você pode receber entrada por meio de um argumento de linha de comando.
Seu programa deve responder à entrada negativa corretamente e ser capaz de manipular pelo menos números inteiros assinados de 32 bits.
Saída
Seu programa deve gerar, de alguma forma observável, a maneira mais curta (em caracteres que não sejam espaços em branco) possível de escrever o número n
como uma soma, diferença ou divisão de um ou mais valores hexadecimais. Há mais de uma maneira de resolver esse problema e não há requisitos para que você defina qualquer saída de tamanho igual a qualquer outra.
A saída deve estar no formato em A % A % A...
que A
é um valor hexadecimal a seguir 0x
contendo apenas dígitos A-F a-f
e %
é um dos símbolos -+/
. Vamos /
descrever a divisão inteira, não o ponto flutuante.
(Observe que sua saída deve resultar na n
avaliação de divisões primeiro, da esquerda para a direita e, em seguida, em adições e subtrações, da esquerda para a direita, conforme convenção).
Casos de teste
Saída de entrada
1
0xF - 0xE
(ou0xF-0xE
ou0xB-0xA
ou0xd - 0xc
ou0xF/0xF
)15
0xF
255
0xFF
30
0xF + 0xF
Pontuação e Regras
Isso é código-golfe. Sua pontuação preliminar é o número de bytes no seu arquivo de origem.
Você NÃO pode usar nenhum dos dígitos 1-9
da sua fonte.
Você PODE usar símbolos !@#$%^&*(
na sua fonte, mas cada um tem uma penalidade de +20 na sua pontuação.
Seu programa pode ser substituído por uma função que aceita n
como argumento, desde que essa função produz alguma forma de saída legível por humanos. O valor de retorno da sua função NÃO conta como saída.
As brechas padrão não são permitidas.
Menor pontuação ganha! Boa sorte!
Eu criei alguma formatação / questionamento / clareza? Avise-se me! Esta é a minha primeira submissão a este site!