ЙажаСценарий / Говнокод #21749 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
var get_color = function (value) {
                    value = parseInt(value);
                    if (10 >= value)
                        return "#2a00f4";
                    if (20 >= value && value > 10)
                        return "#0059ff";
                    if (30 >= value && value > 20)
                        return "#00d3ff";
                    if (40 >= value && value > 30)
                        return "#00ffb6";
                    if (50 >= value && value > 40)
                        return "#10f800";
                    if (60 >= value && value > 50)
                        return "#bafc01";
                    if (70 >= value && value > 60)
                        return "#fefa00";
                    if (80 >= value && value > 70)
                        return "#ffca00";
                    if (90 >= value && value > 80)
                        return "#ff8900";
                    if (value > 90)
                        return "#ff2900";
                };

Если бы кто помог это написать правильно - сказал бы спасибо)

Запостил: Stud Stud, (Updated )

Комментарии (55) RSS

  • Учитывая тот факт что цвет это просто число из трех байт, наверняка это можно выразить математически.

    А если нельзя то хотя-бы через дикшанари с ренджами описать декларативно
    Ответить
    • Я хуевый программист и тем более хуевый математик
      Ответить
          • Расмус смог создать миллионы хуёвых программистов, которые (если бы не он) работали бы в Макдональдсе. А чего добился ты?
            Ответить
            • А так как макдональдс создаёт огромную эмиссию парниковых газов из-за выращивания коров на убой, Расмус ещё и заботится об экологии.
              Ответить
  • Очередной раунд специальной олимпиады?
    function getColor (value) {
      var colors = [
        "#2a00f4",
        "#0059ff",
        "#00d3ff",
        "#00ffb6",
        "#10f800",
        "#bafc01",
        "#fefa00",
        "#ffca00",
        "#ff8900",
        "#ff2900",
      ];
      if (value < 0)   value = 0;
      if (value > 100) value = 100;
      return colors[Math.trunc((value - 1) / colors.length)];
    }
    Ответить
    • Ну тут скорее паралимпиады! Спасибо, дружище!
      Ответить
    • Говнокод!

      1. Массив внутри функции объявлять - такое себе, да ещё и через var.
      2. Где проверка на число или parseInt() / Number() ?
      Ответить
      • > Говнокод!

        Разумеется! Нуб штоле?

        На ГК не принято отвечать на посты вроде "оцинити код" нормальным кодом (это же ГК), за нормальным кодом надо ходить на SO. Я же даже явно написал:
        >> раунд специальной олимпиады
        Ответить
        • Ого, этот тред порождает почти канонические баты зожатия:
          JavaScript без коллбек-хелла, что это, 2006й? 
          
          var get_color = function getColor (value) {
            var colors = ["#0059ff",
              "#00d3ff", "#00ffb6", "#10f800";
          } else if (value <= 90) {
              return "#10f800", "#bafc01",
                     _(90, Number.NaN, "#ff2900",
                      return alt(value);
                                       return color;
                                     _(70, 80, "#ffca00",
              "#fefa00", "#ff8900"];
                          _(70, 80, "#ffca00",
              "#ff2900";
                         return "#ff2900";
                     if (!isNaN(min) && value < 0)   value = 0; ... (value <= 50) {
              return "#00d3ff",
              "#10f800";
          } else
          #вореции
          Ответить
      • > 2. Где проверка на число или parseInt() / Number() ?
        Вставьте после определения массива следующее:
        colors.NaN = "#2a00f4";
        Ответить
      • >1. Массив внутри функции объявлять - такое себе, да ещё и через var.
        В чем проблема-то?

        >2. Где проверка на число или parseInt() / Number() ?
        как она должна выглядеть? Что делать если не число?
        Ответить
        • >>1. Массив внутри функции объявлять - такое себе, да ещё и через var.
          >В чем проблема-то?
          Никто не обещал, что он будет статическим. Хотя, в реальности могли бы и оптимизировать, т.к. внутри функции легче за переменной уследить.
          Ответить
            • очевидно массив
              1) размер которого задан на этапе компиляции
              2) и не может быть изменен
              Ответить
              • Да, именно это.
                Хотя, можно просто указатель на массив сделать статическим, а массив наполнить до выполнения скрипта.
                Ответить
  • Табличный метод.
    Все значения в массив, value приводишь к индексу поделив на 10, возвращаешь значение по полученному индексу.
    Ответить
  • Вот так надо. Табличные методы с делениями на десять не нужны.
    if (value <= 10) {
        return "#2a00f4";
    } else if (value <= 20) {
        return "#0059ff";
    } else if (value <= 30) {
        return "#00d3ff";
    } else if (value <= 40) {
        return "#00ffb6";
    } else if (value <= 50) {
        return "#10f800";
    } else if (value <= 60) {
        return "#bafc01";
    } else if (value <= 70) {
        return "#fefa00";
    } else if (value <= 80) {
        return "#ffca00";
    } else if (value <= 90) {
        return "#ff8900";
    } else {
        return "#ff2900";
    }
    Ответить
    • А че тут минус, а табличным высерам плюсы? Вы сами себя представьте на месте другого человека, который потом будет поддерживать хотя бы 10к строк такого кода. Вам самим не лень было бы постоянно разбираться в делениях и массивах, когда есть дофига куда более важных дел? Принципиального профита табличный метод не несет - размер кода асимптотически такой же (линейный по количеству кейсов), менять кейсы не проще и не сложнее. Он просто более запутанный. Простые вещи надо делать просто.
      Ответить
      • мне казалось мы тут вообще говно осуждаем. я бы предложил сделать так:
        switch(value){
        case 0:
        case 1:
        case 2:
        ....
        }
        Ответить
  • var get_color = function (value) {
                        value = parseInt(value);
                        if (10 >= value)
                            return "#2a00f4";
                        if (value > 90)
                            return "#ff2900";
                        var colors = ["#0059ff", "#00d3ff", "#00ffb6", "#10f800", "#bafc01", "#fefa00", "#ffca00", "#ff8900"];
                        return  colors[((value-11)/10) >> 0]; // плавучий питух
    }
    Ответить
  • JavaScript без коллбек-хелла, что это, 2006й?

    var get_color = function (value) {
        _ = function(min, max, color, alt) {
            return function(value) {
                if (!isNaN(max) && max >= value) 
                    return color;
                if (!isNaN(min) && value > min) 
                    return color;
                return alt(value);
            }
        }
        
        return _(Number.NaN, 10, "#2a00f4",
                  _(10, 20, "#0059ff",
                    _(20, 30, "#00d3ff",
                    _(30, 40, "#00ffb6",
                    _(40, 50, "#10f800",
                    _(50, 60, "#bafc01",
                        _(60, 70, "#fefa00",
                        _(70, 80, "#ffca00",
                        _(80, 90, "#ff8900",
                        _(90, Number.NaN, "#ff2900"))))))))))(value);
    };
    Ответить
    • Остаётся оформить в виде модуля и выложить в этот ваш репозиторий.
      Ответить
  • Вот простенький, и аккуратненький вариант в 10 строчек))
    Бонусом тесты, что точно все правильно работает
    var get_color = function (value) {
    	var x = Math.ceil(Math.min(Math.max(10, value), 100) / 10) - 1;
    	return '#' +
    		((0x20001bf).toString(16)[Math.round(6.5 * Math.sin(0.18 * x))] || 0) +
    		((0xa0aeff0f).toString(16)[Math.round(0.45 * Math.exp(0.3 * x))] || 0) +
    		((0x05dfc82).toString(16)[Math.round(x*3.49/4-0.9-Math.sign(x-4.5)*0.9) - 1] || 0) +
    		((0x093f8ca9).toString(16)[Math.round(8.5 * Math.sin(0.12 * x)) - 1] || 0) +
    		((0xf0fb00).toString(16)[Math.round(8.83 * Math.sqrt(0.04 * x))] || 0) +
    		((0x4ff6010).toString(16)[Math.round(6.5 * Math.sin(0.18 * x))] || 0)
    };
    
    (function test() {
    	var obj = {
    		10: "#2a00f4",
    		20: "#0059ff",
    		30: "#00d3ff",
    		40: "#00ffb6",
    		50: "#10f800",
    		60: "#bafc01",
    		70: "#fefa00",
    		80: "#ffca00",
    		90: "#ff8900",
    		100: "#ff2900"
    	}
    	for(var i in obj) {
    		console.assert(get_color(+i) === obj[i]);
    	}
    })();
    Ответить
    • Данный вариант может быть сколь угодно простеньким и аккуратненьким, но температура в Яунде от этого не изменится ни на один миллиградус.
      Ответить
    • я даже спрашивать не хочу, какой же тогда сложны вариант...
      Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8