1. JavaScript / Говнокод #21749

    −50

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 29 Ноября 2016

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

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

      А если нельзя то хотя-бы через дикшанари с ренджами описать декларативно
      Ответить
      • Я хуевый программист и тем более хуевый математик
        Ответить
        • Тогда зачем ты программируешь?
          Ответить
          • Быть может, его зовут Расмус Лердорф?
            Ответить
            • Тонко.
              Ответить
            • Расмус смог создать миллионы хуёвых программистов, которые (если бы не он) работали бы в Макдональдсе. А чего добился ты?
              Ответить
              • А так как макдональдс создаёт огромную эмиссию парниковых газов из-за выращивания коров на убой, Расмус ещё и заботится об экологии.
                Ответить
          • Потому что в остальном я еще более хуевый)
            Ответить
            • зато мамка твоя отлично сосёт, проверь.. и убедись
              Ответить
    • Очередной раунд специальной олимпиады?
      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)];
      }
      Ответить
      • Ну тут скорее паралимпиады! Спасибо, дружище!
        Ответить
      • value = 0; ... (value - 1)
        есть некая проблема, не?
        Ответить
      • Говнокод!

        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) и не может быть изменен
                Ответить
                • Да, именно это.
                  Хотя, можно просто указатель на массив сделать статическим, а массив наполнить до выполнения скрипта.
                  Ответить
                  • а развев JS позволяет это?
                    Ответить
                    • JS не позволяет, а движок мог бы внутри оптимизнуть.
                      Ответить
    • Табличный метод.
      Все значения в массив, 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);
      };
      Ответить
      • Остаётся оформить в виде модуля и выложить в этот ваш репозиторий.
        Ответить
    • if (10 <= value < 20) ...
      Ответить
    • Почему никто не предложил двоичный поиск?
      Ответить
    • Вот простенький, и аккуратненький вариант в 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]);
      	}
      })();
      Ответить
      • Данный вариант может быть сколь угодно простеньким и аккуратненьким, но температура в Яунде от этого не изменится ни на один миллиградус.
        Ответить
        • привет

          сколько сейчас градусов в Камеруне?
          Ответить
      • я даже спрашивать не хочу, какой же тогда сложны вариант...
        Ответить

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