Login
задача из Haskell
360 просмотров
Перейти к просмотру всей ветки
in Antwort Kvint 20.04.14 10:38, Zuletzt geändert 21.04.14 22:37 (MrSanders)
Я правильно понял что вы пытаетесь сделать список с перебором всех подходящих бросков кубика? А потом для подсчета вероятности поделить длину списка на 20^3?
А если так? (сильно не бить, haskell давно не трогал :))
diff x a | x - а > 0 = х - а
| х - а <= 0 = 0
erfolgG (a1,a2,a3) n = [(x,y,z) | x<-[1..20], y<-[1..20], z<-[1..20], x+y<40, x+z<40, y+z<40,
(diff x a1)+(diff y a2)+(diff z a3) <= n]
Но. Про варианты с двумя выброшенными единицами вы забыли
Вам надо бы что-то вроде (с case-ом вроде понятнее)
check x y z a1 a2 a3 n = case (x,y,z) of
(1,1,_) -> True
(1,_,1) -> True
(_,1,1) -> True
(20,20,_) -> False
(20,_,20) -> False
(_,20,20) -> False
(_,_,_) -> (diff x a1)+(diff y a2)+(diff z a3) <= n
и
erfolgG (a1,a2,a3) n = [(x,y,z) | x<-[1..20], y<-[1..20], z<-[1..20], check x y z a1 a2 a3 n]
В ответ на:
erfolgG (a1,a2,a3) n = [(x,y,z) | x<-[1..20], y<-[1..20], z<-[1..20], x+y<40, x+z<40, y+z<40,
if x-a1<=0
then (x-a1) == 0
else (x-a1) == (x-a1),
if y-a2<=0
then (y-a2) == 0
else (y-a2) == (y-a2),
if z-a3<=0
then (z-a3) == 0
else (z-a3) == (z-a3),
(x-a1)+(y-a2)+(z-a3)<=n]
erfolgG (a1,a2,a3) n = [(x,y,z) | x<-[1..20], y<-[1..20], z<-[1..20], x+y<40, x+z<40, y+z<40,
if x-a1<=0
then (x-a1) == 0
else (x-a1) == (x-a1),
if y-a2<=0
then (y-a2) == 0
else (y-a2) == (y-a2),
if z-a3<=0
then (z-a3) == 0
else (z-a3) == (z-a3),
(x-a1)+(y-a2)+(z-a3)<=n]
А если так? (сильно не бить, haskell давно не трогал :))
diff x a | x - а > 0 = х - а
| х - а <= 0 = 0
erfolgG (a1,a2,a3) n = [(x,y,z) | x<-[1..20], y<-[1..20], z<-[1..20], x+y<40, x+z<40, y+z<40,
(diff x a1)+(diff y a2)+(diff z a3) <= n]
Но. Про варианты с двумя выброшенными единицами вы забыли
Вам надо бы что-то вроде (с case-ом вроде понятнее)
check x y z a1 a2 a3 n = case (x,y,z) of
(1,1,_) -> True
(1,_,1) -> True
(_,1,1) -> True
(20,20,_) -> False
(20,_,20) -> False
(_,20,20) -> False
(_,_,_) -> (diff x a1)+(diff y a2)+(diff z a3) <= n
и
erfolgG (a1,a2,a3) n = [(x,y,z) | x<-[1..20], y<-[1..20], z<-[1..20], check x y z a1 a2 a3 n]