¡Es hora de ajustar algunos precios!

19

Estoy seguro de que conoce el esquema de precios de $ 9.99, en lugar de usar $ 10. Bueno, en su nuevo trabajo como administrador del sistema en una gran tienda minorista, quieren que los precios se adhieran a un esquema similar:

  • Todos los precios están en dólares enteros, sin centavos.
  • Todos los precios deben terminar con 5 o 9, redondeando al más cercano pero hacia arriba si el último dígito está justo entre 5 y 9. (Se aplica al último dígito 2 y 7)
  • La entrada más baja es de $ 1, y el precio de salida más bajo debe ser de $ 5.

Su entrada es una lista de enteros:

12
8
41
27
144
99
3

Y la salida debe una lista de los nuevos precios. En el caso anterior:

15
9
39
29
145
99
5
calentar
fuente
¿Podemos tomar la entrada uno por uno? ¿O separados por algo más que una nueva línea?
mınxomaτ
Para simplificar, creo que el formato especificado es el mejor, por lo que puede concentrarse en resolver el problema real en lugar de manejar el formato también. Pero, por supuesto, se permite un solo entero en una fila. :)
ciscoheat
1
Sí, una lista específica del idioma es probablemente más fácil de manejar. ¿Pero cuánto tiempo puedo seguir cambiando las especificaciones? Esta es una de las razones por las que he dudado en publicar algo en code golf.
Ciscoheat
2
Newline ahora se elimina como un requisito, especificando solo "una lista". ¡Espero que mejore las cosas, no que empeore ...!
ciscoheat
66
"¿Pero cuánto tiempo puedo seguir cambiando las especificaciones? Esta es una de las razones por las que he dudado en publicar algo en el código de golf". En caso de que no lo sepa, puede publicar ideas de desafío en el sandbox donde puede obtener comentarios de la comunidad antes de que el desafío comience , de modo que cosas como esta puedan (con suerte) ser señaladas y reparadas antes de que los cambios invaliden las respuestas existentes.
Martin Ender

Respuestas:

13

Brainfuck, 4428 bytes (inválido)

Una vez que supe que el algoritmo funcionaba, perdí el interés y no terminé el controlador de entrada. Es por eso que esta solución resuelve técnicamente el problema, pero es muy difícil de usar. Cuando inicia el programa en un intérprete interactivo (más rápido es mejor), puede ingresar su "número". Debe ingresarse en Base256 si su intérprete no admite la conversión de números (el mío sí). El precio máximo que puede ingresar es, por lo tanto, 255.

Luego realiza un módulo de bucle si el número es mayor que 9 para dividir todos los dígitos excepto el último. Los resultados de la división se guardan, mientras que el último dígito se redondea a 5 o 9. Luego se agregan e imprimen. Luego, el programa limpia todos los registros usados ​​(probablemente exagerados) y solicita el siguiente número.

Maneja todos los casos especiales ( $1, $20/$21 -> $19etc.). Míralo correr para el número 4aquí (aproximadamente 3 minutos, video acortado):

video de demostración

Código

>+<+[>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<[>[-]+<-]>
[<+>>>>>>>>>>>[-],>>[-]<[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>
>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]+++++++++>[<<<<+
>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]
+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>
>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>+<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<
-]>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<
<[>[-]+<-]>[<+>>>>>>>>>>>>[-]<[>+<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++++++++++>>>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>[<<<<<+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>-[<<+<+>>>-]<<<[>>>+<<<-]+>[<->[-]]<[>>-[>>>>>>>>-<<<<<<<<[-]]+<<[-]]>>-]>>>>
>>>>+<<<<<<<]>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>
>[-]++++++++++>[<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<
<<<-]>-]>>>>>>>>>[-]<<[>>+<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<
<<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>
>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>[<+<<<<<
<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]>>>[<<<+<<<<<<<+>>>>>>>>>>-]<<<<
<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>[>-<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>
>>>>[-]<[>+<-]<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>-]
<<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>[<<+<<<<<<<<+>>>>>>>>>>-]<<<<<<<<<<[>>>>
>>>>>>+<<<<<<<<<<-]>>>>>>>[-]>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<
-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>>>-<<
<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>>>>>>
>>>+<<<<<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>>-]<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>
>>>>>>>>+<<<<<<<<<-]>>>>>>>[-]++++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<
<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]>>[>>
>>-<<<<[-]]<<<[-]<->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>[>>>>
>>+<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++++++>>>>>>
>>+<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-]<<<<<<<<<<<
<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>[<+<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>
>>>>>[-]++>[<<<<+>>>>-]<[<<<<<<+>+<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>[>>[<+<<<+>>>>-
]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]<[>>>>>>>-<<<<<<<[-]]>>>[-]>>
>[-]>>>>[<<<<+<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>>>[-]+
++++++++<<<<<[<<<+>>>-]>>>>>[<<<<<<<<<<<+>+<<+>>>>>>>>>>>>-]<<<<<<<<<<<<[>>>>>>>>>>>>+<<
<<<<<<<<<<-]>>[>>[<+<<<+>>>>-]<<<<[>>>>+<<<<-]+>>>[<<->>>-<<<<->>>[-]]<<<[>>[-]+<<-]>>-]
>>[>>>-<<<[-]]<<<[-]>>>>>>>[<<<<<<<<+>>>>>>>>-]<<<<<<<<[[-]>>>>>>>[<<<<<<<+>+>>>>>>-]<<<
<<<[>>>>>>+<<<<<<-]<[>>>>>>>>-<<<<<<<<[-]]]->>>>>>>>[<<<<<<<<->>>>>>>>-]<<<<<<<<[>>>>>>>
>+<<<<<<<<-]>>>>>>>>[>>>>>>>>+<<<<<<<<<<<<<<<<<<->>>>>>>>>>[-]]<<<<<<<<<-]<[>[-]+<-]>[<+
>>>>>>>>>>[-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>
->>>[-]<<<[>>>+<<<-]>[-]>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<->-]>>>>>>>>>>>>>>>>>[<<<<<<
<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>>[-]+++++<<<<<
<<<<<-]>>>>>>>>>>>>>>>>>>>>>>[<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>-]<<<<[<<<<
<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<[>[-]+<-]>[<+>>>>>>>>>>[-]>>>[<<
<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>[-]>>[<<+<<<<<<<+>>>
>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>[>+<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<
<<-]>>>>>>>>>>>[-]<<<[>>>+<<<-][-]>>>[<<<+<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+
<<<<<<<<<<<-]>[-]>[-]>[-]>[-]>>>>[<<<<<+[>+<<<<+>>>-]<<<[>>>+<<<-]+>>>>----------[<<<<->
>>>[-]]<<<<[>>+>[-]<<<-]>>[>>+<<<<+>>-]<<[>>+<<-]+>>>>----------[<<<<->>>>[-]]<<<<[>+>[-
]<<-]>>>>>>>>-]<<<<<<<[<++++++++[>++++++>++++++<<-]>.>.[-]<[-]]>[<<++++++++[>>++++++<<-]
>>.[-]]<<++++++++[>>>++++++<<<-]>>>.[-]<<<++++++++++.[-]>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<
<->-]<[>[-]+<-]>[<+<->>-]<<]
mınxomaτ
fuente
Obtendrá un voto por la ambición, ojalá pudiera dar más de uno. :)
ciscoheat
8
Creo que gif necesita una advertencia de epilepsia.
Alex A.
12

CJam, 19 17 bytes

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

Pruébalo aquí.

Toma la entrada como una lista de estilo CJam y devuelve la nueva línea de salida separada.

Explicación

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.
}/
Martin Ender
fuente
11

Pitón 2, 47

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

Si observamos la secuencia de valores redondeados, vemos que vienen en bloques de 5.

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

Encontramos en qué bloque de números estamos (n+3)/5(llame a este valor J). Luego, obtenemos el múltiplo correcto de 5with J*5, y ajustamos cosas como 30abajo 29restando 1siempre que Jsea ​​uniforme.

Para 1dar un caso especial en 5lugar de -1, pasamos el resultado a max(5,_).

xnor
fuente
Para arreglar la versión de Pyth, creo que puedes hacerlomeS,-*hJ/-d2K5K%J2KQ
FryAmTheEggman
2
o 2 bytes más cortos:m-|*K5hJ/-d2K6%J2Q
Jakube
1
@Jakube Eso es inteligente, ¿qué tal si lo publicas?
xnor
Esta bien lo hare. Pero puedes tomar la idea para tu respuesta de Python. Ahorra un byte:lambda l:[((n+3)/5*5or 6)-(n-2)/5%2for n in l]
Jakube
8

Retina, 32 bytes

Acepta entradas en una lista separada por comas. Debe haber una coma final. Salidas en el mismo formato.

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

Explicación:

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.
El numero uno
fuente
5

R, 51 49 47 43 bytes

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

Debería haber espacio para mejorar esto, pero creo que una estrategia diferente podría ser mejor. Toma un vector de enteros del escaneo y genera un vector de enteros. Esencialmente, esto usa la división de enteros para redondear el número hacia abajo, suma 1 y lo multiplica por cinco. Cualquier cosa divisible por 10 tiene 1 quitado. Si n = 1, entonces incrementa la división entera en 1.

Prueba de funcionamiento

> (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
> 
MickyT
fuente
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])

Luché por la brevedad en valores inferiores a 11 y el requisito de 1 para evaluar a 5.

Todd
fuente
¿Parece que su programa solo toma un número entero?
daniero
@daniero correcto, arreglado ahora para aceptar la lista.
Todd
4

Pyth 21 18 años 29 28 bytes

¡Gracias a @Jakube por cortar 3 bytes!

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

Pruébalo aquí

EDITAR: aparentemente no era válido. Lo arreglé al costo de 11 bytes; Intentaré jugar más al golf.

RK.
fuente
eQes lo mismo %Q10, también puedes I<KeQ6+-QK5;E+-QK9
incluir
¡Genial, no sabía eso!
RK.
No hay problema. Sin embargo, su enfoque es incorrecto. Debería redondear a 9, si el último dígito es 0o1
Jakube
Ah, trabajaré en eso.
RK.
4

Pyth, 21 bytes

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

Lamentablemente, tengo que gastar 4 bytes para manejar correctamente $ 1.

orlp
fuente
Muy inteligente. Sin 1embargo, puede manejar con solo 2 bytes. mt|t+d@jC"²a<"6ed6Q
Jakube
4

Pyth, 18 bytes

m-|*K5hJ/-d2K6%J2Q

Pruébelo en línea: Demostración o conjunto de pruebas

Esta respuesta se basa en la solución Python / Pyth de @ xor. La principal diferencia es que manejo el caso especial de manera 1diferente. El resultado real para 1sería 0 - 1 = -1. Usando Python, orpuedo reemplazar el 0con a 6, lo que resulta en 6 - 1 = 5. Esto ahorra el dolor de tomar el máximo de 5y el resultado.

Explicación:

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)
Jakube
fuente
3

Hasio , 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);}}

Ejecute y vea el expandido en línea: http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4

Jacob Misirian
fuente
Perdón por el enlace roto, estábamos haciendo un trabajo de base de datos. Funciona ahora.
Jacob Misirian
Como se describe en la wiki del código de golf , las respuestas deben ser programas o funciones completos. Los fragmentos que simplemente codifican la entrada no están permitidos, a menos que la pregunta explícitamente indique lo contrario.
Dennis
3

TI-BASIC, 19 bytes

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

Utiliza el algoritmo de xnor. TI-BASIC obtiene vectorización y multiplicación de forma gratuita, pero gastamos algunos bytes más porque no tiene módulo.

lirtosiast
fuente
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)

Explicación:

La función gdevuelve 9-nif n>6o else 5-nif n>1o else -n-1. grecibe el último dígito y devuelve lo que debe agregarse al número de entrada. futiliza gpara obtener la solución (además de mucha manipulación de cadenas). maingenera el resultado de fpara cada línea de entrada.

HEGX64
fuente
1

Rubí, 55 50 + 1 bytes

Ejecutarlo con la nbandera, de este modo: ruby -n prices.rb. Ingrese cada precio en una línea separada.

x=$_.to_i
p x<7?5:(x-2).round(-1)+(~/[2-6]$/?5:-1)
daniero
fuente