ความท้าทายนี้ใช้อักขระ '+'


28

งานของคุณ: ให้ตัวเลขnสร้างเครื่องหมาย '+' ที่มีnตัวละครอยู่ห่างจากศูนย์กลาง หากสิ่งนี้ทำให้เกิดความสับสนให้ตรวจสอบกรณีทดสอบ

วิธีการอินพุตมาตรฐาน: เอาต์พุตจะต้องเป็นสตริงหรือพิมพ์ ช่องโหว่มาตรฐานใช้

Input: 1
Output: +           ] 1 away from center `+`.

Input: 2
Output:  +          ] 2 away from center `+`.
        +++         ] 1 away from center `+`.  
         +

Input: 3
Output:   +         ] 3 away from center `+`.
          +
        +++++
          +
          +

นี่คือดังนั้นรหัสที่สั้นที่สุดชนะ!


ฉันคิดว่าอนุญาตให้เว้นวรรคต่อท้ายในแต่ละบรรทัดเพื่อให้ผลลัพธ์เป็นสี่เหลี่ยมใช่ไหม
Luis Mendo

@LuisMendo ใช่แล้วไม่เป็นไร
สหาย SparklePony

ที่เกี่ยวข้อง
Neil

3
"สร้างเครื่องหมาย '+' ที่มี n ตัวละครอยู่ห่างจากศูนย์กลาง" - ฉันไม่เข้าใจส่วนนี้ คุณหมายถึงศูนย์ใด บางสิ่งจะผิดปกติกับตัวเองได้อย่างไร กรุณาชี้แจง
Wossname

6
มันจะสับสนน้อยกว่ามากถ้าจุดศูนย์กลางอยู่ห่างจากตัวของมันเอง 0
หยุดทำร้ายโมนิก้า

คำตอบ:


45

ถ่าน 5 ไบต์

P+×+N

ลองออนไลน์!


22
แม้แต่ภาษานี้คืออะไร
DJMcMayhem

@DJMcMayhem โดยพื้นฐานแล้วคุณสามารถสร้างกราฟิกของ ASCII ได้ด้วยมัน มันมี builtins ที่มีประโยชน์มากมายสำหรับการแสดงรูปร่าง ASCII ชนิดต่าง ๆ (เช่นP+= cross)
fergusq

นั่นไม่ใช่อักขระแบบมัลติไบต์หรือไม่?
Petah

3
@Petah ถ่านใช้เพจรหัสที่กำหนดเอง
ASCII เท่านั้นเท่านั้น

@fergusq คุณอาจผสม Charcoal กับTurtlèd : P, Charcoal ไม่ใช่ภาษากราฟิกเต่า
ASCII-only


12

JavaScript (ES6), 67 65 63 60 59 ไบต์

x=>(v=(` `[r=`repeat`](--x)+`+
`)[r](x))+`+`[r](x*2)+`+
`+v;
  • 2 ไบต์ที่บันทึกไว้โดยการเปลี่ยนการเกิดขึ้นของทั้งสองx-1เป็นครั้งแรกด้วยและครั้งที่สองด้วย--xx
  • 2 ไบต์บันทึกขอบคุณที่Kritixi Lithosแทนที่ด้วย"\n"`[newline]`
  • ช่วยประหยัด 3 ไบต์ด้วยผู้ใช้2428118ในที่สุดก็ช่วยฉันหาวิธีตั้งชื่อแทนrepeatด้วยวิธีการลดขนาด (ด้วยการกล่าวถึงMarie ที่มีเกียรติสำหรับความพยายามของเธอเช่นกัน)
  • บันทึก 1 ไบต์ทางอ้อมต้องขอบคุณเฮอร์แมน

ลองมัน

f=
x=>(v=(` `[r=`repeat`](--x)+`+
`)[r](x))+`+`[r](x*2)+`+
`+v;
oninput=_=>o.innerText=f(+i.value)
o.innerText=f(i.value=3)
<input id=i min=1 type=number><pre id=o>


1
ผมไม่แน่ใจว่าทั้งหมด แต่ผมคิดว่าคุณสามารถแทนที่"\n"ด้วยสอง backticks และขึ้นบรรทัดใหม่ที่แท้จริงระหว่างพวกเขา
Kritixi Lithos

ขอบคุณ @KritixiLithos; ไม่รู้ว่าทำไมฉันไม่คิดอย่างนั้นเร็วกว่านี้
Shaggy

1
ดูเหมือนว่าคุณอาจบันทึกไบต์ด้วยการทำซ้ำนามแฝงเช่นa='repeat',v=.....และ` `[a]
มารี

ขอบคุณ @Marie; ฉันได้ลองใช้นามแฝงแล้วrepeat()แต่ความพยายามครั้งแรกของฉันออกมาใหญ่กว่า 2 หรือ 3 ไบต์ดังนั้นฉันจึงละทิ้งมัน! ฉันจะดูอีกครั้งเมื่อฉันกลับไปหน้าคอมพิวเตอร์
Shaggy

2
x=>(v=(` `[r='repeat'](--x)+`+<newline>`)[r](x))+`+`[r](x*2+1)+`<newline>`+v
2428118

9

MATL 11 ไบต์

tZv=&+g43*c

ลองออนไลน์!

คำอธิบายพร้อมตัวอย่าง

n = 3พิจารณา

t     % Implicitly input n. Duplicate
      % STACK: 3, 3
Zv    % Symmetric range
      % STACK: 3, [1 2 3 2 1]
=     % Equal, element-wise
      % STACK: [0 0 1 0 0]
&+    % All pair-wise additions. Gives a 2D array
      % STACK: [0 0 1 0 0;
                0 0 1 0 0;
                1 1 2 1 1;
                0 0 1 0 0;
                0 0 1 0 0]
g     % Logical: convert non-zero to one
      % STACK: [0 0 1 0 0;
                0 0 1 0 0;
                1 1 1 1 1;
                0 0 1 0 0;
                0 0 1 0 0]
43*   % Multiply by 43 (ASCII for '+'), element-wise
      % STACK: [ 0  0 43  0  0;
                 0  0 43  0  0;
                43 43 43 43 43;
                 0  0 43  0  0;
                 0  0 43  0  0]
c     % Convert to char. Char 0 is displayed as space. Implicitly display.
      % STACK: ['  +  ';
                '  +  ';
                '+++++';
                '  +  ';
                '  +  ']

8

ถ่าน , 16 13 ไบต์

Nα×+α←↑×+α‖O↘

ลองออนไลน์!

ใช้แนวทางที่แตกต่างจากคำตอบ Charcoal อื่น ๆ

คำอธิบาย

Nα                       # Take input and store it in variable α
×+α                       # α times write a +
←                         # Go left
↑×+α                      # α times write a + upwards

ตอนนี้มุมบนซ้ายเสร็จสมบูรณ์แล้วมันจะมีลักษณะดังนี้:

  +
  +
+++

‖O↘                      # Reflect-overlap it in a SE direction

ขั้นตอนสุดท้ายคือกุญแจสำคัญในโปรแกรมนี้จะใช้ส่วนบนซ้ายของเครื่องหมายบวกเพื่อสร้างส่วนที่เหลือของเครื่องหมายบวกโดยสะท้อนให้เห็นในทิศทางตะวันออกเฉียงใต้ (ขวาและล่าง)


Charcoal มีหน้ารหัสของตัวเองหรือไม่? อักขระเหล่านั้นหลายตัวมีหลายไบต์ใน UTF-8
TRiG


8

ภาษาการเขียนโปรแกรมของเช็คสเปียร์ , 749 743 ไบต์

N.Puck,.Page,.Ford,.Ajax,.Act I:.Scene I:.[Enter Puck and Ford]Puck:Listen to thy heart!Ford:You is the difference between a cat and I.Scene V:.[Exeunt][Enter Page and Ajax]Ajax:You is the difference between a cat and Ford.Scene X:.Page:You is the product of Puck and I.Is you as big as zero?If so,you is the sum of the sum of the sum of a big big big big big cat and a big big big cat and a big cat and a cat.If not,you big big big big big cat.Speak thy mind!Ajax:You is the sum of you and a cat.Is you as big as Ford?If not,let us return to Scene X.Page:You is the sum of a big big big cat and a big cat.Speak thy mind![Exit Page][Enter Puck]Ajax:You is the sum of you and a cat.Is you as big as Ford?If not,let us return to Scene V.[Exeunt]

ลองออนไลน์!

แก้ไข:ทำให้คำตอบนั้นเข้ากันได้กับการใช้งาน SPL อย่างเป็นทางการ - ฉันไม่สามารถใช้งานได้ก่อน

เล่นกอล์ฟขนาด 6 ไบต์เนื่องจากหมายเลขฉากไม่จำเป็นต้องต่อเนื่องกัน

การอธิบาย :

SPL เป็น esolang ที่ออกแบบมาให้ดูเหมือนละครของเช็คสเปียร์ คำนามเชิงบวกมีค่าเป็น 1 (ใช้แมวนี่) และคำนามเชิงลบมีค่าเป็น -1 (ไม่มีใครใช้ แต่หมูเป็นหนึ่งในนั้น) คำคุณศัพท์แก้ไขค่าคงที่โดยการคูณด้วย 2

N.

ทุกอย่างจนกระทั่งจุดแรกเป็นชื่อและไม่สำคัญ

Puck,.                           row counter
Page,.                           column counter
Ford,.                           input
Ajax,.                           temp

ตัวละครเป็นตัวแปรจำนวนเต็มแต่ละตัวมีสแต็ก แต่ฉันไม่จำเป็นต้องใช้คุณสมบัตินั้น

Act I:.
Scene I:.

ฉากและฉากใช้เป็นป้ายข้ามทาง

[Enter Puck and Ford]

มันจะมีประโยชน์ก็ต่อเมื่อตัวละครสองตัวอยู่บนเวทีพร้อมกัน

Puck:Listen to thy heart!

อ่านตัวเลขและทำให้ฟอร์ดจำได้

Ford:You is the difference between a cat and I.

ดังที่คุณเห็น Engrish นั้นถูกต้องใน SPL สิ่งนี้ทำให้ค่าของ Puck "แตกต่างระหว่างแมวกับฉัน" แต่มันหมายความว่าอะไร? เป็นรูปธรรมในเชิงบวกจึงเป็นcatPuck = 1 - Ford

Scene II:.
[Exeunt]

Exeunt เป็นเพียง "ทางออก" และไม่มีข้อโต้แย้งหมายความว่าทุกคนบนเวทีออก

[Enter Page and Ajax]
Ajax:You is the difference between a cat and Ford.

มันเป็นเช่นกันPage = 1 - Fordแต่มันถูกพูดโดยนักแสดงคนอื่นดังนั้นIมันคงผิด Puckเนื่องจากเป็นห่วงฉันไม่สามารถเพียงแค่คัดลอกค่าของ

Scene III:.
Page:You is the product of Puck and I.

ค่อนข้างตรงไปตรงมาตอนนี้ Ajax = Puck * Page.

Is you as big as zero?

"as [adj] as" เป็น==โอเปอเรเตอร์

If so,you is the sum of the sum of the sum of a big big big big big cat and a big big big cat and a big cat and a cat.

หาก Ajax == 0 ... "cat" คือ 1 "big cat" คือ 2 "big big cat" คือ 4 เป็นต้น หลังจากแทนที่ค่าคงที่แบบง่ายเราจะได้ "ผลรวมของผลรวมของผลรวมของ 32 และ 8 และ 2 และ 1" -> "ผลรวมของผลรวมของ 40 และ 2 และ 1" -> "ผลรวมของ 42 และ 1" -> "43" ซึ่งเป็น ASCII สำหรับ +

If not,you fat fat fat fat fat cat.

ไม่อย่างนั้นมันก็แค่ "ไขมันอ้วนอ้วนอ้วนแมวอ้วน" ดังนั้นอาแจ็กซ์จึงได้ค่า 32 ซึ่งเป็น ASCII สำหรับพื้นที่

Speak thy mind!

นี่คือคำสั่งสำหรับการแสดงผลอักขระ

Ajax:
You sum you and cat.Is you as big as Ford?If not,let us return to Scene III.

นี่คือโครงสร้างวนรอบ "คุณสรุปคุณและแมว" if(Page != Ford) goto Scene IIIเพิ่มขึ้นทีละหน้าและ ส่วนที่เหลือของโปรแกรมใช้ส่วนประกอบเดียวกันดังนั้นนี่คือรุ่น pseudocode ที่อ่านได้มากขึ้น:

Scene1:
    อินพุต = [หมายเลขอินพุต];
    แถว = 0 - อินพุต + 1;
Scene2:
    col = 0 - อินพุต + 1;
Scene3:
    temp = row * col;
    if (temp == 0) {
        temp = '+';
    }อื่น{
        temp = '';
    }

    putchar (ชั่วคราว);
    หน้า = หน้า + 1;
    if (Page! = Ford) ไปที่ Scene3;
    อาแจ็กซ์ = 10;
    putchar (อาแจ็กซ์);
    Puck = Puck + 1;
    ถ้า (Puck! = Ford) ไปที่ Scene2;

" If not,let us return to Scene III." -1; พักกำแพงที่สี่: P
จา


6

Mathematica ขนาด 39 ไบต์

Print@@@(CrossMatrix[#-1]"+"/. 0->" ")&

CrossMatrixเป็นในตัวที่สร้างเมทริกซ์ของรูปร่างที่ต้องการด้วย1s แทน+s และ0s แทนช่องว่าง ถ้าเราคูณเมทริกซ์นั้นด้วย"+"นั่นจะแทนที่1s ด้วย+s ในขณะที่ปล่อย0s ไม่เปลี่ยนแปลง (ชัด ๆ ว่า ... 0*x = 0และ1*x = xใช่ไหม?) /. 0->" "จากนั้นเราก็เปลี่ยนศูนย์ด้วยตนเองที่มีช่องว่างการใช้ Print@@@(...)สุดท้ายเราพิมพ์แต่ละบรรทัดของเมทริกซ์ที่มี


1
ไม่ทราบว่าPrintสามารถใช้เช่นนั้นได้
ngenisis

6

C, 69 ไบต์

ไม่น่าสนใจ ... ลูปสแควร์พิมพ์อักขระที่เหมาะสมออกมา

r,c;f(n){for(r=-n;++r<n;puts(""))for(c=-n;++c<n;putchar(r*c?32:43));}


6

รุ่น GNU , 104 99 ไบต์

-5 ขอบคุณseshoumara
รวม +1 สำหรับ-r

s/1//;h;:;s/(.*)1/ \12/;t;s/( *2)2(2*)/\1\n\1\2/
t;G;s/1+/&&1/;s/(.*)(\n1*)/&\n\1/;/1/!c+
y/12/++/

ใช้อินพุตเป็นunary

ลองออนไลน์!

s/1//                    # Subtract 1 from input
h                        # Hold onto input
:                        # Start loop
s/(.*)1/ \12/            #   Remove a 1, prepend a space, and append a 2
t                        # Loop until all 1s are 2s
                         # Start Loop (uses the previous label)
s/( *2)2(2*)/\1\n\1\2/   #   Shift all but the first 2 from the last line to a new line 
                         #   E.g.  "  2"      "  2"
                         #         "  222" -> "  2"
                         #                    "  22"
t                        # Loop until all 2s are on their own line
G                        # Append a newline and input
s/1+/&&1/                # Double the number of 1s and append an extra
s/(.*)(\n1*)/&\n\1/      # Copy all of the lines with 2s to the end
/1/!c+                   # If there aren't any 1s print a '+'
y/12/++/                 # Convert all 1s and 2s to +s

+1 คุณสามารถบันทึกได้ 5 ไบต์โดยใช้s/( *2)2(2*)/\1\n\1\2/และs/(.*)(\n1*)/&\n\1/ตามที่แสดงไว้ที่นี่รวมคะแนน 99
seshoumara

5

Lua 113 , 90 ไบต์

r,w,p=string.rep,io.read(),io.write;s=r(' ',w-1)p(r(s..'+'..'\n',w-1))p(r('+',w*2-1)..'\n')p(r(s..'+'..'\n',w-1))

r,w=string.rep,io.read()d=w*2-1;for a=1,d do print(a~=w and r(' ',w-1)..'+'or r('+',d))end


5

R, 54 ไบต์

เลิกใช้งานไป 7 ไบต์ด้วย @Jarko Dubbeldam:

function(n){a=matrix("",y<-n*2-1,y);a[n,]=a[,n]="x";a}

คำตอบก่อนหน้า:

f=function(n){a=matrix("",n*2-1,n*2-1);a[n,]="x";a[,n]="x";a}

1
คุณไม่ต้องตั้งชื่อฟังก์ชั่นดังนั้นfunction(n){a=matrix("",n*2-1,n*2-1);a[n,]="x";a[,n]="x";a}จะเป็น 59 ไบต์!
JAD

1
นอกจากนี้คุณสามารถบันทึกไบต์โดยใช้matrix("",y<-n*2-1,y)
JAD

1
a[n,]=a[,n]="x"ใช้งานได้เช่นกันช่วยประหยัดไบต์ได้อีก
JAD

คุณสามารถบันทึกอีก 4 ไบต์โดยใช้scan()และทำให้เป็นโปรแกรมแทนที่จะเป็นฟังก์ชั่น:n=scan();a=matrix("",y<-n*2-1,y);a[n,]=a[,n]="+";a
rturnbull

4

PowerShellขนาด 48 ไบต์

param($n)($x=,(" "*--$n+"+")*$n);'+'*(1+2*$n);$x

ลองออนไลน์!

$nจะเข้า เริ่มต้นโดยการสร้างสายอักขระที่เป็นช่องว่างที่มีต่อกัน--$n +ที่ถูกแปลงเป็นอาร์เรย์โดยใช้เครื่องหมายจุลภาค (ลดลงใหม่)$nครั้งอาร์เรย์นั้นถูกเก็บไว้ใน$xและห่อหุ้มใน parens เพื่อวางสำเนาบนไพพ์ไลน์

จากนั้นเราจะทำส่วนตรงกลางซึ่งเป็น+สตริงคูณจำนวนครั้งที่เหมาะสม ที่เหลืออยู่ในท่อ ในที่สุดเราก็วาง$xท่ออีกครั้ง

สิ่งเหล่านี้จะถูกทิ้งไว้บนไพพ์ไลน์เมื่อเสร็จสิ้นโปรแกรมและนัยWrite-Outputแทรกบรรทัดใหม่ระหว่างองค์ประกอบ


4

Perl 5 , 45 ไบต์

44 รหัสไบต์ + -pธง

$_=join"+
",@%=($"x--$_)x$_,"+"x($_*2),@%,""

ลองออนไลน์!


บางวิธีที่คล้ายกัน (แต่ยังแตกต่างกัน) วิธีการ:

48 ไบต์ (47+ -p):

$_=join"+"x($_*2-1).$/,(~~($"x--$_."+\n")x$_)x2

50 ไบต์ (49+ -n):

$,="+"x($_*2-1).$/;print+(~~($"x--$_."+\n")x$_)x2


3

CJam , 23 ไบต์

ri_(S*'++a\2*(*_z..e>N*

ลองออนไลน์!

คำอธิบาย

สิ่งนี้ให้ความรู้สึกที่ไม่ดีนัก แต่ความคิดคือการวางกริดทั้งสองต่อไปนี้:

  +
  +
  +
  +
  +



+++++

ซึ่งให้ผลลัพธ์ที่ต้องการ

ri    e# Read input and convert to integer N.
_(    e# Duplicate and decrement.
S*    e# Get a string of N-1 spaces (indentation of the vertical bar).
'++   e# Append a + (the vertical bar).
a     e# Wrap the line in an array.
\2*(  e# Swap with the other copy of N and compute 2N-1.
*     e# Repeat the line that many times.
_z    e# Duplicate the grid and transpose it.
..e>  e# Pairwise maximum between the two grids. This superimposes them.
N*    e# Join with linefeeds.

3

CJam, 17

ri(S*_]'+*_ffe>N*

ลองออนไลน์

คำอธิบาย:

ri(      read n, convert to int and decrement
S*       make a string of n-1 spaces
_]       duplicate it and put the 2 strings in an array
'+*_     join the strings with a '+' and duplicate the result
ffe>     for each pair of characters from the 2 (identical) strings,
          get the larger character (results in a matrix)
N*       join the rows with newlines


3

05AB1E , 15 14 12 ไบต์

F'+}¹·<×)û.c

ลองออนไลน์!

-2 ต้องขอบคุณ Emigna


1
คุณสามารถทำF'+}¹·<×)û.cเพื่อ 12.
Emigna

ลิงก์ลองออนไลน์ของคุณไม่ดี - จะไม่เชื่อมโยงกับการแก้ไขโพสต์ปัจจุบันดังนั้นจึงแสดง "ผลลัพธ์ไม่ดี" ที่ไม่ตรงกับกรณีทดสอบด้านบน
โธมัสวอร์ด

@ThomasWard: จับได้ดี! ฉันแก้ไขลิงค์แล้ว
Emigna


2

JS (ES6), 88 74 73 ไบต์

x=>(x--,y=y=>(" ".repeat(x)+`+
`).repeat(x),y``+"+".repeat(x+x+1)+"\n"+y``)

อาจจะสามารถเล่นกอล์ฟได้มากขึ้น

Snippetify(x=>(x--,y=y=>(" ".repeat(x)+`+
`).repeat(x),y``+"+".repeat(x+x+1)+"\n"+y``))
<script src="https://programmer5000.com/snippetify.min.js"></script>
<input type = "number">
<pre data-output></pre>


1
ผมไม่แน่ใจว่าทั้งหมด แต่ผมคิดว่าคุณสามารถแทนที่"\n"ด้วยสอง backticks และขึ้นบรรทัดใหม่ที่แท้จริงระหว่างพวกเขา
Kritixi Lithos

แค่เห็นทางออกนี้แล้วคุณก็เอาชนะฉันได้ในเวลาไม่กี่นาที มารยาทในที่นี้เกี่ยวกับโซลูชันที่คล้ายกันในภาษาเดียวกันที่โพสต์ภายในช่วงเวลาสั้น ๆ คืออะไร
Shaggy

2

JavaScript (ES6), 60 ไบต์

f=
n=>(r=([s,t])=>(s=s.repeat(n-1))+t+s+`
`)([r(` +`),r(`++`)])
<input type=number min=1 oninput=o.textContent=f(this.value)><pre id=o>

แสดงบรรทัดใหม่ต่อท้ายสองบรรทัด สูตรทางเลือกเช่นกัน 60 ไบต์:

n=>(r=a=>(s=a[0].repeat(n-1))+a[1]+s+`
`)([r(` +`),r(`++`)])

2

PowerShell, 48

ดูเหมือนจะไม่สั้นกว่านั้น (และวิธีการเดียวกันกับโซลูชันอื่น ๆ ):

($a=,(' '*($n="$args"-1)+'+')*$n)
'+'+'++'*$n
$a

หรือ

($a=(' '*($n="$args"-1)+'+
')*$n)+'++'*$n+"+
$a"



2

PHP, 68 ไบต์

for(;$i<$c=-1+2*$m=$argn;)echo"\n".str_pad("+",$c," +"[$m==++$i],2);

83 ไบต์

for(;$i<($c=($n=$argn)*2-1)**2;)echo$i%$c?"":"\n".!++$k," +"[$k==$n|$i++%$c==$n-1];

1
คุณสามารถบันทึกไม่กี่ไบต์โดยใช้$m=$argnและเพิ่มล่วงหน้า$iแทนที่จะโพสต์เพิ่มขึ้น นอกจากนี้คุณยังสามารถบันทึก byte โดยการย้ายการ$mมอบหมาย ot สิ้นสุดและวางวงเล็บ
user59178

@ user59178 ฉันไม่สามารถเข้าใจสิ่งที่คุณหมายถึงอย่างแน่นอน
JörgHülsermann

1
for(;$i<$c=-1+2*$m=$argn;)echo"\n".str_pad("+",$c," +"[$m==++$i],2);
user59178

while(++$y<2*$n=$argn)echo"\n",str_pad("+",$n*2-1," +"[$y==$n],2);66 bytes (และประหยัดอีกหนึ่งด้วยการระบาดทางกายภาพ)
ติตัส


2

Brain-Flak , 216 + 1 = 217 ไบต์

+1 ไบต์จากการ-Aตั้งค่าสถานะ

([{}]())(()()){<>(((((()()()()()){})){}()){}())<>(({}[()])<({}<(({})){({}()<(({}<<>(({}<(({})<>)>)<>)<>>)<{({}()<(((((()()){}){}){}){})>)}{}>)>)}{}>){(<{}(({}<<>({}<({}<>)>)>)<(({}){}){({}()<(({}))>)}{}>)>)}{}>)}{}{}

ลองออนไลน์!

คำอธิบายที่จะมา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.