การเขียนโปรแกรมปริศนา & รหัสกอล์ฟ

คำถาม & คำตอบสำหรับผู้ชื่นชอบการเขียนโปรแกรมปริศนา

10
พิธีสารทางปัสสาวะ
พื้นหลัง ที่เรียกว่า "พิธีสารทางปัสสาวะ" ซึ่งอธิบายถึงลำดับของการเลือกโถฉี่แต่ละคนในห้องน้ำของผู้ชายได้มีการพูดคุยกันในหลายสถานที่ มีหนึ่งเวอร์ชันในโพสต์บล็อก xkcdนี้ คำถามนี้เกี่ยวข้องกับการเปลี่ยนแปลงเล็กน้อย: การจัดเรียง : n โถฉี่ในบรรทัด โปรโตคอล : แต่ละคนใหม่เลือกหนึ่งในโถฉี่ที่ห่างไกลที่สุดจากที่ใช้งานอยู่แล้ว โปรดทราบว่าสถานที่นี้ไม่มีข้อ จำกัด ในการเลือกปัสสาวะจากคนแรก อัปเดต : ลำดับของจำนวนวิธีต่างๆที่ n คนสามารถเลือก n urinals เริ่มต้นด้วย 1, 2, 4, 8, 20 ... โปรดทราบว่าสิ่งนี้ไม่เหมือนกับOEIS A095236ซึ่งอธิบายข้อ จำกัด ที่เข้มงวดกว่านี้เล็กน้อย คำถาม. งาน กำหนดจำนวนเต็ม n ระหว่าง 0 ถึง 10 เอาต์พุต (ในลำดับใดก็ได้) ลำดับที่เป็นไปได้ทั้งหมดซึ่ง n คนสามารถครอบครอง n urinals …

14
จัดเรียงอักขระตามความมืด
โปรแกรมของคุณจะต้องใส่ตัวอักษรเป็นบรรทัดดังนี้: @+.0 และส่งออกอักขระที่เรียงลำดับตามความมืดเช่นนี้: .+0@ ที่ต้องการ: คุณต้องใช้แบบอักษรแบบโมโนสเปซสำหรับการตรวจจับความมืด คุณต้องค้นหาว่าแต่ละพิกเซลมีอักขระกี่ตัว คุณต้องวาดตัวละครและจำนวนพิกเซลเช่นคุณไม่สามารถใส่จำนวนพิกเซลฮาร์ดโค้ดได้ ตามกฎที่เป็นรูปธรรมมากขึ้น: หากคุณเปลี่ยนแบบอักษรโปรแกรมของคุณควรทำงาน นอกจากนี้โปรแกรมของคุณควรสามารถเปลี่ยนแบบอักษรโดยเพียงแค่เปลี่ยนตัวแปรหรือค่าหรือสตริงในรหัส หากคุณใช้การลดรอยหยักคุณต้องนับพิกเซลเป็นเปอร์เซ็นต์ของพิกเซลสีดำทั้งหมด ตัวอย่างเช่นrgb(32, 32, 32)พิกเซลจะนับเป็น 1/8 ของพิกเซลแบบเต็ม ไม่ต้องสนใจกฎนี้หากตัวละครของคุณไม่ได้ถูกลดรอยหยัก หลังจากนับพิกเซลคุณต้องจัดเรียงอักขระตามจำนวนพิกเซลและส่งออกตามลำดับ นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ
38 code-golf 

30
การลบบรรทัดว่างในซอร์สโค้ดซึ่งทำให้เกิดการทำงานที่ไม่คาดคิด [ปิด]
เขียนสคริปต์ที่ทำงานได้ดีเมื่อมีบรรทัดว่างอยู่ในโฟลว์ของโปรแกรมลอจิก แต่จะแบ่งหรือทำให้เกิดพฤติกรรมที่ไม่คาดคิดเมื่อลบบรรทัดนั้น หลีกเลี่ยงช่องโหว่มาตรฐานและคำตอบที่โง่ โปรแกรมของคุณควรทำบางสิ่งที่ "มีประโยชน์" แม้ว่ามันจะเพิ่มจำนวนเต็มเล็กน้อยก็ตาม การลบบรรทัดว่างออกจากสตริงหลายบรรทัดจะไม่นับรวมยกเว้นผลลัพธ์ที่คาดไว้จากสตริงหลายบรรทัดนั้นไม่ควรเปลี่ยนแปลงทางเทคนิค (เช่น: หากคุณกำลังลบการจับคู่บรรทัดว่างทั้งหมด^$) นักเล่นแร่แปรธาตุไม่อนุญาตเช่นกัน อย่าทำสิ่งแปลก ๆ กับ carriage return, tabs, ช่องว่าง ฯลฯ

11
ดนตรี: มีอะไรในคอร์ดนี้บ้าง?
อินพุต สัญลักษณ์ของคอร์ด triadic ใด ๆ (ดูhttp://en.wikipedia.org/wiki/Chord_(music)#Triads ) เอาท์พุต หมายเหตุประกอบคอร์ดที่ได้รับ ตัวอย่าง อินพุต: AM เอาต์พุต:A C# E อินพุต: C#m เอาต์พุต:C# E G# อินพุต: Db+ เอาต์พุต:C# F A อินพุต: C0 เอาต์พุต:C D# F# โบนัส -50ถ้าคุณสามารถจัดการกับคอร์ดที่เจ็ด -150สำหรับการเล่นเสียงคอร์ด -150สำหรับการใช้อักขระที่พิมพ์ได้เพื่อแสดงวิธีการเล่นคอร์ดบนเปียโน ตัวอย่างสำหรับAM: ┌─┬─┬┬─┬─┬─┬─┬┬─┲┱─┬─┬─┲━┱┬─┲━┱─┬─┬┬─┬┬─┬─┐ │ │ ││ │ │ │ ││ ┃┃ │ │ ┃ ┃│ ┃ ┃ …
38 code-golf  music 

30
พิมพ์ตัวเลขทั้งหมดจาก -100 ถึง 100 ซึ่งมีตัวเลขที่กำหนด
ระบุตัวเลขระหว่าง 0 ถึง 9 (รวม) ฟังก์ชัน / รูทีนย่อยของคุณควรพิมพ์ตัวเลขทั้งหมดระหว่าง -100 ถึง 100 (รวม) ที่มีตัวเลขที่กำหนด ตัวอย่างเช่น: Input: 9 Output: -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -79 -69 -59 -49 -39 -29 -19 -9 9 19 29 39 49 59 69 79 89 90 91 92 93 94 …
38 code-golf 

24
Rosetta Stone Challenge: อะไรคือค่าเฉลี่ยต่อไป?
เป้าหมายของการท้าทาย Rosetta Stone คือการเขียนวิธีแก้ปัญหาในภาษาต่างๆให้ได้มากที่สุด แสดงการเขียนโปรแกรมได้หลายภาษาของคุณ! ความท้าทาย เมื่อคนใช้คำว่า "ค่าเฉลี่ย" พวกเขามักจะหมายถึงค่าเฉลี่ยเลขคณิตซึ่งเป็นผลรวมของตัวเลขหารด้วยจำนวนของตัวเลข อย่างไรก็ตามยังมีความหมายอื่น ๆ อีกมากมายที่จะใช้คำว่า "ค่าเฉลี่ย" รวมทั้งค่าเฉลี่ยฮาร์โมนิที่ค่าเฉลี่ยเรขาคณิตที่ค่าเฉลี่ยของค่าเฉลี่ยกำลังสองและค่าเฉลี่ย contraharmonic ความท้าทายของคุณคือการเขียนโปรแกรมที่ป้อนรายการตัวเลขและแสดงผลลัพธ์ที่แตกต่างกัน 5 วิธี นอกจากนี้คุณกำลังพยายามที่จะเขียนโปรแกรมในขณะที่หลาย ๆ ภาษาที่เป็นไปได้ คุณได้รับอนุญาตให้ใช้ฟังก์ชั่นไลบรารีมาตรฐานทุกประเภทที่ภาษาของคุณมีเนื่องจากนี่เป็นการนำเสนอภาษาเป็นส่วนใหญ่ อินพุต อินพุตจะเป็นรายการของตัวเลขที่เป็นบวก 1,2,3,4,5 1.7,17.3,3.14,24,2.718,1.618 8.6 3,123456 10.1381,29.8481,14.7754,9.3796,44.3052,22.2936,49.5572,4.5940,39.6013,0.9602 3,4,4,6.2,6.2,6.2 เอาท์พุต เอาต์พุตจะเป็นห้าวิธีในลำดับที่กล่าวถึงข้างต้น (ฮาร์โมนิกเรขาคณิตเลขคณิตกำลังสองกำลังสอง) สะดวกนี้เป็นเช่นเดียวกับการสั่งซื้อที่เพิ่มขึ้น 2.18978,2.6052,3,3.31662,3.66667 3.01183,4.62179,8.41267,12.2341,17.7915 8.6,8.6,8.6,8.6,8.6 5.99985,608.579,61729.5,87296.6,123453. 5.95799,14.3041,22.5453,27.9395,34.6243 4.5551,4.74682,4.93333,5.10425,5.28108 จะมีความผ่อนปรนที่สมเหตุสมผลในรูปแบบ I / O แต่ฉันต้องการความแม่นยำทศนิยมหลายตำแหน่ง เนื่องจากฉันต้องการเอาต์พุตทศนิยมคุณสามารถรับอินพุตทศนิยมได้ เกณฑ์การชนะอย่างมีวัตถุประสงค์ สำหรับเกณฑ์การชนะอย่างมีวัตถุประสงค์นี่คือ: แต่ละภาษาเป็นการแข่งขันแยกกันว่าใครสามารถเขียนผลงานที่สั้นที่สุด แต่ผู้ชนะโดยรวมจะเป็นคนที่ชนะการแข่งขันย่อยมากที่สุดเหล่านี้ …

13
รหัสที่ยาวที่สุดเพื่อเพิ่มหมายเลขสอง [ปิด]
งาน: +ฉันรู้ว่าเราทุกคนสามารถเพิ่มตัวเลขสองวิธีที่สั้นโดยใช้ งานของคุณคือการสร้างรหัสที่ยาวที่สุดที่คุณสามารถทำได้เพื่อเพิ่มตัวเลขสองตัว กฎ: รหัสทั้งหมดจะต้องอยู่ในหัวข้อ (อย่ากรอกด้วยรหัสที่ไม่ใช่การเพิ่มความยาว) การนับเป็นตัวอักษร แต่ไม่นับแท็บการเว้นวรรคหรือการขึ้นบรรทัดใหม่ อย่าใช้ชื่อตัวแปรที่มีความยาวเกินจริง นี่คือการโยนรหัสดังนั้นคำตอบที่ยาวที่สุดชนะ!

3
แก้ลูกบาศก์ของรูบิค
เขียนโปรแกรมที่สั้นที่สุดที่แก้คิวบ์ของรูบิค (3 * 3 * 3) ภายในระยะเวลาที่เหมาะสมและเคลื่อนไหวได้ (พูดได้สูงสุด 5 วินาทีในเครื่องของคุณและน้อยกว่า 1,000 ครั้ง) อินพุตอยู่ในรูปแบบ: UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR (อินพุตเฉพาะนี้แสดงถึงคิวบ์ที่แก้ไขแล้ว) 12 สตริงอักขระ 2 ตัวแรกคือขอบในตำแหน่ง UF, UR, ... BL (U = ขึ้น, F = ด้านหน้า, R = …

9
การบีบอัดข้อความและการบีบอัด -“ ไม่อีกแล้ว”
จากการอภิปรายเมื่อเร็ว ๆ นี้เกี่ยวกับการใช้เครื่องมือบีบอัดในโค้ดกอล์ฟฉันคิดว่ามันเป็นความท้าทายที่ดีในการเขียนตัวบีบอัดข้อความและตัวขยายการบีบอัดของคุณเอง ท้าทาย: เขียนโปรแกรมสองโปรแกรม : โปรแกรมหนึ่งเพื่อบีบอัดข้อความ ASCII เป็นลำดับไบต์และอีกโปรแกรมหนึ่งเพื่อขยายไฟล์ โปรแกรมไม่จำเป็นต้องเป็นภาษาเดียวกัน โปรแกรมแรกควรอ่านส่วนของข้อความ ASCII (จากไฟล์หรือจากอินพุตมาตรฐานหรือใช้กลไกใดก็ตามที่เป็นธรรมชาติที่สุดในภาษา) และส่งออกเวอร์ชันบีบอัดของมัน (เอาท์พุทที่บีบอัดอาจประกอบด้วยหรือโดยพลการไบต์ไม่จำเป็นต้องอ่าน) โปรแกรมที่สองควรอ่านผลลัพธ์ของแรกและสร้างข้อความอินพุตเดิม เกณฑ์การให้คะแนน: คะแนนของการแก้ปัญหาจะเป็นผลรวมของการนับสามต่อไปนี้: ความยาวของคอมเพรสเซอร์โปรแกรมในตัวละคร ความยาวของการส่งออกของคอมเพรสเซอร์ได้รับการป้อนข้อมูลการทดสอบด้านล่างไบต์ ความยาวของ decompressorโปรแกรม (ถ้าแตกต่างจากคอมเพรสเซอร์) ในตัวละคร คุณควรสังเกตการนับทั้งสามและผลรวมของคำตอบของคุณ ตั้งแต่นี้เป็นรหัสกอล์ฟที่ต่ำกว่าคะแนนที่ดีกว่า กฎและข้อ จำกัด : คุณไม่สามารถใช้เครื่องมือหรือไลบรารีการบีบอัดหรือการคลายการบีบอัดใด ๆ ที่มีอยู่ก่อนแม้ว่าจะมาพร้อมกับภาษาที่คุณเลือก หากมีข้อสงสัยเกี่ยวกับการอนุญาตให้ใช้เครื่องมือหรือฟังก์ชั่นที่กำหนดโปรดถาม โปรแกรมคอมเพรสเซอร์ของคุณต้องสามารถจัดการอินพุตที่ประกอบด้วยข้อความ ASCII ที่พิมพ์ได้รวมถึงแท็บ (ASCII 9) และฟีดบรรทัด (ASCII 10) คุณอาจ แต่ไม่จำเป็นต้องจัดการกับ Unicode และ / หรืออินพุตแบบไบนารีโดยพลการ โปรแกรมตัวขยายการบีบอัดของคุณจะต้องสร้างเอาต์พุตที่ตรงตามที่ได้รับกับคอมเพรสเซอร์เหมือนกับอินพุต โดยเฉพาะอย่างยิ่งระวังอย่าให้มีการป้อนบรรทัดต่อท้ายหากอินพุตไม่มี (อินพุตทดสอบด้านล่างมีฟีดบรรทัดต่อท้ายดังนั้นคุณจะต้องทดสอบแยกต่างหากเคล็ดลับสำหรับ …

13
เล่นกอล์ฟร่วมกัน
การใช้สองภาษาที่คุณเลือกเขียนที่เล็กที่สุด“ร่วมกันควิน ” ที่คุณสามารถ นั่นคือเขียนโปรแกรม P ในภาษา A ที่ส่งออกซอร์สโค้ดสำหรับโปรแกรม Q ในภาษา B ดังนั้นผลลัพธ์ของโปรแกรม Q จะเหมือนกับรหัสแหล่งที่มาสำหรับ P ไฟล์ที่ว่างเปล่าจะไม่ถูกนับรวมหรือไม่ "อ่านไฟล์ต้นฉบับและพิมพ์" - โปรแกรมสไตล์ แก้ไข:คำตอบด้วย P = Q จะไม่นับอีกต่อไป

30
นับผลรวมของตัวเลขทั้งหมด
ความท้าทายนี้คือการเขียนโปรแกรมหรือสคริปต์ซึ่งนับผลรวมของตัวเลขทั้งหมดภายในจำนวนเต็มตั้งแต่ 1 ถึงและรวมถึงจำนวนที่กำหนด อินพุตหนึ่งจำนวนเต็มบวก เอาท์พุทผลรวมของตัวเลขในจำนวนนั้นและจำนวนที่น้อยกว่าทั้งหมด ตัวอย่าง: Input: 5 Integer Sequence: 1, 2, 3, 4, 5 Sum of Digits: 1 + 2 + 3 +4 + 5 = 15 Input: 12 Integer Sequence: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 Sum of Digits: 1 + 2 …
38 code-golf  math 

16
กระดานหมากรุกที่เล็กที่สุดในการบีบอัด
เขียนอัลกอริทึมหรือโปรแกรมที่สามารถเข้ารหัสและถอดรหัสกระดานหมากรุก เป้าหมายคือการทำให้การเป็นตัวแทนที่เล็กที่สุดของกระดานหมากรุกที่สามารถนำมาใช้ (ถอดรหัสครั้งเดียว) เพื่อกำหนดความเป็นไปได้การเคลื่อนไหวทั้งหมดสำหรับผู้เล่นที่เปิด การเข้ารหัสจะต้องสามารถแสดง: ใครหันมาทางไหน ไม่ว่าจะเป็นผู้เล่นสามารถปราสาทในแต่ละด้าน ไม่ว่าผู้เล่นจะสามารถดำเนินการ en-passant และถ้าเป็นเช่นนั้นซึ่งเบี้ยของพวกเขา? ตำแหน่งของชิ้นงานทั้งหมด หมายเหตุสำคัญเกี่ยวกับการขว้างปา:หากขาวขยับกษัตริย์ของพวกเขาในคราวเดียวแล้วย้ายกลับไปอีกครั้งมันจะต้องชัดเจนว่าพวกเขาไม่สามารถปราสาททั้งสองข้างหลังจากนั้น ถ้าพวกเขาย้ายไปทางซ้ายหรือขวาของพวกเขาเหมือนกัน แม้ว่ากระดานจะอยู่ในสภาพเดียวกันเมื่อสองตาก่อน แต่สภาพเกมก็เปลี่ยนไป ข้อมูลเพิ่มเติมที่นี่: http://en.wikipedia.org/wiki/Chess#Castling หมายเหตุสำคัญเกี่ยวกับผู้สัญจร:นี่คือการย้ายที่ละเอียดอ่อน อ่านกฎสำหรับข้อมูลเพิ่มเติม http://en.wikipedia.org/wiki/Chess#En_passant กำหนดอินพุตและเอาต์พุตตามต้องการ อุปกรณ์ประกอบฉากสำคัญสำหรับใครก็ตามที่สามารถบีบอัดมันได้มากที่สุด! คะแนนของคุณจะถูกกำหนดสถานการณ์กรณีที่เลวร้ายที่สุด - ขนาดที่เป็นไปได้สูงสุดในบิต ตรวจสอบให้แน่ใจว่าคุณแสดงให้เห็นว่าคุณคำนวณจำนวนนั้นอย่างไรและคิดอย่างไร ยิงเพื่อใส่เคสที่แย่ที่สุด!

30
ค้นหาเข็มในกองหญ้า
เมื่อกำหนดให้กองหญ้าแห้งขนาดสี่เหลี่ยมอย่างน้อย 2x2 ประกอบด้วยอักขระ ASCII ที่พิมพ์ได้เหมือนกันทั้งหมดให้เอาตำแหน่งออก (นับจากด้านบนซ้าย) ของเข็มซึ่งเป็นอักขระที่แตกต่างกัน ตัวอย่างเช่นหากกองหญ้าต่อไปนี้เป็นอินพุต: ##### ###N# ##### ##### ผลลัพธ์ควรเป็น3,1เมื่อทำดัชนีเป็นศูนย์ (สิ่งที่ฉันจะใช้ในการท้าทายนี้) หรือ4,2เมื่อทำดัชนีหนึ่งรายการ กองหญ้าสามารถประกอบด้วยอักขระ ASCII ที่พิมพ์ได้: ^^^ ^^^ ^N^ ^^^ ^^^ ^^^ เอาท์พุท: 1,2 และเข็มจะเป็นอักขระ ASCII ที่พิมพ์ได้อื่น ๆ : jjjjjj j@jjjj jjjjjj เอาท์พุต 1,1 เป็นไปได้ที่จะมีเข็มอยู่ที่มุม: Z8 88 เอาท์พุต 0,0 88 8Z เอาท์พุต 1,1 หรือมีเข็มที่ขอบ: >>>>>>>>>> >>>>>>>>>: >>>>>>>>>> เอาท์พุต …
38 code-golf  string 

30
พิมพ์ข้อความที่มองไม่เห็น
รับสตริงเป็นอินพุตเอาต์พุตจำนวนอักขระช่องว่าง (0x0A และ 0x20) เท่ากับความยาวของสตริง ตัวอย่างเช่นการกำหนดสตริงที่Hello, World!รหัสของคุณจะต้องส่งออก 13 ตัวอักษรช่องว่างและสิ่งอื่นใด สิ่งเหล่านี้อาจเป็นการผสมผสานระหว่างช่องว่างกับการขึ้นบรรทัดใหม่ รหัสของคุณไม่ควรส่งออกบรรทัดใหม่หรือช่องว่างที่ต่อท้ายเพิ่มเติม Testcases: Input -> Amount of whitespace to output "Hello, World!" -> 13 "Hi" -> 2 " Don't Forget about Existing Whitespace! " -> 45 "" -> 0 " " -> 13 " " -> 1 เกณฑ์การให้คะแนน: นี่คือcode-golfดังนั้นไบต์ที่น้อยที่สุดจึงชนะ!
38 code-golf  string 

7
แก้ไขช่วงเวลาที่หายไปของที่อยู่ IPv4 ของฉัน
บางครั้งเมื่อฉันพิมพ์ที่อยู่ IPv4 ฉันได้รับหมายเลขทั้งหมดถูกต้อง แต่ฉันลืมพิมพ์หนึ่งจุดขึ้นไป ฉันต้องการมีโปรแกรม (หรือฟังก์ชั่น) ที่ใช้ที่อยู่ IPv4 ที่เสียหายของฉันและแสดงตำแหน่งที่ถูกต้องทั้งหมดในช่วงเวลาที่หายไป อินพุต ข้อมูลที่ป้อนจะเป็นสตริงที่เป็นการแปลงที่อยู่ IPv4 ที่ถูกต้องเสมอ (ดูรายการด้านล่าง) มันจะถูกแปลงโดยการกำจัดของตัวละครระยะเวลาหนึ่งหรือมากกว่าเท่านั้น การส่งของคุณไม่จำเป็นต้องจัดการอินพุตนอกรูปแบบนี้ เอาท์พุต คอลเล็กชันหรือรายการโดยไม่เรียงตามลำดับหรือรูปแบบของสตริงที่แสดงที่อยู่ IPv4 ที่ถูกต้องทั้งหมดที่สามารถสร้างขึ้นจากอินพุตโดยการแทรกอักขระช่วงเวลาลงในอินพุต ผลลัพธ์อาจเป็นรายการภาษาพื้นเมืองหรือประเภทคอลเลกชันที่เรียงลำดับหรือไม่เรียงลำดับอื่น ๆ หรืออาจเป็นลำดับสตริงของที่อยู่ IPv4 คั่นด้วยวิธีที่ชัดเจน หากคุณใช้ตัวคั่นอักขระเดียวเพื่อกำหนดสตริงของคุณจะไม่อนุญาตให้ใช้เครื่องหมายมหัพภาคและตัวเลขเป็นตัวคั่นอักขระเดี่ยว ฉันรู้ว่าแตกต่างจากตัวเลขช่วงเวลาที่ตัวคั่นไม่ชัดเจน (เนื่องจากทุกช่วงเวลาที่สี่จะเป็นตัวคั่น) แต่เพื่อความสะดวกในการอ่านฉันจึงไม่อนุญาต รูปแบบที่อยู่ IPv4 ในขณะที่ที่อยู่ IPv4 นั้นเป็นเพียงลำดับของ octet ไบนารีสี่ตัวความท้าทายนี้ใช้รูปแบบทศนิยมแบบ จำกัด ที่มีจุด ที่อยู่ IPv4 เป็นค่าทศนิยมสี่ค่าที่คั่นด้วยสามจุด ค่าทั้งสี่นั้นอยู่ในช่วง0ที่255ครอบคลุม ไม่อนุญาตให้นำหน้าศูนย์ในค่าตัวเลขใด ๆ (สแตนด์อโลนหนึ่งตัวละคร0ที่ได้รับอนุญาต; หมายเลขอื่น ๆ ที่เริ่มต้นด้วยศูนย์ไม่ได้: 052, 00ฯลฯ …

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