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

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

2
เล่นเกม Yahtzee
ในเกม Yahtzee ผู้เล่นผลัดกันกลิ้งลูกเต๋า 6 ด้าน 5 ข้างได้ถึงสามครั้งต่อรอบอาจช่วยลูกเต๋าระหว่างม้วนจากนั้นเลือกหมวดหมู่ที่พวกเขาต้องการใช้สำหรับการหมุนของพวกเขา สิ่งนี้จะดำเนินต่อไปจนกว่าจะไม่มีหมวดหมู่เพิ่มเติม (ซึ่งเกิดขึ้นหลังจาก 13 รอบ) จากนั้นคะแนนของผู้เล่นจะถูกนับและผู้เล่นที่มีคะแนนสูงสุดจะเป็นผู้ชนะ หมวดหมู่มีดังนี้ ("ผลรวมของลูกเต๋า" หมายถึงการเพิ่มจำนวนของลูกเต๋าบนลูกเต๋าที่ระบุ): ส่วนบน Aces : ผลรวมของลูกเต๋าที่แสดง 1 pip Twos : ผลรวมของลูกเต๋าที่แสดง 2 pips Threes : ผลรวมของลูกเต๋าที่แสดง 3 pips Fours : ผลรวมของลูกเต๋าที่แสดง 4 pips Fives : ผลรวมของลูกเต๋าที่แสดง 5 pips Sixes : ผลรวมของลูกเต๋าที่แสดง 6 pips ส่วนล่าง Three of a …

2
สิ่งที่ถูกล้อมรอบ
ฉันต้องการที่จะล้อมรอบข้อความด้วย#s เสมอ แต่ฉันมีปัญหาในการหาสิ่งที่ฉันล้อมรอบดังนั้นในความท้าทายนี้คุณจะได้เขียนโปรแกรมเพื่อทำสิ่งนั้น ตัวอย่าง อินพุต / เอาต์พุตแยกจากกันโดยขึ้นบรรทัดใหม่ ### #a# ### a # #a# # a ### # a # # b c # ####### a b c ABCDHIJ E####GK F# M #L # N#O P#### M N ###A### #C#B#o# #d###e# # go# ### C o d e go สเป็ค #s …
18 code-golf  string 

5
ตัวเลขนี้เป็นแบบสุ่มหรือไม่?
ฉันถามrandom.orgสำหรับจำนวนเต็ม 128 แบบสุ่มระหว่าง 0 และ 2 32 - 1 เนื่องจากตัวสร้างตัวเลขสุ่มนั้นมีความกระตือรือร้นที่จะให้ตัวเลข 64 ตัวแรกก่อนพวกเขาจึงสุ่มมากกว่า 64 คนอื่นอย่างเห็นได้ชัด เขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบที่ส่งคืนผลลัพธ์ที่เป็นจริงเมื่อหนึ่งใน 64 จำนวนเต็มต่อไปนี้เป็นอินพุต: [1386551069, 1721125688, 871749537, 3410748801, 2935589455, 1885865030, 776296760, 614705581, 3841106923, 434616334, 1891651756, 1128215653, 256582433, 310780133, 3971028567, 2349690078, 489992769, 493183796, 3073937100, 3968540100, 777207799, 515453341, 487926468, 2597442171, 950819523, 1881247391, 3676486536, 3852572850, 3498953201, 2544525180, 297297258, 3783570310, 2485456860, …

1
ติดตั้ง Enigma Machine
เครื่อง Enigma เป็นเครื่องเข้ารหัสที่ค่อนข้างซับซ้อนซึ่งชาวเยอรมันและคนอื่นใช้ในการเข้ารหัสข้อความ เป็นหน้าที่ของคุณที่จะใช้เครื่องนี้ * ขั้นตอนที่ 1 การหมุน เครื่องปริศนาของเรามี 3 ช่องสำหรับโรเตอร์และโรเตอร์ที่มี 5 ช่องสำหรับแต่ละช่องเหล่านี้ โรเตอร์แต่ละตัวมีตำแหน่งที่เป็นไปได้ 26 แบบที่แตกต่างกัน (จากAถึงZ) โรเตอร์แต่ละตัวมีตำแหน่งรอยที่กำหนดไว้ล่วงหน้า: Rotor Notch ------------ 1 Q 2 E 3 V 4 J 5 Z เมื่อกดปุ่มจะเกิดขั้นตอนต่อไปนี้: โรเตอร์ใน Slot 1 หมุน ถ้าโรเตอร์ในช่อง 1 เคลื่อนผ่านรอยบากมันก็จะหมุนโรเตอร์ในช่อง 2 ถ้าโรเตอร์ใน Slot 2 อยู่ในรอย (แต่ไม่ได้ขยับไปที่นั่น) ทั้งโรเตอร์ 2 และ 3 หมุนหนึ่งครั้ง …

4
ปฏิบัติตามเส้นทาง
ความท้าทายคือการติดตาม (วาด) เส้นทาง: ^n - ขึ้น n บรรทัด vn - ลงทีละบรรทัด >n - ขวาโดย n ตำแหน่งอักขระ <n - เหลือตำแหน่ง n อักขระ nเป็นจำนวนเต็มมากกว่าศูนย์ (เช่นคุณไม่สามารถรับคำสั่งเหมือน>-2) ไม่มีตัวคั่นระหว่างคำสั่งอินพุตที่มีรูปแบบที่ดีมีลักษณะดังนี้: >5v8<10^3ไม่อนุญาตให้ใช้อินพุตรูปแบบอื่น จำนวนคำสั่งไม่ จำกัด ไม่ควรมีตัวอักษรมากขึ้นที่จะคืบเข้าไปในอินพุต ตัวอย่าง. อินพุตเป็นสตริงว่างเปล่าเอาต์พุต: * อินพุตเป็นอย่างใดอย่างหนึ่ง>3หรือ<3: โปรดทราบว่านี่ไม่ได้สร้างความแตกต่างให้กับเอาต์พุต **** คล้ายกันสำหรับ^3และv3: * * * * อินพุต: >1v2, เอาต์พุต: ** * * อินพุต: ^4>3v2<1, เอาต์พุต: **** * …

9
RNA การแปลโปรตีน
RNAเช่นเดียวกับ DNA เป็นโมเลกุลที่พบในเซลล์ที่เข้ารหัสข้อมูลทางพันธุกรรม มันประกอบไปด้วยนิวคลีโอไทด์ซึ่งถูกแสดงโดยเบสอะดีนีน (A), ไซโตซิน (C), กัวนีน (G) และ uracil (U) * โคดอนเป็นลำดับของนิวคลีโอไทด์สามตัว โปรตีนเป็นโมเลกุลขนาดใหญ่ที่มีฟังก์ชั่นมากมายเช่นเคราตินที่พบในเส้นผมและเล็บและเฮโมโกลบินซึ่งมีออกซิเจนในเซลล์เม็ดเลือด พวกเขาประกอบด้วยกรดอะมิโนซึ่งถูกเข้ารหัสเป็น codons ในโมเลกุล RNA บางครั้ง codons ที่แตกต่างกันอาจเข้ารหัสสำหรับกรดอะมิโนเดียวกัน โดยทั่วไปแล้วกรดอะมิโนแต่ละตัวจะแสดงด้วยตัวอักษรเดียวเช่น H หมายถึงฮิสทิดีน ที่กำหนดลำดับของACGUคุณสามารถแปลเป็นสตริงโปรตีนที่สอดคล้องกัน? * DNA ประกอบด้วย ACGT โดยที่ T คือ thymine ในระหว่างการถอดรหัส DNA เป็น RNA, ไทมีนจะถูกแทนที่ด้วย uracil อินพุต ข้อมูลที่ป้อนจะเป็นสตริงเดียวที่ประกอบด้วยอักขระตัวACGUพิมพ์ใหญ่เท่านั้น คุณอาจจะเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบสำหรับความท้าทายนี้ เอาท์พุต คุณอาจเลือกที่จะแสดงผลด้วยการพิมพ์หรือส่งกลับสตริง แปลควรเริ่มต้นที่ codon เริ่มต้น ( AUGแสดงเป็นM) …

5
เคล็ดลับสำหรับการตีกอล์ฟ ASCII
ผมคิดว่าคำถามศิลปะ ASCII ใน PPCG จะสนุกกับการทำ แต่ส่วนตัวผมคิดว่ามันอาจจะค่อนข้างยากโดยเฉพาะอย่างยิ่งเมื่อเป็นคำถามที่ติดแท็กเป็นรหัสกอล์ฟ ฉันสงสัยว่าใครที่นี่อาจมีเคล็ดลับที่จะเป็นประโยชน์ในการผลิตงานศิลปะ ASCII หรือไม่ การจัดเรียงตัวละครเป็นเรื่องง่าย แต่ด้วยอัลกอริธึม (สั้น) สิ่งต่าง ๆ จะซับซ้อนมากขึ้น ฉันกำลังพูดถึงศิลปะ ASCII เช่น: ข้อความถึงศิลปะ ASCII (ตัวละคร) รูปภาพ (โลโก้หรือไอคอน) ฉันแค่มองหาเคล็ดลับทั่วไป แต่อนุญาตเฉพาะภาษาเท่านั้นเนื่องจากส่วนใหญ่สามารถแปลได้ แต่อย่างใด

10
ความท้าทายในการเขียนโปรแกรมของเบนท์ลีย์: k คำที่พบบ่อยที่สุด
นี่อาจเป็นหนึ่งในความท้าทายการเข้ารหัสแบบคลาสสิกที่ได้รับการกำทอนในปี 1986 เมื่อคอลัมนิสต์จอนเบนท์ลีย์ขอให้โดนัลด์ Knuth เขียนโปรแกรมที่จะหาคำที่พบบ่อยที่สุดในไฟล์ Knuth ใช้วิธีแก้ปัญหาอย่างรวดเร็วโดยใช้แฮชลองในโปรแกรมที่มีความยาว 8 หน้าเพื่อแสดงให้เห็นถึงเทคนิคการเขียนโปรแกรมความรู้ของเขา Douglas McIlroy จาก Bell Labs วิพากษ์วิจารณ์การแก้ปัญหาของ Knuth ในขณะที่ไม่สามารถประมวลผลข้อความฉบับเต็มของคัมภีร์ไบเบิลและตอบกลับด้วยสายการบินเดียวที่ไม่รวดเร็วเท่านี้ แต่ทำงานให้เสร็จ: tr -cs A-Za-z '\n' | tr A-Z a-z | sort | uniq -c | sort -rn | sed 10q ในปี 1987 บทความติดตามผลได้รับการตีพิมพ์พร้อมกับวิธีแก้ปัญหาอื่นซึ่งคราวนี้โดยศาสตราจารย์พรินซ์ตัน แต่มันก็ไม่สามารถแม้แต่ส่งคืนผลลัพธ์สำหรับคัมภีร์ไบเบิลเล่มเดียว! คำอธิบายปัญหา คำอธิบายปัญหาเดิม: ให้ไฟล์ข้อความและเลขจำนวนเต็ม k คุณจะต้องพิมพ์คำที่พบบ่อยที่สุด k ในไฟล์ (และจำนวนที่เกิดขึ้น) ในการลดความถี่ …

2
การนับ polystrips
Polystrips เป็นส่วนย่อยของ polyominoes ที่สอดคล้องกับกฎต่อไปนี้: แต่ละชิ้นประกอบด้วยเซลล์อย่างน้อย 1 เซลล์ ไม่มีเซลล์ใดสามารถมีมากกว่าสองเพื่อนบ้าน เซลล์ไม่ควรปิดรู โพลีโม่โนอิสระจะแตกต่างกันเมื่อไม่มีการเปลี่ยนแปลงอย่างเข้มงวด (การแปล, การหมุน, การสะท้อนหรือการสะท้อนแบบร่อน) ของอีกชิ้นหนึ่ง (ชิ้นที่สามารถหยิบขึ้นมาและพลิกได้) การแปลการหมุนการสะท้อนหรือการร่อนสะท้อนให้เห็นถึงโพลีโนมิโนฟรีนั้นไม่ทำให้รูปร่างของมันเปลี่ยนไป ( Wikipedia ) ตัวอย่างเช่นมี heptastrips ฟรี 30 (polystrips ที่มีความยาว 7) นี่คือทั้งหมดของพวกเขาบรรจุในตาราง 14x15 เครดิตรูปภาพ: Miroslav Vicher เป้าหมาย เขียนโปรแกรม / ฟังก์ชั่นที่รับจำนวนเต็มบวกnเป็นอินพุตและแจกแจงn-polystrips อิสระที่แตกต่างกัน n = 1 -> 1 (สี่เหลี่ยมจัตุรัสเดียว) n = 2 -> 1 (มีเพียง 2 โพลสต็อกที่เป็นไปได้ที่ทำจาก …

6
เมทริกซ์โคแฟคเตอร์
เมทริกซ์เป็นปัจจัย transpose ของAdjugate เมทริกซ์ องค์ประกอบของเมทริกซ์นี้คือโคแฟคเตอร์ของเมทริกซ์ดั้งเดิม โคแฟคเตอร์(เช่นองค์ประกอบของเมทริกซ์โคแฟคเตอร์ที่แถว i และคอลัมน์ j) คือดีเทอร์มิแนนต์ของเมทริกซ์ย่อยที่เกิดขึ้นโดยการลบแถว ith และคอลัมน์ jth จากเมทริกซ์ดั้งเดิมคูณด้วย (-1) ^ (i + j) ตัวอย่างเช่นสำหรับเมทริกซ์ องค์ประกอบของเมทริกซ์โคแฟคเตอร์ที่แถว 1 และคอลัมน์ 2 คือ: คุณสามารถค้นหาข้อมูลเกี่ยวกับสิ่งที่ปัจจัยของเมทริกซ์และวิธีการในการคำนวณพวกเขาที่นี่ ท้าทาย เป้าหมายของคุณคือส่งออกเมทริกซ์โคแฟคเตอร์ของเมทริกซ์อินพุท หมายเหตุ : Built-in ที่ประเมินการฝึกอบรมปัจจัยหรือเมทริกซ์ adjugate หรือปัจจัยหรือสิ่งที่คล้ายกันจะได้รับอนุญาต อินพุต เมทริกซ์อาจถูกป้อนเป็นอาร์กิวเมนต์บรรทัดคำสั่งเป็นพารามิเตอร์ฟังก์ชันในSTDINหรือในวิธีที่เหมาะสมที่สุดสำหรับภาษาที่คุณใช้ เมทริกซ์จะถูกจัดรูปแบบเป็นรายการรายการแต่ละรายการย่อยที่สอดคล้องกับหนึ่งแถวซึ่งมีปัจจัยที่เรียงลำดับจากซ้ายไปขวา จัดเรียงแถวจากบนลงล่างในรายการ ตัวอย่างเช่นเมทริกซ์ a b c d [[a,b],[c,d]]จะแสดงโดย คุณสามารถแทนที่วงเล็บเหลี่ยมและเครื่องหมายจุลภาคด้วยอย่างอื่นถ้ามันเหมาะกับภาษาของคุณและมีเหตุผล (เช่น((a;b);(c;d))) การฝึกอบรมจะมีเพียงจำนวนเต็ม (ซึ่งอาจจะเป็นลบ) เมทริกซ์จะเป็นสี่เหลี่ยมจัตุรัสเสมอ (เช่นจำนวนแถวและคอลัมน์เท่ากัน) …

1
เล่นเกมที่สมบูรณ์แบบในปี 2048
งานของคุณคือการจำลองเกมที่สมบูรณ์แบบทางคณิตศาสตร์ของ 2048 ความคิดคือการหาขีด จำกัด บนทางทฤษฎีของวิธีการที่เกม 2048 สามารถไปได้ไกลเท่าไหร่และหาวิธีไปที่นั่น หากต้องการทราบว่าลักษณะนี้เป็นอย่างไรให้เล่นกับโคลน 2x2 นี้แล้วลองทำคะแนน 68 คะแนน ถ้าคุณทำคุณจะจบลงด้วยกระเบื้อง 2, 4, 8 และ 16 เป็นไปไม่ได้ที่จะผ่านจุดนั้นไป งานของคุณทำได้ง่ายขึ้นเพราะคุณสามารถเลือกที่จะวางไข่ไทล์และค่าของมันคืออะไรเช่นเดียวกับโคลนนี้ คุณต้องเขียนโปรแกรมหรือฟังก์ชั่นที่รับบอร์ด 2048 เป็นอินพุตและส่งเอาต์พุตบอร์ดด้วยแผ่นต่อที่เกิดและบอร์ดหลังจากยุบแผ่น ตัวอย่างเช่น: Input: ------- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 Output: ------- 0 0 0 0 0 0 …

3
ตีกอล์ฟให้ใหญ่กว่าหมายเลขของรถตัก
ตามโปรแกรมการยุติที่สั้นที่สุดซึ่งมีขนาดเอาต์พุตเกินจำนวนของเกรแฮมและกอล์ฟที่มีขนาดใหญ่กว่า TREE (3)ฉันขอเสนอความท้าทายใหม่ หมายเลขของ Loader นั้นมีจำนวนมากซึ่งเป็นการยากที่จะอธิบาย (เนื่องจากตัวมันเองเป็นผลมาจากการฝึกเล่นกอล์ฟโดยมีเป้าหมายที่ยืดหยุ่น) มีคำจำกัดความและคำอธิบายที่นี่แต่สำหรับจุดประสงค์ของการกักกันตัวเองฉันจะพยายามอธิบายในโพสต์นี้ด้วย อัลกอริทึม Ralph Loader ที่ใช้สร้างหนึ่งในจำนวนที่ใหญ่ที่สุดของอัลกอริทึม (คำนวณ) ใด ๆ ที่เคยเขียน! ที่จริงแล้วจำนวนของ Loader นั้นเป็นจำนวนที่ "คำนวณได้" มากที่สุดใน Googology Wiki (โดยตัวเลข "คำนวณได้" หมายถึงตัวเลขที่กำหนดในแง่ของการคำนวณ) นั่นหมายความว่าหากคำตอบสร้างจำนวนที่มากกว่าจำนวนตัวโหลดในวิธีที่น่าสนใจ (เช่นไม่ใช่แค่หมายเลขของตัวโหลด + 1) คุณสามารถลงไปได้ ประวัติ Googology! ที่ถูกกล่าวว่าโปรแกรมที่ผลิตบางอย่างเช่นหมายเลขของ Loader +1เป็นคำตอบที่ถูกต้องและ contenders คำถามนี้อย่างแน่นอน; อย่าคาดหวังว่าจะมีชื่อเสียง งานของคุณคือการสร้างโปรแกรมยุติที่ผลิตจำนวนขนาดใหญ่กว่าจำนวน Loader ของ นี่คือรหัสกอล์ฟดังนั้นโปรแกรมที่สั้นที่สุดชนะ! คุณไม่ได้รับอนุญาตให้ป้อนข้อมูล โปรแกรมของคุณจะต้องยุติอย่างถาวรในที่สุด แต่คุณสามารถสันนิษฐานได้ว่าเครื่องมีหน่วยความจำไม่สิ้นสุด คุณอาจสมมติว่าประเภทหมายเลขภาษาของคุณสามารถเก็บค่าที่แน่นอนใด ๆแต่จำเป็นต้องอธิบายวิธีการทำงานในภาษาของคุณ (เช่น: ลอยมีความแม่นยำไม่สิ้นสุด?) …

7
เกาส์กับไอเซนสไตน์
กำหนด Gaussian จำนวนเต็มที่,เป็นจำนวนเต็มและเป็นหน่วยจินตภาพกลับมาที่ใกล้เคียงที่สุด (WRT กับระยะทางแบบยุคลิด) Eisenstein จำนวนเต็มที่ ,เป็นจำนวนเต็มและ 2a+bia+bia+biaaabbbi=exp(πi/2)i=exp⁡(πi/2)i = \exp\left(\pi i/2\right)k+lωk+lωk+l\omegakkklllω=exp(2πi/3)=(−1+i3–√)/2ω=exp⁡(2πi/3)=(−1+i3)/2\omega = \exp(2\pi i/3) = (-1+i\sqrt{3})/2 พื้นหลัง อาจเป็นที่ชัดเจนว่าจำนวนเต็มแบบเกาส์ทั้งหมดสามารถเขียนเป็นด้วย ,จำนวนเต็มได้ มันไม่ชัดเจนนัก แต่จริงอยู่: จำนวนเต็ม Eisenstein ใด ๆ สามารถเขียนเป็นด้วยจำนวนเต็ม ,พวกเขาทั้งสองรูปแบบโมดูลภายในจำนวนเชิงซ้อนและเป็นทั้งจำนวนเต็มที่ cyclotomic p-th สำหรับหรือตามลำดับ โปรดทราบว่าa+bia+bia+biaaabbbk+lωk+lωk+l\omegakkklllZZ\mathbb{Z}p=2p=2p=23333+2i≠3+2ω3+2i≠3+2ω3+2i \neq 3+2\omega ที่มา: commons.wikimedia.org รายละเอียด ในกรณีที่จำนวนเชิงซ้อนที่กำหนดมีจุดที่ใกล้เคียงที่สุดสองหรือสามจุดใด ๆ เหล่านั้นสามารถส่งคืนได้ จำนวนที่ซับซ้อนจะได้รับในพิกัดฉาก (พื้นฐาน ) แต่กว่าที่อื่น ๆ ในรูปแบบที่สะดวกใด ๆ เช่นหรือหรือฯลฯ(1,i)(1,i)(1,i)(A,B)A+BiA+B*1j Eisenstein จำนวนเต็มจะต้องมีการกลับมาเป็นพิกัดของพื้นฐานแต่นอกเหนือจากที่อยู่ในรูปแบบที่สะดวกใด …

7
ค้นหาอาร์เรย์ที่เหมาะกับจำนวนเงิน
พิจารณาอาร์เรย์ของความยาวA nอาร์เรย์มีจำนวนเต็มบวกเท่านั้น A = (1,1,2,2)เช่น ให้เรากำหนดf(A)เป็นชุดของผลรวมของทุกคนที่ไม่ว่างเปล่า subarrays Aต่อเนื่องกันของ ในกรณีf(A) = {1,2,3,4,5,6}นี้ ขั้นตอนในการผลิตf(A) มีดังนี้: subarrays ของAreA จำนวนเงินของตนมี(1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2) ชุดที่คุณได้รับจากรายการนี้จึงเป็น1,1,2,2,2,3,4,4,5,6{1,2,3,4,5,6} งาน รับชุดของเงินก้อนSได้รับในการเรียงลำดับที่มีจำนวนเต็มบวกเท่านั้นและระยะเวลาในอาร์เรย์nงานของคุณคือการส่งออกอย่างน้อยหนึ่งอาร์เรย์ดังกล่าวว่าXf(X) = S ตัวอย่างเช่นถ้าS = {1,2,3,5,6}และแล้วการส่งออกที่ถูกต้องn = 3X = (1,2,3) หากไม่มีอาเรย์ดังกล่าวXรหัสของคุณควรส่งออกค่าคงที่ใด ๆ ตัวอย่าง อินพุต: n=4, S = (1, 3, 4, 5, 6, 8, …

10
โปรแกรมขี้ตกใจ
วัตถุประสงค์ คุณจะต้องเขียนโปรแกรมที่รับจำนวนเต็มnเป็นอินพุต (จากบรรทัดคำสั่ง) และฝังตัวเอง (โปรแกรม) nไดเรกทอรีลงในไดเรกทอรีต้นไม้ ตัวอย่างด้วยn=5: ชื่อโฟลเดอร์อาจเป็นสิ่งที่คุณต้องการ ข้อกำหนดเพียงอย่างเดียวคือความลึกที่ถูกต้องและโปรแกรมนั้นสามารถรันอีกครั้งจากจุดใหม่ในไดเรกทอรีต้นไม้และไฟล์ต้นฉบับใหม่ยังคงชื่อไฟล์เดิม โบนัส: คะแนน * 0.9หากไดเรกทอรีทั้งหมดมีชื่อแตกต่างกัน (อย่างน้อยต้องเป็นความลึก 1 000 000) คะแนน * 0.5หากคุณไม่ได้อ่านหรือย้ายไฟล์ต้นฉบับโดยตรงหรือโดยอ้อมหรือเข้าถึงซอร์สโค้ดของโปรแกรม

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