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

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

2
สร้างตัวเลขมาตรฐาน
พื้นหลัง คนส่วนใหญ่ที่นี่ควรทำความคุ้นเคยกับระบบฐานจำนวนเต็มสองสามอย่าง: ทศนิยม, ไบนารี, ฐานสิบหก, ฐานแปด เช่นในระบบเลขฐานสิบหกตัวเลขabc.de 16จะแทน a*16^2 + b*16^1 + c*16^0 + d*16^-1 + e*16^-2 อย่างไรก็ตามหนึ่งสามารถใช้ฐานที่ไม่ใช่จำนวนเต็มเช่นตัวเลขที่ไม่มีเหตุผล เมื่อใช้ฐานเช่นอัตราส่วนทองคำφ = (1 + √5) / 2 ≈ 1.618 ... สิ่งเหล่านี้ถูกกำหนดแบบอะนาล็อกกับฐานจำนวนเต็ม ดังนั้นตัวเลขabc.de φ (โดยที่aถึงeเป็นจำนวนเต็ม) จะแทน a*φ^2 + b*φ^1 + c*φ^0 + d*φ^-1 + e*φ^-2 โปรดทราบว่าโดยหลักการแล้วตัวเลขใด ๆ อาจเป็นลบได้ (แม้ว่าเราจะไม่คุ้นเคย) - เราจะแสดงตัวเลขลบด้วยการนำ~หน้า สำหรับจุดประสงค์ของคำถามนี้เรา จำกัด …

30
การยืดคำ
เขียนโปรแกรมหรือฟังก์ชั่นที่ทำซ้ำตัวอักษรในคำเพื่อให้ตัวอักษรที่ซ้ำกันทั้งหมดที่จัดเรียงจากซ้ายไปขวาในคำว่าจะเป็นอาร์เรย์อินพุต ตัวอย่างเช่น: input: chameleon, [c,a,l,n] output: cchaamelleonn อินพุต คำเริ่มต้น (เช่นchameleon) อาเรย์ของอักขระ ( [c,a,l,n]) หรือสตริงที่ใช้แทนอาเรย์ ( caln) หรือบางอย่างที่คล้ายกัน อินพุตสามารถผ่านพารามิเตอร์ฟังก์ชัน STDIN หรือภาษาที่เทียบเท่ากัน อินพุตทั้งหมดจะเป็นตัวอักษรพิมพ์เล็ก (az) เอาท์พุต คำที่เปลี่ยนไป หากมีหลายวิธีสามารถพิมพ์ออกมาได้ input: banana [n,a] possible outputs: bannaana, banannaa |-|---------|-|--->[n,a] คุณอาจคิดว่าคำที่ป้อน (ไม่จำเป็นต้องเป็นอาร์เรย์) จะมีตัวอักษรในอาร์เรย์ (ตามลำดับ) คุณอาจจะสมมติว่าอินพุตนั้นไม่มีตัวอักษรต่อเนื่องกันเหมือนกัน (ไม่ใช่แอปเปิ้ล, เกินบรรยาย, เขียว, แก้ว, ประตู ... ) ตัวอย่าง input: abcdefghij, [a,b,c] output: …

12
ถอดรหัสแผนที่ความร้อน
heatmaps ลองพิจารณาห้องรูปสี่เหลี่ยมผืนผ้าบนเพดานที่เรามีกล้องความร้อนชี้ลง ในห้องพักมีจำนวนบางแหล่งความร้อนของความเข้มอุณหภูมิพื้นหลังเป็น1-9 0ความร้อนจะหายไปจากแหล่งกำเนิดแต่ละหยดโดยหนึ่งหน่วยต่อขั้นตอน (ไม่ใช่แนวทแยงมุม) ตัวอย่างเช่น20x10ห้อง ...........1........ .................... ...8................ ..5...............2. .................... .1.................. ................1... .................65. .................... ............2....... มีแหล่งความร้อน 9 แหล่งและมีการไล่ระดับอุณหภูมิที่แสดงโดยกล้องความร้อน 34565432100100000000 45676543210000000000 56787654321000000110 45676543210000001221 34565432100000012321 23454321000000123432 12343210000001234543 01232100000012345654 00121000000011234543 00010000000121123432 ในรูปแบบกราฟิกนี้อาจมีลักษณะ: จากการไล่ระดับสีเราสามารถอนุมานตำแหน่งและความเข้มของแหล่งความร้อนบางส่วน แต่ไม่ใช่ทั้งหมด ตัวอย่างเช่น9s ทั้งหมดสามารถอนุมานได้เสมอเนื่องจากมีอุณหภูมิสูงสุดและสามารถทำได้8ในกรณีนี้เนื่องจากสร้างค่าสูงสุดในพื้นที่ในการไล่ระดับสี 2ใกล้ชายแดนที่เหมาะสมนอกจากนี้ยังสามารถอนุมานแม้ว่ามันจะไม่ได้อยู่ที่สูงสุดในท้องถิ่นเพราะมันไม่ได้มีอีก2เป็นเพื่อนบ้าน 5s บนมืออื่น ๆ ที่ยังไม่ได้สรุปเนื่องจากความร้อนของพวกเขาเช่นกันอาจจะเกิดจากแหล่งที่รุนแรงมากขึ้นใกล้พวกเขา 0s เป็นที่รู้จักกันไม่มีแหล่งความร้อน แต่ทั้งหมดกระเบื้องอื่น ๆ อาจอาจมีหนึ่ง ลองแทนกระเบื้องที่ไม่แน่นอนด้วยเครื่องหมายยัติภังค์-แหล่งความร้อนบางตัวโดยตัวเลขที่สอดคล้องกันและบางพื้นที่ว่างตามระยะเวลา.: ---------..1........ ----------.......... ---8-------......--. ----------......--2- ---------......----- …

7
วิธีการของนิวตันโดยการเรียกซ้ำ
งานของคุณคือการคำนวณสแควร์รูทของ 2 โดยใช้วิธีของนิวตัน - ด้วยการบิดเล็กน้อย โปรแกรมของคุณคือการคำนวณการวนซ้ำโดยใช้วิธีของนิวตันและเอาท์พุทซอร์สโค้ดสำหรับการทำซ้ำต่อไปนี้ (ซึ่งจะต้องทำเช่นเดียวกัน) วิธีการของนิวตันได้รับการอธิบายอย่างละเอียดถี่ถ้วนในWikipedia ในการคำนวณสแควร์รูท 2 โดยใช้วิธีของนิวตันคุณ: กำหนด f(x) = x^2 - 2 กำหนด f'(x) = 2x กำหนดx[0](การเดาเริ่มต้น)= 1 กำหนด x[n+1] = x[n] - (f[n] / f'[n]) การวนซ้ำแต่ละครั้งจะย้าย x [n] ใกล้กับสแควร์รูทของสอง ดังนั้น - x[0] = 1 x[1] = x[0] - f(x[0])/f'(x[0]) = 1 - (1 ^ …
32 code-golf  math  quine 

8
กี่กีนีในจำนวนรวมของ Threepennies
จนกระทั่งการทำให้เป็นทศนิยมในปี 1971เงินของอังกฤษขึ้นอยู่กับการแบ่งเงินปอนด์ออกเป็น 240 เพนนี ชิลลิงคือ 12 เพนนีดังนั้น 20 เพนนีทำให้ปอนด์ นิกายที่เล็กที่สุดคือนิดเดียวที่หนึ่งในสี่ของเพนนี มีชื่อและชื่อเล่นอื่น ๆ อีกมากมายสำหรับเหรียญซึ่งอาจสร้างความสับสนได้หากคุณไม่คุ้นเคยกับระบบ ท้าทาย เขียนโปรแกรมหรือฟังก์ชั่นที่สามารถแปลง (เกือบ) สกุลเงินของภาษาอังกฤษเก่า ๆ เป็นอื่น ๆ เพื่อให้ง่ายขึ้นสำหรับผู้ใช้คุณจำเป็นต้องสนับสนุนคำพหูพจน์และชื่อเล่น เหล่านี้คือนิกายและคำที่มีความหมายเหมือนกันคุณต้องสนับสนุน เพื่อความสะดวกค่าของพวกเขาในระยะทางสั้น ๆ นำไปสู่แต่ละบรรทัด 1: farthing, farthings 2: halfpence, halfpenny, halfpennies 4: penny, pennies, pence, copper, coppers 8: twopenny, twopennies, twopence, tuppence, half groat, half groats 12: threepence, threepenny, …

2
ติดตั้ง QuickSort ใน BrainF *** [ปิด]
ตามที่กล่าวไว้ในห้องเลานจ์ของ Stack Overflow: หากคุณไม่สามารถใช้อัลกอริทึม Quicksort ที่กำหนด en.wikipedia.org/wiki/Quicksort ในภาษาใด ๆ ที่คุณมีความรู้น้อยที่สุดคุณอาจต้องการพิจารณาอาชีพอื่น @sbi แต่ SBI ยังตั้งข้อสังเกตว่า BrainF *** อาจเป็นข้อยกเว้น ดังนั้นนี่คือปริศนา / ความท้าทาย: ใช้ QuickSort ในBrainF *** การดำเนินการจะต้อง ถูกตีความโดยสิ่งนี้และ / หรือโดยล่ามที่นี่ (สำหรับสคริปต์ขนาดใหญ่) ใช้อัลกอริทึมตามที่อธิบายไว้ใน Wikipedia - ถ้าเป็นไปได้เป็นการเรียงลำดับ จัดเรียงรายการจำนวนเต็มต่อไปนี้: [0,4,6,4,2,3,9,2,3,6,5,3] และพิมพ์ผลลัพธ์

6
กระจกเงา (หรือหัวของฉันเจ็บ)
ฉันกำลังอ่านพิมพ์รหัสของคุณไปข้างหลัง - ย้อนกลับ quineและฉันคิดว่านี่อาจน่าสนใจยิ่งขึ้นถ้ารหัสหลังของคุณนั้นทำงานได้เช่นกัน ดังนั้นความท้าทายนี้จะมีกฎและข้อกำหนดอื่น ๆ ทั้งหมด แต่ต้องเป็นแหล่งที่ถูกต้องเมื่อกลับรายการ (ในภาษาเดียวกันหรือภาษาอื่นและยังคงพิมพ์ต้นฉบับไปด้านหลัง กฎและการให้คะแนนทั้งหมดจากการท้าทายแบบย้อนกลับจะมีผลบังคับใช้ดังนั้นคำตอบทั้งหมดสำหรับคำถามนี้จะตอบคำถามนั้น (แต่ไม่ได้คะแนนเช่นกัน) แก้ไข: ตามกฎทั้งหมดตอนนี้คัดลอกที่นี่ กฎ: เขียนโปรแกรม p ซึ่งเมื่อประมวลผลสร้างเอาต์พุต p 'โดยที่ p' คือ p ย้อนหลังและ p 'เมื่อดำเนินการสร้าง p ไม่ใช้ไฟล์อื่น (เช่นreverse.txt) ความยาวรหัสขั้นต่ำคือสองอักขระ โปรแกรมของคุณต้องไม่เป็นแบบ palindrome เกณฑ์การให้คะแนน: +50 ถ้าคุณใช้ดึงข้อมูลจากอินเทอร์เน็ต +25 ถ้าคุณอ่านซอร์สโค้ดของคุณเอง +1 แต้มต่อตัวละคร คะแนนต่ำสุดชนะ
32 code-golf  quine 

9
Kolmogorov บ้า
ซับซ้อน Kolmogorovของสตริงถูกกำหนดให้เป็นความยาวของโปรแกรมที่สั้นที่สุดที่ P s เอาท์พุท หากความยาวของ P สั้นกว่าความยาวของ s ดังนั้น s จะถูกบีบอัดมิฉะนั้น s จะไม่สามารถบีบอัดได้ สตริงส่วนใหญ่ไม่สามารถบีบอัดได้ ... เขียนโปรแกรมที่สั้นที่สุดที่ส่งออกสตริงนี้ (โดยไม่มีช่องว่างและไม่มีบรรทัดใหม่): d9 a6 b6 33 56 a7 95 4b 29 b0 ac 7f 2a aa 6d 19 b8 4b 4c f8 b6 2a ac 95 a1 4b 4e a5 9d b3 e7 c9 …

16
Balanced Ternary Converter
เครดิตสำหรับแนวคิดการท้าทายไปที่ @AndrewPiliser ข้อเสนอดั้งเดิมของเขาในกล่องทรายถูกยกเลิกและเนื่องจากเขาไม่ได้ทำงานที่นี่เป็นเวลาหลายเดือนฉันจึงได้รับการท้าทาย Ternary สมดุลเป็นระบบตัวเลขที่ไม่ได้มาตรฐาน มันก็เหมือน ternary ในการที่ตัวเลขเพิ่มมูลค่าโดยปัจจัยที่ 3 ในขณะที่คุณไปต่อไปทางซ้าย - เพื่อให้100เป็น9และ1001เป็น 28 อย่างไรก็ตามแทนที่จะมีค่า 0, 1 และ 2 ตัวเลขจะมีค่าเป็น -1, 0 และ 11 (คุณยังสามารถใช้สิ่งนี้เพื่อแสดงจำนวนเต็มใด ๆ ) สำหรับความท้าทายนี้ความหมายหลัก+1จะได้รับการเขียนเป็น+, -1จะได้รับการเขียนเป็น-และเป็นเพียง0 0Ternary ที่มีความสมดุลไม่ได้ใช้-สัญลักษณ์หน้าตัวเลขเพื่อลบล้างมันเหมือนระบบตัวเลขอื่น ๆ - ดูตัวอย่าง งานของคุณคือการเขียนโปรแกรมที่สมบูรณ์ซึ่งใช้จำนวนเต็มลงนามทศนิยม 32- บิตเป็นอินพุตและแปลงเป็นไตรภาคแบบสมดุลไม่อนุญาตให้มีฟังก์ชั่นการแปลงพื้นฐานในตัวของการเรียงลำดับใด ๆ (Mathematica อาจมีหนึ่ง ... ) อินพุตสามารถอยู่ในอินพุตมาตรฐานอาร์กิวเมนต์บรรทัดรับคำสั่ง ฯลฯ ศูนย์นำหน้าอาจมีอยู่ในอินพุต แต่ไม่อยู่ในเอาต์พุตเว้นแต่อินพุตจะเป็น0ซึ่งในกรณีนี้เอาต์พุตควรเป็น0เช่นกัน ตัวอย่าง เหล่านี้คือการแปลงจากยอดประกอบไปด้วยทศนิยมเป็นทศนิยม คุณจะต้องเปลี่ยนวิธีอื่น +0- = …

19
คนแคระและเหรียญ
สถานการณ์: Mคนแคระหลายคนพบหีบสมบัติของก๊อบลินที่มีNเหรียญทองและต้องแบ่งมัน เนื่องจากกฎโบราณเกี่ยวกับการจัดสรรปล้นทรัพย์ให้แก่โจรสลัดตามลำดับอาวุโสดาวแคระที่เก่าแก่ที่สุดควรได้รับหนึ่งเหรียญมากกว่าดาวแคระที่เก่าที่สุดถัดไปและอื่น ๆ เพื่อที่ดาวแคระที่อายุน้อยที่สุดจะได้รับM-1เหรียญน้อยกว่าดาวแคระที่เก่าที่สุด นอกจากนี้คนแคระไม่ต้องขว้างเหรียญใด ๆ (เช่นไม่มีเหรียญติดลบกับคนแคระ) ช่วยคนแคระแบ่งเหรียญด้วยวิธีนี้หรือบอกพวกเขาว่ามันเป็นไปไม่ได้ รหัสผู้ชนะจะต้องตอบถูกต้องเสมอ (ความท้าทายนี้เป็นกำหนด) และปฏิบัติตามทั่วไปรหัสกอล์ฟกฎ อินพุต คุณจะได้รับจำนวนเต็ม N (3 ≤ N ≤ 1,000) สำหรับจำนวนเหรียญและจำนวนเต็ม M (3 ≤ M ≤ N) สำหรับคนแคระจำนวนหนึ่งคั่นด้วยช่องว่าง เอาท์พุต หากไม่สามารถแบ่งเหรียญในแบบที่คนแคระต้องการให้พิมพ์ -1 (ลบหนึ่ง) มิฉะนั้นให้พิมพ์จำนวนเหรียญที่คนแคระแต่ละคนจะได้รับจากตัวเก่าที่สุดถึงอายุน้อยที่สุด แยกตัวเลขด้วยช่องว่าง ตัวอย่าง : อินพุต 3 3 เอาท์พุต 2 1 0 อินพุต 9 3 เอาท์พุต 4 3 2 …
32 code-golf 

13
การวาดภาพลูกบาศก์ในงานศิลปะ ASCII
คำอธิบายงาน: วาดลูกบาศก์ในศิลปะ ASCII โดยประมาณเป็นโครงตู้ Monospaced fontsมักจะมีตัวละครที่สูงประมาณสองเท่ากว้าง เนื่องจากอินพุตคือความยาวของเส้นแนวตั้ง (ไม่รวมมุม) เส้นแนวนอนจะถูกวาดด้วยอักขระจำนวนมากเป็นสองเท่าเพื่อให้ภาพที่ได้เป็นลูกบาศก์จริงๆ เส้นที่ถอยกลับจะถูกวาดที่ความยาวครึ่งหนึ่งตามที่กำหนดโดยการฉายภาพของคณะรัฐมนตรี มุมของก้อนจะถูกแทนด้วย+เส้นแนวนอนโดย-เส้นแนวตั้งโดยและคนที่ใช้เส้นทแยงมุม|/ สรุป: ให้อินพุตเป็นnจากนั้น ขอบแนวนอนของคิวบ์ถูกวาดด้วย-และประกอบด้วย 2 nอักขระ ขอบแนวตั้งของคิวบ์ถูกวาดด้วย|และประกอบด้วยอักขระnตัว เส้นทแยงมุมของลูกบาศก์ถูกวาดด้วย/และประกอบด้วยอักขระn / 2 +มุมของก้อนจะมีการวาด มุมจะไม่นับตามความยาวของขอบตามรายละเอียดด้านบน (ดูตัวอย่างด้านล่างเช่นกัน) การป้อนข้อมูล: การป้อนข้อมูลให้กับการป้อนข้อมูลมาตรฐานเป็นบวกเดียวเลขคู่n (2 ≤ n ≤ 30) ที่ให้ความยาวของเส้นแนวตั้งของลูกบาศก์ ตามด้วยตัวแบ่งบรรทัดเดียว เอาท์พุท: เอาต์พุตเป็นคิวบ์บนเอาต์พุตมาตรฐานตามกฎข้างต้น ช่องว่างต่อท้ายบนบรรทัดจะถูกละเว้น ตัวอย่างอินพุต 1: 2 ตัวอย่างผลลัพธ์ 1: +----+ / /| +----+ | | | + | |/ …

7
สะพานและอุโมงค์
คุณมีหน้าที่สร้างทางด่วนใหม่ อย่างไรก็ตามมันนำไปสู่ดินแดนที่เป็นภูเขาดังนั้นจึงจำเป็นต้องมีสะพานและอุโมงค์จำนวนมาก ฟรีเวย์ควรอยู่ในระดับเดียว อินพุต คุณจะได้รับคำอธิบาย ASCII คร่าวๆว่าลักษณะของภูเขาบนอินพุตมาตรฐานเช่นอะไรดังต่อไปนี้: /\ / \ /\ / \ /\ / \/ \ / \ / \ /\ / \/ \ / \ _ / \ /\ / \ \ / \ / \ / \ /\ \ / \ / \/ \/ \ \ / …

10
*** นักกอล์ฟ
หนึ่งในโค้ดที่ง่ายที่สุดที่เขียนด้วยภาษาการเขียนโปรแกรมคือลำดับการพิมพ์ของอักขระ (เช่น "Hello, world!") อย่างไรก็ตามs o มอี อีs o ทีอีอาร์ฉันCการเขียนโปรแกรมภาษาเช่นbrainfuckแม้รหัสที่ง่ายนี้ค่อนข้างน่ารำคาญที่จะเขียน งานของคุณคือการเขียนโปรแกรม (ไม่ต้องเขียนใน brainfuck) ซึ่งพิมพ์โปรแกรม Brainfuck (ความยาวต่ำสุด) ที่พิมพ์ข้อความที่กำหนด อินพุต ลำดับของอักขระ (ระหว่าง1และ255) ถูกกำหนดโดยรูปแบบใด ๆ (ตัวแปร, อาร์กิวเมนต์, stdin, ไฟล์, ... ) เอาท์พุต เอาต์พุตนั้นถูกต้อง (ไม่มีการจับคู่[และ] ) รหัส brainfuck (สมมติ 8 บิตเซลล์ห่อไม่ได้ลงนามและไม่ จำกัด จำนวนของเซลล์ไปทางซ้ายและขวา) พิมพ์สตริงที่แน่นอนที่ได้รับเป็น input ยกตัวอย่างเช่นการส่งออกไปได้อย่างใดอย่างหนึ่งสำหรับการป้อนข้อมูลเป็นA++++++++[<++++++++>-]<+. โปรแกรมของคุณไม่ควรใช้เวลานาน ( >2m) ในการเรียกใช้ โปรแกรม BF ไม่ควรใช้เวลานาน (>10s …

14
แก้ไขหนี้ทั่วโลก, แนวทางการเล่นกอล์ฟ
ผู้นำของโลกได้พบและยอมรับในที่สุดว่าวิธีที่ดีที่สุด (และเท่านั้น) ในการแก้ไขปัญหาเศรษฐกิจโลกคือการเอาหุ้นของพวกเขาเป็นหนี้กันและเพียงแค่จ่ายเงินออกด้วยเช็คขนาดใหญ่ พวกเขาจ้างคุณ (อย่างแดกดันในอัตราสัญญาต่ำที่สุดเท่าที่จะทำได้) เพื่อหาวิธีที่ดีที่สุดในการทำเช่นนั้น หลังจากการไตร่ตรองอย่างถี่ถ้วนแล้วและขอให้บางคนวาดตัวอย่างง่ายๆพวกเขาได้สร้างสเปคต่อไปนี้ แต่ละประเทศมีรหัส ISO 3166-1 alpha-2ของพวกเขา: USสำหรับสหรัฐอเมริกา, AUออสเตรเลีย, JPญี่ปุ่น, CNจีน, และอื่น ๆ บัญชีแยกประเภทจะถูกวาดขึ้นเป็นชุดของรายการประเทศและจำนวนเงินเนื่องจากแต่ละประเทศ แต่ละประเทศเริ่มต้นด้วยโคลอน ID ของโดเมนและมีจำนวนเกินดุล / ขาดดุล (ในพันล้านยูโร) ตามด้วยเครื่องหมายอัฒภาคจากนั้นรายการที่คั่นด้วยเครื่องหมายจุลภาคของประเทศและจำนวนเท่าใด (ในพันล้านของ ยูโร) พวกเขาเป็นหนี้ หากไม่มีประเทศใดเป็นหนี้ประเทศอื่นจะไม่มีการเอ่ยถึงประเทศนั้นหลังจากตัวคั่นเครื่องหมายอัฒภาคนั้น การขาดดุลจะถูกระบุว่าเป็นจำนวนลบส่วนเกินจะถูกระบุว่าเป็นจำนวนบวก ค่าสามารถเป็นแบบลอยได้ บัญชีแยกประเภทจะต้องนำมาจาก STDIN จุดสิ้นสุดของบัญชีแยกประเภทจะแสดงด้วยการขึ้นบรรทัดใหม่บนบรรทัดว่าง Tally ต้องถูกส่งไปยัง STDOUT ตัวอย่างของบัญชีแยกประเภท: Input: AU:8;US:10,CN:15,JP:3 US:14;AU:12,CN:27,JP:14 CN:12;AU:8,US:17,JP:4 JP:10;AU:6,US:7,CN:10 จากนั้นระบบจะพิจารณาจำนวนเงินที่แต่ละประเทศเป็นหนี้และเป็นหนี้และกำหนดส่วนเกิน / ขาดดุลของตนเช่นสำหรับ AU: AU = 8 …
32 code-golf  math 

14
วาดลูกคิดสวนผึ้ง
เขียนโปรแกรมที่สั้นที่สุดที่ใช้จำนวนเต็มเดียวเป็นอินพุตและพิมพ์ลูกคิด Suanpan Testcases การป้อนข้อมูล: 314159 เอาท์พุท: |\======================================/| || (__) (__) (__) (__) (__) (__) || || (__) (__) (__) (__) || || || || || || || || || || || || || || || || (__) (__) || |<======================================>| || (__) (__) (__) (__) || (__) || || (__) …

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