Aquí en California, estamos en una sequía, por lo que necesitamos saber cuánta agua nos queda para poder conservar la mayor cantidad de agua posible.
Debido a que el suministro de agua es limitado, su código deberá ser lo más breve posible.
Ejemplos
| |
| |
|~~~|
|___|
Output: 0.5
|~~~~~|
| |
| |
|_____|
Output: 1
| |
|__|
Output: 0 (or bonus)
Especificación
La entrada consistirá únicamente en todos: |_ ~
y nuevas líneas. Todos los de arriba ~
se consideran aire; _
, los espacios de abajo ~
y en ~
sí mismos se consideran agua. El porcentaje de agua restante es por computadora water / (air + water)
. Su salida debe tener una precisión de 4 decimales (a menos que elija el porcentaje de bonificación). La entrada siempre será rectangular. El ~
solo estará en una línea, si está en alguna. La entrada también puede tener opcionalmente un avance de línea final si lo desea.
Prima
Si opta por ambos bonos, el bono de -15% se aplica antes del bono de -35
-35 bytes de bonificación: si su código imprime "Esta cabra de sequía fuera de control", en lugar de 0 cuando la salida es 0
-15% de bonificación: si genera un porcentaje.
Para hacer esto, debe cambiar el lugar decimal dos lugares a la izquierda, recortar los ceros a la izquierda y agregar un %
a al final. Los ceros finales (máximo 2) se permiten siempre que no afecten el valor. 0.5
-> cualquiera de:50.00% 50% 50.0%
|~~~|
(sin guión bajo) entrada válida?Respuestas:
Pyth -
17464552 * .85 - 35 = 9.2 bytesFiltra la entrada (¡con el nuevo
#
filtro meta-op!) Para una línea con~
ella, luego la indexa a la entrada y luego la divide por la longitud de la entrada. Si no hay ninguno con~
, produce errores y activa la cláusula except de.x
e imprime la cadena.Pruébelo en línea aquí .
fuente
Python 3, 37 bytes
Sin bonificaciones Toma una cadena de entrada con nuevas líneas, incluida una nueva línea final.
Veamos por qué funciona la fórmula. La fracción de agua es el complemento de la fracción de aire, que derivaremos.
Numerando las filas
0, 1, 2, ...
, tenemosLo mismo es cierto si ambos se multiplican por el ancho de cada fila, contando nuevas líneas, que se simplifican a expresiones en el número de caracteres.
La puesta en fila de agua se encuentra buscando en la cadena de entrada
x
para|~
, y el número de caracteres es sólo la longitud.Finalmente, para que las entradas sin agua funcionen, agregamos una fila de agua ficticia de principio
|~
a fin antes de buscar, lo que hace que parezca que el nivel de agua es 0.Las bonificaciones no parecían valer la pena. Lo mejor que obtuve en la cadena uno es 73-35 = 38:
fuente
CJam,
19171658 * 0.85 - 35 = 14.3 bytesPruébalo en línea
Esta versión recibe ambos bonos. La entrada debe tener una nueva línea final para que esta solución funcione.
Gracias a @ Martin Büttner por guardar 2 bytes.
Explicación:
fuente
JavaScript (ES6), 45 (94-15% -35)
Como una función anónima. Usando cadenas de plantilla, hay una nueva línea que es significativa e incluida en el conteo de bytes
Editar 1 byte guardado thx @ user81655
Menos golf
Fragmento de prueba
fuente
p=~i
conp=i
,&&-p
con&&p-q
y1+~p
para1+p
ahorrar 1 byte.Par , 57 * 85% - 35 = 13.45 bytes
Explicación
fuente
Perl, 70 - 15% - 35 = 24.5 bytes
incluye +1 para
-p
Con comentarios:
Versión de 26 + 1 bytes, sin bonificación: 27
Versión de 34 + 1 bytes, con un 15% de bonificación: 29.75
Versión de 61 + 1 bytes, con bonificación de -35: 27
Versión de 69 + 1 bytes, ambos bonos: 24.50
fuente
Javascript, 59.3
Espero que los decimales adicionales estén bien. Asume que no hay nueva línea final.
fuente
Haskell, 56 bytes
Ejemplo de uso:
f "| |\n|~~|\n| |\n|__|"
->0.75
.l
es una función de longitud personalizada, que es necesaria, porque la construcciónlength
devuelve valores enteros, pero necesitamos valores de coma flotante para la división (haygenericLength
que también proporciona esta característica, pero es más larga, y mucho menos la requeridaimport Data.List
).f
divide la entradai
en líneas (->s
) y luego en un par donde el primer elemento es una lista con todas las líneas hasta (y excluyendo) la primera con un~
. El segundo elemento es una lista con el resto de las líneas. El resultado es la longitud del segundo elemento dividido por la longitud des
.Los bonos no dan resultado.
fuente
¡Python es detallado!
Python: 98.45 bytes
(157 * 0.85) - 35 = 98.45 bytes
Esta versión lee de stdin y recoge ambos bonos:
fuente
import sys;r=[x[1]for x in sys.stdin];print(1-r.index('~')/len(r))
print
como una función, así que supuse que estabas usando Python 3.Awk, 72 caracteres - 15% - 35 = 26.2
Ejecución de muestra:
(Inicial
1;
solo se usa en estas muestras para mostrar el tanque "legible para humanos").fuente
PHP, 92 caracteres - 15% - 35 = 43.2
(88 caracteres en dos bloques de código + 4 caracteres de opciones de línea de comando).
Asume que
error_reporting
está configurado por defecto.(No es gran cosa, solo quería usar el
-R
y-E
una vez. Ahora solo-B
queda).Ejecución de muestra:
(Inicial
echo"$argn\n";
solo se usa en estas muestras para mostrar el tanque "legible para humanos").fuente
QBIC - 116 - 15% = 98.6 bytes
Creé QBIC para hacer que QBasic sea más competitivo, pero aún necesita varias mejoras. A partir de ahora, no hay atajos para la captura de errores
THEN
(que es un descuido bastante grande de mi parte) yinput$
. Se agregarán en breve.No pude alcanzar el bono 0, demasiado costoso ... logré imprimir porcentajes.
Muestra en / salida:
El programa lee la entrada de forma interactiva. Cuando detecta el fondo del lago (
_
), imprime el porcentaje y se cierra. Probado para contenedores llenos y vacíos también.Editar: para mostrar cómo se ha ampliado QBIC durante el último año, aquí está el mismo programa escrito para el intérprete actual:
87 bytes, porcentajes de impresión, es una puntuación de 74.
fuente