fundo
É fim de tarde de sexta-feira e você e seus amigos decidem ir ao pub mais tarde naquela noite, mas antes de ir ao pub, você deve tomar algumas bebidas. No entanto, as coisas aumentam rapidamente; seu amigo Shaddock Pamplemousse ganhou na loteria no início desta semana e decidiu trazer caixas e caixas com diferentes bebidas. A segurança no pub é muito rigorosa e, se você consumir demais antes de tentar entrar nas instalações, não poderá entrar. Vocês são todos programadores - portanto, você acha que as coisas vão ficar ótimas de qualquer maneira.
Desafio
Você precisa programar um medidor de álcool que produza verdade / falsidade se você estiver acima / abaixo do limite razoável de publicação. Antes de ir ao pub, insira a quantidade e o tipo de bebida que consumiu durante a noite em stdin
que o seu programa de medição lê. Se o resultado for verdadeiro, você estará acima do limite do pub e ficará em casa. Se isso der falso, você estará pronto.
Entrada
Um número inteiro maior que o 0
que representa o seu peso corporal em quilogramas seguido por uma nova linha. Essa entrada é seguida por uma série de quantidades e bebidas de um dígito no seguinte formulário:
<amount><amount type>o<beverage type>
Para uma garrafa de cerveja, será semelhante a:
1Bob
Cada entrada é separada por um espaço.
Especificação de entrada
Cada bebida possui uma unidade que corresponde ao impacto causado por ela. Se você consumir mais unidades do que seu peso dividido por dois, o pub não será mais uma opção.
(Isso pode ou não refletir a realidade)
A seguir, bebidas válidas e as unidades alcoólicas correspondentes da bebida:
Cerveja:
b
,1
unidadeBebida energética:
e
,0
unidadesMolho quente:
h
,2
unidades (material forte)De sumo (feita das frutas orgânicos etc):
j
,0
unidadesRum:
r
,6
unidadesTequila:
t
,7
unidadesVodka:
v
,6
unidadesVinho:
w
,3
unidades
Existem diferentes tipos de quantia:
Garrafa:
B
Caixa:
C
Vidro:
G
Barril:
K
Trago:
S
Cada tipo de quantidade possui um multiplicador que multiplica as unidades alcoólicas da bebida nele contida:
Garrafa:
3
Caixa:
25
Vidro:
2
Barril:
50
Trago:
0.2
Saída
Seu programa produzirá verdade / falsidade para stdout
se a quantidade consumida for acima / abaixo do seu peso corporal dividido por 2. Se a quantidade consumida for igual ao seu peso dividido por 2, você deverá gerar falsidade.
Amostras de entrada e saída possíveis
Entrada
70
1Bob 3Soj
Saída
False
Entrada
2
1Cov
Saída
1
Entrada
50
1Cob
Saída
0
Entrada
100
4Gow 1Koe 1Bov 1Gow 2Sot
Saída
True
O programa mais curto em bytes vence!
fonte
o
é um caractere de formato, embora você não tenha dito isso especificamente. Você deve esclarecer isso (comoo
também se refere ao azeite.) 2. O que produzimos se estivermos exatamente no limite? ou isso não importa?43Gow
?Respostas:
CJam, 53 bytes
Experimente online no intérprete CJam .
Como funciona
fonte
Python 3, 131
Agora estamos jogando golfe com cobras!
Economizou 18 bytes graças a shebang.
Economizou mais 4 bytes graças ao DSM.
Economizou muitos bytes graças a tzaman.
Muito obrigado a tzaman por seu brilhante truque de abusar do
.find()
retorno,-1
se não encontrar um valor.Atualmente, isso pressupõe que esse formato de bebida seja exatamente da maneira que foi declarado no desafio, por exemplo, apenas 1 dígito de cada bebida.
fonte
m
e substitua om[p[-1]]
bit por[3,25,2,50,.2]['BCGKS'.find(p[-1])]
e o mesmo pord
. Desci para 168 com essas alterações no seu código.Minkolang 0.11 , 59 bytes
Experimente aqui.
Explicação
fonte
CJam, 54 bytes
Um pouco complicado e provavelmente abaixo do ideal, mas acho que isso funciona bem. Experimente online .
Explicação
Observe que a matriz numérica possui 2 no final, o que significa que
Gho
, que está faltando na primeira cadeia, é mapeado para 2.fonte
CJam, 77
fonte
VBA, 251 bytes
Formato legível
Claro que isso pode ser jogado. minha String Manipulation with
Mid(Right())
parece excessivamente prolixo, mas a execução do array oStrReverse
torna mais longo. Se assumirmos que você bebe apenas de 0 a 9 de qualquer bebida em particular por vez, podemos salvar um punhado de bytesAceite a entrada como uma sequência com o peso separado por um espaço, pois a
VBA
dose não suporta entrada de várias linhasfonte
Ruby, 153 bytes
Eu preciso me livrar dos gsubs de alguma forma
fonte
JavaScript, 131
134139bytesEste é um programa completo e basicamente uma adaptação da minha resposta PHP :
Ele lê dois valores usando
prompt
ealert
é o resultado como[true|false]
.Edições
||0
vez de declarar as bebidas com0
unidades. Graças ao user81655 .prompt
em uma variável e diminuindo a inicialização. Graças a Stefnotch .fonte
,e:0,j:0}[b[++i]]
para}[b[++i]]|0
.0
valores. Bem, eu não pensei nisso. Teve que usar em||
vez do operador bit a bit. Ainda 5 bytes a menos. Obrigado.for(s=i=0,a=prompt(),b=prompt();
pode ser alterado para:for(c=prompt,b=c(a=c(s=i=0));
festa (+ BC + GNU sed),
200196194 bytesfonte
Javascript, 159 bytes
Como o Javascript requer que uma biblioteca acesse STDIN, esse código é apenas uma função que aceita a totalidade da entrada, ou seja,
b("100\n4Gow 1Koe 1Bov 1Gow 2Sot")
fonte
prompt()
é geralmente aceita como uma alternativa válida paraSTDIN
em JavaScript .b=t=>(a={B:3,C:25,G:2,K:50,S:.2,b:1,h:2,w:3,r:6,v:6,t:7},t.split(/\W/).reduceRight((t,n,r)=>r?n[0]*a[n[1]]*a[n[3]]+t||t:t>n/2,0))
.Python 3, 157 bytes
fonte
PHP, 163
169bytesSaídas
1
ou nada, funciona para todos os casos de teste.Ainda me pergunto o que é esse molho picante , com 2 unidades .
Edições
0
de0.2
.fonte
Barril , 165 bytes (SBCS)
Experimente online!
Sinto como se uma resposta em barril nunca tivesse sido mais apropriada! Provavelmente isso poderia ser jogado, mas acho que não.
Explicado
fonte