rgbToHex.js

Codewars 알고리즘 풀이


Problem

  • Complete it so that passing in RGB decimal values will result in a hexadecimal representation being returned.
    • RGB 10진수 값을 전달하면 16진법으로 반환한다.
  • Valid decimal values for RGB are 0-255.
    • RGB의 유효한 10진수 값은 0-255이다.
  • Any values that fall out of that range must be rounded to the closest valid value.
    • 해당 범위를 벗어나는 모든 값은 가장 가까운 유효한 값으로 반올림한다.



Solution 01

function rgbToHex(r, g, b) {
  if (r < 0) r = '00';
  if (r >= 255) r = 'FF';
  r = r.toString(16).toUpperCase();
  if (r.length === 1) r = '0' + r;
  
  if (g < 0) g = '00';
  if (g >= 255) g = 'FF';
  g = g.toString(16).toUpperCase();
  if (g.length === 1) g = '0' + g;
  
  if (b < 0) b = '00';
  if (b >= 255) b = 'FF';
  b = b.toString(16).toUpperCase();
  if (b.length === 1) b = '0' + b;
  
  return r + g + b;
}

rgbToHex(0, 0, 0);        // 000000
rgbToHex(0, 0, -20);      // 000000
rgbToHex(17, 17, 17);     // 111111
rgbToHex(255, 255, 255);  // FFFFFF
rgbToHex(300, 255, 255);  // FFFFFF
rgbToHex(219, 219, 219);  // DBDBDB
rgbToHex(32, 161, 156);   // 20A19C
rgbToHex(153, 138, 197);  // 998AC5


Solution 02

function rgbToHex(r, g, b) {
  function toHex(x) {
    if (x < 0) return '00';
    if (x >= 255) return 'FF';
    
    return x.toString(16).length === 1 ? '0' + x.toString(16).toUpperCase() : x.toString(16).toUpperCase();
  }
  
  return toHex(r) + toHex(g) + toHex(b);
}

rgbToHex(0, 0, 0);        // 000000
rgbToHex(0, 0, -20);      // 000000
rgbToHex(17, 17, 17);     // 111111
rgbToHex(255, 255, 255);  // FFFFFF
rgbToHex(300, 255, 255);  // FFFFFF
rgbToHex(219, 219, 219);  // DBDBDB
rgbToHex(32, 161, 156);   // 20A19C
rgbToHex(153, 138, 197);  // 998AC5


Solution 03

function rgbToHex(r, g, b) {
  let toHex = x => {
    if (x < 0) return '00';
    if (x >= 255) return 'FF';
    
    return x.toString(16).length === 1 ? '0' + x.toString(16).toUpperCase() : x.toString(16).toUpperCase();
  };
  
  return toHex(r) + toHex(g) + toHex(b);
}

rgbToHex(0, 0, 0);        // 000000
rgbToHex(0, 0, -20);      // 000000
rgbToHex(17, 17, 17);     // 111111
rgbToHex(255, 255, 255);  // FFFFFF
rgbToHex(300, 255, 255);  // FFFFFF
rgbToHex(219, 219, 219);  // DBDBDB
rgbToHex(32, 161, 156);   // 20A19C
rgbToHex(153, 138, 197);  // 998AC5


Solution 04

function rgbToHex(r, g, b) {
  let toHex = x => {
    if (x < 0) return '00';
    if (x >= 255) return 'FF';
    
    return ('0' + Number(x).toString(16)).slice(-2).toUpperCase();
  };
  
  return toHex(r) + toHex(g) + toHex(b);
}

rgbToHex(0, 0, 0);        // 000000
rgbToHex(0, 0, -20);      // 000000
rgbToHex(17, 17, 17);     // 111111
rgbToHex(255, 255, 255);  // FFFFFF
rgbToHex(300, 255, 255);  // FFFFFF
rgbToHex(219, 219, 219);  // DBDBDB
rgbToHex(32, 161, 156);   // 20A19C
rgbToHex(153, 138, 197);  // 998AC5


Solution 05

function rgbToHex(r, g, b) {
  return [r, g, b].map(i => {
    return ('0' + Math.max(0, Math.min(255, i)).toString(16)).slice(-2);
  }).join('').toUpperCase();
}

rgbToHex(0, 0, 0);        // 000000
rgbToHex(0, 0, -20);      // 000000
rgbToHex(17, 17, 17);     // 111111
rgbToHex(255, 255, 255);  // FFFFFF
rgbToHex(300, 255, 255);  // FFFFFF
rgbToHex(219, 219, 219);  // DBDBDB
rgbToHex(32, 161, 156);   // 20A19C
rgbToHex(153, 138, 197);  // 998AC5