Hora de ajustar alguns preços!


19

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

Podemos pegar a entrada uma a uma? Ou separados por algo diferente de uma nova linha?
mınxomaτ 21/09/2015

Para simplificar, acho que o formato especificado é o melhor, para que você possa se concentrar em resolver o problema real, em vez de lidar com a formatação também. Mas é claro que um único número inteiro em uma linha é permitido. :)
ciscoheat

11
Sim, provavelmente é mais fácil lidar com uma lista específica de idioma. Mas por quanto tempo posso continuar alterando as especificações? Essa é uma das razões pelas quais hesitei em postar qualquer coisa no código de golfe.
ciscoheat

2
A nova linha agora é descartada como um requisito, especificando apenas "uma lista". Espero que melhore as coisas, não pior ...!
ciscoheat

6
"Mas por quanto tempo posso continuar alterando as especificações? Esse é um dos motivos pelos quais hesitei em publicar alguma coisa no código do golfe". Caso não esteja ciente disso, você pode postar idéias de desafios na área restrita, onde poderá obter feedback da comunidade antes que o desafio seja lançado, para que coisas como essa possam (espero) ser apontadas e corrigidas antes que as alterações invalidem as respostas existentes.
Martin Ender

Respostas:


13

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 -> $19etc.). Assista ao número 4aqui (cerca de 3 minutos, vídeo abreviado):

demonstração em vídeo

Código

>+<+[>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<[>[-]+<-]>
[<+>>>>>>>>>>>[-],>>[-]<[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>
>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]+++++++++>[<<<<+
>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]
+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>
>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>+<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<
-]>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<
<[>[-]+<-]>[<+>>>>>>>>>>>>[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++++++++++>>>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>[<<<<<+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>-[<<+<+>>>-]<<<[>>>+<<<-]+>[<->[-]]<[>>-[>>>>>>>>-<<<<<<<<[-]]+<<[-]]>>-]>>>>
>>>>+<<<<<<<]>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>
>[-]++++++++++>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<
<<<-]>-]>>>>>>>>>[-]<<[>>+<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<
<<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>
>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>[<+<<<<<
<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<
<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>[>-<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>
>>>>[-]<[>+<-]<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>-]
<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>
>>>>>>+<<<<<<<<<<-]>>>>>>>[-]>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<
-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<
<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>>>>>
>>>+<<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>>-]<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>
>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]++++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>
>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>
>>+<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++++++>>>>>>
>>+<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-]<<<<<<<<<<<
<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-
]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]<[>>>>>>>-<<<<<<<[-]]>>>[-]>>
>[-]>>>>[<<<<+<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>>>[-]+
++++++++<<<<<[<<<+>>>-]>>>>>[<<<<<<<<<<<+>+<<+>>>>>>>>>>>>-]<<<<<<<<<<<<[>>>>>>>>>>>>+<<
<<<<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]
>>[>>>-<<<[-]]<<<[-]>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[-]>>>>>>>[<<<<<<<+>+>>>>>>-]<<<
<<<[>>>>>>+<<<<<<-]<[>>>>>>>>-<<<<<<<<[-]]]->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>
>+<<<<<<<<-]>>>>>>>>[>>>>>>>>+<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+
>>>>>>>>>>[-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>
->>>[-]<<<[>>>+<<<-]>[-]>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>>>[<<<<<<
<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++<<<<<
<<<<<-]>>>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>-]<<<<[<<<<
<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>>[<<
<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>[-]>>[<<+<<<<<<<+>>>
>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<
<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+
<<<<<<<<<<<-]>[-]>[-]>[-]>[-]>>>>[<<<<<+[>+<<<<+>>>-]<<<[>>>+<<<-]+>>>>----------[<<<<->
>>>[-]]<<<<[>>+>[-]<<<-]>>[>>+<<<<+>>-]<<[>>+<<-]+>>>>----------[<<<<->>>>[-]]<<<<[>+>[-
]<<-]>>>>>>>>-]<<<<<<<[<++++++++[>++++++>++++++<<-]>.>.[-]<[-]]>[<<++++++++[>>++++++<<-]
>>.[-]]<<++++++++[>>>++++++<<<-]>>>.[-]<<<++++++++++.[-]>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<
<->-]<[>[-]+<-]>[<+<->>-]<<]

Você receberá um voto por ambição, gostaria de poder dar mais de um. :)
ciscoheat

8
Eu acho que esse gif precisa de um aviso de epilepsia.
Alex

12

CJam, 19 17 bytes

q~{2-Ab)4>59s=N}/

Teste aqui.

Recebe a entrada como uma lista no estilo CJam e retorna a nova linha de saída separada.

Explicação

qN/{   e# Run this block for each line of the input...
  ~    e#   Evaluate the current line to get the integer.
  2-   e#   Subtract 2 to get all but the last digit right.
  Ab)  e#   Convert to base 10 (discarding a potential minus sign) and split off
       e#   the last digit.
  4>   e#   Test if it's greater than 4.
  59s= e#   Select the correct digit from the string "59" based on this result.
  N    e#   Push a line feed.
}/

11

Python 2, 47

lambda l:[max(5,(n+3)/5*5-(n-2)/5%2)for n in l]

Se observarmos a sequência de valores arredondados, veremos que eles vêm em blocos de 5.

... 25, 29, 29, 29, 29, 29, 35, 35, 35, 35, 35, 39, ...

Encontramos o bloco numérico em que estamos (n+3)/5(chame esse valor J). Então, temos o direito de múltiplos 5com J*5e ajustar coisas como 30até 29subtraindo 1sempre Jé uniforme.

A-caso especial 1de dar 5em vez de -1, nós passar o resultado para max(5,_).


Para corrigir a versão Pyth Eu acho que você pode fazermeS,-*hJ/-d2K5K%J2KQ
FryAmTheEggman

2
ou 2 bytes mais curto:m-|*K5hJ/-d2K6%J2Q
Jakube 21/09

11
@Jakube Isso é inteligente, e você publicar?
Xnor

Sim eu vou. Mas você pode ter a ideia da sua resposta em Python. Ele salva um byte:lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Jakube

8

Retina, 32 bytes

Aceita entrada em uma lista separada por vírgula. Deve haver uma vírgula à direita. Saídas no mesmo formato.

T`d`aa555559`.,
T+`da`ad`\da
a
5

Explicação:

T`               #Transliteration mode.
  d`aa555559`    #Map the digits 0-9 to aa55555999
             .,  #Map only the trailing digits.
T+`              #Do until input does not change.
   da`ad`        #Map a to 9, 0 to a, and 1-9 to 0-8
         \da     #Only do this to each a and the character before each a.
a                #Match all leftover a's. This only happens when the input contains the integer 1.
5                #Replace them with 5.

5

R, 51 49 47 43 bytes

(f=((n=scan()-2)%/%5+1+(n<0))*5)-(f%%10==0)

Deveria 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

> (f=((n=scan()-2)%/%5+1+(n<0))*5)-(f%%10==0)
1: 1
2: 12
3: 8
4: 41
5: 27
6: 144
7: 99
8: 3
9: 
Read 8 items
[1]   5  15   9  39  29 145  99   5
> 

5

Python 3, 74 82 bytes

a=eval(input())
for i in a:print(round(i,-1)+[5,-1][max(4,i-2)%10>4])

Eu lutei pela brevidade em valores menores que 11 e pelo requisito de 1 para avaliar até 5.


Parece que seu programa leva apenas um único número inteiro?
Daniero 23/09/2015

@daniero correto, corrigido agora para aceitar a lista.
Todd

4

Pyth, 21 18 29 28 bytes

Obrigado a @Jakube por cortar 3 bytes!

KeQJ-QKI<K2tJ.q;I<K6+J5;E+J9

Experimente aqui.

EDIT: Aparentemente, era inválido. Eu consertei isso ao custo de 11 bytes; Vou tentar jogar mais.


eQé a mesma coisa que %Q10, também é possível I<KeQ6+-QK5;E+-QK9
alinhar

Legal, eu não sabia disso!
RK.

Sem problemas. Sua abordagem está errada. Você deve arredondar para baixo 9, se o último dígito for0 ou1
Jakube

Ah, eu vou trabalhar nisso.
RK.

4

Pitão, 21 bytes

m?tdtt+d@jC"²a<"6ed5Q

Infelizmente eu tenho que gastar 4 bytes para lidar corretamente com $ 1.


Bastante inteligente. Você pode lidar 1com apenas 2 bytes. mt|t+d@jC"²a<"6ed6Q
Jakube 21/09

4

Pitão, 18 bytes

m-|*K5hJ/-d2K6%J2Q

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 1diferente. O resultado real para 1seria 0 - 1 = -1. Usando Pythonor posso substituir o 0por a 6, resultando em 6 - 1 = 5. Isso economiza a dor de tirar o máximo de 5e o resultado.

Explicação:

m-|*K5hJ/-d2K6%J2Q
m                Q   map each number d of the input list Q to:
    K5                  K = 5
       J/-d2K           J = (d - 2) / K
   *K hJ                   K * (J + 1)
  |                     or
             6             6 # if K*(J+1)==0
 -            %J2       minus (J mod 2)

3

Hássio , 133 bytes

func main(){i=[12,8,41,27,144,99,3];foreach(e in i){f=e%10;if(!(e/10==0))print(e/10);if(f<5)r=5;else if(f>5)r=9;elser=f;println(r);}}

Execute e veja o online expandido: http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4


Desculpe pelo rompimento do link, estávamos realizando algum trabalho de banco de dados. Funciona agora.
Jacob Misirian

Conforme descrito no wiki da tag de golfe com código , as respostas devem ser programas ou funções completos. Trechos que simplesmente codificam a entrada não são permitidos, a menos que a pergunta diga explicitamente o contrário.
Dennis

3

TI-BASIC, 19 bytes

int(Ans/5+.6
max(5,5Ans-not(fPart(Ans/2

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.


1

Haskell, 114 bytes

g n
 |n>6=9-n
 |n>1=5-n
 |1>0=(-n-1)
f n=show$(read n)+(g$read$(:[])$last n)
main=interact(unlines.(map f).lines)

Explicação:

A função gretorna 9-nif n>6or else 5-nif n>1or else -n-1. grecebe o último dígito e retorna o que deve ser adicionado ao número de entrada. fusa gpara obter a solução (mais muita manipulação de string). mainproduz o resultado de fpara cada linha de entrada.


1

Rubi, 55 50 + 1 bytes

Executá-lo com a nbandeira, assim: ruby -n prices.rb. Insira cada preço em uma linha separada.

x=$_.to_i
p x<7?5:(x-2).round(-1)+(~/[2-6]$/?5:-1)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.