Fondo
Es tarde el viernes por la tarde y tú y tus amigos deciden ir al pub más tarde esa noche, pero antes de ir al pub piensas que debes tomar algunas bebidas. Sin embargo, las cosas se intensifican rápidamente; su amigo Shaddock Pamplemousse ganó la lotería a principios de esta semana y decidió traer cajas con cajas con diferentes bebidas. La seguridad en el pub es muy estricta, y si consume en exceso antes de intentar ingresar a las instalaciones, no se le permite entrar. Sin embargo, todos ustedes son programadores, por lo que creen que las cosas saldrán bien de todos modos.
Reto
Debe programar un medidor de alcohol que produzca verdadero / falso si está por encima / por debajo del límite razonable de pub. Antes de ir al pub, ingrese la cantidad y el tipo de bebida que ha consumido durante la noche parastdin
que se lee su programa de medición. Si da salida a la verdad, estás por encima del límite del pub y te quedas en casa. Si sale falso, estás listo para irte.
Entrada
Un número entero mayor que el 0
que representa su peso corporal en kilogramos seguido de una nueva línea. A esta entrada le sigue una serie de cantidades y bebidas de un dígito en el siguiente formulario:
<amount><amount type>o<beverage type>
Para una botella de cerveza esto se verá así:
1Bob
Cada entrada está separada por un espacio.
Especificación de entrada
Cada bebida tiene una unidad que corresponde al impacto causado por ella. Si consume más unidades que su peso dividido por dos, el pub ya no es una opción.
(Esto puede o no reflejar la realidad)
Las siguientes son bebidas válidas y las unidades alcohólicas correspondientes de la bebida:
Cerveza:
b
,1
unidadBebida energética:
e
,0
unidadesSalsa picante:
h
,2
unidades (material fuerte)Juice (hecha de frutas orgánicos, etc):
j
,0
unidadesRon:
r
,6
unidadesTequila:
t
,7
unidadesVodka:
v
,6
unidadesVino:
w
,3
unidades
Hay diferentes tipos de cantidad:
Botella:
B
Caja:
C
Vaso:
G
Barrilete:
K
Sorbo:
S
Cada tipo de cantidad tiene un multiplicador que multiplica las unidades alcohólicas de la bebida que contiene:
Botella:
3
Caja:
25
Vaso:
2
Barrilete:
50
Sorbo:
0.2
Salida
Su programa presentará a la salida Truthy / Falsy a stdout
si la cantidad consumida es encima / debajo de su peso corporal dividido por 2. Si la cantidad consumida es igual a su peso dividido por 2, usted debe Falsy salida.
Muestras de posibles entradas y salidas.
Entrada
70
1Bob 3Soj
Salida
False
Entrada
2
1Cov
Salida
1
Entrada
50
1Cob
Salida
0
Entrada
100
4Gow 1Koe 1Bov 1Gow 2Sot
Salida
True
¡El programa más corto en bytes gana!
fuente
o
es un carácter de formato, aunque no lo haya dicho específicamente. Debe aclarar esto (comoo
también se refiere al aceite de oliva). 2. ¿Qué producimos si estamos exactamente en el límite? o no importa43Gow
?Respuestas:
CJam, 53 bytes
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Pitón 3, 131
¡Ahora estamos jugando al golf con serpientes!
Guardado 18 bytes gracias a shebang.
Guardado 4 bytes más gracias a DSM.
Ahorré muchos bytes gracias a tzaman.
Muchas gracias a tzaman por su brillante truco de abusar de
.find()
regresar-1
si no encuentra un valor.Actualmente, esto supone que este formato de bebida es exactamente la forma en que se indica en el desafío, por ejemplo, solo 1 dígito de cada bebida.
fuente
m
y reemplace elm[p[-1]]
bit con[3,25,2,50,.2]['BCGKS'.find(p[-1])]
, y lo mismo cond
. Llegué a 168 con esos cambios en su código.Minkolang 0.11 , 59 bytes
Pruébalo aquí
Explicación
fuente
CJam, 54 bytes
Poco complicado y probablemente subóptimo, pero creo que esto funciona bien. Pruébalo en línea .
Explicación
Tenga en cuenta que la matriz numérica tiene 2 al final, lo que significa que
Gho
, que faltan en la primera cadena, se asignan a 2.fuente
CJam, 77
fuente
VBA, 251 bytes
Formato legible
Bastante seguro de que esto se puede jugar al golf. mi manipulación de cadenas
Mid(Right())
parece excesivamente prolija, pero ejecutar la matriz aunqueStrReverse
hace más largo. Si suponemos que solo bebe 0-9 de una bebida en particular a la vez, podemos guardar un puñado de bytesTome la entrada como una cadena con peso separado por un espacio ya que la
VBA
dosis no admite entrada de varias líneasfuente
Ruby, 153 bytes
Necesito deshacerme de los gsubs de alguna manera
fuente
JavaScript, 131
134139bytesEste es un programa completo y básicamente una adaptación de mi respuesta PHP :
Lee dos valores usando
prompt
yalert
s el resultado como[true|false]
.Ediciones
||0
lugar de declarar las bebidas con0
unidades. Gracias a user81655 .prompt
en una variable y acortando la inicialización. Gracias a Stefnotch .fuente
,e:0,j:0}[b[++i]]
a}[b[++i]]|0
.0
valores. Bueno, no pensé en eso. Tuve que usar en||
lugar del operador bit a bit. Todavía 5 bytes menos. Gracias.for(s=i=0,a=prompt(),b=prompt();
se puede cambiar a:for(c=prompt,b=c(a=c(s=i=0));
bash (+ bc + GNU SED),
200196194 bytesfuente
Javascript, 159 bytes
Dado que Javascript requiere una biblioteca para acceder a STDIN, este código es solo una función que acepta la totalidad de la entrada, es decir
b("100\n4Gow 1Koe 1Bov 1Gow 2Sot")
fuente
prompt()
se acepta generalmente como una alternativa válida aSTDIN
en 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
fuente
PHP, 163
169bytesSalidas
1
o nada, funciona para todos los casos de prueba.Todavía me pregunto qué es esta salsa picante , que tiene 2 unidades .
Ediciones
0
de0.2
.fuente
Barril , 165 bytes (SBCS)
Pruébalo en línea!
¡Siento como si una respuesta de Keg nunca hubiera sido más apropiada! Esto probablemente podría jugarse golf, pero no creo que pueda.
Explicado
fuente