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

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

6
การพิมพ์ที่มีประสิทธิภาพบน Game Boy
เกมบอยเก่าหลายเกมมักจะต้องมีการป้อนสตริงจากผู้ใช้ อย่างไรก็ตามไม่มีแป้นพิมพ์ สิ่งนี้ได้รับการจัดการโดยการนำเสนอผู้ใช้ด้วย "หน้าจอคีย์บอร์ด" ดังนี้: 'การชี้ตัวอักษร' จะเริ่มที่ตัวอักษร A. ผู้ใช้จะต้องไปที่ตัวละครแต่ละตัวต้องการด้วยD-Pad 's สี่ปุ่ม ( UP, DOWN, LEFTและRIGHT) แล้วกดBUTTON Aไปผนวกกับสตริงสุดท้าย โปรดทราบ: กริดล้อมรอบดังนั้นการกดUPในขณะที่อยู่บนตัวอักษร A จะนำคุณไปยัง T 'ตัวชี้ตัวอักษร' จะยังคงอยู่หลังจากใส่ตัวอักษรต่อท้าย ความท้าทาย แป้นพิมพ์ด้านบนมีตัวเลือกในการเปลี่ยนเคสและเป็นรูปร่างที่ผิดปกติ ดังนั้นเพื่อความง่ายในความท้าทายนี้เราจะใช้แป้นพิมพ์ต่อไปนี้ (ด้านล่างขวาคือ ASCII ถ่าน 32 ช่องว่าง): A B C D E F G H I J K L M N O P Q R …

21
จำนวน n หลักที่เล็กที่สุดที่มีเฉพาะตัวเลขเหล่านี้
คุณจะต้องสร้างนายกเล็กที่สุดด้วยตัวเลขและมันจะมีตัวเลขที่ระบุไว้ในรายการnk ตัวอย่าง: การป้อนข้อมูล: 4 1 2 สำหรับนี้คุณต้องสร้างนายกเล็กที่สุดด้วย4ตัวเลขและที่สำคัญต้องมีเพียงตัวเลขและ12 เอาท์พุท: 2111 การป้อนข้อมูล: 10 0 4 7 เอาท์พุท: 4000000007 การป้อนข้อมูล: 6 5 5 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 5 5 เอาท์พุท: 115151 คุณสามารถรับประกันได้ว่าอินพุตจะอยู่ในรูปแบบที่คุณระบุเสมอและคุณสามารถทำอะไรก็ได้หากคุณได้รับอินพุตที่ไม่ถูกต้อง (เช่นอินพุตเป็นตัวเลขหลักเดียวnโดยไม่มีk) หากไม่มีวิธีแก้ไขดังกล่าวต่ออินพุตอยู่โปรแกรมของคุณได้รับอนุญาตให้ทำสิ่งใดสิ่งหนึ่งต่อไปนี้: พิมพ์ banana โยนข้อผิดพลาด วิ่งไปตลอดกาล สิ่งอื่นใด เนื่องจากนี่เป็นโค้ดกอล์ฟพยายามที่จะตั้งรหัสให้สั้นที่สุด …

25
พิมพ์คิวบ์ตาข่ายขนาดที่ระบุ
ท้าทาย เมื่อกำหนดขนาด s ให้พิมพ์ลูกบาศก์สุทธิของขนาดนั้นที่ทำจากสัญลักษณ์แฮช ( #) และช่องว่าง ( ) ตัวอย่าง: 1: # # # # # # 2: # # # # # # # # # # # # # # # # # # # # # # # # 3: # # # # # # # …

16
ถอดรหัส Baby-talk!
เมื่อเด็กเปิดปากพวกเขาไม่เพียง แต่พูดพล่อยๆ จริงๆแล้วพวกเขากำลังพูดในรหัสขั้นสูงที่พิสูจน์ได้สำหรับผู้ใหญ่ ... Baby-talk Cipher เมื่อเด็กพูดถึงมันอาจมีลักษณะคล้ายกับgogooa gagooook aagaaoooy แต่ละส่วนที่คั่นด้วยช่องว่างเดี่ยวแทนอักขระ (ตัวอย่างด้านบนแสดงถึง 3 ตัวอักษร) ในการถอดรหัสส่วนเราจะต้องนับจำนวน As และ Os ที่มี อย่างไรก็ตามเราจะนับเฉพาะสิ่งที่อยู่ติดกับสระอื่นเท่านั้น ตัวอย่างเช่น A ใน 'ปิดปาก' จะไม่นับ แต่ทั้ง A และ O ใน 'gaog' จะเป็นเช่นนั้น การนับตัวอย่างด้านบนจะมีลักษณะเช่นนี้: Section | Num Os | Num As gogooa | 2 | 1 gagooook | 4 | 0 aagaaoooy …

19
ค้นหาปีที่จัดเรียง
ปี 2556 มีทรัพย์สินที่น่าสนใจ: ตัวเลขเรียงต่อกันเมื่อเรียงลำดับ (0123) ลองเรียกหมายเลขประเภทนี้ว่าตัวเลขที่เรียงได้:จำนวนเต็มแบบไม่ลบที่มีตัวเลขฐาน 10 ต่อเนื่องกันหลังจากเรียงลำดับ น่าเสียดายที่สิ่งนี้จะไม่เกิดขึ้นอีกจนกว่าจะถึงปี 2031 และหลังจากนั้นไม่ถึงปี 2103 ความท้าทายของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่เมื่อได้รับจำนวนเต็มไม่เป็นลบผ่านวิธีมาตรฐานใด ๆ กฎระเบียบ อินพุตและเอาต์พุตต้องอยู่ในฐาน 10 เอาต์พุตอาจอยู่ในรูปแบบที่เหมาะสม (จำนวนตัวอักษร, สตริงตัวอักษร, อาร์เรย์รายการเดียว, ... ) รหัสของคุณจะต้องสร้างเอาต์พุตที่เหมาะสมภายใน 1 นาทีสำหรับอินพุตทั้งหมดสูงสุด 98764 กรณีทดสอบ 0 -> 1 1 -> 2 9 -> 10 10 -> 12 11 -> 12 99 -> 102 233 -> 234 234 …

2
Mini-Flak Quine ที่เร็วที่สุด
Mini-Flak เป็นส่วนหนึ่งของสมอง Flakภาษาที่<>, <...>และ[]การดำเนินงานจะไม่ได้รับอนุญาต พูดอย่างเคร่งครัดจะต้องไม่ตรงกับ regex ต่อไปนี้: .*(<|>|\[]) Mini-Flak เป็นชุดย่อยที่สมบูรณ์ที่สุดของ Brain-Flak เมื่อไม่นานมานี้ฉันสามารถสร้างQuineในMini-Flakได้ แต่มันช้าเกินไปที่จะวิ่งในช่วงชีวิตของจักรวาล ดังนั้นความท้าทายของฉันต่อคุณคือทำให้ Quine เร็วขึ้น เกณฑ์การให้คะแนน ในการให้คะแนนรหัสของคุณให้@cyตั้งค่าสถานะที่ท้ายรหัสของคุณและเรียกใช้ในล่าม Ruby ( ลองใช้ออนไลน์ใช้ล่ามทับทิม) โดยใช้-dธง คะแนนของคุณควรพิมพ์ไปที่ STDERR ดังต่อไปนี้: @cy <score> นี่คือจำนวนรอบที่โปรแกรมของคุณใช้ก่อนที่จะยุติและเหมือนกันระหว่างการรัน เนื่องจากแต่ละรอบใช้เวลาประมาณเท่ากันในการรันคะแนนของคุณควรมีความสัมพันธ์โดยตรงกับเวลาที่ใช้ในการรันโปรแกรมของคุณ หาก Quine ของคุณยาวเกินไปสำหรับคุณที่จะเรียกใช้บนคอมพิวเตอร์ของคุณอย่างสมเหตุสมผลคุณสามารถคำนวณจำนวนรอบได้ด้วยมือ การคำนวณจำนวนรอบนั้นไม่ยากมาก จำนวนรอบเท่ากับ 2 เท่าของจำนวนของการเรียกใช้ monads บวกกับจำนวนของการทำงานของ nilads นี่เหมือนกับการแทนที่ nilad ทุกตัวด้วยอักขระตัวเดียวและนับจำนวนตัวอักษรทั้งหมด ตัวอย่างการให้คะแนน (()()()) คะแนน 5 เพราะมันมี 1 monad และ …

2
การจัดเรียงสี่เหลี่ยมโดยพลการเพื่อเติมช่องว่าง
สี่เหลี่ยมเหล่านี้สามารถเติมเต็มพื้นที่สี่เหลี่ยมได้หรือไม่? เมื่อให้รูปสี่เหลี่ยมผืนผ้าคุณจะถูกถามว่าสามารถจัดเรียงให้เต็มพื้นที่สี่เหลี่ยมหรือไม่ รายละเอียด รับพวงของm x nรูปสี่เหลี่ยมโดยพลการ; 0 <= m, n <= 1000ตรวจสอบว่าเป็นไปได้หรือไม่ที่จะจัดเรียงเพื่อให้ครอบคลุมพื้นที่สี่เหลี่ยมโดยไม่ต้องมีรูหรือทับซ้อนกัน ไม่สามารถหมุนสี่เหลี่ยมได้และแต่ละสี่เหลี่ยมจะวางเพียงครั้งเดียวเท่านั้น อินพุต อินพุตสำหรับสิ่งนี้มีความยืดหยุ่นมากตราบใดที่อินพุตให้รายการของมิติพื้นที่ 2 แบบ ตัวอย่างเช่นทั้งสองอย่างต่อไปนี้ถูกต้อง: คั่นด้วย Space, Return 1 2 1 5 4 5 3 6 รายการขนาด [[1, 2], [1, 5], [4, 5], [3, 6]] เอาท์พุต การเรียงลำดับของค่าจริง / เท็จเช่นจริง / เท็จ, 0/1, T / F, จริง / …

26
ความแข็งแบบดิจิตอลของจำนวนเต็ม
เพื่อหาสิ่งที่มีความแข็งดิจิตอลของจำนวนเต็มใช้แทน binary ของตนและนับจำนวนครั้งทั้งชั้นนำและต่อท้ายสามารถลบออกได้จนกว่าจะมีทั้งการเริ่มต้นหรือลงท้ายด้วย1 0จำนวนบิตทั้งหมดที่ถูกลบคือความแข็งแบบดิจิตอล นั่นเป็นคำอธิบายที่ค่อนข้างใช้คำพูด - งั้นมาลองดูตัวอย่างที่ทำงานกันดีกว่า สำหรับตัวอย่างนี้เราจะใช้หมายเลข 3167 ในระบบเลขฐานสองนี่คือ: 110001011111 (โปรดทราบว่าในระหว่างการแปลงเป็นไบนารีคุณควรตรวจสอบให้แน่ใจว่าได้ตัดส่วนนำศูนย์) มันไม่ได้เริ่มต้นหรือลงท้ายด้วย0ดังนั้นเราจึงลบบิต 1 คู่: 1 1000101111 1 เเละอีกอย่าง: 11 00010111 11 แต่ตอนนี้มี 0 ที่จุดเริ่มต้นดังนั้นเราจึงไม่สามารถลบ1คู่ได้อีก โดยรวมแล้ว 4 บิตที่เราลบออกและดังนั้น4คือความแข็งแบบดิจิตอลที่3167 อย่างไรก็ตามสำหรับตัวเลขที่สามารถเขียนเป็น2 n -1สำหรับบวกn (เช่นมีเฉพาะ1ในการเป็นตัวแทนไบนารี) 0 จะไม่ถึงและดังนั้นบิตทั้งหมดสามารถลบออกได้ ซึ่งหมายความว่าค่าความแข็งเป็นเพียงความยาวบิตของจำนวนเต็ม ความท้าทาย งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นซึ่งกำหนดจำนวนเต็มไม่เป็นลบn >= 0กำหนดความแข็งแบบดิจิตอล คุณสามารถส่งโปรแกรมเต็มรูปแบบซึ่งดำเนินการ I / O หรือฟังก์ชั่นที่ส่งกลับผลลัพธ์ การส่งของคุณควรทำงานกับค่าที่nอยู่ในช่วงจำนวนเต็มมาตรฐานของภาษาของคุณ กรณีทดสอบ โปรดแจ้งให้ฉันทราบหากสิ่งเหล่านี้ไม่ถูกต้องหรือหากคุณต้องการแนะนำกรณีขอบที่จะเพิ่ม 0 -> 0 …

13
การโกงการทดสอบแบบเลือกตอบส่วนที่ 2
นี้เป็นผลสืบเนื่องไปนี้ความท้าทายโดยAdnan ถ้าคุณชอบความท้าทายนี้คุณก็มีโอกาสที่จะชอบสิ่งนี้เช่นกัน ลองดูสิ! การทดสอบหลายทางเลือกที่มี 8 คำถามแต่ละคนมี 4 BCADBADAตัวเลือกอาจมีคำตอบ: แปลงเป็นสี่อาร์เรย์ที่ต่างกันด้วยจริงและเท็จถ้าตัวอักษรปัจจุบันคือคำตอบมันจะมีลักษณะเช่นนี้ Q#: 1 2 3 4 5 6 7 8 B C A D B A D A A: [0, 0, 1, 0, 0, 1, 0, 1] B: [1, 0, 0, 0, 1, 0, 0, 0] C: [0, 1, 0, 0, 0, …

28
สร้างตาราง ASCII ขึ้นมาใหม่เป็นตาราง ASCII
บ่อยครั้งในขณะที่ฉันเล่นกอล์ฟฉันจะต้องการทราบว่าค่า ASCII ของอักขระบางตัวคืออะไร หนึ่งในแหล่งข้อมูลที่ชื่นชอบได้อย่างรวดเร็วมองขึ้นทั้งหมดของตัวอักขระ ASCIIเป็นASCIItable.com นี่เป็นภาพที่ดีมากที่ไม่เพียง แต่แสดงตัวอักษร ASCII ที่พิมพ์ได้และค่าของมัน แต่ยังรวมถึงตัวอักษรที่ไม่สามารถพิมพ์ได้และส่วนขยายและค่าเป็นเลขฐานสิบหกฐานแปดและ HTML: ความท้าทายในวันนี้คือการสร้างตาราง ASCII นั้นใหม่เป็นตาราง ASCII แทนภาพ เพื่อให้สิ่งต่าง ๆ ง่ายขึ้นเราจะไม่ใช้ตัวควบคุม (ตัวละครต่ำกว่า 32) และเราจะแสดงเฉพาะค่าทศนิยมและตัวอักษร ในคำอื่น ๆ ความท้าทายของคุณคือการเขียนโปรแกรมเต็มรูปแบบหรือฟังก์ชั่นที่พิมพ์หรือส่งกลับข้อความต่อไปนี้: Dec Chr | Dec Chr | Dec Chr ---------------------------------- 32 Space | 64 @ | 96 ` 33 ! | 65 A | 97 a …

30
เลือกตัวเลขสุ่มระหว่าง 0 ถึง n โดยใช้แหล่งที่มาของการสุ่ม
งาน กำหนดให้เป็นจำนวนเต็มบวกnน้อยกว่าที่2^30ระบุไว้เป็นอินพุตในวิธีที่คุณเลือกรหัสของคุณควรส่งออกจำนวนเต็มแบบสุ่มระหว่าง0และnรวม หมายเลขที่คุณสร้างควรจะเลือกอย่างสม่ำเสมอโดยการสุ่ม นั่นคือแต่ละค่าจาก0ถึงnต้องเกิดขึ้นกับความน่าจะเป็นที่เท่ากัน (ดูกฎและคำเตือน) กฎและคำเตือน รหัสของคุณสามารถสันนิษฐานได้ว่าตัวสร้างตัวเลขสุ่มใด ๆ ที่สร้างขึ้นในภาษาหรือไลบรารีมาตรฐานของคุณที่อ้างว่าสุ่มอย่างสม่ำเสมอนั้นเป็นชุดเครื่องแบบ นั่นคือคุณไม่ต้องกังวลเกี่ยวกับคุณภาพของแหล่งข้อมูลแบบสุ่มที่คุณใช้ อย่างไรก็ตาม คุณจะต้องกำหนดว่าถ้าแหล่งข้อมูลที่สุ่มคุณกำลังใช้เป็นชุดแล้วรหัสของคุณอย่างถูกต้องออกผลลัพธ์เป็นจำนวนเต็มสุ่มเครื่องแบบจากไป0n อาร์กิวเมนต์ใด ๆ เมื่อเรียกใช้ฟังก์ชันสุ่มในตัวหรือไลบรารีต้องเป็นค่าคงที่ นั่นคือพวกเขาจะต้องเป็นอิสระอย่างสมบูรณ์จากค่าอินพุต รหัสของคุณอาจสิ้นสุดลงด้วยความน่าจะเป็น 1แทนที่จะรับประกันได้ว่าจะยุติ หมายเหตุ randInt(0,n) ไม่ถูกต้องเนื่องจากรับอินพุตเป็นอาร์กิวเมนต์สำหรับฟังก์ชัน builtin หรือ library rand()%nจะไม่ให้หมายเลขสุ่มที่เหมือนกันโดยทั่วไป เป็นตัวอย่างที่กำหนดโดย betseg ถ้าintmax == 15และn = 10แล้วคุณจะมีโอกาสมากขึ้นที่จะได้รับมากกว่า0-56-10 floor(randomfloat()*(n+1)) จะไม่ให้ตัวเลขสุ่มแบบทั่วไปโดยทั่วไปเนื่องจากจำนวน จำกัด ของค่าจุดลอยตัวที่เป็นไปได้ที่แตกต่างกันระหว่าง 0 ถึง 1

8
เห็นภาพอาร์เรย์
กำหนดความลึกใด ๆ ให้วาดเนื้อหาด้วยเส้นขอบ+-|รอบ ๆ แต่ละ subarray สิ่งเหล่านี้คืออักขระ ASCII สำหรับเครื่องหมายบวกลบและแนวตั้ง ตัวอย่างเช่นถ้าอาร์เรย์คือ[1, 2, 3]วาด +-----+ |1 2 3| +-----+ สำหรับอาร์เรย์ที่ซ้อนกันเช่น[[1, 2, 3], [4, 5], [6, 7, 8]]วาด +-----------------+ |+-----+---+-----+| ||1 2 3|4 5|6 7 8|| |+-----+---+-----+| +-----------------+ สำหรับอาเรย์แบบขาด ๆ เช่น[[[1, 2, 3], [4, 5]], [6, 7, 8]]วาด +-------------------+ |+-----------+-----+| ||+-----+---+|6 7 8|| …

10
เครื่องกำเนิดไฟฟ้าสี่แยก
นี่คือ ASCII-art ของสี่แยกสี่ทาง: | | | | | | | | | | | | | -----+-----+----- | | - - -| |- - - | | -----+-----+----- | | | | | | | | | | | | | (โปรดสังเกตว่าถนนในแนวนอนมีความสูง 3 แถวในขณะที่ถนนแนวตั้งมีความกว้าง 5 คอลัมน์เพื่อเหตุผลด้านสุนทรียภาพเนื่องจากตัวอักษรรูปสี่เหลี่ยมผืนผ้า) ความท้าทายของคุณคือการผลิตงานศิลปะ ASCII นี้ อย่างไรก็ตามอย่างที่ฉันแน่ใจว่าทุกคนรู้ว่าไม่ใช่ทุก …

1
คิดออกรูปแบบการล็อค Android
ให้บอกว่าคุณเห็นเพื่อนของคุณป้อนรหัสผ่านของเขาหรือเธอลงในโทรศัพท์ Android ของพวกเขา คุณจำไม่ได้ว่าพวกเขาสร้างรูปแบบอย่างไร แต่คุณจำได้ว่ารูปแบบนั้นเป็นอย่างไร เป็นเพื่อนที่เกี่ยวข้องที่คุณต้องการทราบว่ารหัสผ่านของพวกเขาปลอดภัยเพียงใด งานของคุณคือการคำนวณทุกวิธีที่สามารถทำรูปแบบเฉพาะ รูปแบบ Android ทำงานอย่างไร รูปแบบจะถูกวาดบนตารางของโหนด 3x3 ในรูปแบบหนึ่งเข้าชมชุดของโหนดโดยไม่ต้องยกนิ้วของพวกเขาจากหน้าจอ แต่ละโหนดที่พวกเขาเยี่ยมชมเชื่อมต่อกับโหนดก่อนหน้าโดยขอบ มีกฎสองข้อที่ต้องคำนึงถึง คุณไม่สามารถเยี่ยมชมหนึ่งโหนดมากกว่าหนึ่งครั้ง ขอบอาจไม่ผ่านโหนดที่ไม่ได้เข้าชม โปรดทราบว่าในขณะที่มักจะยากมากที่จะดำเนินการและจึงไม่บ่อยมากในแบบ real รวมกันล็อคหุ่นยนต์ก็เป็นไปได้ที่จะย้ายเหมือนอัศวิน นั่นคือเป็นไปได้ที่จะย้ายจากด้านหนึ่งไปยังมุมที่ไม่ติดกันหรืออีกด้านหนึ่ง นี่คือสองตัวอย่างของรูปแบบที่ใช้การเคลื่อนไหวดังกล่าว: นี่คือGif แบบเคลื่อนไหวของมันที่กำลังแสดงอยู่ การแก้ลวดลาย รูปแบบทั่วไปอาจมีลักษณะดังนี้: ด้วยรูปแบบที่เรียบง่ายเช่นนี้มันมีสองวิธีที่สองวาดรูปแบบ คุณสามารถเริ่มต้นที่ปลายทั้งสองด้านใดด้านหนึ่งหลวมและเดินทางผ่านโหนดที่ถูกเน้นสีไปยังอีกด้านหนึ่ง แม้ว่าสิ่งนี้จะเป็นจริงสำหรับหลาย ๆ รูปแบบโดยเฉพาะอย่างยิ่งสิ่งที่มนุษย์ใช้โดยทั่วไปสิ่งนี้ไม่เป็นความจริงสำหรับทุกรูปแบบ พิจารณารูปแบบต่อไปนี้: มีสองวิธีแก้ไขปัญหาที่รู้จักได้ทันที หนึ่งเริ่มต้นที่ด้านซ้ายบน: และเริ่มต้นที่กึ่งกลางด้านล่าง: อย่างไรก็ตามเนื่องจากบรรทัดได้รับอนุญาตให้ผ่านจุดเมื่อมีการเลือกแล้วมีรูปแบบเพิ่มเติมที่เริ่มต้นที่ตรงกลางด้านบน: รูปแบบนี้โดยเฉพาะมี 3 รูปแบบการแก้ปัญหา แต่จะมีที่ใดก็ได้ระหว่าง 1 และ 4 โซลูชั่น[อ้างจำเป็น] นี่คือตัวอย่างของแต่ละรายการ: 1 2 3 4 I …

18
วาดสตริงที่เป็นหลุมเป็นบ่อ
( ได้รับแรงบันดาลใจจากการท้าทายนี้) ABBCBAสมมติว่าเรามีสตริง เราสามารถพูดได้ว่ามีการเพิ่มขึ้นระหว่างAและBสำหรับBต่อไปนี้A; เราสามารถพูดได้ว่ามีการเรียกใช้ระหว่างBและBสำหรับการเปลี่ยนแปลงอะไร; และในที่สุดเราสามารถพูดได้มีฤดูใบไม้ร่วงระหว่างและC Bเราสามารถวาดกราฟดังนี้: A B B C B A Rising: o o Continuing: o Falling: o o ไม่มีฉลากและลดช่องว่างให้เหลือน้อยที่สุด: o o o oo ABBCBAนี่คือการส่งออกที่คาดว่าสำหรับการป้อนข้อมูล คุณสามารถใช้อักขระที่ไม่ใช่ช่องว่างเพื่อแทนที่oในเอาต์พุต นอกจากนี้แต่ละคอลัมน์อาจมีช่องว่างพิเศษระหว่างคอลัมน์เหล่านั้นเช่น: o o o o o ข้อมูลที่ป้อนจะประกอบด้วยอักขระอย่างน้อยสามตัว สตริงจะประกอบด้วยตัวอักษรตัวพิมพ์ใหญ่ทั้งหมด แต่คุณอาจใช้อักษรตัวพิมพ์เล็กแทนได้ กรณีทดสอบ TEST CASE LINE 1 LINE 2 LINE 3 HELLOWORLD o oo o …

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