Jump to content
BulForum.com

Какво ви минава през главата


Recommended Posts

 

С лека оптимизация това с разделянето тръгна :-)

 

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Test</title>

    <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet">
    <style>
        #form_controls label {
            width: 80px;
            text-align: right;
            padding-right: 5px;
        }

        .controls {
            margin-bottom: 5px;
        }

        .controls input {
            margin-right: 5px;
        }
    </style>
</head>
<body>


    <div class="container">
        <div class="row">
            <form class="span4">
                <fieldset class="form-inline">
                    <legend>Legend</legend>
                    <div id="form_controls"></div>
                    <div class="form-actions">
                        <button class="btn btn-primary" id="btnSplit">Find Best Partitioning</button>
                    </div>
                </fieldset>
            </form>
            <div class="span8">
                <legend>Results</legend>
                <div id="results" class="row">

                </div>
            </div>
        </div>
    </div>

    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
    <script>

        var bestSplit;
        var bestSplitDelta = 9999;
        var items;
        var teamWeight = [0, 0, 0, 0];
        var teamSize = [0, 0, 0, 0];
        var numIterations = 0;
        
        function EvaluateSplit() {
            var teams = [[],[],[],[]];
            var teamSize = [0, 0, 0, 0];
            for (var i = 0; i < 16; i++) {
                teams[items[i].team].push(i);
            }
            for (var i = 0; i < 4; i++) if (teams[i].length != 4) return; // invalid teams

            var minWeight = Math.min.apply(null, teamWeight);
            var maxWeight = Math.max.apply(null, teamWeight);
            
            teamDelta = maxWeight - minWeight;

            if (teamDelta < bestSplitDelta) {
                bestSplit = teams;
                bestSplitDelta = teamDelta;
            }
        }

        function SplitItems(ndx) {
            for (var i = 0; i < 4; i++) {
                if (teamSize[i] == 4) continue;
                //$("#t" + i).text(i);
                items[ndx].team = i;
                teamWeight[i] += items[ndx].weight;
                teamSize[i]++;
                numIterations++;
                var teamDelta = 0;
                if (ndx >= 7) {
                    var minWeight = 9999;
                    var maxWeight = 0;
                    for (var t = 0; t < 4; t++) {
                        if (teamSize[t] != 4) continue;
                        if (minWeight > teamWeight[t]) minWeight = teamWeight[t];
                        if (maxWeight < teamWeight[t]) maxWeight = teamWeight[t];
                    }
                    teamDelta = maxWeight - minWeight;
                }

                if (ndx < 15) {
                    if (teamDelta < bestSplitDelta) // skip bad combinations
                        SplitItems(ndx + 1);
                } else {
                    if (teamDelta < bestSplitDelta) {
                        EvaluateSplit();
                    }
                }
                teamSize[i]--;
                teamWeight[i] -= items[ndx].weight;
            }
        }


        function DisplayBestSplit() {
            $("#results").html("");
            for (var t = 0; t < 4; t++) {
                var $div = $("<div class='span2'></div>");
                var tw = 0;
                for (var n = 0; n < 4; n++) {
                    $div.append(items[bestSplit[t][n]].description + " (" + items[bestSplit[t][n]].weight + ")<br/>");
                    tw += items[bestSplit[t][n]].weight;
                }
                $div.append("team weight: " + tw);
                $("#results").append($div);
            }
            var $div2 = $("<div class='span8'></div>");
            $div2.append("<br><br>team difference: " + bestSplitDelta + ", combinations tested: " + numIterations);
            $("#results").append($div2);
        }

        function InitializeForm() {
            for (var i = 1; i <= 16; i++) {
                var $div = $("<div class='controls'><label>" + i + ".</label></div>");
                var $inp1 = $("<input type='text' placeholder='description' class='input-medium' />").attr("id", "name" + i);
                var $inp2 = $("<input type='number' placeholder='weight' class='input-mini' />").attr("id", "weight" + i);
                $inp1.val("item #" + i);
                $inp2.val((Math.random() * 150).toFixed(0));
                $div.append($inp1).append($inp2).append("<span id='t"+i+"'></span>");
                $("#form_controls").append($div);
            }

            $("#btnSplit").click(function (event) {
                event.preventDefault();
                items = [];
                for (var i = 1; i <= 16; i++) {
                    var rec = {
                        description: $("#name" + i).val(),
                        weight: parseFloat($("#weight" + i).val()),
                        team: 0
                    };
                    items.push(rec);
                }
                numIterations = 0;
                teamWeight = [0, 0, 0, 0];
                teamSize = [0, 0, 0, 0];
                bestSplitDelta = 9999;
                SplitItems(0);
                DisplayBestSplit();
            });
        }

        InitializeForm();
    </script>
</body>
</html>

 

 

Това го записваш в един .html файл и си готов :)

Нещо не схващам.... Правя копи пействам в Word, save as .html, После като го стартирам, не става нищо - просто ми се отваря пак текста, само че в Chrome?! Къде греша?

Link to comment
Share on other sites

  • Replies 107k
  • Created
  • Last Reply

Пробвай да отвориш Notepad, пейстни вътре, запази файла и промени разширението на html. Виж какво ще стане.

Сега стана!

Мерси! Ебаси якото! А не може ли да почва с празни полета? Откъде си ги взима тея цифри?

Link to comment
Share on other sites

$inp1.val("item #" + i);

$inp2.val((Math.random() * 150).toFixed(0)); ей тука ти се пълнят с рандом цифри. Предполагам защото не му се е занимавало да прави проверки дали всичко е въведено и си осигурява по този начин да има нещо във всички полета

Link to comment
Share on other sites

Не позна. Мързеше ме да пиша смислени данни и си ги генерирах. Сложи // пред 2та реда, които ти е казал Миро и всичко ще е правно.

Link to comment
Share on other sites

Много хубаво, ама не работи...

С пробните числа ок, ама сега като му вкарах петцифрените...

Защо, мамка мууууууу!

 

EDIT: Да де, ама ги закръглих до трицифрени... В крайна сметка е въпрос на коефициент... С трицифрените си работи супер!

Link to comment
Share on other sites

Имаше лека грешка - при оптимизацията се оценяваха и непълни отбори и е изпускало валидни комбинации. Я виж сега

 

A 5-цифрените числа как ги въвеждаш? Гледай да е само число и да няма интервали, запетайки и други гадости покрай тях 

 

 

 

 
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Test</title>
 
    <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet">
    <style>
        #form_controls label {
            width: 80px;
            text-align: right;
            padding-right: 5px;
        }
 
        .controls {
            margin-bottom: 5px;
        }
 
        .controls input {
            margin-right: 5px;
        }
    </style>
</head>
<body>
 
 
    <div class="container">
        <div class="row">
            <form class="span4">
                <fieldset class="form-inline">
                    <legend>Legend</legend>
                    <div id="form_controls"></div>
                    <div class="form-actions">
                        <button class="btn btn-primary" id="btnSplit">Find Best Partitioning</button>
                    </div>
                </fieldset>
            </form>
            <div class="span8">
                <legend>Results</legend>
                <div id="results" class="row">
 
                </div>
            </div>
        </div>
    </div>
 
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
    <script>
    
        Number.prototype.formatMoney = function(c, d, t){
        var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
           return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
         };
        
        var bestSplit;
        var bestSplitDelta = 9999;
        var items;
        var teamWeight = [0, 0, 0, 0];
        var teamSize = [0, 0, 0, 0];
        var numIterations = 0;
        
        function EvaluateSplit() {
            var teams = [[],[],[],[]];
            for (var i = 0; i < 16; i++) {
                teams[items[i].team].push(i);
            }
            for (var i = 0; i < 4; i++) if (teams[i].length != 4) return; // invalid teams
 
            var minWeight = Math.min.apply(null, teamWeight);
            var maxWeight = Math.max.apply(null, teamWeight);
            
            teamDelta = maxWeight - minWeight;
 
            if (teamDelta < bestSplitDelta) {
                bestSplit = teams;
                bestSplitDelta = teamDelta;
            }
        }
 
        function SplitItems(ndx) {
            for (var i = 0; i < 4; i++) {
                if (teamSize[i] == 4) continue;
                //$("#t" + i).text(i);
                items[ndx].team = i;
                teamWeight[i] += items[ndx].weight;
                teamSize[i]++;
                numIterations++;
                var teamDelta = 0;
                var numCompleteTeams = 0;
                if (ndx >= 7) {
                    var minWeight = 9999;
                    var maxWeight = 0;
                    for (var t = 0; t < 4; t++) {
                        if (teamSize[t] != 4) continue;
                        numCompleteTeams++;
                        if (minWeight > teamWeight[t]) minWeight = teamWeight[t];
                        if (maxWeight < teamWeight[t]) maxWeight = teamWeight[t];
                    }
                    teamDelta = maxWeight - minWeight;
                }
 
                if (ndx < 15) {
                    if ( numCompleteTeams < 2 || teamDelta < bestSplitDelta) // skip bad combinations
                        SplitItems(ndx + 1);
                } else {
                    if (teamDelta < bestSplitDelta) {
                        EvaluateSplit();
                    }
                }
                teamSize[i]--;
                teamWeight[i] -= items[ndx].weight;
            }
        }
 
 
        function DisplayBestSplit() {
            $("#results").html("");
            for (var t = 0; t < 4; t++) {
                var $div = $("<div class='span2'></div>");
                var tw = 0;
                for (var n = 0; n < 4; n++) {
                    $div.append(items[bestSplit[t][n]].description + " (" + items[bestSplit[t][n]].weight + ")<br/>");
                    tw += items[bestSplit[t][n]].weight;
                }
                $div.append("team weight: " + tw);
                $("#results").append($div);
            }
            var $div2 = $("<div class='span8'></div>");
            $div2.append("<br><br>team difference: " + bestSplitDelta + ", combinations tested: " + numIterations.formatMoney(2,'.',','));
            $("#results").append($div2);
        }
 
        function InitializeForm() {
            for (var i = 1; i <= 16; i++) {
                var $div = $("<div class='controls'><label>" + i + ".</label></div>");
                var $inp1 = $("<input type='text' placeholder='description' class='input-medium' />").attr("id", "name" + i);
                var $inp2 = $("<input type='number' placeholder='weight' class='input-mini' />").attr("id", "weight" + i);
                //$inp1.val("item #" + i);
                //$inp2.val((Math.random() * 150).toFixed(0));
                $div.append($inp1).append($inp2).append("<span id='t"+i+"'></span>");
                $("#form_controls").append($div);
            }
 
            $("#btnSplit").click(function (event) {
                event.preventDefault();
                items = [];
                for (var i = 1; i <= 16; i++) {
                    var rec = {
                        description: $("#name" + i).val(),
                        weight: parseFloat($("#weight" + i).val()),
                        team: 0
                    };
                    items.push(rec);
                }
                numIterations = 0;
                teamWeight = [0, 0, 0, 0];
                teamSize = [0, 0, 0, 0];
                bestSplitDelta = 9999;
                SplitItems(0);
                DisplayBestSplit();
            });
        }
 
        InitializeForm();
    </script>
</body>
</html>

 

Link to comment
Share on other sites

Верно, че за всичко си имало първи път. Никога до сега в 10 и 20 сутринта не бях пил уиски. Сигурно ще ми е и за последен път де...ама от опит глава не боли :D

Link to comment
Share on other sites

Демек, нашо?! :laughing:

 

За хубавото уиски, час няма.Мога да го цъкам по всяко време на денонощието.

не бре...от другата страна на големия гьол :D

Link to comment
Share on other sites

Верно, че за всичко си имало първи път. Никога до сега в 10 и 20 сутринта не бях пил уиски. Сигурно ще ми е и за последен път де...ама от опит глава не боли :D

 

Добреее, добре... Само така :)

 

Още два дни, два дни мъки и напъни и сдавам обекта... Ще се отпразнува сериозно!

Link to comment
Share on other sites

Режа един сурово сушен свински бут, сипал съм си от кумовата, слушам Цепелин. Зле ми е. :lol:

Link to comment
Share on other sites

АХХАХАХААХХАХАХАХАХАХАХАХАХАХААХАХАХХАХАХАХАХАХАХАХАХАХАХАХА

BTW, Тези 8 (9) кебапчета са за теб и копче, и за тази вечер, и за утре, НАЛИ? ;)

Link to comment
Share on other sites

mobo, твойта кожа, къде можа да ми препоръчаш тоя powerball... развали дисциплината в целия офис - цял ден се редуваме да друскаме тая топка барем светне синьо, вече докато държим мишките ръцете ни треперят. Производителността спадна със поне 70% заради него

Link to comment
Share on other sites

:laughing: Аааааааахахахаххаха!!! Чакай да мине еуфорията, да видиш какъв ефект има върху китките.

 

Ред. Галине, искам да те питам дали е по-добре да ми спретнеш товa или да си купя готов?

Link to comment
Share on other sites

Баси и деня изкарах днес, току-що се прибрах утрепан (10.30 вечерта) и смятам да се отнасям до утре на обяд. Станах в 7 и нещо сутринта (беше официален почивен ден по тези земи) и се отнесох към Уислър. Жега, яко слънце, много сняг и зверско каране до късния следобед. След това як запой в една ирландска кръчма с чудна бира (на снимката) до никое време. Стар съм вече за такива изпълнения, мамка му. :lol: :laughing1:

 

20130329114807.jpg

 

Горната снимка е правена на Blackcomb почти в подножието на върха, а отсреща се виждат пистите на Whistler. Между тези две планини над огромната пропаст се движи прочутия Peak2Peak кабинков лифт. Ето и една панорама от същото място.

 

А това е мазната ирландска биричка, с която се размазах. :beerchug

 

20130329170416.jpg

Link to comment
Share on other sites

Кръстник, вече открих вело сезона :) Тая неделя един виден шопски психопат обмисля да ни подложи на старопланински изтезания :)

Link to comment
Share on other sites

:laughing: Аааааааахахахаххаха!!! Чакай да мине еуфорията, да видиш какъв ефект има върху китките.

 

Ред. Галине, искам да те питам дали е по-добре да ми спретнеш товa или да си купя готов?

Пич, заеби го това! Правено е вече от един приятел и не бачка. В смисъл, то си бачка, ама освен да си правиш весели искрички за друго не става. Ако толкова искаш нещо миниатюрно, намери си захранване от някой малък, рубинов лабораторен лазер и с малко човъркане по него и при условие, че си направиш заваръчна ваничка, има доста интересни възможности :))

Link to comment
Share on other sites

  • Veno locked this topic

Archived

This topic is now archived and is closed to further replies.

Guest
This topic is now closed to further replies.

×
×
  • Create New...