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
Respuestas:
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 -> $19
etc.). Míralo correr para el número4
aquí (aproximadamente 3 minutos, video acortado):Código
fuente
CJam,
1917 bytesPruébalo aquí.
Toma la entrada como una lista de estilo CJam y devuelve la nueva línea de salida separada.
Explicación
fuente
Pitón 2, 47
Si observamos la secuencia de valores redondeados, vemos que vienen en bloques de 5.
Encontramos en qué bloque de números estamos
(n+3)/5
(llame a este valorJ
). Luego, obtenemos el múltiplo correcto de5
withJ*5
, y ajustamos cosas como30
abajo29
restando1
siempre queJ
sea uniforme.Para
1
dar un caso especial en5
lugar de-1
, pasamos el resultado amax(5,_)
.fuente
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
Acepta entradas en una lista separada por comas. Debe haber una coma final. Salidas en el mismo formato.
Explicación:
fuente
R,
51494743 bytesDeberí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
fuente
Python 3,
7482 bytesLuché por la brevedad en valores inferiores a 11 y el requisito de 1 para evaluar a 5.
fuente
Pyth
2118 años2928 bytes¡Gracias a @Jakube por cortar 3 bytes!
Pruébalo aquí
EDITAR: aparentemente no era válido. Lo arreglé al costo de 11 bytes; Intentaré jugar más al golf.
fuente
eQ
es lo mismo%Q10
, también puedesI<KeQ6+-QK5;E+-QK9
9
, si el último dígito es0
o1
Pyth, 21 bytes
Lamentablemente, tengo que gastar 4 bytes para manejar correctamente $ 1.
fuente
1
embargo, puede manejar con solo 2 bytes.mt|t+d@jC"²a<"6ed6Q
Pyth, 18 bytes
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
1
diferente. El resultado real para1
sería0 - 1 = -1
. Usando Python,or
puedo reemplazar el0
con a6
, lo que resulta en6 - 1 = 5
. Esto ahorra el dolor de tomar el máximo de5
y el resultado.Explicación:
fuente
Hasio , 133 bytes
Ejecute y vea el expandido en línea: http://hassiumlang.com/Hassium/index.php?code=4f1c14f4d699b11da7a6392a74b720c4
fuente
TI-BASIC, 19 bytes
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.
fuente
Haskell, 114 bytes
Explicación:
La función
g
devuelve9-n
ifn>6
o else5-n
ifn>1
o else-n-1
.g
recibe el último dígito y devuelve lo que debe agregarse al número de entrada.f
utilizag
para obtener la solución (además de mucha manipulación de cadenas).main
genera el resultado def
para cada línea de entrada.fuente
Rubí,
5550 + 1 bytesEjecutarlo con la
n
bandera, de este modo:ruby -n prices.rb
. Ingrese cada precio en una línea separada.fuente