ข้อความแบบเต็มความกว้าง


44

ข้อความแบบเต็มความกว้างคือข้อความที่มีช่องว่างหลังตัวละครทุกตัวรวมถึงตัวสุดท้าย ตัวอย่างเช่นประโยคแรกของคำถามนี้กลายเป็น:

F u l l   w i d t h   t e x t   i s   t e x t   t h a t   h a s   a   s p a c e   a f t e r   e v e r y   c h a r a c t e r ,   i n c l u d i n g   t h e   l a s t   o n e . 

เขียนโปรแกรมที่รับบรรทัดเป็นข้อความจากอินพุตมาตรฐานและส่งออกเป็นข้อความแบบเต็มความกว้างถึงมาตรฐานออก

ลีดเดอร์บอร์ด


6
โดยปกติคุณควรอนุญาตฟังก์ชั่นด้วยหรือไม่รวมหลายภาษา (เช่น JavaScript)
wizzwizz4

8
เรามีค่าเริ่มต้นเล็กน้อยสำหรับ I / Oที่ขึ้นอยู่กับฉันทามติของชุมชน ในขณะที่คุณมีสิทธิ์แทนที่พวกเขาการยืนยันใน STDIN / STDOUT สำหรับ I / O ทำให้คำตอบเป็นโมฆะ (ซึ่งสันนิษฐานว่าค่าเริ่มต้นใช้) และทำให้งานเป็นไปไม่ได้อย่างจริงจังในภาษาอื่น ๆ ( ไม่มีกระแสมาตรฐาน)
Dennis

52
That is not what fullwidth text is.
BlueRaja - Danny Pflughoeft

4
@ BlueRaja-DannyPflughoeft ถูกต้อง ข้อความแบบเต็มความกว้างเกี่ยวกับการเข้ารหัสอักขระพื้นฐาน (เข้ารหัส 2 ไบต์) ที่ต้องการโดยบางภาษา (เช่น ideograms) ใน Unicode ความคิดของครึ่งและขนาดเต็มเรียกว่าบล็อก Unicode
Ludovic Frérot

2
@ LudovicFrérotที่จริงแล้วพวกนี้ไม่ใช่ไอเดียอักษรพวกนี้เป็นตัวอักษรภาษาอังกฤษจีน
Erik the Outgolfer

คำตอบ:


29

เยลลี่ , 5 3 2 ไบต์

ขอบคุณเดนนิสที่ช่วยประหยัด 2 ไบต์ ขอบคุณFryAmTheEggmanสำหรับการบันทึก 1 ไบต์ รหัส:

p⁶

คำอธิบาย:

p⁶   # Cartesian product with the input and the space character.

ใช้การเข้ารหัสวุ้น

ลองออนไลน์!


1
⁶ใช้เวลาสามไบต์ใน UTF-8
Jess Smith

12
@JessSmith Jelly ใช้หน้ารหัสของตัวเอง: github.com/DennisMitchell/jelly/blob/master/docs/code-page.md
spaghetto

1
@AandN ใส่ไว้ในคำตอบไม่ใช่ความคิดเห็น
mbomb007

3
@ mbomb007 มันอยู่ในส่วนหัว
Adnan

5
@AandN ไม่คุณควรตอบด้วยคำตอบว่ามันมีหน้ารหัสของตัวเอง โดยเฉพาะอย่างยิ่งเนื่องจากเป็นภาษาที่ใหม่กว่าดังนั้นผู้คนยังไม่รู้
mbomb007

24

Python 3.5, 18 ไบต์

print(*input(),'')

วิธีนี้ใช้งานได้เนื่องจากprintตัวคั่นเริ่มต้นเป็นพื้นที่เดียว


3
print(*input(),end=' ')จะเป็นแบบพกพา แต่ก็ไม่ได้มาก golfy ...
เดนนิส

9
MFW การใช้ PEP ของฉันครั้งแรกที่ฉันเห็นในป่านั้นอยู่ที่ Code Golf
Veedrac

สิ่งนี้มีช่องว่างหลังจากตัวละครตัวสุดท้ายหรือไม่?
แยกผลไม้

17

Hexagony , 21 13 12 10 ไบต์

รหัส:

บันทึกจำนวนมากของไบต์ขอบคุณที่FryAmTheEggman รหัส:

P,<0/*;@.>

หรือในรูปแบบที่อ่านได้มากขึ้น:

  P , <
 0 / * ;
@ . > . .
 . . . .
  . . .

ลองออนไลน์!

คำอธิบาย:

โปรแกรม Hexagony เริ่มต้นที่มุมซ้ายบนตั้งค่าขอบหน่วยความจำเป็นค่า ASCII ทันทีPซึ่งก็คือ 80 หลังจากนั้นเราจะเห็นว่าพา ธ ต่อไปนี้ถูกใช้งาน:

ป้อนคำอธิบายรูปภาพที่นี่

เราจะเห็นว่าเส้นทางที่นำมาคือ: P,<;.P/0....;*/>. หลังจากนั้นPเรารับข้อมูลจากผู้ใช้หนึ่งไบต์ หากนี่ว่างเปล่าสาขาต่อไปนี้<จะนำเราไปยังตะวันออกเฉียงเหนือ หากอินพุตไม่ว่างเปล่าสาขาจะนำเราไปยังตะวันออกเฉียงใต้ ;หลังจากที่เราส่งออกป้อนข้อมูลของผู้ใช้ เราตั้งค่าขอบหน่วยความจำกลับไปPที่ 80 ซึ่งเป็นศูนย์ตามด้วยกระจกจะถูกรวมเข้ากับหมายเลขของเราแล้วส่งผลเป็น 800 จากนั้นจะถูกส่งออกโดยใช้;คำสั่ง เป็นอักขระช่องว่าง หลังจากนั้นเรารีเซ็ตขอบหน่วยความจำโดยใช้*คำสั่งและกลับไปที่ลูปที่เหลือของอินพุตผู้ใช้ เมื่อเราทำกับการป้อนข้อมูลของผู้ใช้เส้นทางจะถูกนำไปยังภาคตะวันออกเฉียงเหนือ:

ป้อนคำอธิบายรูปภาพที่นี่

โดยพื้นฐานแล้วจะไปที่@คำสั่งซึ่งจะยกเลิกโปรแกรม

ใช้HexagonyColorerที่น่าทึ่งของTimwiในการทำไดอะแกรม


เอ่อฉันเล่นกอล์ฟในขณะที่คุณแก้ไข อุ่ย 10:P,<0/*;@.>
FryAmTheEggman

@FryAmTheEggman ฮ่าฮ่าฮ่ามาอธิบายใหม่กันเถอะ: p.
Adnan

P,<<>0;@>*ยังเป็น 10 แต่น่าเสียดายที่ฉันไม่คิดว่ามันจะช่วยในการกำจัดไบต์อื่น
Martin Ender

@ MartinBüttnerโอ้นั่นเป็นความอัปยศ ฉันสงสัยว่าเป็นไปได้ไหมที่จะละแวกนั้นอีกที แต่ดูเหมือนว่าไม่แน่
Adnan

HexagonyColorer เป็นภาพเคลื่อนไหวหรือไม่
แยกผลไม้

12

Haskell ขนาด 11 ไบต์

((:" ")=<<)

ตัวอย่างการใช้งาน: ->((:" ")=<<) "Code Golf""C o d e G o l f "

แมปอักขระแต่ละตัวcกับรายการองค์ประกอบสองรายการ[c, space]และต่อทุกอย่างไว้ในรายการเดียว


น่าสนใจที่ Haskell และ Jelly ทำสิ่งเดียวกันที่นี่เนื่องจากรายการ monad ทำหน้าที่คล้ายกับผลิตภัณฑ์ Cartesian
ballesta25

9

จอประสาทตา 5

.
$& 

หมายเหตุช่องว่างที่ท้ายบรรทัดที่สอง

$&$0เทียบเท่ากับ ขอบคุณ @ mbomb007 สำหรับลิงค์นี้

ลองออนไลน์


ฉัน @FryAmTheEggman $0ชอบที่จะใช้ มันเป็นสิ่งเดียวกัน แต่พบได้บ่อยกว่า
mbomb007

นี่คือข้อมูลอ้างอิงที่มีประโยชน์ที่จะใช้ร่วมกับวิกิของ Retina: msdn.microsoft.com/en-us/library/ …
mbomb007

6

JavaScript ขนาด 20 ไบต์

เรียบง่ายฉันแค่หวังว่า Array.join จะเพิ่มพื้นที่ให้ท้ายที่สุดเพื่อให้ฉันสามารถประหยัดได้ 3 ไบต์

s=>[...s,``].join` `

5
[...s,``].join` ` บางที?
Neil

3
ดียิ่งขึ้น[...s,,].join...
edc65

@ edc65 ใช้งานไม่ได้กับ Firefox หรือ Chrome ล่าสุด? ฉันเพิ่งได้joinฟังก์ชั่นเป็นการกลับมาอย่างที่ฉันคาดไว้
Mwr247

@ Mwr247 หลังจากการเข้าร่วมคุณต้องใส่รหัสที่เหลือนั่นคือเหตุผลที่ฉันใส่จุดไข่ปลา (... ) มันประหยัดได้เพียง 1 ไบต์
edc65

@ edc65 อาจขี้เกียจเกินไปที่จะหาวิธีพิมพ์` `ความคิดเห็น
Neil

5

> <> , 13 10 ไบต์

บันทึก 3 ไบต์ด้วย @ Sp3000

i:0(?;o 'o

ลองได้ที่นี่ คลิกที่ลิงค์แล้วส่งแล้วพิมพ์บางการป้อนข้อมูลและกด Giveและในที่สุดก็เรียกใช้โปรแกรมที่มีการเริ่มต้นหรือทำงานโดยไม่มีการเคลื่อนไหว

คำอธิบาย

i       read a character
:       duplicate
0(      is it less than 0?
?;      if so: end program. Else:
o       output read character
 '      push all chars until matching (same) quote. Top character is a space
o       output that character, which is a space. Go back to the beginning

i:0(?;o 'ofor 10
Sp3000

ในความเป็นจริงก็ใช้io 'oงานได้เช่นกันโดยผิดพลาด
Sp3000

@ Sp3000 ขอบคุณ! ฉันจะไปกับรุ่นที่ไม่มีข้อผิดพลาด (บางทีคุณต้องการส่งของคุณ?) ฉันลืมคุณสามารถป้อนตัวอักษรโดยตรง คำพูดที่ไม่ตรงกันทำงานอย่างไร มันเลือกตัวอักษรก่อนหน้าเสมอหรือไม่?
Luis Mendo

1
'เพียงแค่ล้อมรอบผลักดันตัวอักษรจนกว่าจะพบคนอื่นที่'จะปิดมัน ในกรณีนี้การเปิดและปิด's เป็นอักขระตัวเดียวกันและผลักรหัสต้นฉบับส่วนใหญ่ แต่อักขระบนสุดจะเป็นที่ว่างเนื่องจากถูกผลักครั้งสุดท้าย
Sp3000

@ Sp3000 เข้าใจแล้ว ดังนั้นที่ 's ยังวัฏจักร ขอบคุณมากสำหรับคำแนะนำและคำอธิบาย!
Luis Mendo

5

Java, 132 (System.in) หรือ 99 (อาร์กิวเมนต์โปรแกรม)

คุณรู้สึกถึงค่าใช้จ่ายในคืนนี้หรือไม่?

class F{public static void main(String[]a){System.out.print(new java.util.Scanner(System.in).nextLine().replaceAll("(.)", "$0 "));}}
class W{public static void main(String[]a){for(char c:a[0].toCharArray())System.out.print(c+" ");}}

shooqieคิดหาวิธีที่สั้นกว่า 6 ไบต์ในการทำเช่นนี้แต่ฉันจะไม่ขโมยวิธีการของพวกเขา อย่างไรก็ตามฉันใช้กับรุ่น STDIN และแลมบ์ดาแล้ว

28 ตัวอักษรสำหรับแลมบ์ดา แต่ไม่เป็นไปตามข้อกำหนดของโปรแกรม

s->s.replaceAll("(.)","$0 ")

คำถามที่ระบุว่าอินพุตต้องมาจาก STDIN
EMBLEM

ฉันสามารถเพิ่มให้คุณได้ถ้าไม่เป็นไร
Blue

ฉันได้เพิ่มรุ่น STDIN แล้ว (และใช้ regexplace ที่ชาญฉลาด shooqie คิดออก)
CAD97

ไม่ต้องใช้วงเล็บใน regex ของคุณ ลบช่องว่างพิเศษระหว่างอาร์กิวเมนต์replaceAllด้วยเช่นกัน
Khuldraeseth na'Barya

4

Cubix , 10 ไบต์

Cubix เป็นภาษาสองมิติที่พัฒนาโดย @ETHproductions โดยที่คำสั่งจะถูกพันเข้ากับคิวบ์ ลองออนไลน์

@.?wi^\oSo

แม็พนี้กับลูกบาศก์ที่มีความยาวขอบ 2

    @ .
    ? w
i ^ \ o S o . .
. . . . . . . .
    . .
    . .

iเริ่มต้นด้วยการป้อนข้อมูล การไหลถูกเปลี่ยนเส้นทางไปทางทิศเหนือ^ไปยังหน้าบน ?ถ้าค่าเปิดเชิงลบที่เหลือให้เสร็จ@เป็นศูนย์ดำเนินการเข้าสู่การเปลี่ยนแปลงทางขวาหรือเลี้ยวขวาแล้วบวกสะท้อนให้เห็นถึงด้านซ้ายw ตัวละครเอาท์พุทที่มีพื้นที่ต่อท้าย\oSo


4

Cubix , 9 ไบต์

@./.i?>So

เห็นมันทำงานออนไลน์!

Cubix เป็นภาษาที่ใช้ในการทำแผนที่ โปรแกรมนี้สร้าง cube net ดังต่อไปนี้:

    @ .
    / . 
i ? > S o . . .
. . . . . . . .
    . .
    . .

ตัวชี้คำแนะนำเริ่มต้นที่iซึ่งใช้รหัสอักขระอื่นจากอินพุตและพุชไปยังสแต็ก หากไม่มีการป้อนข้อมูลที่เหลืออีกต่อไปจะ?เปลี่ยนเป็น IP ที่เหลือซึ่งจะกระทบ/และสะท้อนกลับไปที่@ซึ่งจะสิ้นสุดโปรแกรม

อย่างไรก็ตามหากมีอินพุตเหลือค่าจะเป็นรหัสอักขระ ในฐานะที่เป็นทุก1รหัสอักขระเป็นบวกที่?ทำให้เลี้ยวขวา IP ที่มันตัดทุกทางรอบก้อนผ่านoในทางที่เอาท์พุทถ่าน จากนั้นจะกระทบ/ซึ่งทำให้วนกลับไปมา>Soซึ่งผลักและพิมพ์พื้นที่ IP จะดำเนินการไปทางทิศตะวันตกจนกระทั่งพันรอบกลับไปที่iกลับไปที่จุดเริ่มต้นของลูปหลัก

1 หากตัวละครนั้นเป็นไบต์ที่?ว่างเปล่ามันจะไม่สนใจและดำเนินการตรงไปข้างหน้าเพียงแค่แสดงผลช่องว่างเดียว


แน่นอนมีเพียงมากเขียนคำอธิบายสามารถทำได้ดังนั้นผมจึงขอแนะนำให้คุณดูนี้ในล่ามออนไลน์ มีตัวเลือก "ความเร็ว" ซึ่งให้คุณดูการดำเนินการช้าหรือเร็วเท่าที่คุณต้องการ


1
คุณสามารถบันทึกไบต์ด้วย@.Uoi?So
MickyT

4

Stax , 2 ไบต์

ความสัมพันธ์เยลลี่!

0\

ลองใช้ที่ staxlang.xyz!

ทั้งหมดนี้จะถูกผลัก0ไปที่สแต็คและซิปสตริงจากอินพุตมาตรฐานด้วยซ้ำ 0 ตามความจำเป็น ใน Stax รหัสจุด 0 ในสตริงมักจะถูกแปลงเป็น 32 (เว้นวรรค)

มันสั้นพอที่การบรรจุลงในûTกล่องจะไม่ทำอะไรเลยนอกจากลดความสามารถในการอ่าน





3

อ๊ะขนาด 7 ไบต์

(ตัวเลือกบรรทัดคำสั่งรหัส 4 อักขระ + 3 อักขระ)

NF++

วิ่งตัวอย่าง:

bash-4.3$ awk -F '' 'NF++' <<< 'Full width text.'
F u l l   w i d t h   t e x t . 

(มีความขัดแย้งในสิ่งที่ควรรวมอยู่ในจำนวนตัวเลือกบรรทัดคำสั่งฉันรวมสิ่งที่ส่งผ่านไปยังawkล่ามจริง ๆ:“ -”,“ F” และตัวคั่นระหว่าง“ F” และพารามิเตอร์สตริงว่างดูด้านล่างสิ่งที่ ฉันหมายถึง.)

bash-4.3$ od -tax1 /proc/`pidof awk`/cmdline 
0000000   a   w   k nul   -   F nul nul   N   F   +   + nul
         61  77  6b  00  2d  46  00  00  4e  46  2b  2b  00
                         ╰────────╯

3

PHP, 39 ไบต์

echo join(' ',str_split($argv[1])).' ';

เรียกใช้จากบรรทัดคำสั่ง

php fullwidth.php "Full width text is text that has a space after every character, including the last one."

https://eval.in/541179


3

WhoScript 38 ไบต์

1v;pr;e;#0 1;-;i;t=;ti;o;tl;" ";d;>;pf

ทำงานได้ดีที่สุดเมื่อกำหนดสตริงที่บรรทัดคำสั่ง แต่สามารถทำได้ทีละตัวอักษรแบบเรียลไทม์เช่นกัน

Ungolfed:

time_vortex
  psychic_paper read
  duplicate
  # 0 1
  -
  integer
  TARDIS =
  TARDIS if
      opening
  TARDIS landing
  # 20
paradox
pop
psychic_paper flush

3

เขาวงกต 10 ไบต์

<.23.%):,>

สิ่งนี้สิ้นสุดลงด้วยข้อผิดพลาด แต่ข้อความแสดงข้อผิดพลาดไปที่ STDERR

ลองออนไลน์!

คำอธิบาย

นี่เป็นหนึ่งในกรณีที่หายากซึ่งโปรแกรมเชิงเส้นสมบูรณ์เป็นไปได้ การวนซ้ำทำได้โดยใช้คำสั่งการแก้ไขซอร์สโค้ด<และ>ทำงานได้เนื่องจากหลังจากการวนซ้ำแต่ละครั้งเรารู้ว่าสแต็กว่างเปล่าอีกครั้ง

< วนรอบเซลล์หนึ่งบรรทัดไปทางซ้ายจนวนดังนั้นเราจึงลงท้ายด้วย:

.23.%):,><

นี่ใช้ตัวชี้คำสั่ง (IP) ด้วยดังนั้นตอนนี้ IP จะอยู่ที่ปลายด้านขวาของรหัสและต้องเลื่อนไปทางซ้าย ถัดไปการ>ปรับเปลี่ยนแบบตรงกันข้ามจึงเป็นการเปลี่ยนซอร์สโค้ดกลับไปเป็น

<.23.%):,>

ตอนนี้เราดำเนินการวนซ้ำเดียว (จากขวาไปซ้าย) ก่อนที่ทุกอย่างจะเริ่มต้นใหม่:

,    Read a character code from STDIN, or -1 at EOF.
:)   Duplicate and increment.
%    Modulo. At EOF this will attempt a division by zero and terminate. Otherwise, we
     have n % (n+1) = n, so we're left with the input character again.
.    Print it back to STDOUT.
32   Turn the top of the stack into a 32.
.    Print it as well (a space).

3

Gema , 5 ไบต์

?=?\ 

วิ่งตัวอย่าง:

bash-4.3$ gema '?=?\ ' <<< 'Full width text.'
F u l l   w i d t h   t e x t . 

ฉันไม่เคยเห็นภาษานี้มาก่อน เชื่อมโยงไปยังล่ามหรือไม่
ปาเก็ตตี้

ขอโทษ เพิ่มไฮเปอร์ลิงก์ไปยังชื่อโพสต์ ค่อนข้างเก่า แต่น่าเศร้าที่ Google สามารถช่วยค้นหาได้อย่างมีประสิทธิภาพเฉพาะเมื่อคุณรู้ว่าชื่อนั้นมาจาก "ตัวประมวลผลแมโครอเนกประสงค์"
จัดการ


3

APL, 5 ไบต์

∊2∘↑¨

ใช้ 2 รายการสำหรับอักขระแต่ละตัวในสตริงโดยมีเอฟเฟกต์ของการเพิ่มช่องว่าง

เพื่อให้เป็นโปรแกรมที่ใช้ stdin มีจำนวนไบต์เท่ากัน:

∊2↑¨⎕

ลองมันนี่




3

Threead , 45 16 Bytes ไม่ใช่การแข่งขัน

  B[coB]
32c   o

ใช้อินพุตผ่าน STDIN

บรรทัด / เทปแรกอ่านไบต์จาก STDIN และเขียน บรรทัดที่สองเริ่มแรกจัดเก็บช่องว่าง32cจากนั้นในเวลาเดียวกันกับที่มีการอ่านอักขระถัดไปจะให้พื้นที่นั้นส่งออก

ลองออนไลน์!


3

Python 2, 27 25 24 ไบต์

lambda x:' '.join(x)+' '

สั้นกว่าคำตอบของ Raffi ...

-1 ขอบคุณ 60919 (FlipTack)


หากฟังก์ชั่นได้รับอนุญาตแล้วlambda x:' '.join(x)+' 'จะมีขนาดสั้นลง 1 ไบต์
FlipTack


3

C, 56 Bytes (เป็นอาร์กิวเมนต์ของโปรแกรม), 46 Bytes (จาก stdin)

main(int a,char**b){while(*b[1])printf("%c ",*b[1]++);}

คำตอบ C เก่าธรรมดา เมื่อรวบรวมแล้วโปรแกรมจะต้องเรียกใช้ด้วยสตริงเนื่องจากเป็นพารามิเตอร์ตัวแรกสตริงที่มีช่องว่างจะต้องอยู่ในเครื่องหมายคำพูด สำหรับตัวอย่างในโพสต์เริ่มต้น:

./prog "Full width text is text that has a space after every character, including the last one."

ซึ่งจะเอาท์พุท

F u l l   w i d t h   t e x t   i s   t e x t   t h a t   h a s   a   s p a c e   a f t e r   e v e r y   c h a r a c t e r ,   i n c l u d i n g   t h e   l a s t   o n e .

โซลูชันที่อ่านโดยตรงจาก stdin

main(c){while(c=~getchar())printf("%c ",~c);}

ขอขอบคุณ @FryAmTheEggman น้อยหนึ่งไบต์


ความต้องการค่อนข้างมืดมัว แต่ฉันเชื่อว่าคุณต้องอ่านข้อมูลจากstdinแทนที่จะใช้เป็นข้อโต้แย้ง นอกจากนี้นี่คือหน้าที่มีเคล็ดลับที่เป็นประโยชน์สำหรับการเล่นกอล์ฟเพิ่มเติมใน C: codegolf.stackexchange.com/q/2203/13877
Josh

@ Josh มันนับเป็นพารามิเตอร์ของ main หรือไม่? เพราะมิฉะนั้นคำตอบ Java จะผิดเหมือนกันและไม่แน่ใจเกี่ยวกับ Haskell เช่นกัน
SBI

อย่างใดอย่างหนึ่งก็ดีเราชอบ I / O ของเราเป็นมิตร :) แต่ฉันเชื่อว่าการใช้getchar()จะสั้นกว่า นอกจากนี้คุณไม่จำเป็นต้องมีการรวมสำหรับคอมไพเลอร์ C ส่วนใหญ่
FryAmTheEggman

@FryAmTheEggman ฉันออกจากการรวมเพื่อให้เป็นไปตามอย่างสมบูรณ์ฉันสามารถทดสอบได้ด้วย gcc เท่านั้น ตราบใดที่ gcc-only ใช้ได้ก็ดีการโกนรวมนั้นถือว่าใช้ได้
SBI

โดยทั่วไปถ้าใช้งานได้กับIdeoneมันก็โอเค :)
FryAmTheEggman


2

อย่างจริงจัง 7 ไบต์

' ;,@j+

ลองออนไลน์!

มนุษย์นั่นจำเป็นต้องใช้ช่องว่างสิ้นสุดเพิ่ม 3 ไบต์เพิ่มเติม ถ้าไม่มีมัน,' jก็ใช้งานได้สำหรับ 4

คำอธิบาย:

' ;,@j+
' ;      push two copies of a single space
   ,@    push input, swap
     j+  join on spaces, append a space

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