คำถามอื่นของ FizzBuzz [ปิดแล้ว]


89

ใครมีคำถามใด ๆ ที่ดี FizzBuzz ชนิดที่ไม่ปัญหา FizzBuzz?

ฉันกำลังสัมภาษณ์ใครบางคนและ FB เป็นที่รู้จักกันดีและไม่ใช่เรื่องยากที่จะจดจำดังนั้นการหยุดค้นหาไอเดียครั้งแรกของฉันคือการเสพติดใหม่ของฉัน

คำตอบ:


105

ฉันเคยเห็นรายการเล็ก ๆ ของปัญหาการเขียนโปรแกรมที่ค่อนข้างง่ายที่ใช้ในการกำจัดผู้สมัครเช่นเดียวกับ FizzBuzz นี่คือปัญหาบางส่วนที่ฉันพบตามลำดับความยากที่เพิ่มขึ้น:

  1. ย้อนกลับสตริง
  2. ย้อนกลับประโยค ("bob likes dogs" -> "dogs likes bob")
  3. ค้นหาค่าต่ำสุดในรายการ
  4. ค้นหาค่าสูงสุดในรายการ
  5. คำนวณเศษที่เหลือ (กำหนดตัวเศษและตัวส่วน)
  6. ส่งคืนค่าที่แตกต่างจากรายการรวมทั้งรายการที่ซ้ำกัน (เช่น "1 3 5 3 7 3 1 1 5" -> "1 3 5 7")
  7. ส่งคืนค่าที่แตกต่างกันและจำนวนนับ (เช่นรายการด้านบนจะกลายเป็น "1 (3) 3 (3) 5 (2) 7 (1)")
  8. กำหนดสตริงของนิพจน์ (เฉพาะตัวแปร + และ -) และชุดของตัวแปร / คู่ค่า (เช่น a = 1, b = 7, c = 3, d = 14) ส่งคืนผลลัพธ์ของนิพจน์ ("a + b + c -d "จะเป็น -3)

สิ่งเหล่านี้มีไว้สำหรับ Java และคุณสามารถใช้ไลบรารีมาตรฐานเพื่อให้บางส่วนทำได้ง่ายมาก (เช่น 6) แต่ทำงานเหมือน FizzBuzz หากคุณมีเบาะแสเกี่ยวกับการเขียนโปรแกรมคุณควรจะทำได้อย่างรวดเร็ว แม้ว่าคุณจะไม่รู้ภาษาดี แต่อย่างน้อยก็ควรให้แนวคิดเบื้องหลังวิธีการทำบางสิ่งได้

การใช้การทดสอบนี้หนึ่งในผู้บังคับบัญชาคนก่อนของฉันเห็นทุกอย่างตั้งแต่คนที่ทำมันได้อย่างรวดเร็วไปจนถึงคนที่ทำได้เร็วที่สุดไปจนถึงผู้ชายคนหนึ่งที่ไม่สามารถตอบคำถามได้หลังจากผ่านไปครึ่งชั่วโมง

ฉันควรทราบ: เขาปล่อยให้ผู้คนใช้คอมพิวเตอร์ของเขาในขณะที่พวกเขาได้รับงานเหล่านี้ พวกเขาได้รับคำสั่งโดยเฉพาะว่าสามารถใช้ Google และอื่น ๆ ที่คล้ายกันได้


สำหรับข้อ 8 จะยอมรับโซลูชันที่ใช้ JSR-223 (javax.script) หรือไม่ :-P (เป็นที่ยอมรับว่าการใช้งานนั้นเกินความจำเป็นโดยสิ้นเชิง แต่บางคนก็อยากจะทำแบบนั้นมากกว่าการใช้ java.util.Scanner)
Chris Jester-Young

4
นั่นไม่ได้อยู่ในความคิดของฉันเกี่ยวกับจิตวิญญาณของคำถาม แต่ถ้าคุณรู้มากพอที่จะเสนอสิ่งนั้นคุณก็รู้ดีพอที่จะตอบคำถามของ FizzBuzz ดังนั้นฉันจะไม่ถือมันกับคุณ มันอาจเป็นข้อดีในความโปรดปรานของคุณ ฉันยังคงถามว่าคุณจะทำอย่างไรโดยไม่ใช้ javax.script
MBCook

3
ฉันอ่านคุณตอบมาระยะหนึ่งแล้วและไม่สามารถเข้าใจได้ว่าเกิดอะไรขึ้นทำไมฉันถึงไม่ชอบสิ่งนี้คือคำถามของคุณไม่สนุกกับการเขียนโค้ด :) (ซึ่งก็โอเคเนื่องจากตั้งใจ สำหรับการสัมภาษณ์) ไม่มีประเด็นที่แท้จริงสำหรับความคิดเห็นนี้ แต่แค่อยากให้มันออกจากระบบของฉัน :) ขอโทษสำหรับทุกรอยยิ้ม
Trufa

1
ต้องการดูตัวอย่างการแก้ปัญหาสำหรับหมายเลข 8 7 แรกเป็นเรื่องง่าย แต่ 8 (สำหรับฉัน) ดูเหมือนจะซับซ้อนกว่าเล็กน้อยเมื่อเทียบกับส่วนที่เหลือ ฉันกำลังทำมันใน Python 3.x และมันเป็นเกมที่แตกต่างออกไป อาจเป็นเพียงสิ่งที่ฉันไม่รู้
DonutSteve

31

บางทีนี่อาจจะไม่ได้ตอบคำถามของคุณโดยตรง แต่ฉันไม่แน่ใจว่าคุณต้องเจอปัญหาอื่น นอกจากจะ "ง่ายต่อการจดจำ" แล้วคำถามของ FizzBuzz ยังเป็นเพียง "ง่าย" และนั่นคือประเด็น หากบุคคลที่คุณกำลังสัมภาษณ์อยู่ในกลุ่มบุคคลที่ FizzBuzz "เป็นที่รู้จัก" แสดงว่าพวกเขาอยู่ในกลุ่มคนที่คำถามประเภท FizzBuzz จะไม่กรองออกไป นั่นไม่ได้หมายความว่าคุณจ้างพวกเขาตรงจุด แต่หมายความว่าพวกเขาควรจะผ่านมันไปได้และเข้าสู่เนื้อหาของการสัมภาษณ์ต่อไป

กล่าวอีกนัยหนึ่งใครก็ตามที่ใช้เวลาในการอ่านCoding Horrorก็ควรค่าแก่การสัมภาษณ์เพิ่มเติม เพียงแค่ให้พวกเขาเขียนวิธีแก้ปัญหาโดยเร็วจริงๆอภิปรายสั้น ๆ (เช่นคุณจะทดสอบสิ่งนี้อย่างไร) จากนั้นไปยังคำถามถัดไป และตามที่บทความกล่าวว่า "เป็นที่น่าประหลาดใจอย่างแท้จริงว่ามีผู้สมัครกี่คนที่ไม่สามารถทำงานเขียนโปรแกรมที่ง่ายที่สุดได้"


7
คำตอบที่ดี "FizzBuzz เป็นเรื่องง่ายและนั่นคือประเด็น ... ใครก็ตามที่ใช้เวลาในการอ่าน Coding Horror ก็ควรสัมภาษณ์เพิ่มเติม" QFT ฉันมักจะถามผู้สมัครว่า "คุณไปอ่านเกี่ยวกับการเขียนโปรแกรมได้ที่ไหน" ฉันมักจะแปลกใจเสมอที่มีคนพูดถึงบล็อกเว็บไซต์หรือหนังสือไม่ได้สักเล่ม
Noah Sussman

1
ฉันไม่เห็นด้วย. เราสัมภาษณ์ใครบางคนเมื่อสัปดาห์ที่แล้วและเราถามพวกเขา # 3 จากคำตอบที่ยอมรับ พวกเขาพูดอย่างแท้จริงว่า "โอ้ฉันคาดหวังว่าจะมีฟองสบู่" จากนั้นก็ไม่สามารถตอบคำถามของเราได้
frandroid

23

คนแรก ๆ จากProject Eulerน่าจะดี

ตัวอย่างเช่น:

ปัญหา 25

ลำดับฟีโบนักชีถูกกำหนดโดยความสัมพันธ์การเกิดซ้ำ:

Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1.

ดังนั้น 12 เทอมแรกจะเป็น:

F1 = 1
F2 = 1
F3 = 2
F4 = 3
F5 = 5
F6 = 8
F7 = 13
F8 = 21
F9 = 34
F10 = 55
F11 = 89
F12 = 144

เทอมที่ 12 F12 เป็นเทอมแรกที่มีตัวเลขสามหลัก

ดัชนีของเทอมแรกในลำดับฟีโบนักชีที่มีตัวเลข 1,000 หลักคืออะไร?


14

ฉันพบว่าการตรวจสอบสตริงว่ามันเป็นพาลินโดรมนั้นค่อนข้างง่ายที่สามารถเป็นวัชพืชที่ดีได้


ฉันจะบอกว่าขึ้นอยู่กับภาษา ใน C มันอาจจะเป็นที่น่าสนใจใน Perl scalar(reverse 'foo') == 'foo'มันทำกับ
jkramer

3
จริง แต่ในขณะเดียวกันความสามารถในการมองเห็นวิธีแก้ปัญหาที่ง่ายกว่านั้นมีประโยชน์ ... แล้วคุณก็พูดว่า "ตกลงตอนนี้แสร้งทำเป็นว่าคุณไม่มีฟังก์ชันย้อนกลับ"
Mike Stone

1
ใน C ++ ฉันจะให้คะแนนโบนัสสำหรับโซลูชัน "ฟังก์ชัน" ใด ๆ ที่ไม่เกี่ยวข้องกับการวนซ้ำที่เขียนด้วยมือ เช่น "คืนค่าเท่ากับ (str.begin (), str.end (), str.rbegin ());" หรือ (สำหรับความเร็วที่บ้าคลั่ง) "คืนค่าเท่ากับ (str.begin (), str.begin () + str.size () / 2, str.rbegin ());"
Chris Jester-Young

1
แน่นอนเมื่อเห็นคำตอบดังกล่าวฉันขอให้ผู้สมัครอธิบายการทำงานของรหัสด้วย พวกเขาไม่สามารถยกขาขึ้นได้เพียงแค่คัดลอกคำตอบของฉันด้านบน! :-P
Chris Jester-Young

10

ฉันต้องการคำถาม FizzBuzz ที่ไม่เกี่ยวข้องกับตัวดำเนินการโมดูโล โดยเฉพาะอย่างยิ่งเนื่องจากฉันมักจะสัมภาษณ์นักพัฒนาเว็บซึ่งผู้ให้บริการโมดูโลไม่ได้เกิดขึ้นบ่อยๆ และหากไม่ใช่สิ่งที่คุณพบเป็นประจำก็เป็นหนึ่งในสิ่งเหล่านั้นที่คุณมองหาไม่กี่ครั้งที่คุณต้องการ

(จริงอยู่ว่าเป็นแนวคิดที่คุณควรจะพบในหลักสูตรคณิตศาสตร์ที่ไหนสักแห่งระหว่างทาง แต่เป็นหัวข้อที่แตกต่างออกไป)

ดังนั้นสิ่งที่ฉันคิดขึ้นมาคือสิ่งที่ฉันเรียกว่าThrees in Reverseอย่างไม่น่าเชื่อ คำแนะนำคือ:

เขียนโปรแกรมที่พิมพ์ออกมาโดยเรียงลำดับย้อนกลับทุกๆ 3 ระหว่าง 1 ถึง 200

ทำตามลำดับปกติให้ง่าย: คูณดัชนีลูปด้วย 3 จนกว่าคุณจะได้ตัวเลขที่เกิน 200 แล้วเลิก คุณไม่ต้องกังวลว่าจะยุติการทำซ้ำอีกกี่ครั้งหลังจากนั้นคุณเพียงแค่ดำเนินการต่อไปจนกว่าจะถึงค่าแรกที่สูงเกินไป

แต่จะถอยหลังคุณต้องรู้ว่าจะเริ่มจากตรงไหน บางคนอาจรู้โดยสัญชาตญาณว่า 198 (3 * 66) เป็นตัวคูณสูงสุดของ 3 และด้วยเหตุนี้ฮาร์ดโค้ด 66 ในลูป คนอื่น ๆ อาจใช้การดำเนินการทางคณิตศาสตร์ (การหารจำนวนเต็มหรือพื้น () บนการหารทศนิยม 200 และ 3) เพื่อหาจำนวนนั้นและในการทำเช่นนั้นให้ระบุสิ่งที่เกี่ยวข้องเพิ่มเติม

โดยพื้นฐานแล้วมันเป็นปัญหาเดียวกันกับ FizzBuzz (วนลูปผ่านค่าและพิมพ์ออกมาด้วยการบิด) ปัญหานี้เป็นปัญหาในการแก้ไขซึ่งไม่ได้ใช้อะไรที่ค่อนข้าง (ค่อนข้าง) ลึกลับเหมือนกับการทำงานของโมดูโล


2
ฉันอยากรู้อยากเห็น Legion: นักพัฒนาเว็บของคุณทำสิ่งต่างๆเช่นแถวสีเขียว / แถวสำรองโดยไม่ใช้โมดูโลได้อย่างไร
Andrew Burns

4
ถ้าคุณแค่พยายามใช้สไตล์กับแถวที่สลับกันโดยใช้ตัวเลือกลูกที่ n ของ CSS3 jQuery มีตัวเลือกสำรองเช่นกันสำหรับการทำสิ่งดังกล่าวผ่าน JS แต่เมื่อพูดถึงจุดที่ใหญ่กว่าของคุณเช่นที่ฉันกล่าวไว้ข้างต้นมันเป็นสิ่งที่มองขึ้นใช้แล้วลืมไปอย่างรวดเร็วเพราะใช้เวลาทั้งหมด 15 วินาทีในการค้นหา ฉันไม่ได้บอกว่าฉันชอบหรืออนุมัติ แต่โดยเฉพาะอย่างยิ่งในระดับเริ่มต้นมันเกิดขึ้น :)
Legion

1
นี่คือโซลูชัน php ของฉัน :) ideone.com/BnJQ3 3 นาที :)
Trufa

มันต้องยากกว่าในภาษาระดับล่างเพราะใน Ruby มันง่ายพอ ๆ กับการดันตัวเลข (ตามลำดับ) ลงในอาร์เรย์แล้วย้อนกลับอาร์เรย์ทั้งหมด ideone.com/MKKb6
Kerrick

Python:print [x for x in xrange(3, 200, 3)][::-1]
beatgammit

9

สำหรับสิ่งที่ง่ายสุด ๆ ที่สามารถทำได้ใน 10 วินาที แต่จะลบคนที่ไม่สามารถตั้งโปรแกรมอะไรได้เลยให้ลองทำสิ่งนี้:

ถาม: แสดงให้ฉันเห็น (บนกระดาษ แต่ดีกว่าบนไวท์บอร์ด) ว่าคุณจะสลับค่าของสองตัวแปรอย่างไร

นี่ไม่ใช่ความคิดของฉัน แต่ถูกโพสต์ในความคิดเห็นโดยคนชื่อ Jacob ในบล็อกโพสต์เกี่ยวกับคำถามดั้งเดิมของ FizzBuzz

ยาโคบกล่าวต่อไปว่า:

หากพวกเขาไม่ได้เริ่มต้นด้วยการสร้างตัวแปรที่สามคุณก็สามารถเขียนคนนั้นออกไปได้ ฉันพบว่าฉันสามารถตัดผู้สมัครได้หนึ่งในสามถึงครึ่งหนึ่ง (เป็นที่ยอมรับ ณ จุดนั้นโดยไม่มีการคัดกรอง) ด้วยคำถามนั้นเพียงอย่างเดียว

มีการอภิปรายที่น่าสนใจเพิ่มเติมหลังจากนั้นความคิดเห็นในบล็อกโพสต์ต้นฉบับเกี่ยวกับวิธีการสลับตัวแปรนี้โดยไม่ต้องใช้ตัวแปรที่สาม (การเพิ่ม / ลบ xor ฯลฯ ) และแน่นอนว่าหากคุณใช้ภาษาที่รองรับสิ่งนี้ ในคำสั่ง / การดำเนินการเดียวอาจไม่ใช่การทดสอบที่ดีนัก

แม้ว่าจะไม่ใช่ความคิดของฉัน แต่ฉันก็อยากจะโพสต์สิ่งนี้ไว้ที่นี่เนื่องจากเป็นคำถามที่เรียบง่ายและสง่างามซึ่งสามารถ (และควร) ได้รับคำตอบภายใน 10 วินาทีโดยคนที่เขียนแม้กระทั่งโปรแกรมที่ง่ายที่สุด นอกจากนี้ยังไม่จำเป็นต้องใช้ตัวดำเนินการที่ค่อนข้างคลุมเครือเช่นตัวดำเนินการโมดูโลซึ่งผู้คนจำนวนมากซึ่งเป็นโปรแกรมเมอร์ที่ดีพอสมควรไม่คุ้นเคย (ซึ่งฉันรู้จากประสบการณ์ของตัวเอง)


1
ฉันคิดว่านี่เป็นความคิดที่ดีมาก แน่นอนว่ามันเต้นนั่งดูประมาณ 20 นาทีในขณะที่ผู้สมัครแก้ปัญหาโปรแกรมอย่างเจ็บปวดโดยสงสัยว่าทำไมพวกเขาถึงใช้ foreach แทนและจะแก้ไขได้อย่างไร! (อย่างที่ฉันเพิ่งทำไป)
ไมค์เนลสัน

มาตรฐาน :: แลกเปลี่ยน (a, b); เหตุใดฉันจึงควรสร้างตัวแปรที่สามในเมื่อไลบรารีมาตรฐานทุกแห่งจะทำเพื่อฉันอย่างมีความสุข

@ แดน - แนวคิดคือคุณขอให้ทำสิ่งนี้โดยไม่ต้องใช้ไลบรารีใด ๆ และใช้เฉพาะคำหลักที่มีอยู่แล้วในภาษาที่คุณเลือก แน่นอนว่าในโลกแห่งความเป็นจริงคุณอาจใช้รูทีนไลบรารีเพื่อให้บรรลุสิ่งนี้ได้เช่นเดียวกับการใช้รูทีนไลบรารีสำหรับ (พูด) โครงสร้างลิสต์ที่เชื่อมโยงแทนที่จะเขียนของคุณเอง ประเด็นของการทดสอบนี้ก็คือมันง่ายพอสมควรและไม่เกินคำถามที่จะคาดหวังให้ผู้สมัครทุกคนสามารถทำได้โดยไม่จำเป็นต้องใช้ห้องสมุดเพื่อให้บรรลุ
CraigTP

ดังนั้นยาโคบจึงแนะนำให้ผู้ให้สัมภาษณ์ใช้ตัวแปรที่สามหรือไม่? ฉันเคยเห็นทางเลือกอื่นสำหรับคำถามนั้นซึ่งขอให้นักพัฒนาไม่ใช้ตัวแปรที่สาม วิธีที่เขาพูดคำตอบของเขาค่อนข้างคลุมเครือ
theGreenCabbage

1
ในฐานะคนที่คิดว่าพวกเขาเป็นแค่โปรแกรมเมอร์ "โอเค" สิ่งนี้ทำให้ฉันกลัว ความคิดทันทีของฉันคือ "ที่รักพระเจ้าฉันจะใช้ตัวแปรที่ 3 แต่แน่นอนว่าเขาต้องการวิธีที่ชาญฉลาดในการทำโดยไม่มีใคร!"
Devil's Advocate

8

Fibonacci, ย้อนกลับสตริง, นับจำนวนบิตที่ตั้งค่าเป็นไบต์เป็นบิตทั่วไปอื่น ๆ Project Eulerยังมีชุดความยากที่เพิ่มขึ้นมากมาย


Fibonaaci แม้ว่าจะสูงกว่าเล็กน้อย แต่ก็เป็นสิ่งที่ดีฉันเป็นมือใหม่และใช้เวลา 20-25 นาทีดังนั้นจึงมีข้อมูลอ้างอิงของคุณ :)
Trufa

ฉันโดน Fibonacci, FizzBuzz และลบจำนวนเต็มที่ซ้ำกันในอาร์เรย์ - วันนี้ทั้งหมดในการสัมภาษณ์ (4 ชั่วโมง)
IAbstract

4

ขอให้พวกเขาเขียนแอปเพื่อส่งคืนปัจจัยของตัวเลขที่กำหนด ทำได้ง่ายและทำได้ยากในช่วงเวลาสั้น ๆ คุณสามารถดูสไตล์และวิธีคิดของพวกเขาผ่านปัญหาได้ในเวลาอันสั้น


2

ส่งกลับดัชนีของสตริง X ที่เกิดขึ้นครั้งแรกภายในสตริง Y

การใช้ strstr () ต้องมีความเข้าใจพื้นฐานของภาษาในขณะที่ให้โอกาสในการเพิ่มประสิทธิภาพอย่างชาญฉลาด


2

หากเป็นการสัมภาษณ์แบบ C / C ++ ให้แน่ใจว่าบุคคลนั้นรู้เกี่ยวกับพอยน์เตอร์

ทั่วไป - อัลกอริทึมอย่างง่าย (รายการที่เชื่อมโยง [เดี่ยว / คู่]) ถามเกี่ยวกับความซับซ้อนของการเพิ่มในแต่ละกรณี (ที่จุดเริ่มต้นในตอนท้ายการเพิ่มประสิทธิภาพ ... )?

(ทั่วไป) คุณจะหาค่าต่ำสุดและสูงสุดจากอาร์เรย์ (ขนาด N) ได้อย่างไรด้วยการเปรียบเทียบเพียง 3 * N / 2

C / C ++: คุณจะเพิ่มประสิทธิภาพ "strcat" หลายตัวให้เป็นบัฟเฟอร์ได้อย่างไร


สำหรับฉันแล้วสำหรับปัญหา "คุณจะหาค่าต่ำสุดและสูงสุดจากอาร์เรย์ (ขนาด N) ได้อย่างไรโดยมีการเปรียบเทียบเพียง 3 * N / 2" เป็นการดีที่จะชี้แจงว่าหมายเลข 3 * N / 2 เป็นการเปรียบเทียบจำนวนองค์ประกอบของอาร์เรย์ แต่คุณสามารถเปรียบเทียบ int ได้อย่างอิสระเช่น เช่น (i <ขนาดอาร์เรย์) ในลูป
sergtk


0

วิธีการ: ฉันต้องการใช้จำนวนเต็มเดียวเพื่อเก็บหลายค่า อธิบายว่าจะได้ผลอย่างไร

หากพวกเขาไม่มีเบาะแสเกี่ยวกับมาสก์บิตและการทำงานพวกเขาอาจไม่สามารถแก้ปัญหาอื่น ๆ ได้


9
ฉันจะบอกว่ามันจะให้คำแนะนำมากกว่านี้ถ้าหลังจากอธิบายมาสก์เล็กน้อยหรือชี้ให้เห็นถ้าคน ๆ นั้นไม่ตบหน้าผากและส่ายหัวด้วยการเยาะเย้ยตัวเอง บิตมาสก์ไม่ใช่สำนวนทั่วไปเว้นแต่จะมี C อุปกรณ์ฝังตัวหรือระบบเครือข่าย ชาวบ้านที่มีความสามารถมากมายยังไม่ได้
Gregg Lind

2
อืมคุณต้องตัดสินใจว่ายอมรับการจัดเก็บ 1,2 และ 3 ในทศนิยม 123 นับเป็นคำตอบที่ถูกต้องหรือไม่แม้ว่าคณิตศาสตร์จะซับซ้อนอย่างน่าเกลียดเมื่อเทียบกับการประกาศตัวแปรเพียง 3 ตัว หรือจัดเก็บ 1,2,3 โดยเขียน x = 1; x = 2; x = 3; ฉันหมายความว่าเราจำเป็นต้องจัดเก็บค่าเหล่านี้ร่วมกันหรือไม่?
MatthewMartin

0

ค้นหารายการช่วงเวลาเป็นคำถามที่พบได้บ่อย แต่ก็ยังต้องใช้ความคิดและมีคำตอบหลายระดับที่ผู้คนอาจให้ได้

นอกจากนี้คุณยังต้องแปลกใจว่ามีคนจำนวนมากที่พยายามใช้โครงสร้างข้อมูลประเภทแผนที่ / พจนานุกรม


0

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

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