วันหยุดนักขัตฤกษ์ถัดไป


18

คนออสเตรเลียชอบวันหยุดนักขัตฤกษ์และดื่ม เมื่อวานนี้วันที่ 26 มกราคมเป็นวันชาติออสเตรเลียซึ่งเป็นวันหยุดนักขัตฤกษ์ ฉันดีใจที่ไม่ได้ทำงานเมื่อวานนี้และกระตือรือร้นที่จะรู้ในครั้งต่อไปที่ฉันได้รับวันหยุดนักขัตฤกษ์! น่าเสียดายที่ฉันดื่มมากเกินไปและฉันไม่สามารถออกกำลังกายได้ด้วยตัวเอง

เขียนโปรแกรมที่จะใช้วันที่ในสัญกรณ์วันที่ / เวลาของออสเตรเลีย (dd / mm) เป็นอินพุตและส่งออกจำนวนวันจนถึงวันหยุดนักขัตฤกษ์ถัดไป เนื่องจากฉันเป็นผู้อยู่อาศัยในรัฐควีนส์แลนด์ (QLD) ฉันสนใจเฉพาะวันหยุดนักขัตฤกษ์ที่มีผลกระทบต่อรัฐควีนส์แลนด์ :

25/03 | วันศุกร์ที่ดี
26/03 | อีสเตอร์เสาร์
28/03 | อีสเตอร์วันจันทร์
25/04 | วัน Anzac
02/05 | วันแรงงาน
03/10 | วันเกิดของพระราชินี
25/12 วันคริสต์มาส
26/12 บ็อกซิ่งเดย์
27/12 วันหยุดวันคริสต์มาส

จดบันทึกสิ่งต่อไปนี้จากไซต์:

วันหยุดวันคริสต์มาส

วันหยุดนักขัตฤกษ์เพิ่มเติมที่จะเพิ่มเมื่อวันปีใหม่วันคริสต์มาสหรือวันบ็อกซิ่งตรงกับวันหยุดสุดสัปดาห์

เพราะวันคริสมาสต์เมื่อวันอาทิตย์ที่มีความพิเศษในวันหยุดนักขัตฤกษ์ วันคริสต์มาสยังคงเป็นวันหยุดนักขัตฤกษ์

เนื่องจากฉันเป็นคนเช้าคุณควรรวมวันที่ปัจจุบันเป็นวัน (ซึ่งเป็นเวลาที่เป็นไปได้มากที่สุดที่ฉันจะตรวจสอบโปรแกรมของคุณสำหรับวันหยุดนักขัตฤกษ์ถัดไป) นั่นคือหากป้อนวันที่วันหยุดราชการผลผลิตของคุณควรเป็น0; 1ถ้าวันก่อนวันหยุดนักขัตฤกษ์จะถูกป้อนผลผลิตของคุณจะ

ฉันสนใจเฉพาะวันที่ระหว่างนี้ (วันที่ 27/01) จนถึงสิ้นปี วันสุดท้ายที่คุณจะต้องพิจารณาคือ 31/12 ซึ่งผลงานของคุณจะเป็น1(สำหรับวันปีใหม่)

ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม

อินพุต

  • ข้อมูลที่ป้อนจะเป็น 5 ตัวอักษร: 4 ตัวอักษรคั่นด้วยเครื่องหมายขีดกลาง-หรือเครื่องหมายทับ/
  • ข้อมูลที่ป้อนจะเป็นวันที่ระหว่าง 27/01 ถึง 31 ธันวาคมเท่านั้น

เอาท์พุต

  • จำนวนวันจนถึงวันหยุดนักขัตฤกษ์ถัดไปในรัฐควีนส์แลนด์ออสเตรเลียซึ่งรวมถึงวันที่ป้อน: ควรเป็นตัวเลขระหว่าง0และ153(ช่องว่างที่ยาวที่สุด)
  • ไม่มีบรรทัดใหม่หรือข้อผิดพลาด

ตัวอย่าง

01-05 = 1  
02-05 = 0  
03-05 = 153  
25/12 = 0
26-12 = 0
27/12 = 0
30/12 = 2
31-12 = 1

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


@insertusername ที่นี่ขอบคุณสำหรับคำแนะนำที่ยอดเยี่ยม! ฉันได้เพิ่มวันที่ในคำถาม
Tas

@ คุณแน่ใจหรือว่าวันเหล่านั้นถูกต้อง? สิ่งที่อยู่ในตัวอย่างไม่ตรงกับเครื่องหมายคำพูดและทั้งคู่ไม่ตรงกับเว็บไซต์
Adam Martin

@ AdamMartin ขอบคุณที่ชี้ให้เห็น ฉันใส่ผิดในวันเดือนธันวาคม วันที่ในตัวอย่างเป็นวันที่ใด ๆ ไม่ใช่เฉพาะวันหยุดนักขัตฤกษ์ นี่เป็นเพียงตัวอย่างของวันที่ที่สามารถป้อนได้และผลลัพธ์ควรเป็นอย่างไร คนที่อ้างถึงควร (และหวังว่าจะทำ) จับคู่กับสิ่งที่ได้จากเว็บไซต์
Tas

คุณเฉลิมฉลองวันคล้ายวันพระราชินีในเดือนตุลาคมที่ควีนส์แลนด์ไหม? นั่นแปลกมาก แต่ดูเหมือนถูกต้องจากลิงก์
เลเวลริเวอร์เซนต์

ว้าวพวกคุณไม่มีวันหยุดตั้งแต่เดือนมิถุนายนตรงถึงกันยายน นั่นมันหยาบ
Joe Z.

คำตอบ:


2

Pyth , 98 84 62 67 ไบต์

อัปเดต:บันทึก 14 ไบต์ด้วยการย่อรายการจำนวนวันทั้งหมด 12 เดือนสำหรับการคำนวณตัวเลขวัน ยังไม่พบวิธีที่ดีในการบีบอัดรายการอื่นแม้ว่ายังลอง!

Update2:บันทึกอีก 22 ไบต์ด้วยการเข้ารหัสรายการตัวเลขวันเป็นสตริงฐาน 256

J30KhJ=Yc:z"\W"dd=N+s<[KtJKJKJKKJKJK)tseYshY-hfgTNCMc"UVXt{ĕŨũŪů"1N

ลองออนไลน์!

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


ดูเหมือนว่าจะไม่ชอบการป้อนข้อมูลคั่นด้วยเครื่องหมายขีดคั่น แต่อย่างอื่นดี
Tas

@Tas ขอบคุณสำหรับคำแนะนำ, overread สมบูรณ์ส่วนนั้น ... คงที่ 5 ไบต์เพิ่มเติม บางทีคุณควรเพิ่มยัติภังค์บางส่วนลงใน testcase เนื่องจากคุณต้องการให้ครอบคลุมทุกรูปแบบอินพุตที่เป็นไปได้
Denker

5

Visual Basic สำหรับแอปพลิเคชัน 155 หรือ 118 ไบต์

เวอร์ชัน 1 - โลแคลอิสระ 155 ไบต์

Function h(d)
For i=0To 9
h=Array(0,1,3,31,38,192,275,276,277,282)(i)+42454-DateSerial(16,Val(Right(d,2)),Val(Left(d,2)))
If h>=0Goto 9
Next
9 End Function

เวอร์ชัน 2 - ขึ้นอยู่กับโลแคล, 118 ไบต์

Function h(d)
For i=0To 9
h=Array(0,1,3,31,38,192,275,276,277,282)(i)+42454-CDate(d)
If h>=0Goto 9
Next
9 End Function

จำนวนไบต์เป็นไฟล์. BAS สุดท้ายรวมถึงอักขระที่ป้อนบรรทัด แก้ไขภายนอกตัวแก้ไข VBA มาตรฐาน (เนื่องจากกำหนดให้มีช่องว่างเพิ่มเติมและรูปแบบที่แน่นอนของคำหลักบางคำ) - แต่นำเข้าและทำงานได้อย่างราบรื่นบนแอปพลิเคชัน Office ใด ๆ (เพื่อทดสอบประเภทเช่น? h("10/08")ในหน้าต่างทันทีหรือใน Excel ใช้โดยตรงในสูตรเซลล์)

(แก้ไข) เริ่มแรกฉันเลือกที่จะใช้DateSerialเพื่อทำให้ฟังก์ชั่นสถานที่ปลอดภัย (รุ่น 1) ขณะที่ฉันอาศัยอยู่ในบราซิลและทำให้ระบบของฉันถูกกำหนดให้ใช้รูปแบบ "dd / mm / yy" สำหรับวันที่ (เช่นเดียวกับออสเตรเลีย) ฉันสามารถเขียนเวอร์ชันที่เล็กลงโดยใช้CDateแทน (รุ่น 2)CDateใช้ข้อมูลตำแหน่งที่ตั้งของระบบเพื่อแปลงข้อความเป็นวันที่ ฉันยังสันนิษฐานในรุ่นนี้ว่ารหัสจะถูกเรียกใช้เฉพาะในปี 2559 (หากไม่ใส่ปี (-6 ไบต์) CDateถือว่าปีปัจจุบันตามนาฬิการะบบ)

หมายเลข 42454 ในบรรทัดที่สามคือผลรวมของ 42450 ซึ่งเป็นตัวเลขที่แสดงถึง 01/01/2016 บน VBA และ 84 ที่เป็นวันหยุดประจำปีสำหรับวันหยุดแรก Array ประกอบด้วยวันของปีสำหรับแต่ละวันหยุด (รวมถึง 01/01/2017) ชดเชยด้วย -84 เนื่องจากนี่ใช้เวลาบางส่วน การใช้ 16 แทนที่จะเป็น 2559 DateSerialจะเพิ่มไบต์อีกสองไบต์

การสร้างอาเรย์ที่เหมือนกันเก้าครั้งภายในการวนซ้ำคือรหัส "ไม่ดี" แต่ทำงานและบันทึกได้อีก 3 ไบต์ (หนึ่งชื่อสำหรับอาเรย์และอีกอันสำหรับเครื่องหมายเท่ากับลูปนอกและอีกหนึ่งการอ้างอิงอาเรย์ภายในลูป)

ช่องว่าง "ขาดหายไป" ระหว่าง 0 ถึงคำสำคัญต่อไปนี้ในบรรทัดที่สองและสี่ไม่จำเป็นเนื่องจาก VBE จะถูกนำเสนอใหม่โดยอัตโนมัติเมื่อนำเข้าโมดูล ใช้ล้าสมัย แต่ไบต์ราคาถูกIf <...> Goto <linenumber>เพื่อแยกจากลูป (ทั้งIf <...> Then Exit ForและIf <...> Then Exit Functionใช้อักขระมากขึ้น)

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


ยินดีต้อนรับสู่ PPCG! ที่นี่เรากำหนดภาษาการเขียนโปรแกรมโดยล่ามดังนั้นจึงเป็นที่ยอมรับอย่างสมบูรณ์ว่าต้องใช้ภาษาใดภาษาหนึ่ง
lirtosiast

ขอบคุณ! แก้ไขเพื่อเพิ่มเวอร์ชันที่ขึ้นกับโลแคลที่เล็กกว่า
dnep

4

JavaScript (ES6), 131 128 ไบต์

d=>[56,57,59,87,94,248,331,332,333,338].map(n=>r=r||(q=1454e9+n*864e5-new Date(d[3]+d[4]+`/${d[0]+d[1]}/16`))>=0&&q/864e5,r=0)|r

คำอธิบาย

ใช้DateConstructor ในตัว JavaScript เพื่อแปลงสตริงอินพุตเป็นจำนวนมิลลิวินาทีนับตั้งแต่ยุคแล้วเปรียบเทียบสิ่งนี้กับจำนวนมิลลิวินาทีสำหรับวันหยุดนักขัตฤกษ์แต่ละวัน

ทำได้โดยเก็บวันหยุดนักขัตฤกษ์เป็นจำนวนวันตั้งแต่วันที่อ้างอิง ฉันเลือก2016-01-29วันที่อ้างอิงเนื่องจากจำนวนมิลลิวินาทีนับตั้งแต่ยุคสามารถย่อให้สั้นที่สุดสำหรับวันนี้ จำนวนมิลลิวินาทีใด ๆ ระหว่างวันนี้และวันถัดไปทำงานเนื่องจากผลลัพธ์ถูกปัดเศษลงและเก็บหมายเลขไว้ตรงกลางเพื่อหลีกเลี่ยงเอฟเฟกต์การปรับเวลากลางวัน (แม้ว่าเขตเวลาของ OP จะไม่มีการออมแสง) จำนวนของวันนี้คือ1453986000000และปัดเศษขึ้นไป1454000000000(เพิ่มสองสามชั่วโมง) 1454e9หมายความว่ามันสามารถเขียนเป็น

d=>
  [56,57,59,87,94,248,331,332,333,338]             // list of day offsets from 01/29
  .map(n=>                                         // for each public holiday offset n
    r=r||                                          // if r is already set, do nothing
      (q=                                          // q = approximate difference in ms
        1454e9+n*864e5                             // time of public holiday
        -new Date(d[3]+d[4]+`/${d[0]+d[1]}/16`)    // time of input date
      )
      >=0&&                                        // if q >= 0
        q/864e5,                                   // r = q in days
    r=0                                            // r = result
  )
  |r                                               // floor and return r

ทดสอบ

โซลูชันนี้ขึ้นอยู่กับเขตเวลาของผู้ใช้ สิ่งนี้ทำงานในเขตเวลาของ OP (และของฉัน) (GMT +1000) หากคุณต้องการทดสอบในเขตเวลาอื่นการเพิ่มnumberOfHoursDifferentFromGMT1000 * 60 * 60 * 1000ลงในหมายเลขวันที่อ้างอิงควรใช้งานได้ (เช่น GMT +0430 จะเป็น-5.5 * 60 * 60 * 1000 + 1454e9+n*864e5)


สิ่งนี้จะให้ 0 เสมอเมื่อวันที่คั่นด้วยเครื่องหมายยัติภังค์ ฉันได้ขอให้ OP ปรับการทดสอบของเขาเนื่องจากพวกเขาทั้งหมดมีสแลชเป็นตัวคั่น
Denker

@ DenkerAffe โอ้ฉันคิดว่าเขาหมายความว่าเรามีอิสระที่จะเลือกตัวคั่น บังเอิญการทำให้ตัวคั่นคั่นไว้ช่วยฉันได้ 3 ไบต์ดังนั้นขอบคุณ!
user81655

1
ดูเหมือนว่ากฎseparated with a hyphen - or slash /นั้นค่อนข้างน่าสงสัย สำหรับฉันมันหมายความว่าเราต้องจัดการกับทั้งสอง แต่ฉันสามารถเห็นด้านของคุณแน่นอน เดา OP ควรชี้แจงเรื่องนี้
Denker

3

T-SQL, 210 , 206 , 194 ไบต์

(โพสต์แรกที่นี่หวังว่าจะโอเค แต่โปรดดี :)

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

DECLARE @i CHAR(5)='23-09';DECLARE @c INT=DATEPART(dy,CAST(REPLACE(@i,'-','/')+'/2016' AS DATE))-1;SELECT MIN(b)-@c FROM(VALUES(84),(85),(87),(115),(122),(276),(359),(360),(361))a(b)WHERE b>=@c;

อัปเดต varcharเพื่อcharบันทึก 3 ไบต์พร้อมลบช่องว่าง :)

อัปเดต 2ประกาศ@cและกำหนดโดยไม่มีการเลือก


2

T-SQL ขนาด 296 ไบต์

สร้างเป็นฟังก์ชั่นที่มีคุณค่าของตาราง

create function d(@ char(5))returns table return select min(o)o from(select datediff(day,cast('2016'+right(@,2)+left(@,2)as date),cast(right('2016'+right('0'+cast(d as varchar(4)),4),8)as datetime)+1)o from(values(324),(325),(327),(424),(501),(1002),(1224),(1225),(1226),(1231))d(d))d where 0<=o

ใช้ในลักษณะดังต่อไปนี้

SELECT *
FROM (
    VALUES
        ('01/05') --= 1  
        ,('02/05') --= 0  
        ,('03/05') --= 153  
        ,('25/12') --= 0
        ,('26/12') --= 0
        ,('27/12') --= 0
        ,('30/12') --= 2
        ,('31/12') --= 1
    )testData(i)
    CROSS APPLY (
        SELECT * FROM d(t)
    ) out

i     o
----- -----------
01/05 1
02/05 0
03/05 153
25/12 0
26/12 0
27/12 0
30/12 2
31/12 1

(8 row(s) affected)

คำอธิบายสั้น ๆ

create function d(@ char(5)) returns table  -- function definition
return 
select min(o)o -- minimum set value
from(
    select datediff( -- date difference
        day, -- day units
        cast('2016'+right(@,2)+left(@,2)as date), -- convert input parameter to date
        cast(right('2016'+right('0'+cast(d as varchar(4)),4),8)as datetime)+1 -- convert int values into datetimes and add a day
        )o 
    from(
        values(324),(325),(327),(424),(501),(1002),(1224),(1225),(1226),(1231) -- integers representing the day before public holidays
        )d(d)
    )d 
where 0<=o -- only for values >= 0

2

JavaScript (ES6), 134 ไบต์

x=>[0,1,3,31,38,192,275,276,277,282].find(z=>z>=(q=x[0]+x[1]- -[...'20212122121'].slice(0,x[3]+x[4]-1).reduce((a,b)=>+b+a+29,0)-85))-q

user81655 ยังคงให้ฉันเอาชนะด้วย 3 ไบต์ แต่ฉันไม่สามารถหาที่อื่นเพื่อบีบสิ่งใดออกจากที่นี่ ทำงานโดยการคำนวณจำนวนวันที่ไปแทนการใช้วันที่แล้วเปรียบเทียบกับอาร์เรย์ของวันหยุดชดเชย


2

Python 2, 204 185 165 166 Bytes

อัปเดต:ตีมันลง ~ 20 ไบต์โดยการคำนวณวันของปีด้วยตัวเอง ไม่ต้องการการนำเข้าที่ยาวนานอีกต่อไป :)

อัปเดต 2:อีก 20 ไบต์โดยตระหนักว่าฉันสามารถรักษาปีใหม่ได้เหมือนวันที่ 367 และทำการปรับเปลี่ยนเล็กน้อยอื่น ๆ

def f(d):d=[d[:2],d[3:]];y=sum([31,29,31,30,31,30,31,31,30,31,30,31][:int(d[1])-1])+int(d[0]);return filter(lambda n:n>=y,[85,86,88,116,123,277,360,361,362,367])[0]-y

ลองออนไลน์!

Ungolfed:

def f(d):
    l=[85,86,88,116,123,277,360,361,362,367]
    d=[d[:2],d[3:]]
    y=sum([31,29,31,30,31,30,31,31,30,31,30,31][:int(d[1])-1])+int(d[0])
    f=filter(lambda n:n>=y,l)
    return f[0]-y

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


1

PHP, 116 ไบต์

วิธีการตรงไปตรงมาสวย มันเก็บวันของปีสำหรับวันหยุดและป๊อปพวกเขาตราบใดที่พวกเขาในอดีต ในที่สุดวันที่ขอของปีจะถูกลบออก

for($x=[366,361,360,359,276,122,115,87,85,84];($a=date(z,strtotime($argv[1].'-2016')))>$t=array_pop($x););echo$t-$a;

ผ่านกรณีทดสอบทั้งหมด เรียกใช้จากบรรทัดคำสั่งและยอมรับอินพุตโดยใช้เครื่องหมายขีดคั่นเช่น:

$ php holidays.php "12-05"

1

ทับทิม 1.9.3 155 153 ไบต์

หลังจากวันหยุดคริสต์มาสเราต้องการวันพิเศษสุดของเรา 366! กรณีที่คล้ายกันเป็น @DenkerAffe

require'date'
c=(Date.strptime(ARGV[0],'%d/%m')-Date.parse('01/01')).to_i
print [84,85,87,115,122,276,359,360,361,366].map{|i|(i-c)}.select{|i|i>=0}.min

การใช้งาน:

$ ruby i_want_to_break_free.rb "03/05"

ฉันไม่รู้เกี่ยวกับ Ruby มากนัก แต่ฉันคิดว่าคุณสามารถบันทึก 3 Bytes ได้โดยลบ whitespaces ในบรรทัดที่ 1 และ 3 นอกจากนี้คุณควรระบุวิธีการป้อนข้อมูลที่คุณใช้เนื่องจากไม่ชัดเจนในรหัสของคุณ คุณอาจบันทึกบาง Bytes โดยกำหนดฟังก์ชั่นเพื่อให้คุณสามารถนำเข้าเป็น argumen และใช้ค่าตอบแทนเป็นเอาท์พุท
Denker

@DenkerAffe ขอบคุณมาก! ฉันบันทึก 2 ไบต์ แต่ฉันคิดว่าฟังก์ชั่นจะเพิ่มจำนวน ฉันได้อัปเดตคำตอบด้วยตัวอย่างการใช้งานแล้ว
Tarod

0

05AB1E , 45 ไบต์

•9JRt€ª´Q®Ië•368вDI„-/S¡`•Σ₁t•ºS₂+s<£O+©@Ïн®-

มันอาจจะไม่ใช่ 2016 อีกต่อไป แต่อะไรก็ตาม .. ;) ยังคงถือว่าปีคือ 2016 เพราะเป็นปีอธิกสุรทินที่มี29ในเดือนกุมภาพันธ์

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

9JRt€ª´Q®Ië•  # Push compressed integer 10549819042671399072072399
  368в         # Converted to base-368 as list: [85,86,88,116,123,277,360,361,362,367]
      D        # Duplicate this list
I              # Take the input
 „-/S¡         # Split it on ["-","/"]
      `        # Push both integer separated to the stack
•Σ₁t          # Push compressed integer 5354545
     º         # Mirror it without overlap: 53545455454535
      S        # Converted to a list of digits: [5,3,5,4,5,4,5,5,4,5,4,5,3,5]
       ₂+      # Add 26 to each: [31,29,31,30,31,30,31,31,30,31,30,31,29,31]
         s     # Swap to get the month-integer
          <    # Decrease it by 1
           £   # Only leave the first month-1 values from the integer-list
            O  # Sum that sublist
             + # And add it to the day-integer (so we now have the N'th day of the year)
©              # Save this in the register (without popping)
 @             # Do a >= check with each integer in the first (duplicated) list we created
  Ï            # Only leave the truthy values from the list
   н           # Then pop this sublist and only leave its first value
    ®-         # And subtract the integer we saved in the register (N'th day of the year)
               # (after which the result is output implicitly)

ดู 05AB1E นี้เคล็ดลับของฉัน (ส่วนวิธีการบีบอัดจำนวนเต็มขนาดใหญ่?และวิธีการบีบอัดรายการจำนวนเต็ม? )จะเข้าใจว่าทำไม•9JRt€ª´Q®Ië•คือ10549819042671399072072399; •9JRt€ª´Q®Ië•368вคือ[85,86,88,116,123,277,360,361,362,367]; และเป็น•Σ₁t•5354545

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