Mã màu thật


12

Màu sắc trung thực (24 bit) tại Wikipedia được mô tả ở phần thích hợp như

24 bit hầu như luôn sử dụng 8 bit của mỗi R, G, B. Kể từ năm 2018, độ sâu màu 24 bit được sử dụng bởi hầu như mọi máy tính và màn hình điện thoại và phần lớn các định dạng lưu trữ hình ảnh. Hầu như tất cả các trường hợp có 32 bit trên mỗi pixel có nghĩa là 24 được sử dụng cho màu sắc và 8 trường hợp còn lại là kênh alpha hoặc không được sử dụng.

2 24 cung cấp 16.777.216 biến thể màu. Mắt người có thể phân biệt tới mười triệu màu [10] và do gam màu của màn hình nhỏ hơn tầm nhìn của con người, điều này có nghĩa là điều này sẽ bao phủ phạm vi đó với nhiều chi tiết hơn mức có thể cảm nhận được. ...

...

Các hệ thống Macintosh gọi màu 24 bit là "hàng triệu màu". Thuật ngữ "Màu thật" đôi khi được sử dụng để chỉ những gì bài viết này gọi là "Màu trực tiếp". [13] Nó cũng thường được sử dụng để chỉ tất cả các độ sâu màu lớn hơn hoặc bằng 24.

Một hình ảnh chứa tất cả 16.777.216 màu

Tất cả 16.777.216 màu

Bài tập

Viết chương trình tạo và trả về tất cả 16.777.216 biến thể màu trong một mảng dưới dạng chuỗi trong rgb()hàm CSS

5.1. Các chức năng RGB: rgb()rgba()

Các rgb()chức năng xác định một màu RGB bằng cách xác định các kênh màu đỏ, xanh lá cây, và màu xanh trực tiếp. Cú pháp của nó là:

rgb() = rgb( <percentage>{3} [ / <alpha-value> ]? ) |
        rgb( <number>{3} [ / <alpha-value> ]? )
<alpha-value> = <number> | <percentage>

Ba đối số đầu tiên xác định các kênh màu đỏ, xanh lục và xanh lam tương ứng. 0%đại diện cho giá trị tối thiểu cho kênh màu đó trong gam sRGB và 100%đại diện cho giá trị tối đa. A <number>tương đương với a <percentage>, nhưng với phạm vi khác: 0một lần nữa biểu thị giá trị tối thiểu cho kênh màu, nhưng255đại diện cho tối đa. Các giá trị này xuất phát từ thực tế là nhiều công cụ đồ họa lưu trữ các kênh màu bên trong dưới dạng một byte, có thể giữ các số nguyên trong khoảng từ 0 đến 255. Việc triển khai phải tôn trọng độ chính xác của kênh như tác giả hoặc tính toán bất cứ khi nào có thể. Nếu điều này là không thể, kênh phải được làm tròn đến giá trị gần nhất với độ chính xác cao nhất được sử dụng, làm tròn lên nếu hai giá trị gần bằng nhau.

Đối số cuối cùng, the <alpha-value>, chỉ định alpha của màu. Nếu được cho là a <number>, phạm vi hữu ích của giá trị là 0 (đại diện cho một màu hoàn toàn trong suốt) thành 1(đại diện cho một màu hoàn toàn mờ đục). Nếu được cho là a, 0%đại diện cho một màu hoàn toàn trong suốt, trong khi 100%đại diện cho một màu hoàn toàn mờ đục. Nếu bỏ qua, nó mặc định là 100%.

Các giá trị ngoài các phạm vi này không phải là không hợp lệ, nhưng được kẹp vào các phạm vi được xác định ở đây tại thời điểm giá trị được tính toán.

Vì các lý do cũ, rgb()cũng hỗ trợ một cú pháp thay thế phân tách tất cả các đối số của nó bằng dấu phẩy:

rgb() = rgb( <percentage>#{3} , <alpha-value>? ) |
        rgb( <number>#{3} , <alpha-value>? )

Cũng vì lý do di sản, một rgba()chức năng cũng tồn tại, với một ngữ pháp và hành vi giống hệt với rgb().

hoặc #RRGGBBđịnh dạng ký hiệu thập lục phân RGB

5.2. Các ký hiệu thập lục phân RGB:#RRGGBB

CSS hex màu ký hiệu cho phép một màu được xác định bằng cách cho các kênh như số thập lục phân, mà là tương tự như cách màu sắc thường được viết trực tiếp trong mã máy tính. Nó cũng ngắn hơn so với việc viết cùng một màu trong rgb()ký hiệu.

Cú pháp của a <hex-color>là một <hash-token>mã thông báo có giá trị bao gồm 3, 4, 6 hoặc 8 chữ số thập lục phân. Nói cách khác, màu lục được viết dưới dạng ký tự băm, "#", theo sau là một số chữ số 0-9 hoặc chữ cái af (trường hợp các chữ cái không quan trọng - #00ff00giống hệt #00FF00).

Số chữ số hex đã cho xác định cách giải mã ký hiệu hex thành màu RGB:

6 chữ số

Cặp chữ số đầu tiên, được hiểu là số thập lục phân, chỉ định kênh màu đỏ của màu, trong đó 00biểu thị giá trị tối thiểu và ff(255 trong số thập phân) đại diện cho mức tối đa. Cặp chữ số tiếp theo, được diễn giải theo cùng một cách, chỉ định kênh màu xanh lá cây và cặp cuối cùng chỉ định màu xanh. Kênh alpha của màu hoàn toàn mờ đục.

VÍ DỤ 2
Nói cách khác, #00ff00đại diện cho cùng màu với rgb(0 255 0)(một màu xanh lá cây vôi).

Xem Bản nháp của Mô-đun Màu CSS của Trình soạn thảo Cấp 4

Ví dụ

rgb()Hàm CSS ( ký tự khoảng trắng có thể được thay thế cho ký tự dấu phẩy, ví dụ rgb(0 255 0):)

// `rgb()` `<percentage>` as strings in resulting array
['rgb(0%,0%,0%)', ...,'rgb(0%,255%,0)', ...'rgb(255,255,255)']

// `rgb()` `<number>` as strings in resulting array
['rgb(0,0,0)', ...,'rgb(0,255,0)', ...'rgb(255,255,255)']

Ký hiệu thập lục phân CSS RGB RRGGBB

// RGB hexadecimal notation as strings in resulting array
['#000000', ...,'#00ff00', ...'#ffffff']

Tiêu chí chiến thắng

Ít nhất byte được sử dụng để viết chương trình.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Mego

Câu trả lời:


8

R , 25 byte

sprintf("#%06X",1:2^24-1)

Hãy thử trực tuyến!


Không quen thuộc với R, nhưng điều này không thể xuất # 000000?
jimbo1qaz

2
Không, nó xuất ra # 000000. Xem liên kết TIO
J.Doe

@ jimbo1qaz a:b-ctạo một vectơ từ a-cđến b-c, bao gồm (nó tạo một vectơ từ ađến b, sau đó trừ đi cmỗi mục).
Arthur

2
À, vậy R chỉ định các dấu hai chấm có độ ưu tiên chặt chẽ hơn số học ... Không giống như các lát Python.
jimbo1qaz

7

Python 2 , 77 40 39 37 byte

print['#%06X'%c for c in range(8**8)]

Hãy thử trực tuyến!

-1 byte nhờ Chấn thương kỹ thuật số

-2 byte nhờ dylnan


2
Tại sao bạn cần lambda? Bản thân việc hiểu danh sách là một câu trả lời hợp lệ, phải không?
Adirio

2
Hãy thử 8**8thay vì 1<<24để lưu một byte
Chấn thương kỹ thuật số

2
làm thế nào vềprint['...
dylnan

1
@Adirio Một giá trị không được tính là việc thực hiện một thách thức.
Jonathan Frech

2
@Adirio Chính bạn đã viết [...] trong một thiết bị đầu cuối Python [...] - do đó, bài nộp của bạn sẽ được viết bằng Python 2 REPL , không phải Python 2 .
Jonathan Frech

6

PowerShell , 28 26 byte

1..16mb|%{"#{0:x6}"-f--$_}

Hãy thử trực tuyến!

Vòng lặp từ 1đến 16mb(16777216). Mỗi lần lặp, chúng tôi sử dụng -ftoán tử ormat tác động lên số hiện tại được giảm --$_trước so với chuỗi "#{0:x6}". Ở đây, chúng tôi chỉ định xgiá trị anh ta , được đệm thành 6chữ số, với một hàm băm #ở phía trước. Trên TIO, giới hạn ở 60 giây / 128KiB đầu ra. Thay đổi 1để (16mb-5)để xem làm thế nào nó kết thúc .


6

JavaScript (ES7), 65 62 61 byte

Đã lưu 3 4 byte nhờ @tsh

Trả về một #RRGGBBchuỗi các chuỗi.

_=>[...Array(n=8**8)].map(_=>'#'+(n++).toString(16).slice(1))

Hãy thử trực tuyến! (đầu ra bị cắt ngắn)


Sử dụng giải pháp Python hiện tại 8**8thay vì 1<<24. Nó cũng hoạt động trên JS.
tsh


4

Japt, 14 byte

Đầu ra như #rrggbb.

G²³ÇsG ùT6 i'#

Hãy thử nó (Giới hạn trong 4096 yếu tố đầu tiên)


Giải trình

G                  :16
 ²                 :Squared
  ³                :Cubed
   Ç               :Map the range [0,result)
    sG             :  Convert to base-16 string
       ù           :  Left pad
        T          :   With 0
         6         :   To length 6
           i'#     :  Prepend "#"

Ngôn ngữ thú vị. Bất cứ ý tưởng tại sao chữ T được sử dụng cho "0"? Tôi nhận được 16 -> G để lưu một byte, nhưng T -> 0 không thực hiện được như vậy.
Alec

@Alec Bởi vì nếu bạn thay T bằng 0, nó sẽ kết hợp với 6 và trở thành 06.
geokavel

À, gotcha. Vì vậy, có một chữ cái cho mỗi chữ số cho các trường hợp bạn không muốn nó tham gia với chữ số trước / chữ số tiếp theo?
Alec

@Alec, như geokavel đã nói, trong trường hợp cụ thể này, nó tiết kiệm cho tôi một byte khi phải sử dụng dấu phẩy để phân cách 2 đối số được truyền vào ù . Một trường hợp sử dụng điển hình khác cho nó là sử dụng nó như một bộ đếm khi bạn cần tăng một biến trong khi, ví dụ, ánh xạ qua một mảng. Và, tất nhiên, vì nó là một biến, bạn chỉ cần gán một giá trị cho nó, nếu cần. 0là số nguyên duy nhất có một biến số riêng, mặc dù vậy - về mặt kỹ thuật, 7 là biến đầu vào 6 U-Zmặc định 0. Các số nguyên khác được gán cho các biến trong Japt là : -1, 10-16, 32, 64 & 100.
Xù xì

Nếu bạn muốn tìm hiểu thêm về Japt, vui lòng ping tôi trong phòng chat của chúng tôi .
Xù xì


3

05AB1E , 15 14 10 byte

15Ýh6ãJ'#ì

Hãy thử trực tuyến.

Giải trình:

15Ý           # Create a list in the range [0, 15]
   h          # Convert each to a hexadecimal value
    6ã        # Create each possible sextuple combination of the list
      J       # Join them together to a single string
       '#ì    # And prepend a "#" before each of them

3

Mẻ, 87 byte

@set s= in (0,1,255)do @
@for /l %%r%s%for /l %%g%s%for /l %%b%s%echo rgb(%%r,%%g,%%b)

Đầu ra ở định dạng CSS. Sự thay thế biến xảy ra trước khi forcâu lệnh được phân tích cú pháp để mã thực tế như sau:

@for /l %%r in (0,1,255)do @for /l %%g in (0,1,255)do @for /l %%b in (0,1,255)do @echo rgb(%%r,%%g,%%b)



2

K (oK) , 19 byte

Giải pháp:

$(3#256)\'!16777216

Hãy thử trực tuyến! (giới hạn 500 số đầu tiên)

Giải trình:

Kết xuất chuỗi rgb. Chuyển đổi từng số từ 0 đến 16777216 sang cơ sở 256, sau đó chuyển đổi thành chuỗi ...

$(3#256)\'!16777216 / the solution
          !16777216 / range 0..16777215
 (     )\'          / split each both
  3#256             / 256 256 256
$                   / string

2

MATL , 17 15 byte

10W:q'#%06X,'YD

Hãy thử trực tuyến!

Phiên bản TIO chỉ hiển thị 2 ^ 10 đầu tiên khi không hết thời gian. Tôi đã bao gồm lần lặp cuối cùng trong phần chân trang để cho thấy rằng nó thực sự chấm dứt tại #FFFFFF. Đã lưu một byte bằng cách thay đổi thành fprintfthay vì tự lắp ráp chuỗi. Xuất ra một danh sách được phân tách bằng dấu phẩy.

Giải trình

24W:q            % Range from 0 to 2^24-1
     '#%06X,'    % fprintf format spec (# followed by hexadecimal, zero-padded, fixed-width, followed by newline)
             YD  % Call fprintf. Internally loops over range.

2

APL (Dyalog Unicode) , 47 43 20 byte

'#',(⎕D,⎕A)[↑,⍳616]

Hãy thử trực tuyến!

Cho đủ thời gian / bộ nhớ, chức năng ẩn danh này sẽ xuất ra tất cả 224-1mã màu. Để thấy điều này, bạn có thể trao đổi mã 6⍴cho một 4⍴mã và bạn sẽ thấy nó xuất ra mọi mã có tối đa 4 chữ số.

Cảm ơn @Dzaima và @ngn cho 23 byte.

Công dụng ⎕IO←0.

Làm sao:

'#',(⎕D,⎕A)[↑,⍳616]  Main function
               616   Generate every possible 6 digit hex number in a matrix format
              ,        Ravel the matrix (from a 16x16x16x16x16x16 matrix to a 16^6x2 list)
                      Mix; (turns the list into a 16^6x2 matrix)
    (⎕D,⎕A)[       ]  Use that matrix to index the vector of the digits 0-9 concatenated with the alphabet.
'#',                   Then prepend a '#' to each.

1

Ruby , 31 byte

$><<("#%06x\n"*d=2**24)%[*0..d]

Hãy thử trực tuyến!


Tôi hơi ngạc nhiên khi %lấy một chuỗi dài và một mảng dài như vậy. FYI bạn có thể lưu một byte bằng cách sử dụng ngắt dòng theo nghĩa đen thay vì \n.
Jordan

1

V , 25 byte

8É00lrx16777215ñÄ<C-a>ñ0<C-v>Gls#

Hãy thử trực tuyến!(thay thế 16777215bằng 31)

Giải trình

8É0                                " insert 8 zeroes
   0l                              " move cursor to the second character
     rx                            " replace by x
       16777215ñ      ñ            " 16777215 times do ..
                Ä                  " .. duplicate line
                 <C-a>             " .. increment (leading 0x makes sure it uses hexadecimals)
                       0<C-v>      " move cursor to beginning of line and start selection
                             Gl    " select the column with 0x
                               s#  " replace by #

1

Mẻ, 69 + 4 = 73

g.cmd, 69

for /L %%A in (0,1,16777215)do cmd/kexit %%A&set #%%A=#!=exitcode:~2!

Lưu giá trị thập lục phân với biểu mẫu #RRGGBB vào 'Mảng'.

g.cmdđược gọi là sử dụng cmd /V/Q/K g.cmd. Đây là nơi + 4 đến từ /V/Q, được tính là 4 ký tự bổ sung so với chỉ cmd /K g.cmd. Điều này thiết lập một môi trường có 'Mảng' trong bộ nhớ. Nó cũng mất mãi mãi để chạy, vì vậy hãy sử dụng các giá trị rất thấp để thử hoặc ngắt thực thi bằng cách sử dụngCtrl+C


Phá vỡ

Xâm phạm

  • /Vcho phép mở rộng bị trì hoãn, nhưng ngắn hơn setlocal EnableDelayedExpansion, đó là lý do tại sao chúng ta cầncmd cuộc gọi ngay từ đầu
  • /Q bỏ qua đầu ra và tương đương với @echo off
  • /Kcho phép bạn thực hiện một biểu thức (trong trường hợp này g.cmd) và không thoát ra sau đó, vì vậy bạn có thể kiểm tra 'Mảng' bằng cách sử dụngset #

g.cmd

for /L %%A IN (0,1,16777215) DO (
    cmd /k exit %%A
    set #%%A=#!=exitcode:~2!
)

Bit này sử dụng một mẹo được ghi lại ở đây để chuyển đổi một số bình thường thành thập lục phân, sau đó lưu giá trị đó thành một 'Mảng'.


Tôi đã gọi cấu trúc lưu trữ đó là 'Mảng' nhưng điều đó không thực sự đúng vì Mảng thực sự không tồn tại trong Batch. NHƯNG bạn có thể đặt tên biến để chúng có tên giống như mảng:

set elem[1]=First element
set elem[2]=Second one

hoặc, như trong trường hợp này:

set #1=First element
set #2=Second one

Bạn vẫn có thể truy cập chúng thông qua !#%position%!


Tôi không chắc. Nhưng có lẽ có /V/Q/Kthể được tuyên bố là "đối số" cho trình thông dịch và được tính là "3 + 69 = 72". meta
tsh

Tôi không biết điều đó và sẽ cập nhật câu trả lời của tôi cho phù hợp. Thx @tsh

0

Groovy , 53 byte

c={a=[];(1<<24).times{a.add "".format("#%06x",it)};a}

Định nghĩa hàm. c () trả về một ArrayList (Tôi cho rằng điều đó tốt, thậm chí thông qua câu hỏi yêu cầu một mảng).

Ungolfed, với các loại ngầm:

ArrayList<String> c = {
    ArrayList<String> a = []
    (1 << 24).times { 
        a.add("".format("#%06x", it)) // add the hex-formatted number to the list.
    }
    return a
}

Hãy thử trực tuyến!


0

Java 10, 87 84 byte

v->{int i=1<<24;var r=new String[i];for(;i-->0;)r[i]="".format("#%06X",i);return r;}

-3 byte nhờ vào @ archangel.mjj .

Dùng thử trực tuyến (giới hạn ở lần đầu tiên4,096 mục ).

Giải trình:

v->{                       // Method with empty unused parameter & String-array return-type
  int i=1<<24;             //  Integer `i`, starting at 16,777,216
  var r=new String[i];     //  Result String-array of that size
  for(;i-->0;)             //  Loop `i` in the range (16777216, 0]
    r[i]=                  //   Set the `i`'th item in the array to:
      "".format("#%06X",i);//   `i` converted to a hexadecimal value (of size 6)
  return r;}               //  Return the result-array

Ah, bạn đã đăng bài này trong khi tôi đang viết bài của mình, vì vậy chúng tôi có câu trả lời rất giống nhau. Bạn có thể cải thiện bằng ba byte vớir[i]="".format("#%06X",i);
archangel.mjj

@ archangel.mjj Ah, tôi là một thằng ngốc. Cảm ơn! Tôi thực sự đã có "".format("#%06X",i)trước đây kể từ khi tôi nhìn thấy nó trong câu trả lời của Python, nhưng tôi đã bỏ câu trả lời vì tôi không thể làm cho nó hoạt động đủ nhanh cho TIO. Sau đó, tôi thấy mọi người vừa xuất ra những 4,096mục đầu tiên trên TIO, vì vậy tôi đã viết lại câu trả lời, quên đi "#%06X"...>. <
Kevin Cruijssen

@KevinCruijssen Tôi chưa bao giờ biết bạn có thể làm gì var rtrong Java ..
FireCubez


0

PHP, 68 62 byte

Điều này được cho là được đặt bên trong một tập tin, mảng được trả lại cuối cùng, để có thể sử dụng được.

<?foreach(range(0,1<<24)as$i)$a[]=sprintf('#%06x',$i);return$a;

Để có quyền truy cập vào mảng, chỉ cần đưa kết quả của hàm (ví dụ $a = include 'xyz.php';:) vào một biến.


Cảm ơn @manatwork đã tiết kiệm cho tôi 6 byte và sửa lỗi.


1
Bạn có chắc chắn điều này sẽ bao giờ xuất ra các chữ số hex với %1$06dchuỗi định dạng? Và tôi thấy không có lý do để sử dụng 1$. Bạn có thể giảm độ dài bằng cách bao gồm các # # trong chuỗi định dạng : #%06x. Sẽ hữu ích khi thêm các ký tự phụ để sửa phạm vi, vì hiện tại tính đến 16777216 = # 1000000.
manatwork

Chà, nó sẽ .... Nếu tôi không quên đổi %dsang %x. Và hoàn toàn quên mất việc di chuyển #bên trong sprintf()cuộc gọi. Bạn đã lưu cho tôi 6 byte. Cảm ơn bạn
Ismael Miguel

0

MATL , 11 byte

'#'5Y26Z^Yc

Hãy thử trực tuyến!(chỉ có ba chữ số hex thay vì sáu)

Giải trình

'#'   % Push this character
5Y2   % Push '01234567890ABCDEF'
6     % Push 6
Z^    % Cartesian power. Gives a (16^6)×6 char matrix
Yc    % String concatenation. '#' is implicitly replicated
      % Implicitly display




0

T-SQL, 122 117 byte

Trả về bảng #RRGGBBchuỗi 16.777.216 hàng . Ngắt dòng chỉ dành cho khả năng đọc:

WITH t AS(SELECT 0n UNION ALL SELECT n+1FROM t WHERE n<16777215)
SELECT'#'+FORMAT(n,'X6')FROM t option(maxrecursion 0)

Sử dụng CTE đệ quy cho bảng số từ 0 đến 2 ^ 24-1, sau đó sử dụng FORMATlệnh tích hợp (có sẵn trong SQL 2012 trở lên) để biến nó thành chuỗi hex 6 chữ số . Đính kèm# mặt trước, và chúng ta đã hoàn thành.

Chỉnh sửa 1: Đã xóa POWER()chức năng, số lượng ngắn hơn: P



0

Thạch , 8 byte

ØHṗ6”#;Ɱ

Hãy thử trực tuyến! (lưu ý: sử dụng 2chứ không phải 66 lần ra trên TIO)

Gửi chức năng (vì theo mặc định, các chương trình Jelly sẽ in danh sách các chuỗi không có dấu phân cách giữa chúng, khiến cho việc xem ranh giới trở nên khó khăn). Liên kết TIO chứa trình bao bọc để in danh sách các chuỗi sử dụng dòng mới để phân tách chúng.

Giải trình

ØHṗ6”#;Ɱ
ØH         All hex digits (“0123456789ABCDEF”)
  ṗ6       Find all strings of 6 of them (order relevant, repeats allowed)
    ”#;    Prepend “#”
       Ɱ     to each of the resulting strings

1
Không quan tâm - tại sao bạn lại đưa câu trả lời của mình lên wiki cộng đồng?
Jonathan Frech

@JonathanFrech: Tôi làm điều này cho tất cả các bài đăng của mình vì a) nó làm giảm sự khuyến khích mọi người chơi trò chơi hệ thống danh tiếng (vì bài đăng không mang lại danh tiếng), b) Tôi rất vui khi được chỉnh sửa bài đăng của mình và cộng đồng- wiki đánh dấu là một cách để chỉ ra rằng. Hệ thống danh tiếng của Stack Exchange ít nhiều bị phá vỡ hoàn toàn: trên một tài khoản trong quá khứ, tôi đã từng cố tình lặp lại giới hạn mỗi ngày trong một tuần để cho thấy hệ thống này dễ chơi như thế nào. Ngày nay tôi khá muốn không có phần nào trong đó, đặc biệt là danh tiếng cao hơn chỉ đơn giản là làm cho trang web cố gắng thuyết phục bạn kiểm duyệt nó.
ais523

Chỉ tò mò - bạn đã đạt được ngăn xếp nào để chơi trò chơi hệ thống danh tiếng?
Jonathan Frech

@JonathanFrech: Cái này. Tôi là một người dùng 20 nghìn, nhưng cuối cùng đã xóa tài khoản của tôi vì nó làm xáo trộn cuộc sống của tôi và vì hệ thống danh tiếng đã tích cực đẩy tôi vào việc làm cho nội dung khiến trang web trở nên tồi tệ hơn, trái ngược với tốt hơn.
ais523



0

Perl 6 , 26 byte

{map *.fmt("#%06X"),^8**8}

Hãy thử trực tuyến!

Sử dụng định dạng giống như mọi người khác. Lần ra trên TIO.

Hoặc, ở định dạng rgb:

31 byte

{map {"rgb($_)"},[X] ^256 xx 3}

Hãy thử trực tuyến!


Tôi nghĩ rằng đầu ra rgb nên rgb(0, 0, 0)bao gồm chuỗi rgb.
nwellnhof

@nwellnhof Đã cập nhật (mặc dù kết thúc ngắn hơn để thực hiện thập lục phân)
Jo King
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.