Sợi xoắn ốc


37

Mục tiêu của bạn là tạo ra một vòng xoắn Fibonacci với các số.

Mẫu vật

Ví dụ đầu vào / đầu ra

1 -> 1

2 -> 1 1

3 -> 1 1
     2 2
     2 2

6 -> 8 8 8 8 8 8 8 8 5 5 5 5 5
     8 8 8 8 8 8 8 8 5 5 5 5 5
     8 8 8 8 8 8 8 8 5 5 5 5 5
     8 8 8 8 8 8 8 8 5 5 5 5 5
     8 8 8 8 8 8 8 8 5 5 5 5 5
     8 8 8 8 8 8 8 8 1 1 3 3 3
     8 8 8 8 8 8 8 8 2 2 3 3 3
     8 8 8 8 8 8 8 8 2 2 3 3 3

Đầu vào của 9

Đầu vào Có thể lấy đầu vào thông qua STDIN hoặc đối số hàm. Nó sẽ là một số duy nhất

Đầu ra Đầu ra có thể từ STDOUT hoặc giá trị trả về của hàm. Nó phải là một chuỗi đơn.

Không được phép thêm khoảng trắng ở cuối dòng. Đầu ra có thể chứa các chữ số, nguồn cấp dữ liệu (dòng mới) và dấu cách.

Định hướng không quan trọng, điều này có nghĩa là xoay và phản xạ. Miễn là nó tuân theo mô hình xoắn ốc Fibonacci hợp lệ.

Các số có số lượng chữ số khác nhau (ví dụ 1 và 13) phải được căn phải với nhau. Một khoảng trắng có thể cần được thêm vào đầu dòng để mọi thứ có thể xếp hàng.

1   1                          1   1
100 100  should actually be  100 100

Bạn có thể xem một ví dụ ở đây


Đây là để mã ngắn nhất tính theo byte thắng!


4
Thử thách liên quan (và một chiếc đồng hồ rất tuyệt)
Sp3000 18/07/15

Numbers with different amounts of digits (e.g. 1 and 13) should be aligned to the left side of the digit a space may need to be added to the very beginning of a line so everything can line up.Điều này nghe có vẻ rõ ràng hơn như hai câu.
trichoplax

Nó nhìn từ các ví dụ mà bạn muốn chữ số ngoài cùng bên phải của mỗi số được căn chỉnh, nhưng "căn lề bên trái của chữ số" nghe có vẻ ngược lại.
trichoplax

Bạn có thể làm rõ "khoảng trắng xung quanh không được phép" không? Cụ thể - là khoảng trắng hàng đầu hoặc dấu trên dòng có thể chấp nhận?
MtnViewMark

Matlab in đầu ra ra thiết bị xuất chuẩn theo mặc định. Có thể chấp nhận đầu ra kiểu số (trái ngược với đầu ra kiểu chuỗi) được in tự động ra thiết bị xuất chuẩn không?
Luis Mendo

Câu trả lời:


15

APL, 23

{a,⍴⍨2⍴⊃⍴a←⌽⍉⍵}⍣(⎕-1)⍪1

Giải trình:

⍪1               this creates a 1x1 matrix containing just 1
{..}⍣(⎕-1)     the power operator (⍣) repeats the function {} user input - 1 times
a,⍴⍨2⍴⊃⍴a←⌽⍉⍵   the function being iterated rotates the matrix and appends the next matrix to it.

Dùng thử trên tryapl.org


1
Nếu bạn tìm kiếm ở đây, nhiều người đã nghi ngờ trước đây. Dưới đây là ví dụ câu trả lời của @Tobia: * Dyalog APL hỗ trợ bộ ký tự kế thừa có các ký hiệu APL được ánh xạ tới các giá trị 128 byte trên. Do đó, một chương trình APL chỉ sử dụng các ký tự ASCII và các ký hiệu APL có thể được coi là byte == chars.
Moris Zucca

Được rồi, tôi sẽ rút lại nhận xét của mình.
gar

1
@MorisZucca Lưu ý rằng một số ký tự (như hoặc ) bị thiếu trong bộ ký tự đó và không thể được sử dụng khi bạn muốn gợi lên quy tắc đó.
FUZxxl

1
Đúng, "khóa" và "xếp hạng" là các triển khai mới hơn và thực tế chỉ tồn tại trong phiên bản Unicode của trình thông dịch Dyalog mà tôi sử dụng. Phiên bản Classic phải sử dụng tương đương ⎕command. Điều tương tự cũng áp dụng cho (OPT). Vì vậy, tôi thường nghĩ rằng nếu tôi có thể viết nó trong phiên bản Dyalog Classic, thì an toàn khi nói rằng đó là 1 byte mỗi char. Sửa lỗi cho tôi nếu tôi sai. Và cám ơn các bình luận.
Moris Zucca

8

Matlab, 84 byte

Một chức năng được sử dụng. Đầu ra là trong thiết bị xuất chuẩn.

function f(N)
s=0;t=1;y=1;for n=2:N
u=s+t;s=t;t=u;y=[rot90(y) t*ones(t)];end;disp(y)

Ví dụ:

>> f(1)
     1
>> f(2)
     1     1
>> f(3)
     1     2     2
     1     2     2
>> f(6)
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     3     3     3     1     1     8     8     8     8     8     8     8     8
     3     3     3     2     2     8     8     8     8     8     8     8     8
     3     3     3     2     2     8     8     8     8     8     8     8     8
>> f(7)
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     8     8     8     8     8     8     8     8    13    13    13    13    13    13    13    13    13    13    13    13    13
     5     5     5     5     5     1     2     2    13    13    13    13    13    13    13    13    13    13    13    13    13
     5     5     5     5     5     1     2     2    13    13    13    13    13    13    13    13    13    13    13    13    13
     5     5     5     5     5     3     3     3    13    13    13    13    13    13    13    13    13    13    13    13    13
     5     5     5     5     5     3     3     3    13    13    13    13    13    13    13    13    13    13    13    13    13
     5     5     5     5     5     3     3     3    13    13    13    13    13    13    13    13    13    13    13    13    13

Matlab, 78 byte

function y=f(N)
s=0;t=1;y=1;for n=2:N
u=s+t;s=t;t=u;y=[rot90(y) t*ones(t)];end

Tương tự như trên ngoại trừ tính năng của Matlab được khai thác, cụ thể là, nó tự động hiển thị đầu ra chức năng (dưới dạng chuỗi) trong thiết bị xuất chuẩn. Điều này tránh việc chuyển đổi thành chuỗi theo cách tiếp cận trên.

f(6)
ans =
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     5     5     5     5     5     8     8     8     8     8     8     8     8
     3     3     3     1     1     8     8     8     8     8     8     8     8
     3     3     3     2     2     8     8     8     8     8     8     8     8
     3     3     3     2     2     8     8     8     8     8     8     8     8

rất vui khi thấy một số giải pháp Matlab :-)
Hoki

@Hoki Cảm ơn! :-)
Luis Mendo

7

Python 2, 121 byte

a,b=0,1;L=[]
exec"a,b=b,a+b;L=zip(*L[::-1])+[[a]*a]*a;"*input()
for r in L:print" ".join("%*d"%(len(str(a)),x)for x in r)

Các quy tắc thoải mái về xoay vòng làm cho điều này đơn giản hơn rất nhiều.

Tôi chưa sử dụng backticks ở str(a)đây vì tôi không chắc liệu chúng ta có cho phép nhiều không gian hàng đầu hơn mức cần thiết hay không, nếu chúng ta đạt được lâu dài. Mặc dù, ngay cả khi chúng ta, sử dụng achính nó sẽ ngắn hơn.


7

Ruby, 243 242 236 233 222 170 130 byte

s,l,r=0,1,[]
gets.to_i.times{s+=l
l=s-l
s.times{r<<[s]*s}
r=r.transpose.reverse}
r.map{|w|puts w.map{|c|"%#{s.to_s.size}s"%c}*" "}

1
Chơi golf tốt Bạn có thể lưu một số ký tự trên dòng 4, bằng cách chuyển đổi các t==valueđiều kiện thành t>value. Ví dụ:(t=x%4)>2?s.times{r<<[s]*s}:t>1?s.times{r.map!{|w|w.unshift s}}:t>0?s.times{r.unshift [s]*s}:r.map!{|w|w+=[s]*s}}
Cristian Lupascu

6

Con trăn - 189 179 174

n=int(input())
f=[1,1]
while len(f)<n:f+=[f[-1]+f[-2]]
o=[[]]
for i in f:o=(list(zip(*o)))[::-1]+[[i]*i]*i
for x in o:print(' '.join(str(y).rjust(len(str(f[-1])))for y in x))

6

J, 36 byte

1&(($~,~)@(1{$@]),.|:@|.@])&(,.1)@<:

Sử dụng:

   (1&(($~,~)@(1{$@]),.|:@|.@])&(,.1)@<:) 6
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 1 1 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3

Phương pháp:

Hàm xoay hình vuông hiện tại và thêm hình vuông mới vào hiện tại một input-1lần. Kích thước hình vuông và giá trị phần tử được thu thập từ kích thước của hình chữ nhật trước đó.

Mã giải thích:

1&(           loop
    ($~,~)      new square with size and elements
    @(1{$@])    with the size of the second dimension of the current rectangle
    ,.          attached to
    |:@|.@]     rotated current rectangle
)&(,.1)       starting the loop with matrix 1
@<:           looping input-1 times

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


6

Haskell, 183 176 171 163 byte

import Data.List
s t=map((t>>[l t])++)t
e 1=[[1]];e n=s.reverse.transpose$e$n-1
f=g.e
g m=unlines$map(>>=((show$l m)#).show)m
a#b|l a<l b=b;a#b=a#(' ':b)
l=length

Hàm này flấy một số và trả về một chuỗi:

λ: putStr $ f 8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  5  5  5  5  5  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  5  5  5  5  5  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  5  5  5  5  5  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  5  5  5  5  5  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  5  5  5  5  5  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  3  3  3  1  1  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  3  3  3  2  2  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  3  3  3  2  2  8  8  8  8  8  8  8  8
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13
 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 13 13 13 13 13 13 13 13 13 13 13 13 13

5

Bình thường, 34 byte

jbmsm.[hl`lhZ`k\ d=Zu+_CGmmlGGGQ]]

Đáng ngạc nhiên, hơn một nửa mã là in / đệm, thay vì tạo ma trận.

Việc tạo ra ma trận thực sự đơn giản, tuy nhiên, nó bao gồm một chuyển vị và đảo ngược và thêm N dòng chứa N bản sao của N, trong đó N là số dòng hiện tại.

Ví dụ đầu ra cho 7:

  5  5  5  5  5  8  8  8  8  8  8  8  8
  5  5  5  5  5  8  8  8  8  8  8  8  8
  5  5  5  5  5  8  8  8  8  8  8  8  8
  5  5  5  5  5  8  8  8  8  8  8  8  8
  5  5  5  5  5  8  8  8  8  8  8  8  8
  3  3  3  1  1  8  8  8  8  8  8  8  8
  3  3  3  2  2  8  8  8  8  8  8  8  8
  3  3  3  2  2  8  8  8  8  8  8  8  8
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13
 13 13 13 13 13 13 13 13 13 13 13 13 13

4

Perl, 289 277 257 byte

@f=(0,1);push@f,$f[-1]+$f[-2]while(@f<=$ARGV[0]);$d=1+length$f[-1];shift@f;map{$v=$f[$_];$t=sprintf("%${d}d",$v)x$v;$_%4||map{unshift@s,$t}1..$v;$_%4==3&&map{$_.=$t}@s;$_%4==2&&map{push@s,$t}1..$v;$_%4==1&&map{$_=$t.$_}@s;}0..$#f;$\=$/;for(@s){s/^ //;print}

4

K, 48 byte

{{`0:1_',/'(1+#$|//x)$x}(x-1){+|x,\:t#t:#x}/,,1}

Và trong hành động:

  {{`0:1_',/'(1+#$|//x)$x}(x-1){+|x,\:t#t:#x}/,,1}7
 8  8  8  8  8  8  8  8  5  5  5  5  5
 8  8  8  8  8  8  8  8  5  5  5  5  5
 8  8  8  8  8  8  8  8  5  5  5  5  5
 8  8  8  8  8  8  8  8  5  5  5  5  5
 8  8  8  8  8  8  8  8  5  5  5  5  5
 8  8  8  8  8  8  8  8  1  1  3  3  3
 8  8  8  8  8  8  8  8  2  2  3  3  3
 8  8  8  8  8  8  8  8  2  2  3  3  3
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13

Có thể vẫn còn một số cơ hội tốt để chơi golf.

Chương trình về cơ bản bao gồm hai phần - tạo ra ma trận nối và định dạng nó cho đầu ra. Cái trước khá đơn giản:

  {(x-1){+|x,\:t#t:#x}/,,1}5
(3 3 3 2 2
 3 3 3 2 2
 3 3 3 1 1
 5 5 5 5 5
 5 5 5 5 5
 5 5 5 5 5
 5 5 5 5 5
 5 5 5 5 5)

Bắt đầu với ma trận 1x1 chứa 1, xây dựng vectơ độ dài T của T trong đó T là chiều dài của ma trận bắt đầu trên thứ nguyên đầu tiên ( t#t:#x) và gắn nó vào mỗi hàng của ma trận gốc ( x,\:). Đảo ngược và hoán vị kết quả ( +|) xoay nó 90 độ. Chúng tôi làm điều này N-1 lần.

Định dạng khá khó hiểu, bởi vì cách tiếp cận tự nhiên của K để in ma trận sẽ không căn chỉnh các cột số theo cách chúng ta cần:

{`0:1_',/'(1+#$|//x)$x}

Ý tưởng cơ bản là lấy phần tử tối đa của ma trận ( |//x), chuyển đổi nó thành một chuỗi (unary $), lấy độ dài của nó cộng với một ( 1+#) và sau đó định dạng các phần tử của ma trận thành các chuỗi được căn phải theo kích thước đó. Sau đó để dọn dẹp, nối các chuỗi đó ( ,/') và thả khoảng trống hàng đầu ( 1_').


4

CJam, 48 byte

1saali({z{W%}%_0=,__sa*a*+}*_W=W=,):U;{USe[}f%N*

Dùng thử trực tuyến

Phần cốt lõi của việc tạo ra mô hình có vẻ hợp lý đơn giản. Xoay hình chữ nhật được tạo cho đến nay và thêm một hình vuông các giá trị ở dưới cùng.

Mã cho phần đệm kết quả trông khủng khiếp, mặc dù. Tôi đã thử một loạt các kết hợp f:toán tử để áp dụng phần đệm vào danh sách lồng nhau, nhưng không có gì hoạt động. Nếu bất cứ ai có đề xuất tốt hơn, họ được chào đón nhất.

1s    First value. Using string for values so that we can pad them in the end.
aa    Wrap it twice. Data on stack will be a list of lists (list of lines).
li    Get input.
(     Decrement, since we seeded the list at n=1.
{     Loop over n.
  z     Transpose...
  {W%}% ... and reverse all lines, resulting in a 90 degree rotation.
  _0=,  Get length of line, which is the size of square we need to add.
  __    Create two copies of size.
  sa    Convert one size to string, and wrap it in array.
  *     Replicate it size times. This is one line.
  a     Wrap the line...
  *     ... and replicate it size times. The square of new values is done.
  +     Add the list of lines to the previous list of lines.
}*    End of loop over n.
_W=W= Get last value produced.
,)    Take its length, and increment it. This is the output field width.
:U;   Store the field width in variable, and pop it. This is ugly.
{     Start of block applied to all values.
  U     Field width stored in variable.
  S     Space.
  e[    Pad left.
}f%   End of block applied to all values.
N*    Join lines with newline.

Đảo ngược tất cả các dòng có thể được thực hiện với Wf%. Ngoài ra, bạn sẽ có thể làm một cái gì đó như {Se[}ff%hơn là :U;{USe[}f%cho phần đệm? (Điều đó có thể không hoạt động như hiện tại. Tôi không thể nghĩ về nó ngay bây giờ.)
Esolanging Fruit

2

Bình thường, 29 byte

Vu+C_GmmlGGGQ\]Yjdm.\[l`lN`d\ N

Trình diễn.

Nếu phần đệm là miễn phí / ẩn, như trong APL hoặc đầu ra ma trận được cho phép, thì đây sẽ là 14 byte:

u+C_GmmlGGGQ]Y

2

Ruby, 129 byte

Tôi đã chỉnh sửa một câu trả lời ruby ​​khác, nhưng thay đổi gần đây nhất của tôi không được chấp nhận hoặc một cái gì đó, vì vậy đây là:

s,r=0,[[1]]
gets.to_i.times{s+=r[0][0]
r=(r+[[s]*s]*s).transpose.reverse}
r.map{|w|puts w.map{|c|"%#{r[0][s].to_s.size}s"%c}*' '}

1
Chào mừng đến với PPCG! Cải tiến chơi gôn thường bị từ chối ở đây (nếu các đề xuất khác của bạn được chấp nhận phải là một sự giám sát), bởi vì chúng được cho là được đăng trong các bình luận để tác giả xem xét. Xem bài đăng meta này cho lý do đằng sau chính sách này.
Martin Ender

Cảm ơn thông tin, có ý nghĩa. Nhận xét là những gì tôi đã làm ban đầu nhưng tôi không có đủ điểm danh tiếng để bình luận, nhưng sẽ làm trong tương lai. Chúc bạn chơi golf vui vẻ!
dùng2251284

1

ES6, 248 byte

n=>(f=(n,o=n)=>Array(n).fill(o),g=n=>n<3?[f(n,1)]:(a=g(n-2)).reverse().concat(f(l=a[0].length,f(l))).map((e,i,a)=>f(a.length).concat(e.reverse())),a=g(n),s=' '.repeat(l=` ${a[0][0]}`.length),a.map(a=>a.map((e,i)=>(s+e).slice(!i-1)).join``).join`\n`)

Trường hợp \nđại diện cho một nhân vật dòng chữ mới.

Khó chịu định dạng chiếm một đoạn lớn của mã.

flà một hàm trợ giúp tạo ra một mảng đầy. Nó được sử dụng chủ yếu để tạo ra các ô vuông đầy nhưng cũng tăng gấp đôi để tạo ra các trường hợp cơ bản cho đệ quy.

glà người lẩm cẩm chính. Nó đệ quy tạo ra giải pháp cuối cùng nhưng một, xoay nó 180 độ, sau đó nối thêm hai hình vuông tiếp theo.

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.