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