การท้าทายหลายภาษา


13

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

คำตอบของคุณต้องยอมรับการป้อนข้อมูลแบบบูลbและผลผลิตข้อความหรือ"true" "false"รหัสเดียวกันต้องมีการส่งออกเมื่อทำงานในภาษาอื่น"waar"หรือ"onwaar"หรือการแปลอื่น ๆและtruefalse

อินพุต

  • การป้อนข้อมูลเป็นความจริงที่แตกต่างอย่างชัดเจน / falsey ค่าที่ยอมรับได้คือค่า T / F, บิต, int หรือ (ว่าง) สตริง
  • ข้อมูลป้อนเข้าจะต้องเหมือนกันทุกส่วนที่คุณส่ง

เอาท์พุต

  • เอาท์พุทอาจถูกส่งกลับโดยฟังก์ชั่นเขียนไปSTDOUTวางในหน้าต่างป๊อปอัพพิมพ์ 3 มิติและส่งทางไปรษณีย์ ฯลฯ

  • bเอาท์พุทต้องการที่จะเป็นตัวแทนของรัฐของ ดังนั้น 'ความจริง' จึงจำเป็นต้องให้ผลลัพธ์ 'จริง', 'waar' ... และ 'falsey' ควรนำไปสู่ ​​'false', 'onwaar' ฯลฯ

  • ภาษาที่ต่างกันอาจใช้วิธีการแสดงผลที่แตกต่างกัน

ภาษาที่ใช้

  • หนึ่งในผลของคุณจะต้องและ"true""false"

  • ภาษาการเขียนโปรแกรมรุ่นต่าง ๆ นับเป็นภาษาที่แตกต่างกันสำหรับความท้าทายนี้

  • ภาษาที่แตกต่างกันของภาษามนุษย์นับเป็นภาษาที่แตกต่างกันสำหรับความท้าทายนี้

  • คุณสามารถขยายหลายภาษาได้มากกว่าสองภาษาการเขียนโปรแกรม ทุกภาษาการเขียนโปรแกรมจำเป็นต้องใช้ภาษามนุษย์ที่แตกต่างกันออกไป

คำตอบที่มีภาษาส่วนใหญ่รวมอยู่จะถูกประกาศให้เป็นผู้ชนะ เมื่อเชื่อมโยงแล้วจะถือว่าเป็นจำนวนไบต์


มันเป็นความตั้งใจที่โปรแกรมของคุณสามารถตรวจสอบเวอร์ชั่นของ interpeter / compiler ที่มันรันด้วยหรือไม่?
CodenameLambda

1
มี"True"และ"False"ได้รับการยอมรับในสถานที่ของที่จำเป็น"true"และ"false"?
Jonathan Allan

1
@JanathanAllan ฉันไม่ดี ใช่มันไม่เป็นไรสำหรับการส่งออก
steenbergh

3
ฉันชอบที่จะเห็น esolang ที่เอาท์พุทเป็น 3D พิมพ์และส่งกลับมาให้คุณ
ETHproductions

2
นี่กว้างเกินไปสำหรับการประกวดความนิยม ข้อเสียของป๊อปX ที่สร้างสรรค์ทำหลุดออกจากขอบเขตแล้ว
Dennis

คำตอบ:


5

Dyalog APL , 243 237 ไบต์ : 14 ภาษา, ขยายได้ถึง 131 *

-6 ไบต์ขอบคุณที่Soaku

ต้องการ⎕IO←0ซึ่งเป็นค่าเริ่มต้นในหลาย ๆ ระบบ แจ้งสำหรับการป้อนข้อมูลของหรือ01

((⎕AV'ëáàÆÅÄòðÓÈÇ')⍳⍎⎕D∩⍨41⊃#⎕WG'APLVersion')⊃⎕⊃s¨⌽(s←{1↓¨⍵⊂⍨⍵=⊃⍵})';,true,adevarat,haqiqiy,otito,tunay,bener,prawda,dogru,vrai,that,wahr,vero,verdade,cierto;,false,fals,yolg''on,eke,mali,palsu,falsz,yanlis,faux,sai,falsch',18',falso'

ขึ้นอยู่กับรุ่น (9.0 ถึง 16.0 กับรุ่นรอง) มันเอาท์พุทในภาษาอังกฤษ, สเปน, โปรตุเกส, เยอรมัน, เวียดนาม, ฝรั่งเศส, ตุรกี, อิตาลี, โปแลนด์, ซุนดา, ฟิลิปปินส์, Yoruba, อุซเบกหรือโรมาเนียแม้ว่าจะไม่มีกำกับ

⎕AV⍳'ëáàÆÅÄòðÓÈÇ'ในดัชนีของนักแสดงA tomic V (151 142 141 133 132 131 122 121 111 111 101 96)

((... )⍳... )ค้นหาตำแหน่งของ

การประเมินผล

⎕D∩⍨จุดตัดของD igits และ

4↑ อักขระสี่ตัวแรกของ *

1⊃ องค์ประกอบที่สองของ

#⎕WG'APLVersion' หมายเลขรุ่น

(... )⊃จากนั้นใช้สิ่งนั้นเพื่อเลือก

⎕⊃ องค์ประกอบ input'th (0: แรก; 1: วินาที) องค์ประกอบของ

ฟังก์ชั่นs (ซึ่งเราจะกำหนดในไม่ช้า) นำไปใช้กับแต่ละ

ย้อนกลับของ

(s←{... }) sนำไปใช้กับ - โดยที่sถูกกำหนดเป็น

1↓¨ อักขระตัวแรกลดลงจากแต่ละ

⍵⊂⍨ อาร์กิวเมนต์ที่แบ่งพาร์ติชันแล้ว

⍵= ตัวละครของการโต้แย้งเท่ากับ

⊃⍵ อักขระตัวแรกของการโต้แย้ง

';,true,adevarat,... ,falsch',สายอักขระนี้ต่อท้าย

18⍴',falso' อักขระสิบแปดตัวนำมาจากสตริงนั้นอย่างรอบคอบ

*ตั้งแต่เวอร์ชั่น 12.1 หมายเลขรุ่นรวมถึงการสร้างจำนวนดังนั้นโดยการเพิ่มจำนวนของตัวละครที่นำมาจากสายนี้มันเป็นเรื่องง่ายที่จะครอบคลุมทุก131 ภาษาสคริปต์ละติน


คำตอบที่ดีมาก! และพิสูจน์ได้อย่างยอดเยี่ยมเกี่ยวกับความสามารถในการขยาย
steenbergh

ฉันนับ 243 ไบต์
Conor O'Brien

แก้ไข @ ConorO'Brien ขอบคุณ
2559

ฉันรู้ว่ามันปลาย แต่คุณสามารถบันทึกไม่กี่ไบต์โดยการเปลี่ยนprawdziwyไปprawdaและจะfalszywy falszแบบฟอร์มที่สั้นกว่าพอดีที่นี่และให้คะแนนที่ดีกว่า
RedClover

13

6 ภาษา, 169 ไบต์

ต้องการ0\nหรือ1\nเป็นอินพุตและพิมพ์คำใน:

  • Python 2 (ภาษาดัตช์vals/waar)
  • Python 3 (ฝรั่งเศสfaux/vrai)
  • Ruby (ภาษาอังกฤษfalse/true)
  • CJam (นอร์เวย์usant/sant),
  • Golfscript (ภาษาเดนมาร์กusand/sand),
  • Befunge-93 (อิตาลีfalso/vero)

"#{puts gets>?1;exit}"" "#"& 1v
""
print('vwfvaaarlauasrxi'[int(1/2*4+int(input()))::4])
""#";;;;ri"u">"sant"+o
""""
__END__
]0=~"u">"sand"""#@,,,,"vero"  _"oslaf",,,,,@

1
เท็จในเดนมาร์กเป็นfalsk
Adam

ฉันจะให้สอง upvotes สำหรับprintคำสั่งนั้น!
steenbergh

10

Funges ทั้งหมด 6 ภาษา 146 ไบต์

💥ตอนนี้เป็น 3D! 💥

A vv"faux"0"vrai"mv#<v&#;9*j"kslaf"6j"etke">:#,_@;
; >"otreic"0"oslaf"v^<
&^>"murev"0"muslaf">
&^&<"false"0"true"<
>_>:#,_@
^_^

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

   h"vals"0"waar"<

กฎได้กล่าวว่านับภาษาที่แตกต่างกันนับเป็นภาษาที่แยกต่างหากดังนั้นอันนี้เป็นหกรุ่นของ Funge / Befunge :)

ขอขอบคุณที่เดนนิสทุกรุ่น Befunge ตอนนี้สามารถทดสอบออนไลน์ได้ที่TIO มีการใช้งานที่ไม่ได้ทำงานในปัจจุบันของ Unefunge และ Trefunge พันธุ์แม้ว่าดังนั้นสำหรับผู้ที่ผมอยากแนะนำให้Rc / Funge

Aถูกละเว้นใน Befunge 93 และ 96 แต่เป็นคำสั่งAbout Faceใน 97 และไม่ได้รับการสนับสนุนใน 98 จึงสะท้อนให้เห็น ซึ่งหมายความว่า 93 และ 96 ตามvลงด้านล่างในขณะที่ 97 และ 98 ล้อมรอบไปทางด้านตรงข้ามของสนามแข่งขัน

ใน Befunge 96 a ;ตามด้วยช่องว่างที่จุดเริ่มต้นของบรรทัดทำเครื่องหมายว่าเป็นความคิดเห็นดังนั้นบรรทัดนั้นจะถูกข้ามและล่ามจะดำเนินต่อไป>ในบรรทัดที่สาม แม้ว่าใน 93 ล่ามจะตาม>หลังบรรทัดที่สอง

เส้นทาง 97/98 ยังคงอยู่บนบรรทัดแรกจากขวาไปซ้ายข้ามผ่านส่วนภายใน;เครื่องหมายแสดงความคิดเห็นสะพานคำสั่งในที่สุดก็ถึงลำดับ& U-โค้ง v<^<ใน Unefunge การเปลี่ยนแปลงทิศทางเหล่านี้ไม่ได้รับการสนับสนุนดังนั้นล่ามจะกลับทิศทางและดำเนินการส่วนที่ข้ามไปก่อนหน้านี้ในความคิดเห็น ใน Befunge / Trefunge จะดำเนินต่อไปทางซ้าย

ใน Befunge 97 mคำสั่งไม่ได้รับการสนับสนุนและถูกข้ามดังนั้นล่ามจะดำเนินต่อไปตามบรรทัดแรก ใน 98 เป็นแบบ 3 มิติเท่านั้นดังนั้นจึงสะท้อนให้เห็นใน Befunge (2D) และล่ามจะตามหลังvไปทางขวาของมันจนถึงบรรทัดที่สี่ ใน Trefunge (3D) เป็นสาขาที่สูงต่ำซึ่งถ่ายโอนระดับตามแนวแกน z ไปยังระนาบที่สอง

ดังนั้นนอกเหนือจากกรณี Unefunge เรามีแต่ละรุ่นรวบรวมคู่สายของพวกเขาจากสายแยกก่อนที่จะถูกนำไปยังหนึ่งใน&คำสั่งเพื่อรับผู้ใช้ โค้ดพา ธ เหล่านั้นจะรวมเข้าด้วยกันผ่าน^คำสั่งในคอลัมน์ที่สองกำกับการไหลของโปรแกรมขึ้นไปด้านบนของ playfield แล้ววนไปที่ด้านล่างอีกครั้ง

ในที่สุดเราก็มี^_^ลำดับที่ตัดสินใจเส้นทางที่จะปฏิบัติตามการป้อนข้อมูลของผู้ใช้ ถ้า0เราจะตรงไปที่ลำดับเอาต์พุต ( >:#,_) เขียนสตริงเท็จ ถ้า1ก่อนอื่นให้เราเรียกใช้งาน>_ซึ่งจะลบสตริงแรกออกจากสแต็กและส่งออกสตริงจริง


คำอธิบายจะเป็นประโยชน์
user41805

1
คำตอบที่ดีมาก การใช้ภาษาเดียวกันทุกรุ่นทำให้ภาษานี้ลึกซึ้ง
steenbergh

5

5 ภาษา 249 ไบต์

หมายเหตุ: \rและ\eเป็นตัวอักษรบรรทัดป้อนและอักขระเลี่ยง แต่\x5bต้องเป็น - เป็นอย่างอื่นทับทิมบ่นเกี่ยวกับคลาสตัวละครใน regex

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

q=0//1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord;def input()gets.to_i;end;q=+q+0;True="Vrai";False="Faux";'+;sub a{<><1?Vals:Waar}q-
input=prompt;print=alert;True="Vero";False="Falso"//'#'''
a=[False,True];b=input();1-+1;print(a[b])

คำอธิบาย

Python: True/False

q=0//1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord;def input()gets.to_i;end;q=+q+0;True="Vrai";False="Faux";'+;sub a{<><1?Vals:Waar}q-
input=prompt;print=alert;True="Vero";False="Falso"//'#'''
a=[False,True];b=input();1-+1;print(a[b])

ที่นี่เราตั้งqไป0//1ซึ่งเป็น0แล้วเรามี'''สตริงที่มีมากที่สุดของรหัสอื่น ๆ เก็บอาร์เรย์ที่มีFalseและTrueและดัชนี0และ1ตามลำดับกำหนดป้อนข้อมูลเพื่อb(ที่ควรจะเป็น0หรือ1ที่มีความหมายFalsyและTruthy) แล้วดัชนีวันที่ของการแสดงหรือprintbaFalseTrue


ทับทิม: Vrai/Faux

q=0//1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord;def input()gets.to_i;end;q=+q+0;True="Vrai";False="Faux";'+;sub a{<><1?Vals:Waar}q-
input=prompt;print=alert;True="Vero";False="Falso"//'#'''
a=[False,True];b=input();1-+1;print(a[b])

เช่นเดียวกับสคริปต์ Python เราตั้งค่าตัวแปรqแต่ใน Ruby สิ่งนี้ถูกตั้งค่า0 / /1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ordเป็น Ruby จะแยกสิ่งนี้ออก0/เป็น "zero-by-by" และต่อไปนี้/เป็น "จุดเริ่มต้นของตัวอักษร regex" การใช้ตัวอักษรนี้ฉันสามารถปกปิดรหัส PHP และเริ่มต้น Python '''ได้ เราต้องเพิ่ม.to_s.ordเพราะตัวถูกดำเนินการที่เหมาะสมในการจะต้องมี/ Fixnumหลังจากนี้เราจะกำหนดฟังก์ชั่นinput()และตัวแปรTrueและFalseมีคู่หูภาษาฝรั่งเศสของพวกเขาและในที่สุดก็เริ่มสตริง'ที่ดำเนินการต่อไปยังบรรทัดถัดไป สุดท้ายเราจะสร้างอาร์เรย์aที่มี"Vrai"และ"Faux"และเลือกพวกเขาโดยใช้input()จำนวนเอ็ดหรือ01


Perl: Waar/Vals

'0//1;\'\'\'<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord;def input()gets.to_i;end;q}+q{0;True="Vrai";False="Faux";\'';sub a{<><1?Vals:Waar}'
input=prompt;print=alert;True="Vero";False="Falso"//\'#\'\'\'
a=[False,True];b=input();1'+1;print(a[b])

ใน Perl ที่q=..=, q+...+และบล็อกจะถูกยกมาโดยใช้ตัวอักษรตัวคั่นที่ผิดปกติในโค้ดข้างต้นผมเคยแทนที่เหล่านี้ด้วยq-...- '...'ที่สุดของรหัสที่มีอยู่ในสตริงตัวอักษร แต่เราไม่กำหนดsub a(ซึ่งมี<><!) ที่ตรวจสอบว่าSTDINมีค่าน้อยกว่า1กลับมาอย่างใดอย่างหนึ่งหรือWaar จริงs ผลมาจากการเรียกร้องที่มีและข้อโต้แย้งของซึ่งเป็น ArrayRef ที่มีเปลือยคำValsprint(a[b])printsub a[b]b


JavaScript: Vero/Falso

q=0//1;'''<?die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));?>/.to_s.ord;def input()gets.to_i;end;q=+q+0;True="Vrai";False="Faux";'+;sub a{<><1?Vals:Waar}q-
input=prompt;print=alert;True="Vero";False="Falso"//'#'''
a=[False,True];b=input();1-+1;print(a[b])

บรรทัดแรกเป็นความเห็นส่วนใหญ่ออกโดยส่วน0//1( //เป็นสายความคิดเห็นใน JavaScript) เพื่อให้เราเพียงแค่ตั้งไปq 0ข้อเสนอที่บรรทัดถัดไปกับการทำแผนที่ฟังก์ชั่น JS ชื่องูหลามของพวกเขาและการตั้งค่าตัวแปรTrueและFalseจะเป็นสตริงอิตาเลี่ยน, สุดท้ายเราดำเนินการเช่นเดียวกับรหัสทับทิม, การตั้งค่าไปยังอาร์เรย์ของคำอิตาลีและการเลือกใช้inputของหรือ01


PHP: Ekte/Falsk

die("\r\e\x5bK".(fgetc(STDIN)?Ekte:Falsk));

เนื่องจาก PHP เรียกใช้โค้ดระหว่าง<?...?>ทุกสิ่งเท่านั้นซึ่งเป็นผลลัพธ์ตามที่เป็นดังนั้นรหัสของเราที่นี่จะพิมพ์บรรทัดป้อน (เพื่อให้เรากลับไปที่จุดเริ่มต้นของบรรทัดปัจจุบัน) และลำดับหนี ANSI เพื่อล้างจนถึงจุดสิ้นสุดของปัจจุบัน บรรทัดตามด้วยอย่างใดอย่างหนึ่งEkteหรือFalskขึ้นอยู่กับว่าอินพุตถ่าน ( 0หรือ1) เป็นความจริงหรือเท็จ



3

C #, Java, 104 ไบต์

แข็งแรงเล่นกอล์ฟ:

String M(Boolean b){String s=b+"";if(s=="True")return "Wahr";if(s=="False")return "Falsch";return b+"";}

Ungolfed:

  class MultiLingualChallenge
  {
    public String M(Boolean b)
    {
      String s = b + "";
      if (s == "True")
        return "Wahr";
      if (s == "False")
        return "Falsch";
      return b + "";
    }
  }

ทดสอบ:

ค#

Console.WriteLine(new MultiLingualChallenge().M(true));
//Wahr
Console.WriteLine(new MultiLingualChallenge().M(false));
//Falsch

ชวา

System.out.println(new MultiLingualChallenge().M(true));
//true
System.out.println(new MultiLingualChallenge().M(false));
//false

คำอธิบาย:

เมื่อโทรToString()หรือtoString()บนบูลีนใน C # และ Java ตามลำดับ, C # พิมพ์สตริงที่มีเงินทุนตัวอักษรแรกTrueและFalseแต่ Java พิมพ์ทั้งหมดในกรณีที่ต่ำกว่าและtruefalse

Console.WriteLine(true+"");
//True

System.out.println(true+"");
//true

2

2 ภาษา 60 ไบต์

print('onwaar'[2*int(input()):]);1#¶ị“¡ẈẆ“⁸1»

ภาษาคือ:

  • วุ้น true false
  • Python3 waar onwaar

หมายเหตุ: มี UTF-8 ไบต์ไม่ใช่ Jelly Jelly


1

Lua / JavaScript, 68 ไบต์

x=1//1print(...and"true"or"false")
--x;alert(prompt()?"vrai":"faux")

ไม่รู้ว่าทำไมฉันถึงตีกอล์ฟ ฉันแค่รู้สึกเหมือนมัน


1

JavaScript / BF

ในทั้งสองภาษาเหล่านี้ไม่มีการป้อนข้อมูลที่ถือว่าเป็นเท็จและการป้อนข้อมูลใด ๆ จะถือว่าเป็นจริง

เมื่อคุณเห็นโครงสร้างของโปรแกรมหมุนไปทางซ้าย 90 องศาสัญลักษณ์ BF จะมีลักษณะเป็นหอคอยในเมือง :)

ลองออนไลน์ (BF testcase จริง)!

ลองออนไลน์ (BF testcase เท็จ)!

console.log(prompt()?"true":"false")
/*
           >,[>
+          <<]>>[->-<]
+          >[<->[-]]<>[-]<[>>
+++        [->
++++       <]>[->
++++++++++ <]>---.>]>
++++++++++ [->
++++++++++ <]
+++        [->
+++++      <]>.<
++++       [->----<]>--.<
+++        [->
++++       <]>
+          .<
+++        [->---<]>-.
*/

คำอธิบาย

JavaScript

ถ้าpromptเป็นความจริง (เช่นไม่ว่างเปล่าเพราะpromptผลตอบแทนสตริง) เอาท์พุทtrueหรืออื่น ๆ falseที่เอาท์พุท

BF

เอาท์พุทsand(เดนมาร์กสำหรับจริง) หากมีการป้อนข้อมูลหรืออื่น ๆ เอาท์พุทusand(เท็จ) ถ้าอินพุตว่างเปล่า

TL; DRหากอินพุตไม่ว่างเปล่า (เช่นจริง) อย่าส่งเอาต์พุตใด ๆ ถ้าใส่เป็นที่ว่างเปล่า (เช่นเท็จ) uเอาท์พุท จากนั้นไม่ว่าเอาต์พุตจะเป็นจริงหรือเท็จsandก็ตาม

ฉันได้รับแรงบันดาลใจจากhttps://esolangs.org/wiki/Brainfuck_algorithmsซึ่งฉันสร้างตรรกะของโปรแกรม

รับอินพุต ถ้าการป้อนข้อมูลไม่ว่างหน่วยความจำที่เพิ่มขึ้นมาเรียกเซลล์นี้ว่า "Cell A" สิ้นสุดถ้าคำสั่ง

>
,[
>+
<<
]>

เปรียบเทียบค่าของ "มือถือ" 0กับ หากพวกเขามีค่าเท่ากันให้ "มือถือ B" เป็น1หรืออื่น ๆ 0ให้มันเป็น

>
[->-<]+>[<->[-]]<

หาก "มือถือ B" คือ 1, uการส่งออกแล้ว ปิดคำสั่ง if

>[-]<
x[>>
+++[->++++<]>[->++++++++++<]>---.
>]

เอาท์พุต sand

>
++++++++++[->++++++++++<]+++[->+++++<]>.
<++++[->----<]>--.
<+++[->++++<]>+.
<+++[->---<]>-.

สำหรับรุ่น BF มันไม่ควรส่งออกอย่างuมีเงื่อนไขsใช่ไหม?
HyperNeutrino

@AlexL มันจะส่งออกตามuเงื่อนไข
user41805

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

If input is empty (ie false), output `s`.ฉันคิดว่านั่นเป็นส่วนที่ทำให้ Alex L. สับสน
Erik the Outgolfer

@AlexL ฉันสังเกตเห็นความผิดพลาดฉันแก้ไขทันที!
user41805

1

Haskell, JavaScript, Python, 115 ไบต์

q=1//1#1;f True="waar";f False="false";a//b=0;a#b=0{-
1//1;f=lambda x:"wahr"if x else"falsch";"""
f=x=>x+[]//"""#-}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.