Toasty, Burnt, Brûlée!


8

Nó chỉ ra rằng máy nướng bánh mì của tôi là một chút hỏng. Nó bị mất WiFi (Bạn biết đấy, đó là một trong những máy nướng bánh thông minh mới lạ), và nó đang hoạt động! Vì nó không còn hoạt động nữa, tôi đã phải đột nhập vào mã nguồn của bữa sáng và chạy Plate.bread.toastAs(3);mỗi sáng. Bạn sẽ giúp chứ?

Máy nướng bánh mì của tôi mất một đầu vào: lượng thời gian bạn muốn nướng bánh mì. Điều này được viết là min:sec, chẳng hạn như 5:45hoặc 0:40(Lên đến 59:59). Sau đó, nó trả về một giá trị cụ thể cho các mức độ nướng khác nhau:

0:00-0:30 = Bread
0:31-1:00 = Warm Bread
1:01-2:00 = Toasty
2:01-3:30 = Burnt
3:31 and up = Brûlée (or Brulee)

Nhưng đây là một nhược điểm: máy nướng bánh mì của tôi có một bàn phím bị hỏng! Mã của bạn không thể chứa bất kỳ dấu chấm phẩy hoặc ... dấu hai chấm. Điều này có thể khó hơn thợ sửa chữa máy nướng bánh mì nói rằng nó sẽ ...

Dưới đây là một số trường hợp thử nghiệm, vì vậy bạn có thể ... kiểm tra trường hợp của bạn?

0:00 = Bread
5:50 = Brulee or Brûlée
2:00 = Toasty
ChicknMcNuggets = Anything
-1:00 = Anything
0:60 = Anything
1 = Anything
60:00 = Anything
1:00:00 = Anything

Là thời gian nhiều nhất 59:59?
xnor

5
Có nên không 3:31 and up: Brulee?
Mego

3
Đâu là tất cả các ngôn ngữ chơi gôn nơi dấu hai chấm sẽ không được sử dụng?
Jo King

1
Tôi đã không nhận ra cho đến bây giờ tại sao không có bất kỳ đệ trình Python nào ...
Chương trình Redwolf

1
Chúng ta có thể nhập đầu vào với số 0 đứng đầu để tất cả các đầu vào dài 5 ký tự không?
Quintec

Câu trả lời:


3

Con trăn 2 , 124 118 116

t=eval(input().replace("\x3A","."))
print["Bread","Warm Bread","Toasty","Burnt","Brulee"][sum([t>3.3,t>2,t>1,t>.3])]

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

-6 cảm ơn @tsh và cũng cảm ơn vì các trường hợp thử nghiệm TIO.

-2 với một vài lời khuyên thú vị từ @BlackOwlKai

Ném một ValueErrorcho các đầu vào không hợp lệ không thể được chuyển đổi thành một float. Đối với các số nhỏ hơn 0, nó trả về "Bánh mì" vì nó vẫn là bánh mì. Đoán xem nếu chúng ta thực sự nghiêm ngặt trong việc đảm bảo rằng đầu vào là thời gian hợp lệ thì có thể thực hiện được nhưng đối với tôi, điều thú vị là làm thế nào để tránh được :Python.



@tsh Cảm ơn vì thủ thuật gọn gàng và cũng cảm ơn vì các bài kiểm tra TIO.
ElPedro

-1 byte bằng cách thay thế floatbằngeval
Black Owl Kai

1
Cảm ơn @BlackOwlKai. Chưa thấy điều đó. Sẽ cập nhật vào ngày mai với các khoản tín dụng phù hợp ☺
ElPedro

1
-1 byte vì chr(58)có thể rút ngắn thành"\x3A"
Black Owl Kai

3

T-SQL, 409 379 328 318 byte

DECLARE @i varchar(9)DECLARE @a time='0'+CHAR(58)+@i DECLARE @ int=DATEPART(N,@a),@s int=DATEPART(S,@a)SELECT CASE WHEN @<1AND @s<31THEN'Bread'WHEN @<1OR @=1AND @s=0THEN'Warm Bread'WHEN @<2OR @=2AND @s=0THEN'Toasty'WHEN @<3OR @<4AND @s<31THEN'Burnt'ELSE'Brulee'END WHERE LEN(RIGHT(@i,LEN(@i)-CHARINDEX(CHAR(58),@i)))=2

-30 byte: bị gỡ bỏ AS từ khóa, kết hợp DECLARE báo cáo (nhờ BradC )
-51 byte: thay đổi tờ khai / mệnh đề where để tận dụng lợi thế của datetime chức năng SQL của
-10 bytes: Thay đổi MINUTE để N SECOND để S (nhờ BradC )

Bạn có biết rằng SQL không thể phân tách các chuỗi trong bất kỳ khả năng tốt nào không? Đừng để STRING_SPLITđánh lừa bạn; nó không hoạt động cho việc này. Hoặc ít nhất, tôi không đủ thông minh để tìm ra nó.

Khác với giải pháp T-SQL dựa trên bảng của BradC .

Ung dung:

-- Input variable
DECLARE @i varchar(9)

-- Time declarations (passes in as form "00:mm:ss")
-- CHAR(58) maps to ':'
DECLARE @a time = '0' + CHAR(58) + @i

-- Integer declarations
DECLARE @ int = DATEPART(N, @a),    -- minutes
        @s int = DATEPART(S, @a)    -- seconds

SELECT CASE
            WHEN @ < 1 AND @x < 31              -- 0:00 - 0:30
                THEN 'Bread'
            WHEN @ < 1 OR @ = 1 AND @x = 0      -- 0:31 - 1:00
                THEN 'Warm Bread'
            WHEN @ < 2 OR @ = 2 AND @x = 0      -- 1:01 - 2:00
                THEN 'Toasty'
            WHEN @ < 3 OR @ < 4 AND @x < 31     -- 2:01 - 3:30
                THEN 'Burnt'
            ELSE 'Brulee'                       -- 3:31 - 59:59
       END

-- Setting input as a time means that you only have to check if the seconds input is two characters, all other checks accounted for
WHERE LEN(RIGHT(@i, LEN(@i) - CHARINDEX(CHAR(58), @i))) = 2

Bạn có thể làm một cái gì đó như SELECT value FROM STRING_SPLIT(@i,CHAR(58)), mặc dù tôi tự hỏi nếu một TRY_CAST(@i AS TIME)có thể cắt một số góc.
BradC

Ngôn ngữ thú vị cho việc chơi golf!
Chương trình Redwolf

@BradC Tôi đã thử làm STRING_SPLITnhư vậy, nhưng nó không hoạt động chính xác như bạn nghĩ - nó thực sự trả về cả hai giá trị từ mỗi bên và bạn không thể thực hiện bất kỳ kiểm tra nào trên dữ liệu (ít nhất là tôi có thể tìm ra ). Đối với việc sử dụng TRY_CAST, có vẻ như nó sẽ yêu cầu phải có "00:" được gắn vào phía trước. Tôi có thể có thể làm việc hơn nữa với điều đó.
Meerkat

1
Vâng, STRING_SPLITtrả về chúng như các hàng riêng biệt. Ngay cả khi không thay đổi các phần đó, bạn vẫn có thể tiết kiệm được một tấn byte bằng cách chỉ giữ phần đầu tiên của bạn DECLAREvà thay đổi phần còn lại thành dấu phẩy. Đồng thời thả ASvà chỉ cần làmDECLARE @i varchar(99),@a varchar(9)=...
BradC

Vâng, gọi tốt. Vì @a@bcả hai đều yêu cầu @i, tôi phải khai báo riêng. Vẫn có thể lưu khá nhiều byte ở đó.
Meerkat

3

Java 8, 148 byte

một lambda từ StringđếnString

t->{float n=new Float(t.replace("\72","."))\u003breturn n>3.3?"Brulee"\u003an>2?"Burnt"\u003an>1?"Toasty"\u003an>.3?"Warm Bread"\u003a"Bread"\u003b}

\u003b\u003alà các chuỗi thoát Unicode cấp độ nguồn ;:tương ứng.

Dùng thử trực tuyến

Ung dung

t -> {
    float n = new Float(t.replace("\72",".")) \u003b
    return
        n > 3.3 ? "Brulee" \u003a
            n > 2 ? "Burnt" \u003a
            n > 1 ? "Toasty" \u003a
            n > .3 ? "Warm Bread" \u003a
            "Bread"
    \u003b
}

Sự nhìn nhận


.replaceAllcó thể .replaceInteger.parseIntcó thể new Integer, hoặc new Shortthậm chí, để lưu 10 byte: Hãy thử trực tuyến 162 byte .
Kevin Cruijssen

148 byte bằng cách thay đổi phần tách thành toán tử ternary đơn giản và sử dụng floatthay vì int để dự phòng cho "hàng trăm" byte.
Olivier Grégoire

Đẹp. Cảm ơn các bạn!
Jakob


2

PHP, 96 byte

<?=[Bread,"Warm Bread",$t=Toasty,$t,$u=Burnt,$u,$u,Brulee][min(7,2*$argn+substr($argn,-2)/30)]?>

yêu cầu PHP 5.5 trở lên. Chạy như ống với -nFhoặc thử trực tuyến .


2

T-SQL, 143 155 145 byte

SELECT TOP 1b FROM i,
(VALUES(31,'Bread'),(61,'Warm Bread'),(121,'Toasty'),(211,'Burnt'),(1E4,'Brulee'))t(a,b)
WHERE a>DATEDIFF(s,0,'0'+CHAR(58)+v)

Ngắt dòng chỉ dành cho khả năng đọc. Phương pháp khác với giải pháp SQL dựa trên biến của Meerkat .

Đầu vào được lấy thông qua bảng i có sẵn với trường varchar v , theo tiêu chuẩn IO của chúng tôi . Đó là bảng đầu vào là cross-tham gia vào một trong bộ nhớ bảng t với các giá trị của chúng tôi cắt (tính bằng giây) và các nhãn mong muốn.

Phép thuật xảy ra trong WHEREmệnh đề: DATEDIFFtính toán sự khác biệt tính bằng giây giữa nửa đêm và đầu vào của chúng tôi (có thêm phần 0:gắn ở phía trước), sau đó trả về nhãn phù hợp thấp nhất (thông qua TOP 1).

Đầu vào không hợp lệ trả về giá trị không thể đoán trước hoặc đưa ra lỗi:
Conversion failed when converting date and/or time from character string.

Câu hỏi hơi mơ hồ, nhưng nếu cần tôi có thể tránh các lỗi này (và không trả lại gì) bằng cách thêm LIKEmẫu sau vào WHEREmệnh đề, đưa tổng số byte lên 238 211 201 :

AND RIGHT('0'+v,5)LIKE'[0-5][0-9]'+CHAR(58)+'[0-5][0-9]'

EDIT : Việc gửi ngắn hơn ban đầu của tôi đã thất bại đối với đầu vào 24:00, vì tôi đã coi nó là hh:mm. Phải thêm '0'+CHAR(58)+tiền tố, trong đó thêm 12 byte.

EDIT 2 : Cạo 27 byte từ LIKEphiên bản thay thế của tôi

EDIT 3 : Đã bị xóa ORDER BYkhỏi cả hai phiên bản, vì nó tỏ ra không cần thiết trong thử nghiệm. (SQL không đảm bảo thứ tự sắp xếp sẽ được duy trì mà không có thông tin rõ ràng ORDER BY, nhưng dường như nó hoạt động tốt với tôi trong trường hợp cụ thể này.)


2

05AB1E , 43 42 byte

þ30тx330)ć‹O„©Ãº™D#θ‚R.•liSÕô6>µ·•6ôÀ«™sè

Hãy thử trực tuyến hoặc xác minh một số trường hợp thử nghiệm .

Giải trình:

þ                # Leave only the digits of the (implicit) input
                 #  i.e. "1:15" → 115
 30              # Push 30
   т             # Push 100
    x            # Pop and push 100 and 100 doubled (200)
     330         # Push 330
        )        # Wrap the stack into a list: [inputDigits,30,100,200,330]
         ć       # Pop and push the head and rest of array as separated items to the stack
                # Check for each if its smaller than the head (1=truthy, 0=falsey)
                 #  i.e. [30,100,200,330] and 115 → [1,1,0,0]
           O     # Take the sum of this
                 #  i.e. [1,1,0,0] → 2
„©Ãº™            # Push string "warm bread"
     D#          # Duplicate it, and split it by spaces: ["warm","bread"]
       θ         # And only leave the last element: "bread"
        R       # Pair them into a list, and reverse that list: ["bread","warm bread"]
.•liSÕô6>µ·•    # Push string "bruleetoastyburnt"
             6ô  # Split into parts of size 6: ["brulee","toasty","burnt"]
               À # Rotate it once towards the left: ["toasty","burnt", "brulee"]
«                # Merge both lists together:
                 #  ["bread","warm bread","toasty","burnt","brulee"]
                # Titlecase each word: ["Bread","Warm Bread","Toasty","Burnt","Brulee"]
  s              # Swap so the number is at the top of the stack again
   è             # Index it into the list (and output implicitly)
                 #  i.e. 2 → "Toasty"

Xem 05AB1E mẹo này của tôi (phần Làm thế nào để sử dụng từ điển?Làm thế nào để chuỗi nén không nằm trong từ điển? ) Để hiểu tại sao „©Ãº™"warm bread".•liSÕô6>µ·•"bruleetoastyburnt".

þ30тx330)ćcách khác có thể 30тx)DOªsþcho cùng một số đếm byte: Hãy thử trực tuyến.


1

Javascript (ES6 +), 180 byte

Node.js (180 byte)

let f=(s,i=s.split("\u{3a}"),j=i[0]*60+1*i[1],k="Bread",l=assert(new RegExp("^(.|[0-5].)\u{3a}[0-5].$").test(s)))=>eval("(j<31)?k\u{3a}(j<61)?'Warm '+k\u{3a}(j<121)?'Toasty'\u{3a}(j<211)?'Burnt'\u{3a}'Brulee'")

Trình duyệt (188 byte):

let f=(s,i=s.split("\u{3a}"),j=i[0]*60+1*i[1],k="Bread",l=console.assert(new RegExp("^(.|[0-5].)\u{3a}[0-5].$").test(s)))=>eval("(j<31)?k\u{3a}(j<61)?'Warm '+k\u{3a}(j<121)?'Toasty'\u{3a}(j<211)?'Burnt'\u{3a}'Brulee'")

Phải sử dụng các chuỗi thoát unicode đó :-) chỉ là một chuỗi lớn các toán tử ternary, với các biến được xác định bởi các tham số mặc định. Cũng là một lót, vì vậy không có js đói dấu chấm phẩy


Tôi đã sử dụng biểu thức chính quy để thực thi quy tắc 59:59 và không phủ định :-)
Michael

OH WAIT Tôi quên tôi đã thêm:
Michael

thực sự đã hoàn thành :-)
Michael

1
Bạn không cần một regex để thực thi 59:59 và không có tiêu cực ... chúng có thể dẫn đến bất cứ điều gì, có thể là một lỗi, không có gì, hoặc Brulee.
Chương trình Redwolf

1

Võng mạc 0.8.2 , 97 byte

.+(..)
$*1#$1$*
+`1#
#60$*
#1{211,}
Brulee
#1{121,}
Burnt
#1{61,}
Toasty
#1{31,}
Warm #
#1*
Bread

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Giải thích:

.+(..)
$*1#$1$*

Chuyển đổi phút và giây để unary.

+`1#
#60$*

Nhân số phút với 60 và thêm vào giây.

#1{211,}
Brulee
#1{121,}
Burnt
#1{61,}
Toasty

Giải mã các giây thành bánh mì nướng.

#1{31,}
Warm #

Giải mã Bánh mì ấm bằng cách lưu ý rằng #(trong 0:00) giải mã thành Bread.

#1*
Bread

Nếu chúng ta chưa có bánh mì nướng thì bánh mì vẫn lạnh.




1

Chộp lấy! 4.2 , 256 251 byte

Giảm thiểu phiên bản văn bản một số chi tiết.

Tôi chưa tìm thấy câu trả lời nào trong Snap!, Một ngôn ngữ lập trình trực quan tương tự Scratch, vì vậy tôi sẽ sử dụng cú pháp Scratchblocks2, giả vờ rằng Snap! các khối độc quyền có giá trị trong Scratchblocks2.

Hãy thử trực tuyến! (nhấp vào nút có hai mũi tên để xem mã)

when gf clicked
ask[]and wait
set[l v]to(split(answer)by(unicode(58)as letter
set [t v]to(((item(1 v)of(l))*(60))+(item(2 v)of(l
if<(t)<[31
say[Bread
else
if<(t)<[61
say[Warm Bread
else
if<(t)<[121
say[Toasty
else
if<(t)<[211
say[Burnt
else
say[Brulee

1

R , 127 122 byte

function(t)cut((x=eval(parse(t=t)))[1]*60+tail(x,1),30*c(0:2,4,7,Inf),c("Bread","Warm Bread","Toasty","Burnt","Brulee"),T)

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

Trả về a factorvới mức phù hợp.

-5 byte nhờ JayCe.


Điều này sẽ làm việc? tio.run/ cường
JayCe

@JayCe IDK, đầu vào là "bất kỳ định dạng có thể chấp nhận" nhưng sau đó mọi thứ sẽ có chuỗi ... Tôi sẽ hỏi trong các nhận xét.
Giuseppe

@JayCe Tôi không chắc ý của bạn là gì. Theo như tôi có thể thấy, phải mất một thời gian làm đầu vào cho một chức năng là IMO đầu vào có thể chấp nhận được
Chương trình Redwolf

Và bạn cũng có thể làm30*c(0,1,2,4,7,Inf)
JayCe

@RedwolfPrograms đầu vào không phải là thời gian, đó là một mảng, :là toán tử chuỗi.
Giuseppe

1

Japt , 48 byte

`BÎ%
W‡m BÎ%
To†ty
B¨›
BrÔ‡`·g[30LLÑ,330]è<Ur58d

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

Đã lưu 5 byte bằng cách thực sự đọc các mẹo ...

Giải trình:

`BÎ%...BrÔ‡`·                       Compressed array of possible outputs
             g                      Get the one at the index given by...
                         è          The number of items...
              [30LLÑ,330]           From the list [30,100,200,330]...
                          <Ur58d    Which are less than the input without ":"

Một byte bổ sung có thể được lưu bằng cách xuất ra trong tất cả các chữ thường.




@LuisfelipeDejesusMunoz cả hai đều chứa dấu hai chấm, không được phép trong thử thách. tiết kiệm một byte mặc dù và tôi đã không nghĩ về việc liệu tất cả chữ thường có được phép hay không.
Kamil Drakari

1

Thạch , 43 41 40 byte

fØD~~ḌH“Ð2dʠ‘<Sị“¡Ḳḋ\ḞvṾƤSİƓƥeF½ÞØ+®°»Ỵ¤

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

Giải thích (cũ)

“¡Ḳḋ\ḞvṾƤSİƓƥeF½ÞØ+®°»là chuỗi nén Warm Bread\nToasty\nBurnt\nBrulee\nBread, được tìm thấy bởi trình tối ưu hóa nén .

fØD                               Filter out the non-digits (i.e. colon) from input
   ~~                             Use binary NOT twice to convert to digit list
     Ḍ                          
      HḞ                        Halve and floor. Now we have "01:45" -> 72.
        “Ç1cƥ‘                    The array [14,49,99,164]
              <                   Vectorized less than
               S                  Sum
fØD~~ḌHḞ“Ç1cƥ‘<S                How many threshold times is input less than?
                                           (0 -> Bread, 4 -> Brulee.)
                ị               Index (note 0ị gives the last list item) into
                       ¤        the new dyadic link given by
                 “...»            The long string, decoded and
                      Ỵ           split by newlines.

Lấy cảm hứng từ câu trả lời của Kamil Drakari .

-2 byte sử dụng đoạn trích ~~Ḍtừ Dennis.


1

Runic bùa mê , 118 byte

\>`tttt`,kw,kw,kw,ki
\uqn.3X)?\ . 1C)?\.2C)?\'Ŋ)?\"Brulee"
\D"daerB"L" mraW"/
$L"ytsaoT"L?9"tnruB"L?aL?3 F/

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

Sử dụng một số ký tự ASCII chưa in (STX, EOT, SOH, STX, VT, SOH, STX, DC2, SOH và STX theo thứ tự đó) trên dòng đầu tiên, đang đọc theo chuỗi byte theo thứ tự sẽ được cần thiết trên ngăn xếp. 3 phép chia ( 't'/2bằng :) và phản xạ ghi phản xạ sau đó được thực hiện. Điều này đặt 3 :lệnh (trùng lặp) trong đó hiện có .(NOP) để so sánh không phá hủy đầu vào với ngưỡng thời gian. Một phần tư :được để lại trên ngăn xếp trước khi đọc đầu vào.

Thời gian được đọc thành một chuỗi, sau đó phân tách :và nối lại thành một chuỗi. Vì các giá trị ở trên 59:59không có bất kỳ đặc điểm kỹ thuật nào về đầu ra, các giá trị như 1:00:00sẽ có đầu ra không xác định (nhưng xác định). Chuỗi này sau đó được chuyển đổi thành một số và được so sánh với 30, 100, 200 và 330 (giá trị byte của Ŋ). "Bread"(dòng 3, thực thi RTL) được sử dụng hai lần, cả cho BreadWarm Breadkết quả, tiết kiệm ít nhất 5 byte.

Lưu 1 byte bằng cách không có lệnh terminator cổ điển ( ;) bằng cách sử dụng Fiheads trên dòng cuối cùng. Điều này thuyết phục trình phân tích cú pháp rằng chương trình được đảm bảo chấm dứt mà không khiến chương trình thực hiện ngay lập tức (và quan trọng hơn là không chạm vào ngăn xếp). Các đầu vào hợp lệ sẽ để trống ngăn xếp để khi nó lặp lại và chạm vào một wIP bị chấm dứt để thực hiện một hành động bất hợp pháp.


Sau khi đọc tên của ngôn ngữ này, vì một số lý do, tôi có hình ảnh của một thuật sĩ đang tụng các điểm mã ASCII bị mắc kẹt trong đầu.
Chương trình Redwolf


0

Javascript, 115 101 byte

-6 từ tsh

d=>[b="Bread","Warm "+b,a="Toasty",a,c="Burnt",c,c][~~(parseInt(d)*1.999+d.slice(-2)/30.1)]||"Brulee"

0

JavaScript (ES6), 171 byte

(x,y=Math.ceil(x.split(/\D/).reduce((a,b)=>(+a)*60+(+b))/30))=>["Bread","Bread","Warm Bread","Toasty","Toasty","Burnt","Burnt","Burnt","Brulee","Brulee","Brulee"][y>8?8:y]

Chạy một số trường hợp thử nghiệm với Stack Snippet này:

var f=(x,y=Math.ceil(x.split(/\D/).reduce((a,b)=>(+a)*60+(+b))/30))=>["Bread","Bread","Warm Bread","Toasty","Toasty","Burnt","Burnt","Burnt","Brulee","Brulee","Brulee"][y>8?8:y]

var result = document.getElementById("result");
["0:00", "0:30", "0:31", "1:00", "1:01", "2:00", "2:01", "2:30", "2:31", "3:00", "3:01", "3:30", "3:31", "4:00", "4:01", "4:30", "4:31", "5:00", "6:00"].forEach(x => result.innerHTML += `${x}: ${f(x)}\n`);
<pre id="result"></pre>


@JoKing Rất tiếc, tôi đã bỏ lỡ một vài khả năng trong khi cố gắng lưu byte. Làm việc trên một sửa chữa.
Mego

0

F #, 177 byte

let t i=
 let s=i.ToString().Split(char 58)
 let m=int s.[0]*60+int s.[1]
 if m<31 then"Bread"elif m<61 then"Warm Bread"elif m<121 then"Toasty"elif m<211 then"Burnt"else"Brulee"

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

Cảm ơn Jo King vì đã nói thẳng ra, giải thích theo nghĩa đen của tôi về thách thức ...

F # là khá ổn cho các chức năng mà không có dấu chấm phẩy hoặc dấu hai chấm. Vấn đề thực sự duy nhất là tôi không thể thực hiện i.Splittrực tiếp mà không có chú thích loại - F # sẽ không thể suy ra loại idựa trên cuộc gọi phương thức. Điều đó sẽ yêu cầu xác định loại trực tiếp trong hàm, giống như let t (i:string)=đã trái với quy tắc.

Nhưng tôi có thể dễ dàng vượt qua nó i.ToString(), sau đó cho phép tôi gọi Splitnó. Sau đó char 58là một nhân vật đại tràng, và sau đó là thẳng.


Nhưng đó là những gì các đặc điểm kỹ thuật yêu cầu nói! : P
Ciaran_McCarthy
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.