Introducción y crédito
Asume que eres un barman. Tienes muchas personas felices en tu bar la mayoría de las veces, pero muchas solo beben la misma bebida y muy pocas para tu gusto y quieres cambiar eso. Entonces, introduce un sistema en el que el precio de una bebida es variable, dependiendo de cuántos ya se hayan vendido, pero nunca más o menos costoso que ciertos umbrales. Por alguna extraña razón, siempre se olvida de realizar un seguimiento adecuado de todas las bebidas y precios vendidos y, por lo tanto, debe pensar en un código breve (¡= memorable!) Que haga los cálculos matemáticos por la cantidad de bebidas consumidas.
Este desafío ya apareció en el examen de mitad de período en 2012 en el curso de programación funcional en mi universidad y tengo la autorización de mi profesor para publicarlo aquí. Se nos ha proporcionado una solución de ejemplo en el idioma del examen.
Entrada
Su entrada será una lista de cadenas que no contienen espacios: estos son los nombres de las bebidas vendidas. Tome la entrada usando su método de entrada preferido, generalmente aceptado.
Salida
Su producción será un solo número: este es el ingreso que ha generado esta noche. Dé la salida utilizando su método de salida preferido, generalmente aceptado.
¿Qué hacer?
Esto aplica para cada bebida individualmente:
- El precio inicial es 10.
- Cada vez que se compra la bebida, su precio aumenta en 1 para el próximo comprador.
- El precio máximo es 50. Si la bebida se ha comprado por 50, el nuevo precio será 10 nuevamente.
Su tarea es encontrar el ingreso general, generado por la lista de entrada de bebidas dadas las reglas anteriores.
En caso de que se pregunte: "¡50 dólares es realmente caro para una bebida!", Esto es 50 dólares deci, por lo que 50 * 0.1 * Unidad, pero he optado por 10-50 para no excluir idiomas sin aritmética de coma flotante.
¿Quién gana?
Este es el código de golf , por lo que gana el código más corto en bytes. Aplican reglas estándar.
Casos de esquina potenciales
Si la lista de entrada está vacía, la salida será 0.
No se puede suponer que la lista de entrada está ordenada por bebida.
Ejemplos
[] -> 0
["A"] -> 10
["A","B"] -> 20
["A","A","B"] -> 31
["A","B","A"] -> 31
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"] -> 1240
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","D"] -> 1304
["D","A","A","C","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","C"] -> 1304
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","D","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"] -> 1304
Respuestas:
JavaScript (ES6), 50 bytes
fuente
d[x]
a 10?d[x]
no se ha configurado, esundefined
; esto hace qued[x]<50
return sea falso, por lo que sed[x]=d[x]<50?d[x]+1:10
estableced[x]
en10
.undefined
. :)Python 2,
79745448 BytesEl recuento masivo de bytes aumenta al repensar el problema.
Me gustaría deshacerme del. Haciendo uso deint
yeso pero mi cerebro no funcional.pop()
para evitar recortar la lista dos veces y alguna buena repetición lambda :)gracias a Jonathan Allan por guardar 6 bytes :)
Mi antigua versión de 54 bytes estaba bastante orgullosa :)
fuente
...l>[]and 1*~...
para guardar esos 3 bytes que sabía que podía.f=lambda l:l and~-l.count(l[0])%41+10+f(l[1:])or 0
f=lambda l:l and l.count(l.pop())%41+10+f(l)or 0
Pyth, 15 bytes
Un programa que toma la entrada de una lista e imprime el resultado.
Conjunto de pruebas (primera línea para permitir entradas múltiples)
Cómo funciona
fuente
Jalea ,
14 1110 bytesTryItOnline!
¿Cómo?
fuente
05AB1E ,
1615 bytes¡Gracias a Emigna por guardar un byte!
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
ÎÙv¹y¢L<41%T+OO
debería funcionar por 1 byte guardadoPerl 41 Bytes
Incluye +1 para
-p
Toma aportes en las nuevas líneas.
Incrementa un valor hash en:
10
si esundef
,-40
si> 49
es50
, o de lo1
contrario. Esto luego se agrega al$\
separador de salida, que-p
imprime.Ejemplo:
fuente
05AB1E , 13 bytes
Explicación
["A","B","A"]
usado como ejemplo.fuente
C ++ 14, 105 bytes
Como lambda genérico sin nombre que regresa a través del parámetro de referencia. Requiere entrada para ser un contenedor de
string
que tienepush_back
, comovector<string>
.Usando el
%41+10
truco de la respuesta Python de Kade .Crea un contenedor vacío
P
como memoria de lo que ya se ha servido. El precio se calcula contando elx
deP
.Sin golf y uso:
fuente
Mathematica, 64 bytes
Parece que debería ser más corto.
Length/@Gather@#
cuenta las repeticiones de cada bebida.//.z_/;z>41:>Sequence[41,z-41]
divide cualquier número enteroz
superior a 41 en esto41
yz-41
, para reflejar la caída del precio. Luego, cada uno de los recuentos se conecta a la fórmula(19+#)#/2
, que es el costo total de las#
bebidas siempre que#
sea como máximo 41. Finalmente,Tr
resume esos costos.fuente
k, 22 bytes
El argumento puede ser cualquier lista: cadenas, números, etc.
La
q
traducción es más fácil de leer:fuente
C #, 193 bytes + 33
33 bytes adicionales para
using System.Collections.Generic;
Estoy seguro de que esto puede llevarse al olvido, los diccionarios definitivamente no son la mejor manera de hacerlo y probablemente podría incluir un ternario en mi if. ¡Aparte de eso, creo que está bien!
Ejemplos:
Sin golf
fuente
Clojure, 79 bytes
Cuenta las frecuencias de las bebidas, luego calcula el precio base como
10 + (i % 41)
.mapcat
los concatena yapply +
calcula la suma.fuente
PHP, 47 bytes
toma datos de los argumentos de la línea de comandos; correr con
-r
.fuente