Tam giác ASCII


30

Nhiệm vụ của bạn là viết chương trình hoặc hàm in hình tam giác ASCII. Họ trông như thế này:

|\
| \
|  \
----

Chương trình của bạn sẽ có một đầu vào số duy nhất n, với các ràng buộc 0 <= n <= 1000. Tam giác trên có giá trị là n=3.

Tam giác ASCII sẽ có ndấu gạch chéo ngược ( \) và thanh dọc ( |), n+1đường thẳng và dấu gạch ngang ( -) và mỗi dòng sẽ có một khoảng trắng bằng số dòng (dựa trên 0, tức là dòng đầu tiên là dòng 0) bên cạnh dòng cuối cùng .

Ví dụ:

Đầu vào:

4

Đầu ra:

|\
| \
|  \
|   \
-----

Đầu vào:

0

Đầu ra:


Trong trường hợp thử nghiệm này, đầu ra phải trống. Không có khoảng trắng.

Đầu vào:

1

Đầu ra:

|\
--

Đầu vào và đầu ra phải chính xác như tôi đã chỉ định.

Đây là , vì vậy hãy nhắm đến mã ngắn nhất có thể!

code-golf  ascii-art  code-golf  rubiks-cube  code-golf  path-finding  maze  regular-expression  code-golf  math  rational-numbers  code-golf  kolmogorov-complexity  graphical-output  code-golf  tips  code-golf  string  permutations  code-golf  sorting  base-conversion  binary  code-golf  tips  basic  code-golf  number  number-theory  fibonacci  code-golf  date  code-golf  restricted-source  quine  file-system  code-golf  code-golf  math  code-golf  ascii-art  code-golf  math  primes  code-golf  code-golf  math  matrix  code-golf  string  math  logic  factorial  code-golf  palindrome  code-golf  quine  stateful  code-golf  interactive  code-golf  board-game  code-golf  math  arithmetic  code-golf  string  code-golf  math  matrix  code-golf  math  abstract-algebra  polynomials  code-golf  date  code-golf  string  array-manipulation  sorting  code-golf  game  code-golf  string  code-golf  ascii-art  decision-problem  code-golf  number  sequence  code-golf  code-golf  code-golf  sequence  fibonacci  code-golf  math  geometry  random  code-golf  code-golf  math  decision-problem  fractal  rational-numbers  code-golf  number  number-theory  code-golf  combinatorics  permutations  card-games  code-golf  math  sequence  array-manipulation  fibonacci  code-golf  sequence  decision-problem  graph-theory  code-golf  ascii-art  parsing  lisp  code-golf  string  math  natural-language  logic  code-golf  math  logic  code-golf  string  alphabet  code-golf  string  code-golf  string 

4
Nó cần phải là một chương trình hay nó có thể là một chức năng?
fnɛtɪk

7
Tôi nghĩ sẽ tốt hơn nếu trường hợp 0có thể có bất kỳ đầu ra bất ngờ nào vì đây là trường hợp cạnh (đặc biệt là khi bạn yêu cầu số lượng dấu gạch ngang phải nhiều hơn số đầu vào)
Kritixi Lithos

4
@Okx Thường có những câu hỏi mà người hỏi nói chương trình nhưng thực sự có nghĩa là chương trình hoặc chức năng. Bạn có thể muốn làm rõ rằng bạn đang yêu cầu chương trình ĐẦY ĐỦ
fnɛtɪk

9
Tôi chắc chắn sẽ đi cho cả chương trình và chức năng. Đó là quy tắc mặc định nếu không có gì khác được chỉ định. Tôi cũng sẽ loại bỏ trường hợp 0 ​​cạnh vì nó vi phạm trực tiếp " n + 1 dòng và dấu gạch ngang (-) ".
Stewie Griffin

3
Thử thách sẽ quá đơn giản nếu không có ngoại lệ size = 0. Một phần của thách thức là tìm ra cách giải quyết vấn đề này với số lượng mã bổ sung ít nhất.
12Me21

Câu trả lời:


3

Thạch , 14 byte

’⁶x⁾|\jṄµ€Ṫ”-ṁ

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

Làm thế nào nó hoạt động.

’⁶x⁾|\jṄµ€Ṫ”-ṁ  Main link. Argument: n

        µ       Combine the links to the left into a chain.
         €      Map the chain over [1, ..., n]; for each k:
’                 Decrement; yield k-1.
 ⁶x               Repeat the space character k-1 times, yielding a string.
   ⁾\j            Join the character array ['|', '\'], separating by those spaces.
      Ṅ           Print the result, followed by a linefeed.
         Ṫ      Tail; extract the last line.
                This will yield 0 if the array is empty.
          ⁾-ṁ   Mold the character '-' like that line (or 0), yielding a string
                of an equal amount of hyphen-minus characters.  

11

C, 58 byte

i;f(n){for(i=2*n;~i--;printf(i<n?"-":"|%*c\n",2*n-i,92));}

-

Cảm ơn @Steadybox, những bình luận về câu trả lời này đã giúp tôi cạo một vài byte trong giải pháp trên của mình


1
Tôi đã đạt được 68, khá tự hào về bản thân mình .. và sau đó tôi cuộn :( - Làm tốt lắm!
Quentin

1
Rất đẹp! Có +1
Steadybox

Tôi đã 2*nở đó hai lần và điều đó làm phiền tôi, có ai có thể nghĩ ra một cách thông minh để rút ngắn nó bằng cách nào đó không?
Albert Renshaw

7

Javascript (ES6), 97 85 81 75 74 byte

n=>(g=(n,s)=>n?g(--n,`|${" ".repeat(n)}\\
`+s):s)(n,"")+"-".repeat(n&&n+1)

Hóa ra tôi đã không sử dụng gần đủ đệ quy

f=n=>(g=(n,s)=>n?g(--n,`|${" ".repeat(n)}\\
`+s):s)(n,"")+"-".repeat(n&&n+1)

console.log(f(0))
console.log(f(1))
console.log(f(2))
console.log(f(3))
console.log(f(4))


6

05AB1E , 16 15 16 byte

Đã lưu một byte nhờ Adnan

FðN×…|ÿ\}Dg'-×»?

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

Giải trình

F       }         # for N in range [0 ... input-1]
 ðN×              # push <space> repeated N times
    …|ÿ\          # to the middle of the string "|\"
         Dg       # get length of last string pushed
           '-×    # repeat "-" that many times
              »   # join strings by newline
               ?  # print without newline

ð×.svy¦…|ÿ\}¹>'-×», đoán ý tưởng của tôi .skhông tốt như tôi nghĩ. Sử dụng tốt ÿ, chưa từng thấy điều đó trước đây.
Bạch tuộc ma thuật Urn

@carusocomputing: Tôi đã xem xét .scũng như bắt đầu <Ýð×nhưng gặp rắc rối với trường hợp đặc biệt với các phương pháp đó.
Emigna

FðN×…|ÿ\}Dg'-×»cho 15 byte
Adnan

@Ad Nam: Bắt đẹp với Dg! Cảm ơn :)
Emigna

.scũng dẫn đến các mảng lồng nhau và làm phẳng cần nhiều byte hơn.
Bạch tuộc ma thuật Urn

5

V , 18 17 16 byte

Lưu 1 byte nhờ @ nmjcman101 vì đã sử dụng một cách khác để xuất ra không có gì nếu đầu vào là 0

é\é|ÀñÙá ñÒ-xÀ«D

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

Hexdump:

00000000: e95c e97c c0f1 d9e1 20f1 d22d 78c0 ab44  .\.|.... ..-x..D

Giải thích (lỗi thời)

Trước tiên chúng ta có một vòng lặp để kiểm tra xem đối số là gì 0. Nếu vậy, mã dưới đây thực thi ( |\được viết). Mặt khác, không có gì được viết và bộ đệm trống.

Àñ     ñ            " Argument times do:
  é\é|              " Write |\
      h             " Exit loop by creating a breaking error

Bây giờ chúng ta đã có đỉnh của tam giác, chúng ta cần tạo ra cơ thể của nó.

Àñ   ñ              " Argument times do:
  Ù                 " Duplicate line, the cursor comes down
   à<SPACE>         " Append a space

Bây giờ chúng ta có thêm một dòng ở dưới cùng của bộ đệm. Điều này phải được thay thế bằng -s.

Ó-                  " Replace every character with a -
   x                " Delete the extra '-'

Câu trả lời này sẽ ngắn hơn nếu chúng ta có thể làm bất cứ điều gì chúng ta muốn cho đầu vào 0

V , 14 13 byte

é\é|ÀñÙá ñÒ-x

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


Tôi không nên cố gắng hết sức cho một byte Hãy thử trực tuyến!
nmjcman101

@ nmjcman101 À, «dĩ nhiên rồi. Tài giỏi! :)
Kritixi Lithos

4

C #, 93 byte

n=>{var s=n>0?new string('-',n+1):"";while(n-->0)s="|"+new string(' ',n)+"\\\n"+s;return s;};

Hàm ẩn danh trả về tam giác ASCII dưới dạng chuỗi.

Chương trình đầy đủ với chức năng nhận xét, bình luận và các trường hợp thử nghiệm:

using System;

class ASCIITriangles
{
    static void Main()
    {
      Func<int, string> f =
      n =>
      {
          // creates the triangle's bottom, made of dashes
          // or an empty string if n == 0
          var s = n > 0 ? new string('-', n + 1) : "";

          // a bottom to top process
          while ( n-- > 0)
          // that creates each precedent line
            s = "|" + new string(' ', n) + "\\\n" + s;

          // and returns the resulting ASCII art
          return s;
      };

      // test cases:
      Console.WriteLine(f(4));
      Console.WriteLine(f(0));
      Console.WriteLine(f(1));
    }
}

3

Python 2 , 69 byte

lambda x:'\n'.join(['|'+' '*n+'\\'for n in range(x)]+['-'*-~x*(x>0)])

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


Nếu bạn đang in nó, bạn có thể lưu một vài byte bằng cách thay đổi thành python3, loại bỏ "".joinvà thay thế nó bằng *toán tử và sepđối số trong hàm ngủ, vì vậylambda x:print(*['|'+' '*n+'\\'for n in range(x)]+['-'*-~x*(x>0)],sep="\n")
sagiksp

3

CJam , 24 22 21 byte

Đã lưu 1 byte nhờ Martin Ender

ri_{S*'|\'\N}%\_g+'-*

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

Giải trình

ri                     e# Take an integer from input
  _                    e# Duplicate it
   {                   e# Map the following to the range from 0 to input-1
    S*                 e#   Put that many spaces
      '|               e#   Put a pipe
        \              e#   Swap the spaces and the pipe
         '\            e#   Put a backslash
           N           e#   Put a newline
            }%         e# (end of map block)
              \        e# Swap the top two stack elements (bring input to the top)
               _g+     e# Add the input's signum to itself. Effectively this increments any 
                       e#  non-zero number and leaves zero as zero.
                  '-*  e# Put that many dashes

2

SmileBASIC, 51 byte

INPUT N
FOR I=0TO N-1?"|";" "*I;"\
NEXT?"-"*(N+!!N)

2

PowerShell , 51 67 byte

param($n)if($n){1..$n|%{"|"+" "*--$_+"\"};write-host -n ('-'*++$n)}

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

(Tăng byte đến tài khoản không có dòng mới)

Đưa đầu vào $nvà xác minh nó là khác không. Sau đó các vòng lặp để xây dựng tam giác, và kết thúc với một dòng -. Tiềm ẩn Write-Outputxảy ra khi hoàn thành chương trình.


Chương trình in một dòng mới, nhưng tôi yêu cầu đầu ra phải chính xác như được chỉ định, xin lỗi!
Okx 8/2/2017

@Okx Thay đổi với chi phí 16 byte.
admBorkBork

2

Võng mạc , 39 byte

.*
$*
*\`(?<=(.*)).
|$.1$* \¶
1
-
-$
--

Dùng thử trực tuyến

Chuyển đổi đầu vào thập phân thành unary. Thay thế từng 1|<N-1 spaces>\¶, in và hoàn tác thay thế. Thay thế mỗi 1dấu gạch nối và dấu gạch nối cuối cùng bằng 2 dấu gạch nối. Tadaa!


2

Lisp thông thường, 89 86 byte

Tạo một hàm ẩn danh nhận đầu vào n và in hình tam giác thành *standard-output*(stdout, theo mặc định).

Chơi gôn

(lambda(n)(when(< 0 n)(dotimes(i n)(format t"|~v@t\\~%"i))(format t"~v,,,'-<~>"(1+ n))))

Ung dung

(lambda (n)
  (when (< 0 n)
    (dotimes (i n)
      (format t "|~v@t\\~%" i))
    (format t "~v,,,'-<~>" (1+ n))))

Tôi chắc chắn rằng tôi có thể làm điều này ngắn hơn bằng cách nào đó.


2

C 101 93 75 byte

f(n){i;for(i=0;i++<n;)printf("|%*c\n",i,92);for(;n--+1;)prin‌​tf("-");}

Phiên bản ung dung

void f(int n)
{
  int i;

  for(i=0;i++<n;)
    printf("|%*c\n",i,92);

  for(;n--+1;)
    printf("-");

}

@Steadybox Cảm ơn bạn đã chỉ ra, rất có ý nghĩa.


1
Bạn có thể tắt một vài byte bằng cách thay thế các hằng ký tự bằng giá trị ASCII của chúng và di chuyển i ++ đầu tiên trong thân vòng lặp. Và tại sao printf("%c",'_');lại dài dòng như vậy?
Jens

@Jens kích thích, Danke sehr :) Đã cập nhật
Abel Tom

Điều này có thể được cắt giảm đến 74 byte:i;f(n){for(i=0;i++<n;)printf("%c%*c\n",124,i,92);for(;n--+1;)printf("-");}
Steadybox

Đến 69 byte, thực tế:i;f(n){for(i=0;i++<n;)printf("|%*c\n",i,92);for(;n--+1;)printf("-");}
Steadybox

@Steadybox 68: n--+1có thể rút ngắn thành~n--
Albert Renshaw

2

Than , 15 byte

Nβ¿β«↓β→⁺¹β↖↖β»

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

Phá vỡ

Nβ¿β«↓β→⁺¹β↖↖β»
Nβ               assign input to variable β
   ¿β«         »  if β != 0:
      ↓β           draw vertical line β bars long
        →⁺¹β       draw horizontal line β+1 dashes long
            ↖      move cursor up one line and left one character
             ↖β    draw diagonal line β slashes long

Nhận xét rất muộn, nhưng việc đóng cửa »có thể được bỏ qua.
DLosc

2

Japt , 20 byte

Đã lưu 2 byte nhờ @ETHproductions

o@'|+SpX +'\Ãp-pUÄ)·

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

Giải trình

o@'|+SpX +'\Ãp-pUÄ)·
o                       // Creates a range from 0 to input
 @                      // Iterate through the array
  '|+                   // "|" + 
     SpX +              // S (" ") repeated X (index) times +
          '\Ã            // "\" }
             p-pU       // "-" repeated U (input) +1 times
                 Ä)·    // Join with newlines

1
Đẹp quá Bạn có thể lưu một byte bằng cách đẩy hàng cuối cùng trước khi tham gia: o@'|+SpX +'\Ãp'-pUÄ)·và do lỗi (thực sự là tác dụng phụ không chủ ý của các chức năng tự động), sau đó bạn có thể xóa phần 'trong '-.
Sản phẩm ETH

Trên thực tế, nó giống như vậy với tất cả các chữ cái viết thường, không chỉ p. Đó là lý do đó, bạn có thể làm ví dụ m*2để tăng gấp đôi mỗi phần tử, hoặc mp2vuông mỗi
ETHproductions

2

J, 20 byte

-13 byte nhờ bob

*#' \|-'{~3,~2,.=@i.

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

bản gốc: 33 byte

(#&'| \'@(1,1,~])"0 i.),('-'#~>:)

vô dụng

(#&'| \' @ (1,1,~])"0 i.) , ('-'#~>:)

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


25 byte với*,&'-' '|',.'\'{."0~_1-i.
dặm

22 byte với*,&'-' '|',.' \'{~=@i.
bob

@ Bob Đó là rất thông minh để sử dụng nhận dạng ma trận
dặm

@bob cảm ơn vì lời đề nghị. Tôi đã cập nhật bài đăng
Jonah


1

Python2, 73 byte

n=input()
w=0
exec'print"|"+" "*w+"\\\\"+("\\n"+"-"*-~n)*(w>n-2);w+=1;'*n

Một chương trình đầy đủ. Tôi cũng đã thử nội suy chuỗi cho dòng cuối cùng, nhưng hóa ra là một vài byte dài hơn: /

exec'print"|%s\\\\%s"%(" "*w,("\\n"+"-"*-~n)*(w>n-2));w+=1;'*n

Một giải pháp khác ở 73 byte:

n=j=input()
exec'print"|"+" "*(n-j)+"\\\\"+("\\n"+"-"*-~n)*(j<2);j-=1;'*n

Các trường hợp thử nghiệm

0:

1:
|\
--

2:
|\
| \
---

3:
|\
| \
|  \
----

6:
|\
| \
|  \
|   \
|    \
|     \
-------

Tôi xin lỗi vì nhận xét trước đây của tôi, các chức năng hiện đã được cho phép.
Okx 8/2/2017

@Okx Không vấn đề gì. Đây là một chương trình đầy đủ. Tôi không nghĩ rằng tôi sẽ xem xét thời trang của một giải pháp chức năng :)
Yytsi

1

MATL , 19 byte

?'\|- '2GXyYc!3Yc!)

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

?         % Implicit input. If non-zero
  '\|- '  %   Push this string
  2       %   Push 2
  G       %   Push input
  Xy      %   Identity matrix of that size
  Yc      %   Prepend a column of 2's to that matrix
  !       %   Transpose
  3       %   Push 3
  Yc      %   Postpend a column of 3's to the matrix
  !       %   Transpose
  )       %   Index into string
          % Implicit end. Implicit display

1

QBIC , 41 byte

:~a>0|[a|?@|`+space$(b-1)+@\`][a+1|Z=Z+@-

Giải trình

:~a>0|  Gets a, and checks if a > 0
        If it isn't the program quits without printing anything
[a|     For b=1; b <= a; b++
?@|`+   Print "|"
space$  and a number of spaces
(b-1)   euqal to our current 1-based line - 1
+@\`    and a "\"
]       NEXT
[a+1|   FOR c=1; c <= a+1; c++
Z=Z+@-  Add a dash to Z$
        Z$ gets printed implicitly at the end of the program, if it holds anything
        The last string literal, IF and second FOR loop are closed implicitly.

1

R, 101 byte

for(i in 1:(n=scan())){stopifnot(n>0);cat("|",rep(" ",i-1),"\\\n",sep="")};cat("-",rep("-",n),sep="")

Mã này tuân thủ n=0trường hợp thử nghiệm nếu bạn chỉ xem xét STDOUT!
Thật vậy, stopifnot(n>0)phần dừng thực thi tập lệnh, không hiển thị gì STDOUTngoài ghi Error: n > 0 is not TRUEvào SDTERR.

Ung dung:

for(i in 1:(n=scan()))
    {
    stopifnot(n>0)
    cat("|", rep(" ", i-1), "\\\n", sep = "")
    }

cat("-", rep("-", n), sep = "")

1
Có thể muốn sửa lỗi chính tả của vô
fəˈnɛtɪk

1

Con trăn 2 , 62 byte

n=input();s='\\'
exec"print'|'+s;s=' '+s;"*n
if n:print'-'*-~n

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

In từng dòng, mỗi lần thêm một khoảng trắng trước dấu gạch chéo ngược. Nếu một chức năng không in sẽ được cho phép, điều đó có thể sẽ ngắn hơn.


Rõ ràng, các chức năng không phải in.
Yytsi

1

JavaScript (ES6), 71 byte

f=
n=>console.log(' '.repeat(n).replace(/./g,'|$`\\\n')+'-'.repeat(n+!!n))
<form onsubmit=f(+i.value);return!true><input id=i type=number><input type=submit value=Go!>

Đầu ra cho giao diện điều khiển. Lưu 6 byte nếu in ra vỏ JavaScript SpiderMonkey là chấp nhận được. Lưu 13 byte nếu trả lại đầu ra là chấp nhận được.


Regex đó là khéo léo. Lần đầu tiên tôi đã thử một cái gì đó dọc theo những dòng đó. Tôi không biết về $`mẫu này, nhưng không biết liệu tôi có còn nghĩ về nó không. Tốt đẹp.
1


1

Python 3 , 60 byte

f=lambda n,k=0:k<n and'|'+' '*k+'\\\n'+f(n,k+1)or'-'[:n]*-~n

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

Hai giải pháp nữa với cùng số byte.

f=lambda n,k=0:n and'|'+' '*k+'\\\n'+f(n-1,k+1)or-~k*'-'[:k]
f=lambda n,s='|':-~n*'-'[:n]if s[n:]else s+'\\\n'+f(n,s+' ')

1

Perl, 63 byte

$n=shift;print'|',$"x--$_,"\\\n"for 1..$n;print'-'x++$n,$/if$n

Ung dung:

$ perl -MO=Deparse triangle.pl
$n = shift @ARGV;
print '|', $" x --$_, "\\\n" foreach (1 .. $n);
print '-' x ++$n, $/ if $n;

$"là dấu phân cách danh sách, mặc định là "". $/là dấu tách bản ghi đầu ra, mặc định là "\ n". $_là biến vòng lặp ẩn.


1
có lẽ có thể tiết kiệm một số bằng cách đọc đầu vào của stdin? $n=<>?
Ven

1

Haskell , 82 65 byte

g 0=""
g n=((take n$iterate(' ':)"\\\n")>>=('|':))++([0..n]>>"-")

Hãy thử trực tuyến! Sử dụng:

Prelude> g 4
"|\\\n| \\\n|  \\\n|   \\\n-----"

Hoặc độc đáo hơn:

Prelude> putStr $ g 4
|\
| \
|  \
|   \
-----

1

Bình thường, 23 18 byte

VQ++\|*dN\\)IQ*\-h

Bộ thử nghiệm có sẵn trực tuyến.
Nhờ Ven chơi golf 5 byte.

Giải trình

VQ++\|*dN\\)IQ*\-h
 Q           Q    Q  [Q is implicitly appended, initializes to eval(input)]
       d             [d initializes to ' ' (space)]
VQ         )         For N in range(0, eval(input)):
      *dN             Repeat space N times
   +\|                Prepend |
  +      \\           Append \
                      Implicitly print on new line
            IQ       If (input): [0 is falsy, all other valid inputs are truthy]
                 hQ   Increment input by 1
              *\-     Repeat - that many times
                      Implicitly print on new line

@Ven Cảm ơn! Bạn có thể cắt đoạn cuối |cho một byte bổ sung.
Mike Bufardeci

0

Javascript 101 (Chương trình đầy đủ), 94 (Đầu ra chức năng), 79 (Trả về) byte

Chương trình đầy đủ

Sẽ không chạy trong Chrome (vì quá trình không tồn tại rõ ràng)
Sẽ không chạy trong TIO (vì dường như không được phép nhắc nhở)

x=prompt();s='';for(i=0;i<x;i++)s+='|'+' '.repeat(i)+`\\
`;process.stdout.write(s+'-'.repeat(x&&x+1))

Chức năng in chính xác

x=>{s='';for(i=0;i<x;)s+='|'+' '.repeat(i++)+`\\
`;process.stdout.write(s+'-'.repeat(x&&x+1))}

Dùng thử trực tuyến

Hàm với chuỗi trả về

x=>{s='';for(i=0;i<x;)s+='|'+' '.repeat(i++)+`\\
`;return s+'-'.repeat(x&&x+1)}

Dùng thử trực tuyến

Lặp đi lặp lại các ký tự trong Javascript là ngu ngốc và do đó, việc ngăn chặn các dòng mới trên đầu ra


0

Python 2 , 82 byte

def f(i,c=0):
 if c<i:print'|'+' '*c+'\\';f(i,c+1)
 print'-'*((c+1,c)[c<1]);exit()

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

Lâu hơn mà các Python khác trả lời nhưng một hàm đệ quy chỉ khác nhau.

Tôi cảm thấy lãng phí khi sử dụng hai printcâu lệnh nhưng tôi không thể tìm ra cách nào ngắn hơn. Ngoài ra các exit()chất thải 7 để ngăn chặn nó in giảm số lượng -dưới tam giác.


Bạn có thể thực hiện -~c*(c>0)trên dòng cuối cùng để lưu 3 byte :)
Yytsi

Hoặc tốt hơn nữa : c and-~c.
Yytsi
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.