Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
import RCFramework
prn_M3C3 = (take 6 . cycle) [Actor "Missionaire" 1 True, Actor "Cannibal" 1 True]
rst_M3C3 side = not $ or [3 == f "Cannibal" side && 2 == f "Missionaire" side,
3 == f "Cannibal" side && 1 == f "Missionaire" side,
2 == f "Cannibal" side && 1 == f "Missionaire" side]
where
f nm = (length . filter (\actor -> name actor == nm))
tsk_M3C3 = Crossing
2
prn_M3C3
rst_M3C3
(Here prn_M3C3 [])
(There [] prn_M3C3)
main = do
mapM_ print $ solve tsk_M3C3 []
не совсем понятно почему так медленно, целая секунда.
хаскель это интерпретируемый язык?
после нахождения первых одиннадцати состояний он состоит из (примерно) 5*4^9 путей.их существенно меньше. даже из первого состояния всего три из пяти путей валидны, один из которых тут же приходит в тупик.
Тут проблема не в языке, а в том, что я выбрал не самое (самое не) оптимальное решение.как то не подумал, что так было задумано.
если отключить проверку на то, что следующее состояние уже было ранее, то лодка по кругу будет бесконечно возить одно и то же.
ЗЫ еще не совсем понятно, что именно делается за 45 секунд. если отключить проверку на то, что следующее состояние уже было ранее, то лодка по кругу будет бесконечно возить одно и то же.
пока не найдётся решение.
Level 1: 1
Level 2: 3
Level 3: 5
Level 4: 15
Level 5: 27
Level 6: 79
Level 7: 145
Level 8: 417
Level 9: 771
Level 10: 2193
Level 11: 4071
Решение задачи о миссионерах и каннибалах на языке Haskell