Màu RGB int thành hex


13

Cho ba số nguyên rgb, xuất đại diện thập lục phân dưới dạng một chuỗi.

Input:          Output:
72 61 139       #483D8B
75 0 130        #4B0082
0 255 127       #00FF7F

Mã ngắn nhất không chính thống nhất sẽ thắng


16
Câu hỏi thường gặp của chúng tôi cho biết Tất cả các câu hỏi trên trang web này ... nên có một tiêu chí chiến thắng chính khách quan, để có thể quyết định không thể chối cãi mục nào sẽ giành chiến thắng. . Ngắn nhất là khách quan, nhưng "không chính thống nhất" thì không. Ngoài ra, thẻ golf-code chỉ nên được sử dụng nếu điều kiện chiến thắng chỉ là mã ngắn nhất; và thẻ thử thách mã chỉ nên được sử dụng nếu thẻ golf-code không.
Peter Taylor

và chấp nhận người chiến thắng trước một thời gian (trong trường hợp này, thậm chí là 24h) không khuyến khích những đóng góp tiếp theo ...
woliveirajr

@PeterTaylor Xin lỗi, tôi sẽ đảm bảo đọc các hướng dẫn từ bây giờ :( Tôi đoán bạn nói không chính thống là rất mơ hồ
Quillion

Câu trả lời:


14

Ruby: 19 ký tự

$_=?#+"%02X"*3%$F

Chạy mẫu:

bash-4.1$ ruby -pae '$_=?#+"%02X"*3%$F' <<< '72 61 139'
#483D8B

bash-4.1$ ruby -pae '$_=?#+"%02X"*3%$F' <<< '75 0 130'
#4B0082

bash-4.1$ ruby -pae '$_=?#+"%02X"*3%$F' <<< '0 255 127'
#00FF7F

16

Hồng ngọc

Tôi đã đi nhiều hơn cho phần "không chính thống". ;)

10;a=    gets.   split
.  map  {|       x|  #x
"%02X"  %(  x.   to_i)
}; $>   <<   ?#  <<  a[
00  ..   1+2].   join;

Phông chữ (trên trình duyệt web của tôi) hơi cao, do đó trông có vẻ bị méo, nhưng nó có vẻ tốt hơn trong Courier New:

hình ảnh

Chạy mẫu:

c:\a\ruby>rgb2hex
255 100 0
#FF6400

Đây là thiên tài!
Albert Renshaw

6

q / k (3 ký tự)

Không chính xác không chính thống nhưng khá ngắn

4h$

Thí dụ

q)4h$ 72 61 139
0x483d8b

Để khớp chính xác định dạng đầu ra trong câu hỏi, chúng ta có thể làm (đối với 9 ký tự):

"#",/$4h$

1
Điều này thiếu dấu thăng (#) cần thiết cho mỗi đầu ra mẫu trong câu hỏi.
Iszi

5

PowerShell: 71 52 51 41

Cảm ơn @manatwork đã chỉ ra ForEach-Objectcó thể được sử dụng thay cho forvòng lặp.
Cảm ơn @Joey đã chỉ ra rằng tôi có thể sử dụng -jointrên đầu ra vòng lặp, thay vì phải đặt nó vào các biến.

Mã đánh gôn:

'#'+-join(1..3|%{"{0:X2}"-f+(read-host)})

Ghi chú:

Không có lỗi kiểm tra ở đây cho đầu vào không hợp lệ. Kịch bản sẽ vui vẻ lấy 256, 4096 và 65536 làm đầu vào, sau đó xuất # 100100010000 (rõ ràng là không hoạt động như RGB).

Ungolfed, với ý kiến:

# Put a hashtag in front of the output.
'#'+

# Join the nested code into one string.
-join(

    # Pipe 1..3 to ForEach-Object to run a loop three times.
    1..3|%{

        # Take user input and format it as hex, with minimum two digits in output.
        "{0:X2}"-f+(read-host)
    }
)

Tạo vòng lặp foreach($i in 1,2,3)để giảm xuống còn 68 ký tự.
thao tác

@manatwork Tôi không nghĩ đó là cú pháp thích hợp cho một foreachPowerShell. . 12 ký tự khác đề nghị của bạn. (1..3)|%{...}(Chèn câu lệnh được đặt trong ngoặc từ tập lệnh hiện tại thay cho dấu chấm lửng.) Tôi vẫn cần kiểm tra đầy đủ điều này trong tập lệnh, nhưng cảm ơn vì đã chỉ cho tôi theo hướng đó!
Iszi

Không biết đó có phải là cú pháp phù hợp hay không, nhưng tham chiếu SS64 để foreachđề cập đến nó và nó hoạt động với tôi. (Không có ý tưởng về phiên bản. Phiên bản đi kèm với Windows 7.)
manatwork 13/11/13

@manatwork Thật thú vị. Tôi muốn tìm hiểu thêm và tìm hiểu thêm về vấn đề đó (tôi đã gặp phải lỗi "mã thông báo bất ngờ 'trong' ...".) Vào một lúc khác. Có thể bài viết SS64 được viết cho một phiên bản PowerShell khác - tôi không chắc. Hiện tại, tôi đã xác nhận rằng nó (1..3)|%hoạt động và đưa kịch bản xuống còn 56 ký tự. Tôi sẽ chỉnh sửa câu trả lời đó và chắc chắn ghi nhận cho bạn ý tưởng. Cảm ơn một lần nữa!
Iszi

2
Ồ, dang. Bạn có thể nhận được điều này đến 41 bằng cách sử dụng -join: '#'+-join(1..3|%{"{0:X2}"-f+(read-host)}).
Joey

4

bash 22 21 ký tự

(Cảm ơn @manatwork cho 1 char sử dụng \thay vì dấu ngoặc kép)

printf \#%02X%02X%02X 12 12 12 
#0C0C0C

hoặc đọc STDIN trong một vòng lặp: 48 ký tự:

while read f;do printf "#%02X%02X%02X\n" $f;done <<<$'72 61 139\n75 0 130\n0 255 127'
#483D8B
#4B0082
#00FF7F

Đã thêm 2015-10-06: bash ( phương pháp không chính thống hơn ) 84 83 ký tự

c=({0..9} {a..f}) d=\#;for b;do for a in / %;do d+=${c[$b$a 020]};done;done;echo $d

Tôi biết, nó có thể là 82 ký tự nếu 020được viết 16, nhưng tôi thích điều này ... Hoặc có thể d+=${c[$b$a 0x10]}đó là bài viết đầu tiên.

hexcolor() {
    local a b c=({0..9} {a..f}) d=\#
    for b ;do
        for a in / % ;do
            d+=${c[$b$a 0x10]}
        done
    done
    echo $d
}
hexcolor 72 61 139
#483d8b
hexcolor 75 0 130
#4b0082
hexcolor 0 255 127
#00ff7f

Một cách tiếp cận khác

#!/bin/bash
browser=firefox   #  google-chrome iceweasel
url="data:text/html;charset=UTF-8,<html><head></head><body>"
url+="<script type='text/javascript'>
  function h(i){var h=i.toString(16);if(16>1*i)h='0'+h;
  return h};function C(r,g,b){return'\043'+h(r)+h(g)+h(b)};
  function m(){ var r=1.0*R.value; var g=1.0*G.value; var b=1.0*B.value;
   var fore='black';if(384>r+g+b)fore='white';var c=C(r,g,b);
   s.setAttribute('style','background:'+c+';color:'+fore+';');s.innerHTML=c};
  function w(e){console.log(e);var val=e.target.value;var q=1;if(e.shiftKey)
  q=15;if(e.detail){if(e.detail>0){q=0-q;}}else if(0>e.wheelDelta){q=0-q;};
  val=1*val+q;if(val>255)val=255;if(0>val)val=0;e.target.value=val;m(); };
  function k(e){console.log(e);var val=e.target.value;var q=1;if(e.shiftKey)q=
  15;if(e.keyCode==38){val=1*val+q;if(val>255)val=255;e.target.value=val;m();}
  else if(e.keyCode==40){val=1*val-q;if(0>val)val=0;e.target.value=val;m();}};
  function n(){R=document.getElementById('R');G=document.getElementById('G');
    B=document.getElementById('B');s=document.getElementById('s');
    R.addEventListener('DOMMouseScroll',w);R.addEventListener('mousewheel',w);
    G.addEventListener('DOMMouseScroll',w);G.addEventListener('mousewheel',w);
    B.addEventListener('DOMMouseScroll',w);B.addEventListener('mousewheel',w);
  m();};var R, G, B, s;window.onload=n;
  </script><style>div{display:inline-block;width:10em;}</style>
  <div id='s'>&nbsp;</div>"
input="%s:<input type='text' size='5' value='200'"
input+=" onKeyDown='k(event)' onChange='m()' id='%s' />"
for c in R G B ;do
    printf -v add "$input" $c $c
    url+="$add"
  done    
$browser "$url"

Điều này sẽ hiển thị một cửa sổ trình duyệt, với:

Bộ chuyển đổi trình xem hex int 2 RGB

Nơi bạn có thể cuộn con lăn chuột để thay đổi giá trị (với phím shift được giữ cho bước 15) ...


Trên thực tế, dòng mới chấm dứt không được yêu cầu và chỉ có nhu cầu thoát của # #, như vậy printf \#%02X%02X%02Xlà đủ.
manatwork

Đã thêm một phương pháp không chính thống hơn :
F. Hauri

Cười lớn. Vòng lặp bên trong đó thực sự là không chính thống gây sốc.
manatwork 6/10/2015

@manatwork cảm ơn, tôi tìm thấy d+=${c[$b$a 0x10]}một cái gì đó gợi cảm !
F. Hauri

1
... hoặc có thể d+=${c[$b$a 020]}sẽ thực hiện công việc trông thật tuyệt
F. Hauri

3

Perl, 31 ký tự

perl -nE 'say"#",map{unpack H2,chr}split'

Thật khó để làm cho một chương trình ngắn như vậy không chính thống, nhưng tôi nghĩ rằng nó hoạt động.


Tôi thích câu trả lời này :) một vài điều nữa và tôi nghĩ rằng tôi có thể giải quyết vấn đề này nếu không có gì tốt hơn.
Quillion

Mát mẻ! Chỉ là một unpackcâu hỏi: bạn có thể viết hoa thập lục phân a..f, như trong câu hỏi không?
manatwork

@manatwork Tôi đã cố gắng tìm cách để làm điều đó bên trong unpack, nhưng không có may mắn. Một cách là sử dụng sprintfthay vì unpack, nhưng đó là lâu hơn và hoàn toàn chính thống. Một cách khác là chỉ sửa đổi chuỗi thành chữ hoa : map{uc unpack H2,chr}, với chi phí là ba ký tự.
hộp bánh mì

Cảm ơn bạn, @breadbox. Những mánh khóe nhỏ bé packunpackkhông bao giờ đi vào phong cách mã hóa của tôi. Vì vậy, nó không chính thống đủ cho tôi.
manatwork

Sai tính. Điều này làm cho 30 char!
F. Hauri

3

Tập lệnh hành động 3 | 43 ký tự

trace("#"+(72<<16|61<<139|b).toString(16));

Đầu ra: #483D8B


Bạn có thể không thả nhiều khoảng trắng ở đây? Tôi không biết Action Script, nhưng chúng không được yêu cầu
Cruncher

@Cruncher yeah xin lỗi, một trong những câu trả lời đầu tiên của tôi ở đây.
Ilya Gazman

2
Giết dấu chấm phẩy ở cuối để cứu char
Doorknob

3

Perl 24 ký tự

perl -ne 'printf"#"."%02x"x3,split'
13 31 133
#0d1f85

Xin lỗi, nó không gợi cảm hơn sử dụng unpack, nhưng ngắn hơn!

Phiên bản tối nghĩa hơn:

Nhưng nếu bạn thực sự thích sử dụng unpack, thì bạn có thể:

$==24;s/\d+[\n ]*/{$=-=8;($&<<$=).do{rand>.5?qw<+>[0]:"|"}}/eg;$_=
pack("N",eval($_.587.202.560));say$1,unpack("H6",$2)if/^(.)(.*)$/s

Đối với mẫu, nó không phải là phiên bản ngắn hơn, nhưng tôi thích nó! (Lưu ý việc sử dụng randđể sắp xếp thứ này :-)

perl -nE '
    $==24;s/\d+[\n ]*/{$=-=8;($&<<$=).
    do{rand>.5?qw<+>:"|"}}/eg;$_=pack(
    "N",eval($_.587.202.560) );say $1,
    unpack("H"."6",$2) if /^(.)(.*)$/s
  ' <<< $'72 61 139\n75 0 130\n0 255 127'
#483d8b
#4b0082
#00ff7f

3

> <> 103 60

"#"or>1[:82*%:}-82*,86*+:"9"v
    ;^?l ]o+*7)"9":+*68o+*7)<

Tận dụng khoảng trắng bị lãng phí và chuyển một số mã vào đó

Chạy với đầu vào dòng lệnh:

python fish.py generateHex.fish -v 255 36 72

đầu ra: "# FF2448"


Sẽ cung cấp giải thích theo yêu cầu. Nếu bạn có thể hình dung ra thì tôi không muốn làm phiền
Cruncher

2

Forth, 62 ký tự

: D 0 <<# # # #> TYPE #>> ; 35 EMIT HEX SWAP ROT D D D DECIMAL

không hoạt động cho 1 1 1 mà sẽ xuất ra # 010101
ratchet freak

Xin chào @ratchetfreak. Nó làm việc cho tôi. Chỉ cần thử nghiệm với gforth. Cho nó 1 1 1đầu ra #010101. Bất kỳ giá trị nào khác 0-255 cũng hoạt động. Bạn đang sử dụng môi trường nào?
Darren Stone

2

C (67 ký tự không có nồi hơi chính)

int r,g,b;
scanf("%d %d %d",&r,&b,&g);
printf("#%06x",r<<16|g<<8|b);

sử dụng twiddler tiêu chuẩn bog & bit


Chờ đã, readf? Có nên như scanfvậy không?
hộp bánh mì

@breadbox ah yeah Tôi đã dành quá nhiều thời gian ở D; một trong hai cách không có sự khác biệt về số lượng char
ratchet freak

2

Đc: 35 32 ký tự

[#]n16o?ShShSh[Lhd16/n16%n]ddxxx

Chạy mẫu:

bash-4.1$ dc -e '[#]n16o?ShShSh[Lhd16/n16%n]ddxxx' <<< '72 61 139'
#483D8B

bash-4.1$ dc -e '[#]n16o?ShShSh[Lhd16/n16%n]ddxxx' <<< '75 0 130'
#4B0082

bash-4.1$ dc -e '[#]n16o?ShShSh[Lhd16/n16%n]ddxxx' <<< '0 255 127'
#00FF7F

Đc: 27 24 ký tự

(Nhưng cần các số đầu vào trên các dòng riêng biệt.)

[#]n16o[?d16/n16%n]ddxxx

Chạy mẫu:

bash-4.1$ dc -e '[#]n16o[?d16/n16%n]ddxxx' <<< $'72\n61\n139'
#483D8B

bash-4.1$ dc -e '[#]n16o[?d16/n16%n]ddxxx' <<< $'75\n0\n130'
#4B0082

bash-4.1$ dc -e '[#]n16o[?d16/n16%n]ddxxx' <<< $'0\n255\n127'
#00FF7F

2
Không có đủ dccâu trả lời trên trang web này.
hộp bánh mì

2

JavaScript, 89 ký tự

console.log('#' + ('00000' + eval('256*(256*(' + DEC.replace(/ /g, ')+')).toString(16)).slice(-6))

Chuyển đổi 72 61 139để 256*(256*(72)+61)+139và evals nó.


Đẹp một, nhưng thất bại trên mẫu thứ 3 được đăng trong câu hỏi.
manatwork 11/11/13

À, gọi tốt. Đã sửa.
Casey Chu

2
Sử dụng eval('(('+DEC.replace(/ /g,'<<8)+'))thay vì eval('256*(256*('+DEC.replace(/ /g,')+'))để bạn tiết kiệm 5 ký tự!
F. Hauri

2

PowerShell, 45

'#'+-join(-split(read-host)|%{'{0:X2}'-f+$_})

Hoặc, nếu nó có thể được sử dụng bằng đường ống trong dữ liệu, bạn chỉ có thể sử dụng

'#'+-join(-split"$input"|%{'{0:X2}'-f+$_})

đưa nó xuống 42 .


Công việc tốt đẹp! Cho thấy tôi vẫn còn nhiều điều để tìm hiểu về golf!
Iszi

Ồ, ý tưởng của bạn với các biến cũng rất thông minh; sẽ không bao giờ vượt qua tâm trí của tôi. Nó chỉ xảy ra rằng nó dài hơn yêu thích thông thường của tôi: -split-join.
Joey

2

quyền hạn 37

đã lưu một byte nhờ TimmyD

cat rgb2hex.ps1
$args|%{$o+="{0:X2}"-f[byte]$_};"#$o"
wc -c rgb2hex.ps1
38 rgb2hex.ps1
powershell -f .\rgb2hex.ps1 72 61 139
#483D8B
powershell -f .\rgb2hex.ps1 0 255 127
#00FF7F

Bạn có thể lưu một vài byte bằng cách loại bỏ [byte]vì chúng tôi đã cung cấp đầu vào dưới dạng số nguyên và chỉnh sửa đầu ra của bạn thành "#$o"- cung cấp 31 byte cho$args|%{$o+="{0:X2}"-f$_};"#$o"
admBorkBork

@TimmyD không biết việc xóa [byte] có hoạt động chính xác trong tất cả các phiên bản trong phiên bản mà tôi đã kiểm tra (iirc 2.0 trong xp) không có [byte] không được ghép thành hex nhưng như ints tức là 72 61 139 không # 7261139 không # 483d8b "# $ o" bên trong dấu ngoặc kép không phải là một chuỗi theo nghĩa đen nhưng chuỗi được đánh giá tốt để biết cảm ơn nhận xét về chuyển đổi hex sẽ được đánh giá cao
blabb

Đây rõ ràng là một sự khác biệt giữa PowerShell v2 và v3 - phải là một cái gì đó trong cách phiên bản .NET tương ứng xử lý chuyển đổi thập lục phân, nhưng tôi không thể tìm thấy tài liệu về nó.
admBorkBork

2

R, 16 byte

Đó là nó. Sử dụng tích hợp.

rgb(r,g,b,m=255)

1

C, 67 73 Ký tự (65 Chars không bao gồm chính)

main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("#%02X%02X%02X",a,b,c);}

Chương trình C nhàm chán - rất chính thống.


không hoạt động với ab hoặc c nhỏ hơn 16
ratchet freak

Đã thay đổi% X thành% 02X.
Ian James

1

Python 2.7 (80 ký tự)

x=lambda y: ("0"+hex(int(y))[2:])[-2:]
print "#"+''.join(map(x,input().split()))

Tôi đang tìm kiếm một cách tốt hơn để xử lý các giá trị hex một chữ số. Có ý kiến ​​gì không?


Có thể sử dụng chuỗi định dạng? '% 02x' dường như là những gì mọi người khác đã làm.
jqblz

1

Befunge-98, 45 ký tự

Bleh, mã trùng lặp. Ồ tốt Chỉ cần thực hiện đơn giản chuyển đổi cơ số.

"#",v
7*+,>#@&:97+/"0"+:"9"`7*+,97+%"0"+:"9"`

Chạy mẫu

% cfunge tohex.98 <<<'72 61 139'
#483D8B
% cfunge tohex.98
#75 0 130
4800820 255 127
00FF7F

(Lưu ý: in '#' trước khi đọc đầu vào --- tác vụ không cấm điều này, với ba số trên stdin, nó tạo ra đầu ra đúng trên thiết bị xuất chuẩn. Nó cũng không bận tâm với các dòng mới và như bạn có thể thấy nó không 't thêm' # 'đúng cách khi chạy "tương tác".)


1

Ngôn ngữ nhà sản xuất trò chơi, 175 (Lỗi tại vị trí 81)

Nhắc nhở cho 3 đến 9 chữ số RGB. Trả về thập lục phân với dấu thập lục phân GML,$

d=get_string('','')if(d=='')e=""else e="00"h="0123456789ABCDEF"while(d!=''){b=d&255i=string_char_at(h,byte div 16+1)l=string_char_at(h,byte mod 16+1)e+=i+l;d=d>>8}return '$'+e

Làm cho điều này một kịch bản. Ngoài ra, biên dịch với các biến chưa được khởi tạo được xử lý là 0.

Nguồn


1

Gema, 93 ký tự

\B=@set{x;0123456789abcdef}\#
<D>=@substring{@div{$1;16};1;$x}@substring{@mod{$1;16};1;$x}
?=

Chạy mẫu:

bash-4.3$ gema '\B=@set{x;0123456789abcdef}\#;<D>=@substring{@div{$1;16};1;$x}@substring{@mod{$1;16};1;$x};?=' <<< '0 255 127'
#00ff7f

1

Burlsque, 12 byte (10 byte cho chữ thường)

Nếu chữ thường được cho phép thì 10 byte:

psb6\['#+]

Sử dụng:

blsq ) "72 61 139"psb6\['#+]
"#483d8b"

Nếu bạn rất cần chữ hoa, hãy thêm ZZ:

blsq ) "72 61 139"psb6\['#+]ZZ
"#483D8B"

Nếu bạn không nhận được số nguyên như trong một chuỗi thì hãy đi với:

blsq ) {72 61 139}b6\['#+]
"#483d8b"

Giải trình:

ps -- parse string
b6 -- to hex
\[ -- concat
'#+] -- prepend #

Hãy thử trực tuyến tại đây .

Tặng kem:

Để chuyển đổi nó trở lại sử dụng này:

blsq ) "#483d8b"[-2cob6
{72 61 139}

1

Powershell, 28 byte

'#{0:X2}{1:X2}{2:X2}'-f$args

Kịch bản thử nghiệm:

$f = {

"#{0:X2}{1:X2}{2:X2}"-f$args
}

@(
    ,('#483D8B',72, 61, 139)
    ,('#4B0082',75,  0, 130)
    ,('#00FF7F',0 ,255, 127)
) | % {
    $e,$a = $_
    $r = &$f @a
    "$($r-eq$e): $r"
}

Đầu ra:

True: #483D8B
True: #4B0082
True: #00FF7F

0

Python3.3 @ 60 ký tự

print("#"+3*"%.2X"%tuple(int(n) for n in input().split())) 

Không thể cưỡng lại:

[dan@danbook:code_golf/int_to_hex]$ python3.3 int_to_hex.py
176 11 30
#B00B1E

0

Clojure 76 nhân vật

Điều này có thể là muộn, vì sự hoàn chỉnh:

(defn hexy [r g b] (reduce str (cons "#" (map #(format "%02X" %) [r g b]))))

Các cuộc gọi ví dụ:

(hexy 0 255 127)
"#00FF7F"

0

Toán học, 40 ký tự

f = StringJoin["#", IntegerString[#, 16, 2]] &

rgbs = {{72, 61, 139}, {75, 0, 130}, {0, 255, 127}}

f /@ rgbs // Column

# 483d8b

# 4b0082

# 00ff7f


0

Lisp thông thường, 39 ký tự

(format()"#~@{~2,'0x~}"#1=(read)#1##1#)

Đọc ba số nguyên, trả về một chuỗi.


0

Javascript ES6, 63 byte

h=>'#'+h.split` `.map(x=>(x<16?0:'')+(x*1).toString(16)).join``

Thật trùng hợp, cuối cùng tôi đã viết gần như chính xác như bạn trước khi tôi nhìn thấy bạn. Rất đẹp =) Chúng đủ gần để tôi không đăng bài của mình, nhưng bạn có thể lưu một vài byte trên bản đồ của mình bằng cách này:x=>(x<16?0:'')+x.toString(16)
Mwr247

1
Ngoài ra, không cần bao gồm r=lúc đầu. Nó vẫn được tính là một hàm ngay cả khi là một hàm ẩn danh, vì bạn có thể gọi nó mà không phải gán bất cứ thứ gì.
Mwr247

Rất tiếc. Xác định bản đồ là: x=>(x<16?0:'')+(x*1).toString(16)Bạn và người đầu tiên của tôi hiện đang đưa ra các giá trị sai cho x>9.
Mwr247

Điều này hiện trả về #7261139thay vì #483D8Bcho trường hợp thử nghiệm đầu tiên.
Dennis

0

Python 2, 40 byte

s='#';exec's+="%02X"%input();'*3;print s

Đọc đầu vào từ ba dòng riêng biệt. Lạm dụng execvà nhân chuỗi.

Ví dụ sử dụng:

$ python2 rgbint.py
72
61
139
#483D8B

$ python2 rgbint.py
75
0
130
#4B0082

$ python2 rgbint.py
0
255
127
#00FF7F

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.