-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Бонус задача No. 2 #2
Comments
generateSolutions result arr length left index
| index == length - 1 = [(changeIthElement arr index left)]
| left == 0 = [arr]
| otherwise =
let ithElement = arr !! index
in result ++
(concat [
generateSolutions [] (changeIthElement arr index x) length (left - x) (index + 1)
| x <- [ithElement .. left]
]
)
changeIthElement arr index withValue =
(take index arr) ++ [withValue] ++ (drop (index + 1) arr)
generate 0 m = []
generate n m = generateSolutions [] [0 | x <- [1.. n]] n m 0 |
Опитвах се цял ден без монади, щеше ми се по колкото се може по-кратък начин с list comprehension, но не ми се получи, поздравления на Ангел! П.п. намерих replicateM някъде из форумите, счетох, че все пак може и това решение да е полезно някому import Control.Monad
generate n m =
[ x | x <- (replicateM n [0..m]), sum x == m ] |
@dimitroffangel една идея прекалено императивно ми идва решението с тези индексирания, иначе е супер. |
@spiderjako по-кратно от това решение едва ли ще се намери 😄. Иначе ще е бавничко, с тази филтация над всички комбинации 😄. |
Ето по-кратко :Р generate n m =
filter ((==m) . sum) $ sequence $ replicate n [0..m] (нужно ти е само |
Ето и мое решение, мисля че бие по скорост 😄 generate 1 m = [[m]]
generate n m = [nth : r | nth <- [0..m], r <- generate (n - 1) (m - nth)] |
Реализирайте функция:
която по зададени n и m, намира всички целочислени, неотрицателни решения на уравнението
Примерен вход и изход
Уточнения по задачата.
Срок за решения: 8ми ноември 2020г.
The text was updated successfully, but these errors were encountered: