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.

3 myśli na temat “Lotto to fajna rzecz

Napisz odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax