Motivación : a veces, ciertos elementos de una lista no cuentan para sus totales. Por ejemplo, contando pasajeros de avión en filas, donde los bebés se sientan en el regazo de los padres.
Desafío : escriba un programa para dividir una lista de elementos en trozos. Cada fragmento (excepto posiblemente el último) tiene el mismo tamaño , donde el tamaño se define como el número de elementos que pasan una función de predicado.
reglas :
- Su programa debe tomar
- una lista de artículos
- un tamaño de fragmento entero positivo
- una función de predicado (toma un elemento y devuelve verdadero o falso)
- Debe devolver la lista de entrada dividida en fragmentos
- Cada fragmento es una lista de elementos
- En general, los artículos deben permanecer en el mismo orden, sin descartar ninguno
- El número de elementos que pasan el predicado en cada fragmento (excepto posiblemente el último) debe coincidir con el tamaño del fragmento de entrada.
- los elementos que fallan en el predicado no deben contar para este tamaño
- Los elementos que fallan en el predicado son
- todavía incluido en los fragmentos de salida
- asignado al primer fragmento, en el caso de que un fragmento esté "lleno", pero los siguientes elementos son los que fallan en el predicado
- por lo tanto, el fragmento final no puede consistir únicamente en elementos que fallan el predicado
- El fragmento final puede tener un tamaño menor que el tamaño del fragmento porque todos los elementos se han contabilizado.
Ejemplos no exhaustivos:
El ejemplo más simple es considerar 1
sy 0
s, donde está la función predicado x ==> x > 0
. En este caso, el sum
de cada fragmento debe coincidir con el tamaño del fragmento.
- elementos:,
[]
tamaño:,2
predicado:x > 0
-> cualquiera[]
o[[]]
- elementos:,
[0, 0, 0, 0, 0, 0]
tamaño:,2
predicado:x > 0
->[[0, 0, 0, 0, 0, 0]]
- elementos:,
[0, 1, 1, 0]
tamaño:,2
predicado:x > 0
->[[0, 1, 1, 0]]
- elementos:,
[0, 1, 1, 0, 1, 0, 0]
tamaño:,2
predicado:x > 0
->[[0, 1, 1, 0], [1, 0, 0]]
- elementos:,
[0, 1, 0, 0, 1, 0, 1, 1, 0]
tamaño:,2
predicado:x > 0
->[[0, 1, 0, 0, 1, 0], [1, 1, 0]]
Y terminemos con los pasajeros del avión donde los bebés se sientan en el regazo de un padre . A
para adultos, b
para bebés, la fila del avión tiene 3
asientos anchos, los adultos siempre aparecen antes que su bebé:
- elementos:,
[A, b, A, b, A, A, A, b, A, b, A, A, b]
tamaño:,3
predicado:x => x == A
->[[A, b, A, b, A], [A, A, b, A, b], [A, A, b]]