เดือนละกี่วัน


25

รับการแสดงข้อความ (ชื่อเต็มตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่หรือตัวย่อ 3 ตัว) ของเดือนส่งคืนจำนวนวันในเดือน

ตัวอย่างเช่นdecember, DECและdecทุกคนควรจะกลับมาวันที่ 31

กุมภาพันธ์สามารถมีได้ทั้ง 28 หรือ 29 วัน

สมมติว่าอินพุตเป็นเดือนในหนึ่งในรูปแบบที่ถูกต้อง


19
คุณควรแสดงรายการรูปแบบทั้งหมดของชื่อเดือนที่เราควรจะยอมรับ
Giuseppe

1
สำหรับทุกคนที่สามารถใช้งานได้ผลรวม ASCII ตามลำดับของ 3 ตัวอักษรแรกที่ลดลงจะไม่ซ้ำกัน
สิ้นเชิงมนุษย์

19
นั่นคือไกลเกินไปเร็วเกินไปที่จะยอมรับทางออก
Shaggy

5
ฉันคิดว่านี่น่าจะดีกว่าถ้าอินพุตเป็นเพียงเดือนในรูปแบบคงที่เนื่องจากรูปแบบตอนนี้โดยทั่วไปต้องเปลี่ยนเป็นกรณีที่คงที่และดูเฉพาะอักษร 3 ตัวแรกเท่านั้น
xnor

4
ขณะที่มันยืนดูเหมือนว่าคุณต้องการคำตอบที่จะจัดการกับทุกรูปแบบที่ระบุไว้ - "ตัวอย่างเช่นdecember, DECและdecควรทั้งหมดกลับมาที่ 31" - นั่นคือความตั้งใจหรือไม่
Jonathan Allan

คำตอบ:


4

Pykeขนาด 9 ไบต์

l4C9@~%R@

ลองที่นี่!

l4        -   input.title()
    @     -  v.index(^)
  C9      -   ['PADDING', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
        @ - v[^]
     ~%R  -  ['Padding', 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

หรือ 15 ไบต์หากต้องการรูปแบบอินพุตทั้งหมด

l43<C9 3L<@~%R@

ลองที่นี่!

l43<            -   input.title()[:3]
          @     -  v.index(^)
    C9 3L<      -   ['PAD', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
              @ - v[^]
           ~%R  -  ['Padding', 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

6
ผลตอบแทนนี้ FEB31
Laikoni

2
ผมเชื่อว่า @ จุด Laikoni เป็นที่ถูกต้อง (ก็ยังส่งกลับ 31 Apr, Jun, SepและNov) แต่ยังคิดว่ามันต้องมีการชี้แจงน้อยใน OP (ดูของฉันคำถาม )
Jonathan Allan

@JanathanAllan อืม OP ยอมรับคำตอบนี้แล้วฉันเดาว่ามันใช้ได้จริงเหรอ?
Erik the Outgolfer

4
@EriktheOutgolfer ฉันจะไม่ข้ามไปยังข้อสรุปนั้นเป็นการส่วนตัว
Jonathan Allan

ฉันอยู่ภายใต้การแสดงผลว่าจำเป็นต้องทำงานกับอินพุตเพียงรูปแบบเดียวเท่านั้น
Blue

33

JavaScript (ES6),  48 47 44 43  42 ไบต์

m=>31^'311'[parseInt(m[1]+m[2],34)*3%49%8]

การสาธิต

อย่างไร?

การดำเนินการเหล่านี้นำไปสู่ตารางการค้นหาของ 8 รายการซึ่งจะไม่น่าสนใจมากถ้าค่าถูกกระจายแบบสุ่ม แต่ผลลัพธ์ใด ๆ ที่มากกว่า2ถูกแมปกับ31วัน ดังนั้นจะต้องจัดเก็บเฉพาะ 3 รายการแรกเท่านั้น

Month | [1:2] | Base 34 -> dec. | * 3  | % 49 | % 8 | Days
------+-------+-----------------+------+------+-----+-----
  JAN |    AN |             363 | 1089 |   11 |   3 |  31
  FEB |    EB |             487 | 1461 |   40 |   0 |  28
  MAR |    AR |             367 | 1101 |   23 |   7 |  31
  APR |    PR |             877 | 2631 |   34 |   2 |  30
  MAY |    AY |              10 |   30 |   30 |   6 |  31
  JUN |    UN |            1043 | 3129 |   42 |   2 |  30
  JUL |    UL |            1041 | 3123 |   36 |   4 |  31
  AUG |    UG |            1036 | 3108 |   21 |   5 |  31
  SEP |    EP |             501 | 1503 |   33 |   1 |  30
  OCT |    CT |             437 | 1311 |   37 |   5 |  31
  NOV |    OV |             847 | 2541 |   42 |   2 |  30
  DEC |    EC |             488 | 1464 |   43 |   3 |  31

14
จริงๆแล้วคุณทำอย่างไรกับการส่งสิ่งประหลาด ๆ ที่น่าทึ่งเหล่านี้กับสิ่งที่บ้าคณิตศาสตร์ D: คุณมีโปรแกรมที่จะค้นหาสิ่งเหล่านี้หรือคุณดีเกินไปสำหรับพวกเราที่เหลือ
HyperNeutrino

1
@HyperNeutrino สิ่งแรกที่ฉันลองทำอยู่เสมอคือค้นหาการแปลงฐานแล้วตามด้วยการคูณตัวเลือกตามด้วยการปฏิบัติการโมดูโลหนึ่งรายการ อันนี้ถูกค้นพบอย่างรวดเร็ว แต่ฉันอ่านความท้าทายผิดและคิดว่าสิ่งนี้.substr(0,3)ไม่จำเป็น ดังนั้นในความคิดที่สองนี่อาจไม่ใช่วิธีที่ดีที่สุด
Arnauld

substr? slice!
Neil

วิธีการที่ไม่สำคัญของฉันมีเพียง <s> 2 </s> อีก 3 ไบต์ที่ยาวกว่าดังนั้นจึงอาจไม่เหมาะอีกต่อไปเนื่องจากการทำเช่นนั้น แต่ก็ยังน่าประทับใจมาก :)
HyperNeutrino

1
การแก้ไขของบางคนลบส่วนนั้น แต่หนึ่งในเหตุผลที่ฉันไม่อนุญาตในตอนแรกคือฉันต้องการเห็นคำตอบเช่นนี้ ฉันชอบใช้ฐานที่ 34 เพื่อหลีกเลี่ยงปัญหาการใช้ตัวพิมพ์ใหญ่และรูปแบบที่แตกต่างกัน
qw3n

15

Javascript (ES6), 36 33 ไบต์

-3 ไบต์ขอขอบคุณ @JustinMariner และ @Neil

m=>31-new Date(m+31).getDate()%31

ขออภัย @Arnauld การใช้ความผิดเพี้ยนของ JavaScript สั้นกว่าการแปลงฐานแฟนซีของคุณ

มันทำงานอย่างไร

ด้วยเหตุผลบางอย่าง JavaScript อนุญาตให้ป้อนวันที่ภายนอกเดือนที่ระบุ รหัสจะนับจำนวนวันที่อยู่นอกเดือนซึ่งเป็นวันที่เพื่อกำหนดจำนวนวันในเดือนนั้น ตัวอย่าง:
"FEB31"→การThu Mar 02 2000→การ31 - 2 % 31→การ29
"October31"→การTue Oct 31 2000→การ31 - 31 % 31→การ31

กรณีทดสอบ


MS Excel ก็ทำเช่นนี้ .. 0 มกราคมเป็นเดือนธันวาคมเสมอวันสุดท้ายดังนั้น = วัน ("00/01/2017") จะส่งผลให้ 31
DavChana

ดูเหมือนว่า Javascript จะอนุญาตเฉพาะสตริงวันที่ซึ่งเป็นวันที่ถึง 31 หากคุณพยายามป้อน "feb 32" แปลเป็น 2032-02-01 และถ้าคุณพยายามบังคับด้วย "0-feb-32" (หรือสตริงที่คล้ายกัน) เพียงแค่บอกว่า "วันที่ไม่ถูกต้อง" ถ้าคุณตั้งค่าวันเป็น 0 ("feb 0") มันแปลไปเป็น 2000-02-01 มากกว่า 2000-01-31
TehPers

คุณอาจสามารถบันทึกไบต์โดยปล่อยพื้นที่ก่อน 31คุณอาจจะสามารถที่จะบันทึกไบต์โดยวางพื้นที่ก่อนดูเหมือนว่าจะทำงานใน Chrome เป็นnew Date("feb31")ตัวอย่าง
Justin Mariner

ในความเป็นจริงคุณอาจใช้+31การบันทึกสามไบต์โดยรวม ไม่สามารถใช้งานได้กับ Firefox
Neil


7

Bash , 21 ไบต์

cal $1|xargs|tail -c3

ลองออนไลน์!

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

ต้องการเวอร์ชันutil-linux 2.29calซึ่งเป็นหนึ่งใน TIOTIO นอกจากนี้ยังขึ้นอยู่กับสถานที่ดังนั้นLC_TIME จะต้องมีการเปลี่ยนแปลงในระบบที่ไม่ใช่ภาษาอังกฤษ (ขอบคุณ @Dennis สำหรับการชี้แจง)

แนวคิดของการวางท่อxargsเพื่อตัดcalเอาท์พุทมาจากคำตอบ SOนี้


2
นี่ไม่ใช่แค่การทุบตี โดยทั่วไปแล้วมันคือ sh แต่อาจเป็นเกือบทุกการใช้งานเชลล์ที่รองรับการค้นหาพา ธ และไพพ์ในระบบที่มี cal, tail และ xargs
kojiro

5

โปรตอนขนาด 50 ไบต์

k=>31-((e=k.lower()[1to3])in"eprunov")-3*(e=="eb")

ลองออนไลน์!

-14 ไบต์ขอบคุณ Jonathan Frech

สามสิบวันมีเดือนกันยายนเมษายนมิถุนายนและพฤศจิกายน ที่เหลือก็มีเนยถั่ว ทั้งหมดยกเว้นคุณยายของฉัน เธอมีรถสามล้อสีแดงเล็กน้อย แต่ฉันขโมยมัน muahahahahaha

(ฉันรอที่จะเล่าเรื่องตลกนั้น (ที่มา: อาจารย์คณิตศาสตร์ของฉัน) สำหรับทุกวัยในเว็บไซต์นี้: D: D: D)


@Riker โอ้โหที่ไม่ได้อยู่ที่นั่นเมื่อฉันเริ่มเขียนนี้: /
HyperNeutrino

1
มีกฎใหม่ที่คุณต้องตรวจสอบไม่ใช่เดือนที่ถูกต้องและส่งคืน 0 ฉันหวังว่ามันจะถูกลบ
Level River St

1
ไม่เป็นไรการเปลี่ยนแปลงฉันจะลบส่วนนั้นออก
qw3n

ฉันคิดว่าคุณสามารถใช้สตริงเดียว'sepaprjunnov'แทนรายการของสตริง
Jonathan Frech

@ JonathanFrech อาจจะ; ฉันจะลองดูขอบคุณ
HyperNeutrino

4

C # (.NET Core) , 52 + 13 = 65 38 + 24 = 62 ไบต์

m=>D.DaysInMonth(1,D.Parse(1+m).Month)

ลองออนไลน์!

+24 สำหรับ using D=System.DateTime;

กิตติกรรมประกาศ

-3 ไบต์ขอบคุณ Grzegorz Puławski


มันใช้งานได้using System;ไหม หรือคุณยกตัวอย่างได้จากจำนวนไบต์?
Matty

@ Matty เป็นจุดที่ดี; ตอนนี้เพิ่ม
Ayb4btu

ส่วนปลายปลาย แต่ -3 ไบต์: using D=System.DateTime;และm=>D.DaysInMonth(1,D.Parse(1+m).Month)ชอบที่นี่: tio.run/##jc5BSwMxEAXgs/ …
Grzegorz Puławski

3

Python 3 , 60 ไบต์

x=input().lower()[1:3];print(31-(x in"eprunov")-3*(x=="eb"))

ลองออนไลน์!

ย้ายพอร์ตโซลูชันโปรตอนของฉัน

-10 ไบต์ขอบคุณโดยสิ้นเชิงมนุษย์


ดีกว่าของฉัน heh
โทมัสวอร์ด


: P builtins บางครั้งก็ยาวเกินไป: P
HyperNeutrino

@tallyallyhuman โอ้ rly ว้าว +1 ด้วยความขอบคุณ: P
HyperNeutrino




2

Python 3 - 93 86 84 82 ไบต์

ตัวแปรของคำตอบ (แสดงความก้าวหน้าของเวลาและไบต์สำหรับแต่ละรายการพร้อมลิงก์ TIO):

คำตอบเดิม (93 ไบต์)

-7 ไบต์ขอบคุณ Jonathan Frech (86 ไบต์)

ขอขอบคุณอีกสองไบต์สำหรับการทดสอบเพิ่มเติมของฉันเองmonthrangeผลลัพธ์ที่สองคือค่าที่สูงกว่าเสมอ (84 ไบต์) 1

-2 มากขึ้นโดยใช้และอ้างอิงกับimport calendar as c c.monthrange(82 ไบต์การแก้ไขปัจจุบัน )


lambda x:c.monthrange(1,time.strptime(x[:3],'%b')[1])[1];import time,calendar as c

เห็นได้ชัดว่าไม่ดีเท่าคำตอบของ HyperNeutrinoซึ่งไม่ได้ใช้บิวด์อิน แต่ก็ยังใช้งานได้


เชิงอรรถ

1 : กรณีทดสอบผ่าน TIO.runแสดงหลักฐานว่าฉันจัดการmonthrangeค่าเหล่านั้นอย่างไรสำหรับจำนวนกรณีทดสอบรายเดือนที่แตกต่างกัน


86 ไบต์
Jonathan Frech

@ JonathanFrech ขอบคุณ การปรับปรุงเพิ่มเติมลดลงโดยฉันมีการทดสอบมากขึ้นของวิธีการทำงานของเดือนและโดยใช้import ...,calendar as cเพื่อไม่ต้องพิมพ์ 'ปฏิทิน' สองครั้ง
โทมัสวอร์ด


2

Haskell , 65 63 62 ไบต์

f.map((`mod`32).fromEnum)
f(_:b:c:_)|c<3=28|c>13,b>3=30
f _=31

ลองออนไลน์!

วิธีการจับคู่รูปแบบ บรรทัดแรกคือการจัดการ case-insensitivity จากนั้นเราจะส่งคืน28ถ้าตัวอักษรตัวที่สามมีขนาดเล็กกว่า C (หมายเลข 3) 30ถ้าตัวอักษรตัวที่สองมีขนาดใหญ่กว่า C และตัวอักษรตัวที่สามมีขนาดใหญ่กว่า M หรือ31อย่างอื่น

แก้ไข: -1 ไบต์ขอบคุณ Leo


ทางเลือก ( 65 64 ไบต์)

f s|let i#n=n<mod(fromEnum$s!!i)32=sum$29:[2|2#2]++[-1|2#13,1#3]

ลองออนไลน์!


1
ฉลาดคนหนึ่ง! คุณสามารถบันทึก byte โดยการตรวจสอบc<3แทนa==6(กุมภาพันธ์เป็นเดือนแรกถ้าคุณสั่งให้พวกเขาด้วยตัวอักษรที่สามของพวกเขาตามด้วยธันวาคม)
Leo

2

APL (Dyalog) 32 ไบต์ *

ฟังก์ชั่นนำหน้า Tacit สมมติ⎕IO( I ndex O rigin) 0ซึ่งเป็นค่าเริ่มต้นในหลาย ๆ ระบบ

31 28 30⊃⍨∘⊃'.p|un|no|f'S 11

ลองออนไลน์!

⍠1 กรณีไม่รู้สึกตัว

1 คืนความยาวของ

⎕S PCRE S earch สำหรับ

'.p|un|no|f' any-char, "p" หรือ "un" หรือ "no" หรือ "f"

⊃⍨∘⊃ และใช้องค์ประกอบแรกของที่ (0 ถ้าไม่มี) เพื่อเลือกจาก

31 28 30 รายการนี้

ดังนั้น:

  • Ap r, S ep , J unและNo v จะเลือกหมายเลขที่ดัชนี 2 คือ 30

  • F eb จะเลือกหมายเลขที่ดัชนี 1 คือ 28

  • สิ่งอื่นใดจะเลือกหมายเลขที่ดัชนี 0 คือ 31


* การใช้คลาสสิกและนับเป็น⎕OPT



1

MATL , 22 ไบต์

14L22Y2c3:Z)Z{kj3:)km)

ลองออนไลน์!

คำอธิบาย

14L    % Push numeric array of month lengths: [31 28 ... 31]
22Y2   % Push cell array of strings with month names: {'January', ..., 'December'}
c      % Convert to 2D char array, right-padding with spaces
3:Z)   % Keep first 3 columns
Z{     % Split into cell array of strings, one each row
k      % Convert to lower case
j      % Input string
3:)    % Keep first 3 characcters
k      % Convert to lower case
m      % Ismember: gives a logical index with one match
)      % Use that as index into array of month lengths. Implicit display

1

ภาษา Wolfram (Mathematica) , 46 30 ไบต์

#~NextDate~"Month"~DayCount~#&

ลองออนไลน์!

จะให้อย่างใดอย่างหนึ่ง28หรือ29สำหรับเดือนกุมภาพันธ์ขึ้นอยู่กับว่าปีปัจจุบันเป็นปีอธิกสุรทิน

มันทำงานอย่างไร

ทุกคำสั่งในวันที่ Mathematica จะแปลอินพุตApril, APR, ApRiLและอื่น ๆ เป็นวันแรกของเดือนที่สอดคล้องกันในปีปัจจุบัน (เป็นโบนัสอินพุตเช่น"February 2016"หรือ{2016,2}ทำงานตามที่คาดไว้)

#~NextDate~"Month"ให้วันแรกของเดือนหลังจากนั้นและDayCountให้จำนวนวันระหว่างสองอาร์กิวเมนต์ จำนวนวันระหว่างวันที่ 1 เมษายนถึงวันที่ 1 พฤษภาคมคือ 30 จำนวนวันในเดือนเมษายน


1

Java 8 , 47 ไบต์

m->31-new java.util.Date(m+"31 1").getDate()%31

ลองออนไลน์!

ลงเอยด้วยการใช้แนวคิดเดียวกันกับ คำตอบ JS ของ Herman Lauensteinซึ่งการตั้งค่าวันที่เป็นวันที่ 31 ถูกผลักเข้าสู่เดือนถัดไป Java 1ไม่จำเป็นต้องปีดังนั้นที่ได้รับการตั้งค่า



1

q / kdb +, 36 ไบต์

วิธีการแก้:

28 30 31@2^1&(*)"ebeprunov"ss(_)1_3#

ตัวอย่าง:

q)28 30 31@2^1&(*)"ebeprunov"ss(_)1_3#"January"
31
q)28 30 31@2^1&(*)"ebeprunov"ss(_)1_3#"FEB"
28
q)28 30 31@2^1&(*)"ebeprunov"ss(_)1_3#"jun"
30

คำอธิบาย:

มีวิธีการดูแลแมวเป็นล้านวิธี ฉันคิดว่าแตกต่างจากคนอื่นเล็กน้อย ใช้ตัวอักษรที่ 2 และ 3 "ebeprunov"ของการป้อนข้อมูลที่เป็นตัวพิมพ์เล็กพวกเขาแล้วมองพวกเขาในสตริง หากพวกเขาอยู่ที่ตำแหน่ง 0 นี่คือเดือนกุมภาพันธ์หากพวกเขาอยู่ที่สถานที่> 0 พวกเขาเป็นเวลา 30 วันหากพวกเขาไม่ได้อยู่ในสตริงพวกเขาจะมีอายุ 31 วัน

28 30 31@2^1&first"ebeprunov"ss lower 1_3# / ungolfed solution
                                        3# / take first 3 items from list, January => Jan
                                      1_   / drop the first item from the list, Jan => an
                                lower      / lower-case, an => an
                  "ebeprunov"ss            / string-search in "ebeprunov", an => ,0N (enlisted null)
             first                         / take the first, ,0N => 0N
           1&                              / take max (&) with 1, 0N => 0N
         2^                                / fill nulls with 2, 0N => 2
        @                                  / index into
28 30 31                                   / list 28,30,31

1

Excel VBA, 47 43 ไบต์

ฟังก์ชันหน้าต่าง VBE แบบไม่ระบุชื่อแบบทันทีที่รับอินพุตเป็นชื่อเดือนตัวย่อหรือตัวเลขตั้งแต่ช่วง[A1]และแสดงความยาวของเดือนนั้นในปี 2001 ถึงฟังก์ชันหน้าต่างทันที VBE

?31-Day(DateValue("1 "&[A1]&" 1")+30)Mod 31

เวอร์ชั่นเก่า

d=DateValue(["1 "&A1&" 1"]):?DateAdd("m",1,d)-d

1

PHP, 38 33 + 1 32 + 1 ไบต์

บันทึก 5 ไบต์ขอบคุณ Titus

<?=date(t,strtotime("$argn 1"));

เรียกใช้เป็นท่อด้วย -nF

ลองออนไลน์!


1
เฮ้ฉันไม่คิดว่าคุณจะต้องการ.' 1'มันดูเหมือนว่าจะทำงานบน TIO ถ้าไม่มีมัน!
Dom Hastings

1
28 + 1 bytes: <?=date(t,strtotime($argn));(แสดงเป็น pipe -nF)
Titus

3
@ DomHastings - ดังนั้นก่อนที่ฉันจะโพสต์ฉันได้ทดสอบเพื่อดูว่ามันจะใช้งานได้หรือไม่.' 1'แต่มันไม่ทำงาน หลังจากเห็นความคิดเห็นของคุณฉันพยายามคิดออกว่าฉันทำอะไรผิด เนื่องจากฉันใช้งานในวันที่ 31 ของเดือนมันใช้วันที่ 31 (ปัจจุบัน) ทุกเดือนที่ฉันใส่ซึ่งจะทำให้เกินเดือนปัจจุบัน 31 กุมภาพันธ์กลายเป็น 3 มีนาคมดังนั้นโค้ดส่งคืน 31 (จำนวนวันในเดือนมีนาคม) ด้วยเหตุนี้ทุกเดือนจึงกลับมา 31 ดังนั้นจึงทำงานได้โดยไม่มี.' 1'วันใดเลย <= 28 ของเดือน
โจ

อ่าาฉันลืมเกี่ยวกับวิธีเติม PHP ในช่องว่าง! ขอบคุณที่อธิบาย!
Dom Hastings

@Titus ขอบคุณ ฉันเป็นนักกอล์ฟมือใหม่! ผมไม่ทราบว่าทำไมฉันไม่ได้ตระหนักถึง->'t' tนอกจากนี้ฉันยังต้องค้นหาเพื่อหาวิธี "วิ่งไปป์ด้วย-nF" แต่ฉันก็หาได้ (ฉันคิดว่า) :)
โจ


0

QBIC , 49 35 ไบต์

?31-(instr(@aprjunsepnov feb`,;)%3)

สั้นลงอย่างมีนัยสำคัญกับกลอุบายบางอย่าง

คำอธิบาย

?                          PRINT
31-(                       31 minus
  instr(                   the position of
                      ,;   our input string
    @aprjunsepnov feb`  )  in the string cntaining all non-31 months                                
    %3)                    modulo 3 (this yields a 1 for each month except feb=2)


0

Rubyขนาด 45 ไบต์

->m{((Date.parse(m)>>1)-1).day}
require'date'

ลองออนไลน์!

Ruby Date.parseยอมรับชื่อเดือนด้วยตัวเอง โดยปกติสิ่งที่จะเป็นการเลื่อนขวา ( >>) จะเพิ่มในเดือนของDateวัตถุ การลบจะส่งผลต่อวันของเดือนซึ่งจะย้อนกลับไปยังวันสุดท้ายของเดือนก่อนหน้า


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