Lotto to fajna rzecz
Wygrał ktoś te 60 milionów? Serio nie? Ok. Poniżej mały magiczny programik pokazujący jak obstawiać. Jego pełna wersja za kilka dni. Może kumulacja narośnie i będę miał motywację by zagrać:
Listing 1. Takie tam Lotto
public class Lotto {
public static final int NBR = 100_000_000;
public static void main(String[] args) {
Lotto lotto = new Lotto();
Map<Integer, Integer> stat = lotto.stat(NBR);
System.out.println(stat);
stat.entrySet().stream().sorted(Comparator.comparing(e -> e.getValue(), (l, r) -> l.compareTo(r))).forEach(e -> {
System.out.println(e.getKey() + "=" + ((e.getValue() * 100.) / NBR) + "%");
});
}
private Set<Integer> draw() {
List<Integer> all = IntStream.rangeClosed(1, 49).boxed().collect(Collectors.toList());
Collections.shuffle(all);
return all.stream().limit(6).collect(Collectors.toSet());
}
public Map<Integer, Integer> stat(int param) {
Map<Integer, List<Integer>> ll = new HashMap<>();
IntStream.rangeClosed(1, 49).boxed().forEach(i -§gt; ll.put(i, new ArrayList<>()));
for (int c = 0; c < param; c++) {
Set<Integer> draw = draw();
Map<Integer, List<Integer>> collect = draw.stream().collect(Collectors.groupingBy(i -> i));
merge(collect, ll);
}
return count(ll);
}
private Map<Integer, Integer> count(Map<Integer, List<Integer>> l) {
return l.entrySet().stream().collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue().size()));
}
private Map<Integer, List<Integer>> merge(Map<Integer, List<Integer>> l, Map<Integer, List<Integer>> r) {
r.entrySet().forEach(e ->
e.getValue().addAll(l.getOrDefault(e.getKey(), Collections.emptyList()))
);
return r;
}
}
ps. warto pamiętać, że rozkład prawdopodobieństwa dla każdej kuli jest taki sam i nie ma systemu. Choć o 60 mln pomarzyć można.
pps. rozkład w lotto nie jest idealny, ale kompensacja następuje dzięki regularnej wymianie maszyn i kul.
Kod jest dostępny na licencji MIT. Jednak niektóre rozwiązania mogą być objęte inną licencją. W takim przypadku jest, to zaznaczone. Artykuły są dostępne na licencji CC-BY.
Jeżeli spodobał ci się ten wpis, to podziel się nim z innymi lub wesprzyj autora.