Tenho certeza de que você conhece o esquema de preços de US $ 9,99, em vez de usar US $ 10. Bem, em seu novo emprego como administrador de sistemas em uma grande loja de varejo, eles querem que os preços sigam um esquema semelhante:
- Todos os preços estão em dólares inteiros, sem centavos.
- Todos os preços devem terminar com 5 ou 9, arredondando para o mais próximo, mas acima se o último dígito estiver entre 5 e 9. (Aplica-se ao último dígito 2 e 7)
- A entrada mais baixa é de US $ 1 e o preço mais baixo produzido deve ser de US $ 5.
Sua entrada é uma lista de números inteiros:
12
8
41
27
144
99
3
E a saída deve uma lista dos novos preços. No caso acima:
15
9
39
29
145
99
5
Respostas:
Brainfuck, 4428 bytes (inválido)
Depois que soube que o algoritmo funcionava, perdi o interesse e não terminei o manipulador de entrada. É por isso que esta solução resolve tecnicamente o problema, mas é muito difícil de usar. Quando você inicia o programa em um intérprete interativo ( quanto mais rápido, melhor), você pode inserir seu "número". Ele deve ser inserido no Base256 se o seu intérprete não suportar a conversão de números (o meu suporta). O preço máximo que você pode inserir é, portanto, 255.
Em seguida, ele executa um módulo de loop se o número for maior que 9 para dividir todos os dígitos, exceto o último. Os resultados da divisão são salvos, enquanto o último dígito é arredondado para 5 ou 9. Em seguida, são adicionados e impressos. Em seguida, o programa limpa todos os registros usados (provavelmente um exagero) e solicita o próximo número.
Ele lida com todos os casos especiais (
$1
,$20/$21 -> $19
etc.). Assista ao número4
aqui (cerca de 3 minutos, vídeo abreviado):Código
fonte
CJam,
1917 bytesTeste aqui.
Recebe a entrada como uma lista no estilo CJam e retorna a nova linha de saída separada.
Explicação
fonte
Python 2, 47
Se observarmos a sequência de valores arredondados, veremos que eles vêm em blocos de 5.
Encontramos o bloco numérico em que estamos
(n+3)/5
(chame esse valorJ
). Então, temos o direito de múltiplos5
comJ*5
e ajustar coisas como30
até29
subtraindo1
sempreJ
é uniforme.A-caso especial
1
de dar5
em vez de-1
, nós passar o resultado paramax(5,_)
.fonte
meS,-*hJ/-d2K5K%J2KQ
m-|*K5hJ/-d2K6%J2Q
lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Retina, 32 bytes
Aceita entrada em uma lista separada por vírgula. Deve haver uma vírgula à direita. Saídas no mesmo formato.
Explicação:
fonte
R,
51494743 bytesDeveria haver espaço para melhorar isso, mas acho que uma estratégia diferente pode ser melhor. Tira um vetor de números inteiros da varredura e gera um vetor de números inteiros. Essencialmente, isso usa divisão inteira para arredondar o número para baixo, adiciona 1 e multiplica por cinco. Qualquer coisa divisível por 10 tem 1 retirado. Se n = 1, ele incrementa a divisão inteira em 1.
Execução de teste
fonte
Python 3,
7482 bytesEu lutei pela brevidade em valores menores que 11 e pelo requisito de 1 para avaliar até 5.
fonte
Pyth,
21182928 bytesObrigado a @Jakube por cortar 3 bytes!
Experimente aqui.
EDIT: Aparentemente, era inválido. Eu consertei isso ao custo de 11 bytes; Vou tentar jogar mais.
fonte
eQ
é a mesma coisa que%Q10
, também é possívelI<KeQ6+-QK5;E+-QK9
9
, se o último dígito for0
ou1
Pitão, 21 bytes
Infelizmente eu tenho que gastar 4 bytes para lidar corretamente com $ 1.
fonte
1
com apenas 2 bytes.mt|t+d@jC"²a<"6ed6Q
Pitão, 18 bytes
Experimente on-line: Demonstration or Test Suite
Esta resposta é baseada na solução Python / Pyth do @ xor. A principal diferença é que eu trato o caso especial de maneira
1
diferente. O resultado real para1
seria0 - 1 = -1
. Usando Pythonor
posso substituir o0
por a6
, resultando em6 - 1 = 5
. Isso economiza a dor de tirar o máximo de5
e o resultado.Explicação:
fonte
Hássio , 133 bytes
Execute e veja o online expandido: http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4
fonte
TI-BASIC, 19 bytes
Usa o algoritmo do xnor. O TI-BASIC obtém vetorização e multiplicação de graça, mas gastamos mais alguns bytes porque ele não possui módulo.
fonte
Haskell, 114 bytes
Explicação:
A função
g
retorna9-n
ifn>6
or else5-n
ifn>1
or else-n-1
.g
recebe o último dígito e retorna o que deve ser adicionado ao número de entrada.f
usag
para obter a solução (mais muita manipulação de string).main
produz o resultado def
para cada linha de entrada.fonte
Rubi,
5550 + 1 bytesExecutá-lo com a
n
bandeira, assim:ruby -n prices.rb
. Insira cada preço em uma linha separada.fonte