Você tem uma piscina cheia de água. Você precisa esvaziá-lo, mas não consegue pensar em um método eficiente. Então você decide usar seu copo solo vermelho. Você enche repetidamente o copo até o fim e o joga fora da piscina.
Desafio
Quanto tempo leva para esvaziar a piscina?
Entrada
[shape of pool] [dimensions] [shape of cup] [dimensions] [speed]
shape of pool
vai ser uma dessas cordas:circle
,triangle
ourectangle
. Observe que na verdade elas se referem às formas tridimensionais: cilindro, prisma triangular e prisma retangular.dimensions
será diferente dependendo da forma.- círculo:
[radius] [height]
. Volume = π r 2 h - triângulo:
[base] [height] [length]
. Volume = 1/2 (bh) * comprimento - retângulo:
[width] [length] [height]
Volume = lwh
- círculo:
shape of cup
edimensions
funciona da mesma maneira. O copo também pode ser um círculo, triângulo ou retângulo.speed
é a quantidade de tempo que leva para esvaziar um copo cheio de água em segundos .
Resultado
O número de segundos que leva para esvaziar a piscina. Isso pode ser arredondado para o segundo mais próximo.
Notas
- Não haverá unidades na entrada. Presume-se que todas as unidades de distância sejam iguais (uma forma não terá altura em polegadas e largura em pés).
- Use 3.14 para
pi
. - A entrada será composta de strings e números de ponto flutuante.
- Nunca vai chover. Nunca será adicionada água.
- Você tem uma mão muito firme. Você sempre encherá o copo até a borda e nunca derramará nada.
- Quando você chegar perto do fim, será difícil colher um copo cheio de água. Você não precisa se preocupar com isso. Você é muito forte e pode inclinar a piscina para o lado (sem gastar mais tempo).
- Sempre que você faz um cálculo, não há problema em arredondar para o centésimo mais próximo . Sua resposta final não precisará ser exata.
Casos de teste
Entrada: triangle 10 12.25 3 circle 5 2.2 5
Saída: 10
Mesmo que haja menos de 172,7 na última concha, ainda leva cinco segundos para esvaziá-la.
Entrada: triangle 5 87.3 20001 rectangle 5.14 2 105.623 0.2
Saída:804.2
- Você deve arredondar para o centésimo mais próximo após cada cálculo.
- O cálculo final é arredondado de 804.05567 para 804.2. Isso ocorre porque esse último pedacinho de água deve ser esvaziado.
Regras
- Você pode escrever um programa ou função completo.
- A entrada deve ser obtida dos parâmetros stdin ou de função. A saída deve ser impressa através de stdout ou retornada.
- O formato de entrada pode ser reorganizado, desde que você o especifique no envio. Você também pode encurtar as cordas "círculo", "triângulo" e "retângulo".
- Bibliotecas e funções internas que envolvem volume ou área não são permitidas.
Pontuação
Isso é código-golfe . Vitórias no envio com o menor número de bytes.
Respostas:
JavaScript ES6,
10078828174 bytesObrigado a @UndefinedFunction por ajudar no golfe a 4 bytes
Uso:
fonte
.5*v
, você não poderia fazerv/2
?t(["triangle", [10, 12.25, 3]], ["triangle", [10, 12.25, 3]], 5)
? Eu recebo,10
mas não deveria ser a resposta5
? EDIT: apenas batido por edc65, mesmo 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
-~
teve problemas com os números decimais e resultaria no arredondamento de uma etapa extra. Eu tive que adicionara<'t'?1:2
porque(1+(a>'t'))
não funciona por algum motivo.CJam, 46 bytes
Explicação:
Experimente online .
fonte
Python 3,
340304 bytesUso:
Onde
i
está a cadeia de informações.Exemplos:
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: Os nomes das formas foram abreviados para as primeiras letras, respectivamente.
fonte
Javascript (ES6), 91
Tomando entrada como seqüências de caracteres para as formas, matrizes de números para as dimensões e um único número para a velocidade:
Isso define uma função anônima, portanto, use add
g=
antes dele. Então, pode ser chamado comoalert(g("triangle", [10, 12.25, 3], "circle", [5, 2.2], 5))
Explicação:
Minha solução original possuía uma única sequência e tinha 111 bytes de comprimento:
Isso também define uma função anônima, portanto, use add
f=
antes dele. Então, pode ser chamado comoalert(f("triangle 5 87.3 20001 rectangle 5.14 2 105.623 0.2"))
fonte
K5 (oK), 123 bytes
fonte
Julia,
122116958979 bytesIsso pressupõe que apenas a primeira letra dos nomes das formas será fornecida. Caso contrário, a solução é 6 bytes mais longa.
Ungolfed + explicação:
Economizou 21 bytes graças ao edc65 e 10 graças ao UndefinedFunction!
fonte
ceil
em Julia, para usar em vez defloor
, cortando toda a verificação do resultado inteiro?a>'s'?prod(x)/2:prod(x)
porprod(x)/(a>'s'?2:1)
? (possivelmente até mesmo sem os parênteses, eu não tenho um ide juilia na mão, e não ter sido capaz de testar isso)a<'d'?3.14x[1]^2*x[2]:a>'s'?prod(x)/2:prod(x)
porprod(x)*(a<'d'?3.14x[1]:a>'s'?.5:1)
? (Novamente, não testado)F #,
217186184160 bytesMalditos requisitos de indentação!
Uso:
Atualizar
Agradecimentos a Alex por comentar sobre recuo de espaço único, que o F # parece suportar
Conseguiu interromper um carregamento mais, alterando de
array
paralist
tipos namatch
instruçãofonte
x**2.
você pode fazerx*x
? Isso deve economizar 2 bytes.Python 2.7 306 bytes
Recebe entrada de stdin.
Testando
fonte
Python 2,
22214613911910393 bytesImplementação bastante direta. Agradecemos ao Sp3000 pelo
-(-n//1)
truque do teto, que deve funcionar em todos os casos (ou seja, ainda não foi encontrado um problema).A entrada deve ser formatada da seguinte forma:
Uso:
Ungolfed:
Solução original, 222 bytes
Isso foi feito quando as regras ainda precisavam que você inserisse a palavra inteira em vez de uma letra. Eu usei o fato de que
hash(s)%5
eles foram mapeadoscircle -> 2, triangle -> 3, rectangle -> 1
, no entanto, se eu pegar apenas uma letra como entrada, acho que posso diminuir isso.Uso:
fonte
Python 2/3,
252249 bytesExemplos de uso:
As versões somente do Python 2 e somente do Python 3 são diferentes apenas na maneira como recebem entrada;
raw_input()
para Python 2 einput()
para Python 3, em oposição are.sys.stdin.readline()
versão Python2 / 3.Python 2,
240237 bytesPython 3,
236233 bytesAlterar:
Alterado
for o in[0,3if i[0]<'d'else 4]:
parafor o in[0,[4,3][i[0]<'d']]:
. Obrigado a Vioz pela inspiração :).fonte
[0, 3 if i[0] < 'd' else 4]
. É tarde (cedo?): P.for
declaração :).Pitão -
4039363534 bytesUsa um método simples, mapeando os dois contêineres e depois reduzindo por divisão.
Toma vírgula entrada separada da entrada padrão, com a primeira letra de cada forma como:
"t", 10, 12.25, 3, "c", 5, 2.2, 5
.Conjunto de Teste .
fonte