Login
задача из Haskell
360 просмотров
Перейти к просмотру всей ветки
Всем привет.
прошу помочь с решением задачи
условия следующие:
Robert der Rollenspieler möochte die Wahrscheinlichkeit berechnen, dass seine Spielgur eine
Fertigkeitsprüfung besteht, um die nächste Aufstufung seiner Spielgur zu planen. In seinem
Spiel wird eine Fertigkeitsprüfung wie folgt durchgeführt: Gegeben sind drei Attribute
der Spielgur 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
Dierenz notiert, falls der Würfel über dem Fähigkeitswert liegt und 0 sonst. Die Prüfung
gelingt, wenn die Summe der abgeschnittenen Dierenzen 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)
прошу помочь
прошу помочь с решением задачи
условия следующие:
Robert der Rollenspieler möochte die Wahrscheinlichkeit berechnen, dass seine Spielgur eine
Fertigkeitsprüfung besteht, um die nächste Aufstufung seiner Spielgur zu planen. In seinem
Spiel wird eine Fertigkeitsprüfung wie folgt durchgeführt: Gegeben sind drei Attribute
der Spielgur 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
Dierenz notiert, falls der Würfel über dem Fähigkeitswert liegt und 0 sonst. Die Prüfung
gelingt, wenn die Summe der abgeschnittenen Dierenzen 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)
прошу помочь