JSFiddle - React, Tailwind, and code Playground

by mgibsonbr

HTML

<input type="text" name="qtdeQuestoes" id="qtdeQuestoes" size="3" maxlength="3" style="cursor: default;" value="200">
<input type="button" style="height: 30px; cursor: default;" id="geraAleatorio" value="Gerar">

<table id="tb-questoes-selecionadas" cellspacing="1">
	<tbody>								
		<tr class="grid-table-title">
			<td align="center" style="background-color: #e5e5e5;">Nome</td>		
            <td align="center" style="background-color: #e5e5e5;">Max</td>	
			<td align="center" style="background-color: #e5e5e5;">Qtde</td>									
		</tr>
		<tr class="trRemove">
            <td class="td-center-center">teste 1</td>
            <td class="td-center-center"><input id="total" value="150" /></td>
            <td class="td-center-center">	
                <input type="text" maxlength="3" rel="146" name="D" id="146D" value="0" class="qtdeAssunto cadeadoaberto" style="width:30px;">
            </td>
        </tr>
        <tr class="trRemove">
                <td class="td-center-center">teste 2</td>
            <td class="td-center-center"><input id="total" value="130" /></td>
                <td class="td-center-center">	<input type="text" maxlength="3" rel="2824" name="A" id="2824A" value="0" class="qtdeAssunto cadeadoaberto" style="width:30px;">  </td>
        </tr>
    </tbody>
</table>

JavaScript

var limiteQuestoes = 200;

$("#geraAleatorio").click(function(){
		var colunasAbertas = $("#tb-questoes-selecionadas").find(".qtdeAssunto.cadeadoaberto");
    
        var totalCampos = colunasAbertas.length;
		
		var rand = new Array();
		var randFinal = new Array();
        var qtde = parseInt($("#qtdeQuestoes").val());

		if(qtde <= limiteQuestoes){		
			var qtdeQuestoes = qtde;		
		}else{
			alert("A quantidade máxima é " + limiteQuestoes + "!");
			var qtdeQuestoes = limiteQuestoes;
			$("#qtdeQuestoes").val(limiteQuestoes);
		}	
   
		if(qtdeQuestoes >= totalCampos){
            
    /////////////////////////////////////////
    var alvo = qtde;
    var linhas = $.map($("#tb-questoes-selecionadas tr").find("input:eq(0)"),
        function(x) {
            return { min:0, max: parseInt($(x).val(),10) };
        });
    var resultado = [];

    // Atribuindo os mínimos
    for ( var i = 0 ; i < linhas.length ; i++ ) {
        resultado[i] = linhas[i].min;
        alvo -= linhas[i].min;
    }
            
    function criarRoleta() {
        var ret = [];
        var soma = 0;
        for ( var i = 0 ; i < linhas.length ; i++ ) {
            var valor = linhas[i].max - resultado[i];
            ret.push(valor+soma);
            soma += valor;
        }
        return [ret,soma];
    }

    for ( var i = 0 ; i < alvo ; i++ ) {
        var roleta = criarRoleta();
        var sorteio = Math.floor(Math.random()*roleta[1]);
        for ( var t = 0 ; t < linhas.length ; t++ )
            if ( sorteio < roleta[0][t] ) {
                resultado[t]++;
                break;
            }
    }	
            
    $("#tb-questoes-selecionadas tr").find("input:eq(1)").each(
        function(i) {
            $(this).val(resultado[i]);
        });
	/////////////////////////////////////////
	
            
            
		}else{
			alert("O número de questões não pode ser menor que a quantidade de linhas.");
		}
				
	});