{% extends "archetypes/_layout.html" %}
{% import "archetypes/winota-joiner-of-forces.json" as deck_json %}

{% block title %}
Winota, Joiner of Forces
{% endblock %}

{% block meta %}
<meta property="decklist" content='{{ deck_json | tojson }}' />
{% endblock %}

{% block archetype_name %}
<h1>Winota, Joiner of Forces</h1>
{% endblock %}

{% block archetype %}
{% trans trimmed
	hatebear=link("/cartes-thematiques/mecaniques-de-la-colorpie/les-cartes-de-taxe", "hatebears"),
	taxe=link("/cartes-thematiques/mecaniques-de-la-colorpie/les-cartes-de-taxe", "taxe"),
	aggro=link("/cartes-thematiques/mecaniques-de-la-colorpie/les-creatures-agressives", _("agressives")),
	blasts=link("/cartes-thematiques/mecaniques-de-la-colorpie/les-degats-directs", _("dégâts directs"))
%}
<h2>Présentation rapide</h2>
<p>
	Il s'agit d'un deck Aggro qui se transforme en deck Combo lorsque {{ winota_joiner_of_forces }}
	est sur le champ de bataille. En effet, sa capacité déclenchée se déclenche pour chaque
	créature non-humaine qui est déclarée attaquante.
</p>
<p>
	Étant basée sur la structure d'un aggro classique, le deck se prend en main rapidement malgré
	la présence de plusieurs synergies discrètes qui permettent de renforcer la puissance du deck
	et l'expérience de jeu. Maitriser ces synergies permet d'accéder aisément aux tables hautes
	lors des tournois.
</p>
<p>
	Le rythme de la partie doit être dicté par ce deck. C'est aux créatures du deck d'installer une
	grosse pression (une <em>clock</em>) qui permet d'être l'agresseur rapidement. Il faut garder
	en tête que le deck joue des {{ hatebear }} qui permettent de ralentir le développement de
	l'adversaire.
</p>
<p>
	La combinaison de couleur <em>Boros</em> donne accès aux meilleures créatures de {{ taxe }} en
	blanc et les meilleures créatures {{ aggro }} en rouge tout en gardant {{ lightning_bolt }}
	pour des {{ blasts }}.
</p>

<h2>Les Win-O-Maths</h2>
{% endtrans %}
<form class="inline-form" id="win-o-math" autocomplete="off"
	onsubmit="return calculate();">
	<fieldset id="win-o-val">
		<legend>{{ _("Probabilité de réussites successives") }}</legend>
		<span class="double-column">
			<label for="aL0_copies">{{ _("nombre d'humains :") }}</label>
			<input type="text" id="copies" placeholder="23" />
		</span>
		<span class="double-column">
			<label for="aL0_triggers">{{ _("nombre de réussites max :") }}</label>
			<input type="text" id="triggers" placeholder="5" />
		</span>
		<button type="submit" id="btn-calcul">{{ _("Calcul")}}</button>
		<div id="result"></div>
	</fieldset>
</form>
{% endblock %}

{% block script %}
{{ super() }}
<!-- Win-O-Math -->
<script>
	var calculate = function() {
		var hnps = function (n,p,s) { return 1 - hnpss(n,p,s,0) };
		var hnpss = function (n,p,s,e) {
			if (n > p) { n = p }
			let echooses = binom(s,e);
			let nechooseps = binom(p-s,n-e);
			let nchoosep = binom(p,n);
			return echooses * nechooseps / nchoosep;
		};
		var binom = function (n, k) {
			if ((k < 0) || (n < 0) || (k > n)) { return 0 }
			let resultat = 1;
			for (let i = 1; i < (Math.min(k, n-k) +1); i++) {
				resultat = resultat * (n + 1 - i) / i;
			}
			return resultat;
		};
		var pyx = function (y,x) {
			if (y == 0 && x == 0) { return 1 }
			if ((y > x) || (y < 0)) { return 0 }
			return pyx(y-1,x-1) * pryx(y-1,x-1) + pyx(y,x-1) * (1 - pryx(y,x-1));
		};
		var pryx = function (y,x) {
			if (pyx(y,x) == 0) { return 0 }
			let somme = 0;
			for (let s = 0; s <= x * N; s++) { somme += hnps(N,P - x * N,S - s) * pyxs(y,x,s) }
			return 1/pyx(y,x) * somme;
		};
		var pyxs = function (y,x,s) {
			if ((y > s) || (y > x)) { return 0 }
			if ((y == 0) && (s > 0)) { return 0 }
			if ((x == 0) && (y == 0) && (s == 0)) { return 1 }
			if ((x < 0) || (y < 0) || (s < 0)) { return 0 }
			let somme = 0;
			for (let i = 1; i <= N; i++) {
				somme += pyxs(y-1,x-1,s-i) * hnpss(N,P-(x-1)*N,S-s+i,i);
			}
			return somme + pyxs(y,x-1,s) * hnpss(N,P-(x-1)*N,S-s,0);
		};

		// Size of set
		var N = 6;
		// Success in population
		let copies = document.getElementById("copies");
		var S = parseInt(copies.value || copies.placeholder);
		// Size of deck
		var P = 99;

		// Triggers
		let triggers = document.getElementById("triggers");
		let max_triggers = triggers.value || triggers.placeholder;

		// parentNode
		var result = document.getElementById("result");
		while (result.firstChild) { result.removeChild(result.firstChild) }

		// Display
		for (let i = 0; i <= max_triggers; i++) {
			let str = "";
			str = str + "<strong>" + i + "</strong>" + " réussite";
			if (i > 1) { str = str + "s" }
			str = str + " : " + Math.round(pyx(i,max_triggers)*10000)/100+" %";
			let r = document.createElement("span");
			r.setAttribute('class', "double-column");
			r.innerHTML = str;
			result.appendChild(r);
		}

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


{% block style %}
<style>
input {
	max-width: 3em;
	margin: 0 1.5em;
	text-align: center;
}
#btn-calcul {
	text-decoration: none;
	border: 1px;
	border-radius: 0.5em;
	border-color: #ec5354;
	border-style: solid;
	padding: 0.5em;
	margin: 1em auto;
	color: #ec5354;
	width: 47%;
	text-align: center;
	display: block;
}
#result {
	margin: 0;
	padding: 0.5em;
	display: flex;
	flex-wrap: wrap;
	justify-content: space-evenly;
}
.double-column {
	display: inline-block;
	padding: 0.1em;
	vertical-align: top;
	margin: 0.1em;
	width: 47%;
	text-align: center;
}
@media only screen and (max-width: 750px) {
	.double-column {
		width: 100%;
		display: block;
	}
}
</style>
{% endblock %}
