Tienes una piscina que está llena hasta el borde con agua. Necesita vaciarlo, pero no puede pensar en un método eficiente. Entonces decides usar tu copa roja en solitario. Llenará repetidamente la taza hasta el fondo y la arrojará fuera de la piscina.
Desafío
¿Cuánto tiempo llevará vaciar la piscina?
Entrada
[shape of pool] [dimensions] [shape of cup] [dimensions] [speed]
shape of pool
será una de estas cadenas:circle
,triangle
orectangle
. Tenga en cuenta que en realidad se refieren a las formas tridimensionales: cilindro, prisma triangular y prisma rectangular.dimensions
será diferente dependiendo de la forma.- círculo:
[radius] [height]
. Volumen = π r 2 h - triángulo:
[base] [height] [length]
. Volumen = 1/2 (bh) * longitud - rectángulo:
[width] [length] [height]
Volumen = lwh
- círculo:
shape of cup
ydimensions
trabajar de la misma manera. La copa también puede ser un círculo, un triángulo o un rectángulo.speed
es la cantidad de tiempo que lleva vaciar una taza llena de agua en segundos .
Salida
El número de segundos que lleva vaciar la piscina. Esto se puede redondear al segundo más cercano.
Notas
- No habrá unidades en la entrada. Se supone que todas las unidades de distancia son iguales (una forma no tendrá una altura en pulgadas y un ancho en pies).
- Use 3.14 para
pi
. - La entrada estará compuesta por cadenas y números de punto flotante.
- Nunca lloverá. Nunca se agregará agua.
- Tienes una mano muy firme. Llenará la copa exactamente hasta el borde cada vez, y nunca derramará nada.
- Una vez que te acerques al final, será difícil recoger una taza llena de agua. No necesita preocuparse por esto. Eres muy fuerte, por lo que puedes inclinar la piscina hacia un lado (sin gastar más tiempo).
- Cada vez que haga un cálculo, está bien redondear a la centésima más cercana . Su respuesta final no necesitará ser exacta.
Casos de prueba
Entrada: triangle 10 12.25 3 circle 5 2.2 5
Salida: 10
Aunque queda menos de 172.7 en la última primicia, todavía toma los cinco segundos completos para vaciarla.
Entrada: triangle 5 87.3 20001 rectangle 5.14 2 105.623 0.2
Salida:804.2
- Debe redondear a la centésima más cercana después de cada cálculo.
- El cálculo final se redondea desde 804.05567 a 804.2. Esto se debe a que ese último pedacito de agua debe vaciarse.
Reglas
- Puede escribir un programa o función completa.
- La entrada debe tomarse de stdin o parámetros de función. La salida debe imprimirse a través de stdout o devolverse.
- El formato de entrada se puede reorganizar, siempre que lo especifique en el envío. También puede acortar las cadenas "círculo", "triángulo" y "rectángulo".
- Las bibliotecas y las funciones integradas que involucran volumen o área no están permitidas.
Puntuación
Este es el código de golf . La presentación con el menor número de bytes gana.
Respuestas:
JavaScript ES6,
10078828174 bytesGracias a @UndefinedFunction por ayudar al golf en 4 bytes
Uso:
fuente
.5*v
eso, ¿no podrías hacerlov/2
?t(["triangle", [10, 12.25, 3]], ["triangle", [10, 12.25, 3]], 5)
? ¿Entiendo10
pero no debería ser la respuesta5
? EDITAR: solo superado por edc65, mismo problema.f=(p,c,s,v=([s,a,b,c])=>s<'r'?a*a*b*3.14:a*b*c/(s<'t'?1:2))=>Math.ceil(v(p)/v(c))*s
-~
tenía problemas con los números decimales y daría lugar a redondear un paso adicional. Tuve que agregara<'t'?1:2
porque(1+(a>'t'))
no funciona por alguna razón.CJam, 46 bytes
Explicación:
Pruébalo en línea .
fuente
Python 3,
340304 bytesUso:
Dónde
i
está la cadena de información?Ejemplos:
q("t 10 12.25 3 c 5 2.2 5")
q("t 5 87.3 20001 r 5.14 2 105.623 0.2")
Nota: Los nombres de las formas se han acortado a sus primeras letras, respectivamente.
fuente
Javascript (ES6), 91
Tomando la entrada como cadenas para las formas, matrices de números para las dimensiones y un solo número para la velocidad:
Esto define una función anónima, así que para usar agregar
g=
antes. Entonces, se puede llamar comoalert(g("triangle", [10, 12.25, 3], "circle", [5, 2.2], 5))
Explicación:
Mi solución original tomó una sola cadena y tenía 111 bytes de longitud:
Esto también define una función anónima, por lo tanto, use agregar
f=
antes. Entonces, se puede llamar comoalert(f("triangle 5 87.3 20001 rectangle 5.14 2 105.623 0.2"))
fuente
K5 (oK), 123 bytes
fuente
Julia,
122116958979 bytesEsto supone que solo se dará la primera letra de los nombres de las formas. De lo contrario, la solución es 6 bytes más larga.
Ungolfed + explicación:
¡Ahorró 21 bytes gracias a edc65 y 10 gracias a UndefinedFunction!
fuente
ceil
en Julia para usar en lugar defloor
cortar todo el cheque sobre el resultado entero?a>'s'?prod(x)/2:prod(x)
conprod(x)/(a>'s'?2:1)
? (posiblemente incluso sin los paréntesis, no tengo una juilia ide a mano, y no he podido probar esto)a<'d'?3.14x[1]^2*x[2]:a>'s'?prod(x)/2:prod(x)
conprod(x)*(a<'d'?3.14x[1]:a>'s'?.5:1)
? (Una vez más, no probado)F #,
217186184160 bytes¡Malditos requisitos de sangría!
Uso:
Actualizar
Gracias a Alex por comentar sobre la sangría de espacio único, que F # parece admitir
Se las arregló para eliminar una carga más al cambiar de
array
alist
tipos en lamatch
declaraciónfuente
x**2.
puedes hacerx*x
? Eso podría ahorrar 2 bytes.Python 2.7 306 Bytes
Toma entrada de stdin.
Probándolo
fuente
Python 2,
22214613911910393 bytesImplementación bastante sencilla. Gracias a Sp3000 por el
-(-n//1)
truco para el techo, que debería funcionar en todos los casos (es decir, todavía no he encontrado un problema).La entrada debe formatearse así:
Uso:
Sin golf:
Solución original, 222 bytes.
Esto se hizo cuando las reglas aún necesitaban que ingresara la palabra completa en lugar de una letra. Utilicé el hecho de que los
hash(s)%5
asignécircle -> 2, triangle -> 3, rectangle -> 1
, sin embargo, si solo tomo una letra como entrada, creo que puedo acortar esto.Uso:
fuente
Python 2/3,
252249 bytesEjemplos de uso:
Las versiones solo Python 2 y Python 3 solo son diferentes en cómo reciben la entrada;
raw_input()
para Python 2 yinput()
para Python 3, en oposición are.sys.stdin.readline()
de la versión Python2 / 3.Python 2,
240237 bytesPython 3,
236233 bytesCambios:
Cambiado
for o in[0,3if i[0]<'d'else 4]:
afor o in[0,[4,3][i[0]<'d']]:
. Gracias a Vioz por la inspiración :).fuente
[0, 3 if i[0] < 'd' else 4]
. Es tarde (¿temprano?): P.for
declaración :).Pyth -
4039363534 bytesUtiliza un método simple, mapeo sobre ambos contenedores y luego reduce por división.
Toma una coma de entrada separada de stdin, con la primera letra de cada forma como:
"t", 10, 12.25, 3, "c", 5, 2.2, 5
.Test Suite .
fuente