{% extends "tools/_layout.html" %}

{% block title %}
Probas A+B
{% endblock %}

{% block content %}
<h1>{{ _("Probabilités d'assembler A et B au tour T") }}</h1>
<p>
	{% trans trimmed
		loi_hypergeometrique=_("la loi hypergéométrique (<i>article à venir</i>)")|safe
	%}
	Un deck combo a souvent besoin d'assembler deux cartes : <strong>A</strong> et
	<strong>B</strong>. La facilité avec laquelle un deck assemble A et B est gage de stabilité du
	deck. Il est donc important de déterminer cette facilité en se basant sur les probabilités et
	{{ loi_hypergeometrique }} à variables multiples. Chaque groupe de cartes correspond aux cartes
	qui sont la combo et aux différents moyens disponibles de les récupérer.
	{% endtrans %}
</p>
<p>
	{% trans trimmed %}
	Par exemple, pour {{ kinnan_bonder_prodigy }}, le groupe A correspondrait à
	{{ basalt_monolith }} et aux cartes comme {{ fabricate }} ou {{ trophy_mage }} et le groupe B
	aux cartes comme {{ thrasios_triton_hero}}, {{ urza_lord_high_artificer }} et
	{{ chord_of_calling }} et autres.
	{% endtrans %}
</p>

<form class="inline-form" id="combo-a-b" autocomplete="off"
	onsubmit="return calculate();">
	<fieldset id="valeurs-a-b">
		<legend>{{ _("Données nécessaires au calcul") }}</legend>
		<span class="double-column">
			<label for="sizeA">{{ _("cartes dans le groupe A :") }}</label>
			<input type="text" id="sizeA" placeholder="8" />
		</span>
		<span class="double-column">
			<label for="sizeB">{{ _("cartes dans le groupe B :") }}</label>
			<input type="text" id="sizeB" placeholder="8" />
		</span>
		<span class="double-column">
			<label for="turn">{{ _("tour d'assemblage :") }}</label>
			<input type="text" id="turn" placeholder="4" />
		</span>
		<span class="double-column">
			<label for="cards">{{ _("nombre de cartes piochées :") }}</label>
			<input type="text" id="cards" placeholder="10" />
		</span>
		<button type="submit" id="btn-calcul">{{ _("Calcul")}}</button>
		<div id="result"></div>
	</fieldset>
</form>
{% endblock %}

{% block script %}
{{ super() }}
<!-- Combo A+B -->
<script>
	const turn = document.getElementById("turn");
	turn.addEventListener('keyup', turn2cards);
	const cards = document.getElementById("cards");
	cards.addEventListener('keyup', cards2turn);

	function turn2cards () {
		cards.value = Math.max(1,6 + parseInt(turn.value || turn.placeholder));
		cards.placeholder = Math.max(1,6 + parseInt(turn.value || turn.placeholder));
	}

	function cards2turn () {
		turn.value = Math.max(0,parseInt(cards.value || cards.placeholder) - 6);
		turn.placeholder = Math.max(0,parseInt(cards.value || cards.placeholder) - 6);
	}

	// Calculator made by Spigushe
	var calculate = function () {
		var pxy = function (x,y) {
			let sum = 0;
			for (let i = x; i <= Math.min(A,P-2); i++) {
				for (let j = y; j <= Math.min(B,P-1-i); j++) {
					sum = sum + hxy(i,j);
				}
			}
			return sum;
		}
		var hxy = function (x,y) {
			let achoosex = binom(A,x);
			let bchoosey = binom(B,y);
			let cchoosez = binom(99-A-B,P-x-y);
			let nchoosep = binom(99,P);
			return achoosex * bchoosey * cchoosez / nchoosep;
		}
		var binom = function (n,k) {
			if (k > n) { let z = n; n = k; k = z; }
			let r = 1;
			for (let i = 1; i <= Math.min(k, n-k); i++) {
				r = r * (n + 1 - i) / i;
			}
			return r;
		}

		// Size of group A
		let iA = document.getElementById("sizeA");
		var A = parseInt(iA.value || iA.placeholder);
		// Size of group B
		let iB = document.getElementById("sizeB");
		var B = parseInt(iB.value || iB.placeholder);
		// Population
		var P = parseInt(cards.value || cards.placeholder);

		// Respnse string
		let str = "Turn " + parseInt(turn.value || turn.placeholder);
		str = str + " (<i>" + P + " cards</i>)" + "<br>";
		str = str + "A + B : " + Math.round(pxy(1,1)*10000)/100+" %";
		// Creating DOM element
		let r = document.createElement("span");
		r.setAttribute('class', "double-column");
		r.innerHTML = str;
		// Inserting element
		let result = document.getElementById("result");
		while (result.firstChild) { result.removeChild(result.firstChild) }
		result.appendChild(r);

		// Prevent default submitting
		return false;
	}
</script>
{% endblock %}
