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

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

12
แต่งเติมในช่องว่าง
ให้เราบอกว่าเรามีชุดของฟังก์ชั่นเฉพาะเกี่ยวกับสตริง ฟังก์ชั่นเหล่านี้มีลักษณะเหมือนเติมในช่องว่างหรือ madlib ยกเว้นว่าพวกเขาจะใช้เพียงหนึ่งอินพุตและใช้เพื่อเติมลงในช่องว่างทั้งหมดของพวกเขา ตัวอย่างเช่นเราอาจมีฟังก์ชั่นที่ดูเหมือน I went to the ____ store and bought ____ today. หากเราใช้ฟังก์ชันนี้กับสตริงcheeseผลลัพธ์จะเป็น: I went to the cheese store and bought cheese today. เราสามารถแสดงฟังก์ชันเหล่านี้เป็นรายการสตริงที่ไม่ว่างโดยที่ช่องว่างเป็นเพียงช่องว่างระหว่างสตริง ตัวอย่างฟังก์ชั่นของเราด้านบนจะเป็น: ["I went to the ", " store and bought ", " today."] ด้วยการแทนค่านี้มีเพียงหนึ่งการแทนสำหรับทุก ๆ ฟังก์ชันของการเรียงลำดับนี้และเพียงหนึ่งฟังก์ชันสำหรับแต่ละการแทนเท่านั้น สิ่งที่เรียบร้อยจริงๆคือชุดของฟังก์ชั่นดังกล่าวปิดภายใต้องค์ประกอบ กล่าวคือการจัดองค์ประกอบของฟังก์ชั่นสองอย่างของเราเป็นหน้าที่หนึ่งของฟังก์ชันเหล่านี้เสมอ เช่นถ้าฉันเขียนฟังก์ชันของเราด้านบนด้วย ["blue ", ""] (ฟังก์ชั่นที่blueเพิ่มเข้าสู่อินพุต) …

19
เขียนโปรแกรมที่สั้นที่สุดเพื่อคำนวณความสูงของต้นไม้ไบนารี
ความสูงของต้นไม้ไบนารีคือระยะทางจากรูตโหนดไปยังโหนดชายด์ที่อยู่ห่างจากรูทมากที่สุด ด้านล่างเป็นตัวอย่าง: 2 <-- root: Height 1 / \ 7 5 <-- Height 2 / \ \ 2 6 9 <-- Height 3 / \ / 5 11 4 <-- Height 4 ความสูงของต้นไม้ไบนารี: 4 ความหมายของต้นไม้ไบนารี ต้นไม้เป็นวัตถุที่มีค่าจำนวนเต็มที่มีลายเซ็นและทั้งสองต้นไม้อื่น ๆ หรือตัวชี้ไปที่พวกเขา โครงสร้างของโครงสร้างต้นไม้ไบนารีมีลักษณะดังนี้: typedef struct tree { struct tree * l; struct tree * …

7
พื้นผิวของลูกบาศก์ 3x3x3 เป็นกราฟ
งานของคุณคือการสร้างกราฟที่มี 54 จุดยอดแต่ละอันสอดคล้องกับด้านของลูกบาศก์รูบิค มีขอบระหว่างจุดยอดสองจุดถ้าด้านที่เกี่ยวข้องแบ่งด้านกัน กฎระเบียบ คุณอาจเลือกที่จะแสดงผลรายการคำคุณศัพท์เมทริกซ์คำคุณศัพท์รายการขอบหรือรูปแบบที่เหมาะสมเพื่อแสดงกราฟในอัลกอริทึม (โดยทั่วไปแล้วกราฟที่มนุษย์สามารถอ่านได้มักจะไม่ใช่รูปแบบที่เหมาะสมในอัลกอริทึมในกรณีส่วนใหญ่) คุณสามารถสร้างจุดสุดยอดทุกจุดติดกับตัวเองหรือไม่ติดกับตัวเองก็ได้ คุณอาจรวมทั้งสองทิศทางสำหรับแต่ละขอบ (นับหนึ่งหรือสองครั้งสำหรับการวนรอบตัวเอง) หรือเอาท์พุทหนึ่งครั้งสำหรับแต่ละขอบ แต่ไม่รวมกัน คุณสามารถกำหนดหมายเลขจุดยอดใหม่อีกครั้งข้ามตัวเลขบางส่วนหรือใช้ป้ายกำกับที่ไม่ใช่ตัวเลขสำหรับจุดยอดในทางที่คุณต้องการ คุณควรโพสต์หมายเลขหากไม่ชัดเจนดังนั้นผู้อื่นสามารถตรวจสอบคำตอบของคุณได้ง่ายขึ้น นี่คือรหัสกอล์ฟ รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ ตัวอย่างผลลัพธ์ นี่คือการนับจำนวนจุดยอดที่ใช้ในตัวอย่าง: 0 1 2 3 4 5 6 7 8 9 10 11 18 19 20 27 28 29 36 37 38 12 13 14 21 22 23 30 31 32 39 40 …

22
เพื่อการเจริญเติบโตของเลขชี้กำลังแทนเลขนัย
ท้าทาย รับฐาน1&lt;b&lt;101&lt;b&lt;101 < b < 10และดัชนีt≥1t≥1t \ge 1 , คำที่ส่งออกxtxtx_t , กำหนดดังนี้: x1=1110x1=1110x_1 = 11_{10} xi+1xi+1x_{i+1}ได้มาจากการแปลงxixix_iเป็นฐานbbbจากนั้นแปลค่าตัวเลขอีกครั้งในฐาน101010 ผลลัพธ์ควรอยู่ในฐาน101010 เดินผ่านสำหรับฐาน 5 คำ 5 จะเป็น: x1=1110x1=1110x_1 = 11_{10} 10 1110=2151110=21511_{10} = 21_{5}ดังนั้นx2=2110x2=2110x_2 = 21_{10} 10 2110=4152110=41521_{10} = 41_{5}ดังนั้นx3=4110x3=4110x_3 = 41_{10} 10 4110=13154110=131541_{10} = 131_{5}ดังนั้นx4=13110x4=13110x_4 = 131_{10} 10 13110=1011513110=10115131_{10} = 1011_{5}ดังนั้นx5=101110x5=101110x_5 = 1011_{10} 10 …
18 code-golf  number 

10
โปรแกรมที่ทำงานแตกต่างกันใน / ออกจากโปรแกรมดีบั๊ก [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน8 เดือนที่ผ่านมา ความท้าทายคือการเขียนโปรแกรมที่กำหนด (ภาษาใด ๆ / OS) ซึ่งจะมีข้อโต้แย้งหรือป้อนข้อมูลอื่น ๆ และการทำงานแตกต่างกันในการดีบักจากวิธีการที่จะทำงานเมื่อไม่ได้กำลังดีบั๊ก ตัวอย่างเช่นโปรแกรมอาจแสดงผลบางอย่างเมื่อถูกดีบั๊ก แต่จะไม่แสดงผลอะไรเมื่อไม่ได้ดีบั๊ก หรือเอาท์พุทที่แตกต่างกันในแต่ละกรณี หรืออาจมีปัญหาเมื่อถูกดีบั๊ก แต่ไม่ผิดพลาดเมื่อไม่ดีบั๊ก หรือในทางกลับกัน คำเตือนและการชี้แจง: ความแตกต่างของเวลาไม่นับ อนุญาตให้ใช้ล่ามภาษา เพื่อเน้นระดับ: พฤติกรรมจะต้องทำซ้ำได้อย่างแน่นอนทั้งในและนอกบริบทการแก้ไขจุดบกพร่อง การมีอยู่ของตัวดีบักควรแตกต่างระหว่างสองกรณีเท่านั้น การบอกดีบักเกอร์เพื่อเพิ่มอินพุต (stdin หรือ argv ENV หรืออะไรก็ตาม) คือการโกงดีบักเกอร์ควรเรียกใช้โปรแกรม "ตามที่เป็น" การเปลี่ยนสภาพแวดล้อม (เช่นการทำงานในเครื่องเสมือนหรือระบบปฏิบัติการที่แตกต่างกันหรือเปลี่ยนการตั้งค่าระบบปฏิบัติการเช่นขีด จำกัด หน่วยความจำ) ระหว่างการดีบักและการทำงานที่ไม่ใช่การดีบักไม่ได้รับอนุญาต รหัสที่สั้นที่สุดชนะ ฉันอาจมอบรางวัลซึ่งแสดงให้เห็นสิ่งที่น่าสนใจเกี่ยวกับวิธีการทำงานของผู้ debuggers
18 code-golf 

8
นี่เป็นวัฏจักรรูปสี่เหลี่ยมหรือไม่?
ในวิชาคณิตศาสตร์รูปสี่เหลี่ยมขนมเปียกปูนเป็นวงกลมที่มีจุดยอดทั้งหมดอยู่ในวงกลมเดียวกัน กล่าวอีกนัยหนึ่งทุกจุดสุดยอดอยู่ในวงกลมของอีกสามคน สำหรับข้อมูลเพิ่มเติมโปรดดูบทความแม ธ เวิลด์ ตัวอย่าง quadrilaterals เหล่านี้เป็นวัฏจักร: สี่เหลี่ยมคางหมูนี้ไม่ได้เป็นรอบ (ภาพจาก Wikipedia) วัตถุประสงค์ ให้พิกัดของจุดยอดสี่จุดตามลำดับทวนเข็มนาฬิกาซึ่งเป็นรูปสี่เหลี่ยมนูนออกมาตรวจสอบว่ารูปสี่เหลี่ยมเป็นรูปวงกลมหรือไม่ พิกัดจะเป็นจำนวนเต็ม (หมายเหตุอย่างไรก็ตามพิกัด circumcenter และ circumradius นั้นไม่จำเป็นต้องเป็นจำนวนเต็ม) ตามที่กล่าวไว้ในวรรคก่อนหน้านี้ไม่มีสามจุดที่จะเป็นแบบเชิงเส้นร่วมและไม่มีความบังเอิญสองแบบ I / O คุณสามารถป้อนข้อมูลโดยใช้รูปแบบที่เหมาะสม โดยเฉพาะอย่างยิ่ง[[x1,x2,x3,x4],[y1,y2,y3,y4]], [[x1,y1],[x2,y2],[x3,y3],[x4,y4]]และซับซ้อนจะมีการปรับตัวเลขทั้งหมด เอาต์พุตโดยใช้ค่าที่สอดคล้องกันใด ๆ สำหรับจริงและเท็จ กรณีทดสอบ จริง: [0,0], [314,0], [314,1], [0,1] [-5,5], [5,-5], [1337,42], [42,1337] [104, -233], [109, -232], [112, -231], [123, -224] เท็จ: [0,0], [314,0], …

17
มีหมายเลขจากมากไปน้อยติดต่อกันในหมายเลข
2019 ได้มาแล้วและทุกคนอาจสังเกตเห็นถึงความผิดปกติของตัวเลขนี้: ในความเป็นจริงมันประกอบด้วยสองหมายเลขย่อย (20 และ 19) ที่แสดงถึงลำดับของตัวเลขจากมากไปหาน้อย ท้าทาย กำหนดตัวเลขxแล้วส่งคืนความยาวของลำดับสูงสุดของตัวเลขเรียงลำดับจากมากไปน้อยซึ่งสามารถสร้างxได้ หมายเหตุ: ตัวเลขย่อยไม่สามารถมีศูนย์นำหน้า (เช่น1009ไม่สามารถแบ่งออก10ได้09) ที่ต่อเนื่องกันและจากมากไปน้อยหมายความว่าตัวเลขในลำดับต้องเท่ากับตัวเลขก่อนหน้า -1 หรือni+1=ni−1ni+1=ni−1n_{i+1} = n_{i}-1 (เช่น52ไม่สามารถแบ่งออกเป็น5,2เพราะ5และ2ไม่ต่อเนื่องกันได้2 ≠ 5 - 1) ลำดับจะต้องได้รับโดยใช้เต็มจำนวนเช่นใน7321คุณไม่สามารถทิ้ง7และได้รับลำดับ3, 2,1 เพียงหนึ่งลำดับสามารถได้รับจากหมายเลขที่เช่น3211098ไม่สามารถจะแยกออกเป็นสองลำดับ3, 2, 1และ10, 9,8 อินพุต จำนวนเต็ม ( &gt;= 0): สามารถเป็นตัวเลขหรือสตริงหรือรายการของตัวเลข เอาท์พุต จำนวนเต็มเดียวที่กำหนดจำนวนสูงสุดของการลดจำนวนย่อย (โปรดทราบว่าขอบเขตล่างของตัวเลขนี้1คือจำนวนที่ประกอบขึ้นเองตามลำดับจากความยาวหนึ่ง) ตัวอย่าง : 2019 --&gt; 20,19 --&gt; output : 2 201200199198 --&gt; 201,200,199,198 --&gt; …
18 code-golf 

15
ตัวหารและตัวเลขแย่
บทนำ ในโลกที่แปลกประหลาดของตัวเลขจำนวนเต็มตัวหารเป็นเหมือนสินทรัพย์และพวกเขาใช้เรียกว่า "รวย" ตัวเลขที่มีตัวหารมากกว่าการกลับรายการในขณะที่พวกเขาเรียกว่า "ไม่ดี" คนที่มีตัวหารน้อยกว่าการกลับรายการ ยกตัวอย่างเช่นหมายเลข240124012401มีห้าตัวหาร: 1,7,49,343,24011,7,49,343,24011,7,49,343,2401 , ในขณะที่การพลิกกลับของ104210421042มีเพียงสี่: 1,2,521,10421,2,521,10421,2,521,1042 1042 ดังนั้น240124012401เรียกว่าอุดมไปด้วยจำนวนขณะที่104210421042ยากจนจำนวน ตามคำจำกัดความนี้เราสามารถสร้างสองจำนวนเต็มดังนี้ (here we list the first 25 elements of the sequences) Index | Poor | Rich -------|------|------- 1 | 19 | 10 2 | 21 | 12 3 | 23 | 14 4 | 25 | 16 …

30
ตัวเลขลดลงขณะที่ตัวอักษรเพิ่มขึ้น
แรงบันดาลใจจากการสุ่มเพิ่มจำนวนในขณะที่ตัวอักษรลดลง ได้รับรายชื่อของตัวอักษรผสมและจำนวนเต็ม (เช่น['a', 2, 3, 'b']) เพิ่มตัวอักษรโดยหนึ่งตำแหน่งในอักษร (ห่อที่zไปa) และลดตัวเลขโดย 1. ['b', 1, 2, 'c']สำหรับตัวอย่างข้างต้นผลผลิตที่ควรจะเป็น อินพุตสามารถเป็นรายการแบบผสม, สตริงแบบมีตัวคั่น, รายการสตริง ฯลฯ zล้อมรอบไปaด้วย แต่1ไปที่0และ0ไป-1ฯลฯ ข้อมูลที่ป้อนจะเป็น[a-z]จำนวนเต็มเท่านั้น คุณสามารถเลือกตัวอักษรพิมพ์ใหญ่[A-Z]ถ้าเป็นเรื่องง่ายสำหรับคุณ อินพุตรับประกันว่าไม่ว่างเปล่า ข้อมูลที่ป้อนอาจมีตัวเลขหรือตัวอักษรเท่านั้น ตัวอย่าง: Input Output ['a', 2, 3, 'b'] ['b', 1, 2, 'c'] ['a', 'b', 'z'] ['b', 'c', 'a'] [-1, 0, 257, 'x'] [-2, -1, 256, 'y'] [0, …

9
การแบ่งตารางออกเป็นสามเหลี่ยม
เป้าหมาย เป้าหมายของความท้าทายนี้คือการสร้างฟังก์ชั่นnซึ่งคำนวณจำนวนวิธีในการแบ่งn X 1ตารางเป็นสามเหลี่ยมซึ่งจุดยอดทั้งหมดของสามเหลี่ยมอยู่บนจุดกริด ตัวอย่าง ตัวอย่างเช่นมี 14 วิธีในการแบ่งพาร์ติชันตาราง 2 x 1 ดังนั้นf(2) = 14ผ่านพาร์ติชันต่อไปนี้ โดยที่พาร์ติชันมี 2, 2, 2, 2, 2, 4 และ 2 ทิศทางที่แตกต่างกันตามลำดับ เกณฑ์การให้คะแนน นี่คือรหัส - กอล์ฟดังนั้นรหัสที่สั้นที่สุดจึงชนะ

8
Ternary-if Converter
ใน Java / .NET / C / JavaScript / ฯลฯ คุณสามารถใช้ ternary-ifs เพื่อตัดคำสั่ง if-shorten ให้สั้นลง ตัวอย่าง (ใน Java): // there is a String `s` and an int `i` if(i&lt;0)s="Neg";else if(i&gt;0)s="Pos";else s="Neut"; สามารถย่อให้สั้นด้วย ternary- หาก: s=i&lt;0?"Neg":i&gt;0?"Pos":"Neut"; ท้าทาย: อินพุต: if-else ปกติ (เป็นไปได้ด้วยการซ้อน) ที่ตั้งค่าตัวแปรเดียว เอาต์พุต: ternary ที่แปลงแล้วหาก กฏท้าทาย: คุณสามารถสมมติว่ากรณีอื่นทั้งหมดเป็นไปได้โดยไม่ต้องวงเล็บ (ดังนั้นถ้าบล็อกอื่น / if- ถ้า …
18 code-golf  string 

22
ssTTsSTtRrriinInnnnNNNIiinngg
ท้าทาย สำหรับอักขระแต่ละตัวของสตริงยกเว้นตัวสุดท้ายให้ทำดังนี้ เอาท์พุทตัวละครปัจจุบัน ตามด้วยการสุ่มเอาท์พุทจากรายการต่อไปนี้เป็นจำนวนสุ่มครั้งระหว่าง 1 - 5 (รวม): ตัวละครปัจจุบัน อักขระตัวถัดไปของสตริง เวอร์ชัน switchcase ของตัวละครที่คุณเปิดอยู่ รุ่น switchcase ของตัวละครต่อไปของสตริง กรณีทดสอบ String -&gt; SSSTSStrTrIiinIIngn , . , . , . Hello world! -&gt; ,,, .. , ,, .... , , .. .. . HHH HHEeelLlLllooO wwOworOOrrrRllDd!!D Programming Puzzles and Code Golf -&gt; PrPPrRrOooooogggRgGraAraaaMMMmmmimMIiininGGgG PPPPuZzZZzZzzZzllLLEEeEsEsssS …

30
ค้นหาจำนวนศูนย์นำในจำนวนเต็ม 64 บิต
ปัญหา: ค้นหาจำนวนของศูนย์นำหน้าในจำนวนเต็มแบบ 64 บิต กฎ: อินพุตไม่สามารถถือเป็นสตริงได้ มันสามารถเป็นอะไรก็ได้ที่การดำเนินการทางคณิตศาสตร์และ bitwise เป็นตัวผลักดันอัลกอริธึม เอาต์พุตควรตรวจสอบความถูกต้องกับการแสดงตัวเลขจำนวนเต็มแบบ 64 บิตของหมายเลขโดยไม่คำนึงถึงภาษา ใช้กฎของรหัสกอล์ฟเริ่มต้น รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ กรณีทดสอบ: การทดสอบเหล่านี้ถือว่าเป็นจำนวนเต็มแบบเต็มของสองส่วน หากภาษา / การแก้ปัญหาของคุณขาดหรือใช้การแทนจำนวนเต็มที่ลงนามแตกต่างกันโปรดโทรออกและแจ้งกรณีทดสอบเพิ่มเติมที่อาจเกี่ยวข้อง ฉันได้รวมกรณีทดสอบบางข้อที่กล่าวถึงความแม่นยำสองเท่า แต่โปรดอย่าลังเลที่จะแนะนำรายการอื่น ๆ ที่ควรแสดง input output 64-bit binary representation of input (2's complement) -1 0 1111111111111111111111111111111111111111111111111111111111111111 -9223372036854775808 0 1000000000000000000000000000000000000000000000000000000000000000 9223372036854775807 1 0111111111111111111111111111111111111111111111111111111111111111 4611686018427387903 2 0011111111111111111111111111111111111111111111111111111111111111 1224979098644774911 3 0001000011111111111111111111111111111111111111111111111111111111 9007199254740992 10 0000000000100000000000000000000000000000000000000000000000000000 …

25
การแปลงตัวเลขจากการแทน Zeckendorf เป็นทศนิยม
เกี่ยวกับการเป็นตัวแทนของ Zeckendorf / หมายเลขฐานฟีโบนักชี นี่คือระบบตัวเลขที่ใช้หมายเลขฟีโบนักชีเป็นฐาน ตัวเลขประกอบด้วย 0 และ 1 และแต่ละ 1 หมายถึงตัวเลขมีหมายเลข Fibonacci ที่สอดคล้องกันและ 0 หมายถึงไม่มี ตัวอย่างเช่นลองแปลงจำนวนธรรมชาติทั้งหมด &lt;= 10 เป็นเบสฟีโบนักชี 1 จะกลายเป็น 1 เพราะมันคือผลรวมของ 1 ซึ่งเป็นตัวเลขฟีโบนักชี 2 จะกลายเป็น 10 เพราะมันคือผลรวมของ 2 ซึ่งเป็นจำนวนฟีโบนักชีและมันไม่จำเป็นต้อง 1 เพราะเราได้ผลรวมที่ต้องการไปแล้ว 3 จะกลายเป็น 100 เพราะมันคือผลรวมของ 3 ซึ่งเป็นตัวเลขฟีโบนักชีและมันไม่จำเป็นต้อง 2 หรือ 1 เพราะเราได้ผลรวมที่ต้องการแล้ว 4 จะกลายเป็น 101 เพราะเป็นผลรวมของ [3,1] ซึ่งทั้งคู่เป็นตัวเลขฟีโบนักชี …

9
ระยะทาง Hamming สูงสุดระหว่างรายการของสายที่มีเบาะ
ระยะห่างของ Hamming ระหว่างสองสายที่มีความยาวเท่ากันคือจำนวนตำแหน่งที่อักขระที่เกี่ยวข้องแตกต่างกัน หากสตริงไม่ได้มีความยาวเท่ากันระยะ Hamming จะไม่ถูกกำหนด ท้าทาย เขียนโปรแกรมหรือฟังก์ชั่นที่ค้นหาระยะทางที่ใหญ่ที่สุดของ Hamming จากทุกคู่ของสตริงจากรายการของสตริงที่มีเบาะตามที่จำเป็นตามกฎที่อธิบายด้านล่าง a-zA-Z0-9ตัวละครจะมาจากภายใน สตริงอาจมีความยาวไม่เท่ากันดังนั้นสำหรับการเปรียบเทียบแต่ละครั้งสตริงที่สั้นกว่าจะต้องมีการเสริมเบาะดังนี้: ตัดสตริงจากจุดเริ่มต้นหลาย ๆ ครั้งตามต้องการเพื่อให้ตรงกับความยาวที่ต้องการ เปลี่ยนกรณีของตัวอักษรแต่ละการตัดเวลาคี่ (1, 3, 5, ฯลฯ ) ปล่อยให้สิ่งที่อยู่ข้างนอกa-zA-Zไม่เปลี่ยนแปลงเมื่อห่อ ตัวอย่างเช่นสมมติว่าคุณจำเป็นต้องวางสตริงอักขระ 5 ตัวab9Cdเพื่อให้ลงท้ายด้วยอักขระ 18 ตัว คุณจะจบลงด้วย: ab9CdAB9cDab9CdAB9 ^^^^^ ^^^ ด้วยการ^เพิ่มภายใต้การล้อมรอบที่ 1 และ 3 เพื่อไฮไลต์การเปลี่ยนแปลงของตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ Input / Output รูปแบบอินพุต / เอาต์พุตมีความยืดหยุ่น คุณสามารถสมมติว่าอินพุตมีอย่างน้อยสองสตริงและสตริงทั้งหมดจะมีอักขระอย่างน้อยหนึ่งตัว ผลลัพธ์เป็นจำนวนเต็ม กฎระเบียบ นี่คือรหัสกอล์ฟ ใช้กฎมาตรฐาน กรณีทดสอบ [ "a", …
18 code-golf  string 

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