Desafío:
Se le dará una imagen ASCII de un montón de pesas como entrada, y deberá generar el peso combinado de la pila.
Formato:
Hay 5 pesos diferentes, con un peso de 1, 2, 5, 10, 20 pasajeros (o alguna otra unidad arbitraria).
Los pesos se ven así, en orden ascendente:
1: __
|__|
2: ______
|______|
5: ______
| |
|______|
10: ______________
| |
|______________|
20: ____________________
| |
|____________________|
Los pesos se colocarán simétricamente (como en la imagen de ejemplo), no necesariamente en un orden ordenado. Los pesos compartirán límites, cuando corresponda:
Casos de prueba:
También puede usar todos los pesos individuales como casos de prueba.
__
_|__|_
|______|
| |
|______|
1 + 2 + 5 = 8
____________________
| |
|____________________|
| |
|______________|
_|__|_
|______|
| |
|______|
20 + 10 + 1 + 2 + 5 = 38
______
|______|
|______|
|______|
|______|
2 + 2 + 2 + 2 = 8
Reglas adicionales:
- Es posible que no asumirá los espacios iniciales adicionales. El mayor peso estará completamente a la izquierda.
- Puede asumir espacios finales y líneas nuevas.
- Puede suponer que habrá un máximo de 10 pesos
- Puede tomar la entrada en un formato opcional, pero no puede sustituir los caracteres utilizados por otra cosa.
Este es el código de golf, por lo que gana el código más corto en bytes de cada idioma. Se alientan las explicaciones como siempre.
Respuestas:
Jalea ,
2423 bytesPruébalo en línea!
¿Cómo?
Los pesos pueden identificarse por sus anchos y alturas. Los anchos se pueden medir observando la distancia entre los
|
caracteres de la línea . Si primero eliminamos todos los espacios, esos pesos de altura dos contribuirán con una línea con un ancho medido de uno.Los diferentes pesos tienen anchuras de
3, 7, 7, 15, 21
(para pesos1, 2, 5, 10, 20
respectivamente). Agregando un final1
para los de la altura dos, encontramos que la[3],[7],[7,1],[15,1],[21,1]
conversión de binarios es3,7,15,31,43
, un entero dividido por tres nos da1,2,5,10,14
, que son los pesos, excepto las14
necesidades de reemplazo por20
.Alternativamente reemplazar las anchuras medidas de
21
con30
el uso antes de la conversión“ßœ‘y
:fuente
Python 2 , 77 bytes
Pruébalo en línea!
[i/21, i%21, ' _'[i<50] for i in [23,48,69,224,440]]
generará los siguientes tripletes[1, 2, '_'], [2, 6, '_'], [3, 6, ' '], [10, 14, ' '], [20, 20, ' ']
que representan el peso, la longitud y el carácter en la base de cada peso, que se utilizarán para hacer una representación única de una sola línea de cada peso.Como el tercer peso se superpondría con el segundo, reemplazo su base con su cuerpo (
_
->) y reduzco el valor a
3
(contará la base como2
y el cuerpo como3
, lo que da como resultado5
)fuente
Retina 0.8.2 , 60 bytes
Pruébalo en línea! Explicación: Los
|
s se reemplazan por!
s para facilitar la coincidencia, luego los pesos se convierten en unarios y se suman. La única parte interesante es que el5
peso se considera la suma de a2
y un3
peso, mientras que los pesos10
y20
son solo dos líneas de la mitad del peso.fuente
JavaScript (Node.js) , 73 bytes
Pruébalo en línea!
fuente
Python 3 , 76 bytes
Pruébalo en línea!
¿Cómo?
fuente
Estoy seguro de que hay algunas mejoras por hacer, pero esto es lo que tengo en este momento:
Groovy, 131 bytes
def f(s){s.split('\n').sum{n=0;[2:1,6:2,14:5,20:10].each{k,v->if(it==~".*\\|[ _]{$k}\\|.*"){n=v+(!it.contains('_')&&k==6?1:0)}};n}}
Convierte la entrada
String
enCollection<String>
ay luego suma los resultados de cada línea para obtener el total. Utiliza unMap
donde la clave es el número de espacios o guiones bajos entre los caracteres de la tubería y el valor es la cantidad correspondiente de Passerees. La clave se conecta a la expresión regular para determinar si la línea coincide con un patrón significativo. La única advertencia es el ternario para agregar 1 en el caso en que la longitud de la subcadena entre las tuberías es 6 y está compuesta de espacios (en lugar de guiones bajos). Si ningún patrón coincide, la línea tiene un valor de 0.fuente
Perl 6 , 57 bytes
Pruébalo en línea!
fuente