русский
Germany.ruForen → Архив Досок→ Programmierung

задача из Haskell

20.04.14 10:38
задача из Haskell
 
Kvint постоялец
Kvint
Всем привет.
прошу помочь с решением задачи
условия следующие:
Robert der Rollenspieler möochte die Wahrscheinlichkeit berechnen, dass seine Spiel gur eine
Fertigkeitsprüfung besteht, um die nächste Aufstufung seiner Spiel gur zu planen. In seinem
Spiel wird eine Fertigkeitsprüfung wie folgt durchgeführt: Gegeben sind drei Attribute
der Spiel gur und eine Schwierigkeit. Robert muss jeden der drei Attributswerte mit einem
20-seitigen Würfel (Zahlen von 1{20) unterwürfeln. Für jeden der drei Würfelwürfe wird die
Di erenz notiert, falls der Würfel über dem Fähigkeitswert liegt und 0 sonst. Die Prüfung
gelingt, wenn die Summe der abgeschnittenen Di erenzen kleiner oder gleich dem Schwierigkeitswert
ist. Zusätzlich gilt, dass die Prüfung immer gelingt, wenn mindestens zwei der drei
Würfelwürfe eine 1 ergeben haben; aber die Prüfung misslingt auch schon, falls 2  20 füallt.
Я прописал условия в списке:
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]
Но вывод комбинаций выходит не полный, а именно при данных (2,2,3) 3 Hskell выводит [(2,2,3),(2,2,4),(2,2,5),(2,2,6),(2,3,3),(2,3,4),(2,3,5),(2,4,3),(2,4,4),(2,5,3),(3,2,3),(3,2,4),(3,2,5),(3,3,3),(3,3,4),(3,4,3),(4,2,3),(4,2,4),(4,3,3),(5,2,3)]
Исходя из условий задачи комбинаций должно быть больше, например (1,1,1) при ручном пересчете: 1<2 -> 0, 1<2 -> 0, 1<3 -> 0 , 0+0+0=0 < 3. Я это отразил в условиях (отмечено зеленым), но похоже не правильно. Помогите плз, разрбраться.
Так же не получается приклееть к списку считалку всех выриантов:
summE [] = 0
summE erfolgG = 1 + length (tail erfolgG)
прошу помочь
 

Sprung zu