[คริสต์มาสชุดรูปแบบการปฏิเสธความรับผิดที่นี่]


86

หมายเหตุสำหรับ mods ถ้าชื่อไม่ยุติธรรมให้เปลี่ยนเป็นอะไรฉันคิดว่ามันตลก


คุณได้รับมอบหมายให้แขวนไฟสำหรับเทศกาลคริสต์มาสนี้และครอบครัวของคุณได้ตัดสินใจว่ามันจะเป็นวันคริสต์มาสที่มีความสุขคุณต้องแขวนไฟคริสต์มาสอย่างน้อย 2 ต้นที่บ้านของคุณ ดังนั้นความท้าทายของคุณคือได้รับจำนวน1 < nส่งออกจำนวนที่สอดคล้องกันของไฟคริสต์มาสที่คุณกำลังจะถูกแขวนตามข้อกำหนดดังต่อไปนี้ ...


นี่คือโครงสร้างของไฟคริสต์มาสขั้นพื้นฐาน:

  _?_
 [___]
 /:' \ 
|::   |
\::.  /
 \::./
  '='

ส่วนที่ไม่แน่นอนเพียงอย่างเดียวคือเครื่องหมายคำถามขึ้นอยู่กับว่าแสงส่องถึงจุดใดในโซ่การเชื่อมต่อจะแตกต่างกันอย่างมาก

สำหรับแสงแรกในห่วงโซ่คุณจะต้องออก:

    .--._ 
  _(_ 
 [___]
 /:' \ 
|::   |
\::.  /
 \::./
  '='

สำหรับแสงสุดท้ายในห่วงโซ่คุณจะต้องเอาท์พุท:

_.--. 
    _)_
   [___]
   /:' \ 
  |::   |
  \::.  /
   \::./
    '='

และสำหรับแสงสว่างทั้งหมดที่อยู่ตรงกลาง:

_.--.--._
   _Y_ 
  [___]
  /:' \ 
 |::   |
 \::.  /
  \::./
   '='

ตัวอย่าง:

N = 2 :

    .--.__.--.    
  _(_        _)_  
 [___]      [___] 
 /:' \      /:' \ 
|::   |    |::   |
\::.  /    \::.  /
 \::./      \::./ 
  '='        '='  

N = 6 :

    .--.__.--.--.__.--.--.__.--.--.__.--.--.__.--.
  _(_       _Y_      _Y_      _Y_      _Y_       _)_
 [___]     [___]    [___]    [___]    [___]     [___]
 /:' \     /:' \    /:' \    /:' \    /:' \     /:' \
|::   |   |::   |  |::   |  |::   |  |::   |   |::   |
\::.  /   \::.  /  \::.  /  \::.  /  \::.  /   \::.  /
 \::./     \::./    \::./    \::./    \::./     \::./
  '='       '='      '='      '='      '='       '='

เครดิต

ASCII-Art นำมาจาก: http://www.chris.com/ascii/index.php?art=holiday/christmas/other

ได้รับการพัฒนาโดยผู้ใช้ชื่อ "jgs" ซึ่งรับผิดชอบเนื้อหาประมาณ 40% ในไซต์นั้น


กฎระเบียบ

  • ช่องว่างต่อท้ายเป็นเรื่องปกติเหมือนกับขึ้นบรรทัดใหม่
  • มีช่องว่างอีก 1 ช่องระหว่างหลอดแรกและหลอดสุดท้ายจากส่วนที่เหลือของห่วงโซ่
  • คุณอาจรับเพียง 1 จำนวนเต็มเป็นอินพุตและเอาต์พุตต้องเป็นสตริงโดยไม่มีอาร์เรย์
  • โปรแกรมของคุณอาจมีฟังก์ชั่นที่ไม่ได้กำหนดสำหรับค่าที่น้อยกว่า 2

นี่คือ , จำนวนไบต์ต่ำสุดที่ชนะ


ลิงค์ Sanbox โพสต์ที่นี่


จะเกิดอะไรขึ้นถ้าสตริงมีความหมายเหมือนกันสำหรับอาร์เรย์ของอักขระ
2560

36
ไฟคริสต์มาสที่มีลักษณะพื้นฐานขันคล้ายกับระเบิด :)
nicael

18
@nicael ทางเลือกคำอธิบายความท้าทาย: ซานต้ากำลังคร่ำครวญกับเด็กเลวในปีนี้และสำหรับการกระทำที่ซุกซนแต่ละครั้งเด็ก ๆ จะได้รับระเบิดมือสด ในฐานะที่เป็นผู้ให้ของขวัญอย่างรอบคอบซานต้าได้ผูกระเบิดเข้าด้วยกันดังนั้นเด็กเลวของโลกจะไม่สูญเสียมันไปโดยบังเอิญ!
Magic Octopus Urn

@ MagicOctopusUrn Uhm, 3 ช่องทางซ้ายและขวาและอีก 2 ช่อง ฉันหวังว่าระยะห่างคงที่ นี่คือเข็มขัดระเบิดที่น่าเกลียด
polkovnikov.ph

1
@ polkovnikov.ph มันเป็นอย่างนั้นหรือจุดที่อยู่เหนือวงเล็บ (ซึ่งดูแปลก) หรือวงเล็บไม่ได้เป็นวงเล็บ IMO นี่เป็นวิธีที่ดีที่สุด (แต่ไม่ใช่วิธีที่เล่นกอล์ฟได้มากที่สุด)
dzaima

คำตอบ:


35

SOGL V0.12 , 73 71 70 66 ไบต์

.”L7:±¹‘Ο4↕ooā.⁾ Y*¾(){"}^ņF⁵),WοΓy⅜¬κ8ΕL▓‚7m~Ε⅝Γ‘7n┼F (=f⁄2=+⁽{@┼

ลองที่นี่!

-4 ไบต์โดยวนลูปกับสตริงเหมือน(YYY)เช่นคำตอบถ่าน

63 ไบต์จะใช้งานได้หาก 2 ไม่จำเป็นต้องจัดการ: /


9
[ใจปลื้ม]
Robert Harvey

2
มันไร้สาระอย่างแน่นอน (โดยเฉพาะอย่างยิ่งถ้ามันทำบนโทรศัพท์) +1
Joe

10
ฉัน 90% แน่ใจว่าฉันเคยเห็นรหัสตรงนี้มาก่อนจากเมื่อฉันพิมพ์หน่วยความจำที่ไม่ได้กำหนดค่าเริ่มต้น
Nic Hartley

นั่นคือ 113 ไบต์, 70 ตัวอักษร
polkovnikov.ph

@ polkovnikov.ph หากคุณคลิกที่save SOGL codepage encoded fileปุ่มมันจะให้ไฟล์ขนาด 70 ไบต์แก่คุณซึ่งคุณสามารถโหลดได้เช่นกัน (แม้ว่าปุ่มเรียกดูจะอยู่ไกลโดยไม่ตั้งใจ SOGL ใช้เพจรหัสที่กำหนดเองเพื่อทำเช่นนั้น (เพจรหัสมีการเชื่อมโยงในส่วนหัวของคำตอบ)
dzaima

26

Python 3, 200 195 191 190 186 ไบต์

d,*l=" _%c_     , [___]   , /:' \   ,|::   |  ,\::.  /  , \::./   ,  '='    ".split(',')
x=int(input())-2
print(' '*3,-~x*'.--.__.--'+'.\n',d%'(',d%'Y'*x,d%')')
for s in l:print(s,s*x,s)

-1 ไบต์จาก dylnan
-4 ไบต์จากร็อด

ใช้อินพุตบน stdin

ลองออนไลน์!

คำอธิบาย:

d,*l=" _%c_     , [___]   , /:' \   ,|::   |  ,\::.  /  , \::./   ,  '='    ".split(',')
# d is the second row, without the (, Y, or ) to connect the light to the strand
# l is the third through eighth rows in a list
x=int(input())-2
# x is the number of lights in the middle of the strand
print(' '*3,-~x*'.--.__.--'+'.\n',d%'(',d%'Y'*x,d%')')
# print x+1 wire segments and a trailing dot, starting four spaces over
# on the next line, print the connectors, _(_, then _Y_ * x, then _)_
for s in l:print(s,s*x,s)
# on the Nth line, print the Nth light row, a space,
#     x * the Nth light row, a space, and the Nth light row

เวอร์ชั่นเทศกาลเพิ่มเติม!


การเปลี่ยนบรรทัดสุดท้ายเพื่อfor s in l:print(s,s*x,s)บันทึกไบต์
dylnan

ขอบคุณสำหรับคำอธิบาย Python ดูแปลกประหลาดสำหรับฉัน ... lol
ArtisticPhoenix

1
@ArtisticPhoenix แดกดันเมื่อไม่ได้เล่นกอล์ฟ Python เป็นหนึ่งในภาษาที่แปลกประหลาดที่สุด
jpmc26

18

Pyth , 113 107 ไบต์

+"    ."*=tQ"--.__.--."++"  _(_ "j"_Y_"*Q]*6d" _)_"jms[d;jd*Q]*2;;d)c5" /:' \ |::   |\::.  / \::./   '='  "

ลองออนไลน์!

ไม่ตรงกับรุ่น golfiest ...


11
ไม่เล่นกอล์ฟ? อาจจะ. แก้ไข? ใช่. FGITW? อย่างแน่นอน.
Magic Octopus Urn

ใช่ไม่ใช่นักกอล์ฟโดยเฉพาะกับตัวละครที่ไม่จำเป็น : P
Erik the Outgolfer

15

JavaScript (ES6), 180 ไบต์

n=>`    .${'--.__.--.'.repeat(n-1)}
`+`  _Y_  
 [___] 
 /:' \\ 
|::   |
\\::.  /
 \\::./ 
  '='  `.replace(/.+/g,(r,p)=>`${p?r:'  _(_  '}  ${` ${r} `.repeat(n-2)}  ${p?r:'  _)_'}`)

ทดสอบ

var f=
n=>`    .${'--.__.--.'.repeat(n-1)}
`+`  _Y_  
 [___] 
 /:' \\ 
|::   |
\\::.  /
 \\::./ 
  '='  `.replace(/.+/g,(r,p)=>`${p?r:'  _(_  '}  ${` ${r} `.repeat(n-2)}  ${p?r:'  _)_'}`)
  
function update()
{
  var n=+I.value
  P.textContent=f(n)
}  

update()
<input id=I type=number value=2 min=2 oninput='update()'>
<pre id=P></pre>


13

JavaScript (ES6), 204 201 196 194 192 ไบต์

N=>`     ${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
   _(_    ${N--,r(`   _Y_   `)}    _)_
`+` [___] 
 /:' \\ 
|::   |
\\::.  /
 \\::./ 
  '='  `.split`
`.map(x=>`${x=` ${x} `} ${r(x)} `+x).join`
`


1
คุณสามารถบันทึกตัวละครได้สองสามตัวโดยแทนที่.--._${(r=x=>x.repeat(N-2))(`_.--.--._`)}_.--.ด้วย${(r=x=>x.repeat(N-1))(`.--.__.--`)}.
Kuilin Li

@ KuilinLi ฉันจะต้องลดทอนNหลังจากการโทรครั้งแรกrแต่ก็ไม่เป็นไร
darrylyeo

13

ถ่าน , 78 74 ไบต์

M⁴→×….--.__⁹⊖θ.⸿F⪫()×Y⁻貫M⁼ι)→P“ ▷υ ρ1↗N⁷Σ⭆ C✂⪪⟲⦃¬≡↘↨H℅⌕Σêλ⍘”  _ι_M⁺⁴⁼ι(→

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด แก้ไข: บันทึก 2 ไบต์โดยลดความซับซ้อนของวิธีการเดินสายไฟที่พิมพ์ บันทึก 2 ไบต์เนื่องจากรหัสใหม่จะส่งอินพุตเป็นจำนวนเต็มแบบอัตโนมัติ คำอธิบาย:

M⁴→×….--.__⁹⊖θ.⸿

พิมพ์การเดินสายโดยการจับสาย.--.__แล้วขึ้นรูปที่ความยาว 9 จากนั้นทำซ้ำหนึ่งครั้งสำหรับการเข้าร่วมแต่ละครั้งการทำขั้นสุดท้าย.ก่อนที่จะย้ายไปยังจุดเริ่มต้นของบรรทัดถัดไปสำหรับหลอดไฟ

F⪫()×Y⁻貫

วนรอบสตริงของตัวเชื่อมต่อ: (และ)ที่ส่วนท้ายและYs อยู่ตรงกลาง

M⁼ι)→

เลื่อนไปทางขวาหนึ่งตัวอักษรถ้านี่เป็นหลอดสุดท้าย

P“ ▷υ ρ1↗N⁷Σ⭆ C✂⪪⟲⦃¬≡↘↨H℅⌕Σêλ⍘”

พิมพ์เนื้อหาของหลอดไฟโดยไม่เลื่อนเคอร์เซอร์

  _ι_

พิมพ์หมวกของหลอดรวมถึงการเชื่อมต่อ

M⁺⁴⁼ι(→

ย้ายไปที่จุดเริ่มต้นของหลอดไฟถัดไป (อักขระพิเศษหากเป็นหลอดแรก)


นั่นคือ 74 ตัวอักษรไม่ใช่ไบต์
polkovnikov.ph

@ polkovnikov.ph Charcoal ใช้เพจรหัสที่กำหนดเองซึ่งอนุญาตให้นับอักขระแต่ละตัวเป็นไบต์เดียว
dzaima

13

Excel VBA, 224 207 205 ไบต์

ฟังก์ชันหน้าต่าง VBE แบบไม่ระบุชื่อทันทีที่รับอินพุตจากช่วง [A1]และเอาต์พุตไปยังหน้าต่างทันที VBE

พิมพ์หลอดไฟทีละบรรทัดจากบนซ้ายไปขวาล่าง

?Spc(4)[Rept(".--.__.--",A1-1)]".":?"  _(_ "[Rept("      _Y_",A1-2)]"       _)_":For i=0To 5:b=Split(" [___]   1 /:' \   1|::   |  1\::.  /  1 \::./   1  '='    ",1)(i):[B1]=b:?b" "[Rept(B1,A1-2)]" "b:Next

ตัวอย่าง I / O

[A1]=7 ''  Input to worksheet, may also be done manually
?Spc(4)[Rept(".--.__.--",A1-1)]".":?"  _(_ "[Rept("      _Y_",A1-2)]"       _)_":For i=0To 5:b=Split(" [___]   1 /:' \   1|::   |  1\::.  /  1 \::./   1  '='    ",1)(i):[B1]=b:?b" "[Rept(B1,A1-2)]" "b:Next
    .--.__.--.--.__.--.--.__.--.--.__.--.--.__.--.--.__.--.
  _(_       _Y_      _Y_      _Y_      _Y_      _Y_       _)_
 [___]     [___]    [___]    [___]    [___]    [___]     [___]   
 /:' \     /:' \    /:' \    /:' \    /:' \    /:' \     /:' \   
|::   |   |::   |  |::   |  |::   |  |::   |  |::   |   |::   |  
\::.  /   \::.  /  \::.  /  \::.  /  \::.  /  \::.  /   \::.  /  
 \::./     \::./    \::./    \::./    \::./    \::./     \::./   
  '='       '='      '='      '='      '='      '='       '='    

-17 ไบต์ขอบคุณ@ YowE3k

-2 ไบต์สำหรับการเพิ่มตัวแปรชั่วคราว b


2
Ooh ฉันชอบคำตอบในภาษามาโครซอฟต์แวร์ - เอกสาร! ในทางกลับกันฉันก็แพ้ VBA +1
Οurous

1
(คุณให้ฉันสมัครใช้งานเพื่อที่ฉันจะได้ออกความคิดเห็นนี้!) : [Rept(B1,A1-2)]ก่อนที่จะเริ่มลูปไม่ได้ใช้
YowE3K

@ YowE3K - ถูกต้อง! ขอบคุณที่จับได้ว่า - ได้รับการแก้ไขแล้ว
Taylor Scott

10

C,  279   278  272  262  259 ไบต์

ขอบคุณ @NieDzejkob สำหรับการบันทึกหกไบต์!

#define P;printf(
i,j;f(n){char*S=" [___]   \0 /:' \\   \0|::   |  \0\\::.  /  \0 \\::./   \0  \'=\'    \0"P"    ");for(i=n--;--i P".--.__.--"))P".\n  _(_ ");for(;++i<n P"      _Y_"))P"       _)_\n%s ",S);for(;*S P"%10s\n%s ",S,S+10),S+=10)for(i=n;--i P S));}

ลองออนไลน์!

คลี่:

#define P;printf(

i, j;

f(n)
{
    char*S = " [___]   \0 /:' \\   \0|::   |  \0\\::.  /  \0 \\::./   \0  \'=\'    \0"
    P"    ");

    for (i=n--; --i P".--.__.--"))
    P".\n  _(_ ");

    for (; ++i<n P"      _Y_"))
    P"       _)_\n%s ",S);

    for (; *S P"%10s\n%s ", S, S+10), S+=10)
        for(i=n; --i P S));
}

1
C, วิเศษมาก! (:
SilverWolf


9

PHP, 276 , 307 , 303 , 301 , 293 , 283 , 280 , 278 Bytes

function g($n){$a=["     .--._".r("_.--.--._",$n)."_.--.",r("_(_")." ".r(_Y_,$n)." ".r("_)_")];foreach(explode(9,"[___]9/:' \9|::   |9\::.  /9\::./9'='")as$b)$a[]=r($b)." ".r($b,$n)." ".r($b);return join("\n",$a);}function r($s,$n=3){return str_repeat(str_pad($s,9," ",2),$n-2);}

เวอร์ชันที่อ่านได้สำหรับการทดสอบ:

function g($n){
    $a=[
         "     .--._".r("_.--.--._",$n)."_.--.",
         r("_(_")." ".r(_Y_,$n)." ".r("_)_")
    ];

    foreach(explode(9, "[___]9/:' \9|::   |9\::.  /9\::./9'='") as$b)
         $a[]=r($b)." ".r($b,$n)." ".r($b);

    return join("\n",$a);
}
function r($s,$n=3){
    return str_repeat(str_pad($s,9," ",2),$n-2);
}

ตรวจสอบเวอร์ชั่นย่อที่นี่

ตรวจสอบเวอร์ชั่นที่อ่านได้ที่นี่

UPDATE

ห่อไว้ในฟังก์ชั่น


ขอให้เรายังคงอภิปรายนี้ในการแชท
Christoph

2
เคล็ดลับ JavaScriptเก่าของการใช้หลักเป็นตัวคั่นทำงานได้ดีใน PHP เช่นกันเพียงว่าคุณจะต้องหลบหนี\ ก่อนหน้าตัวแยกหลักดังนั้นจะประหยัดเพียง 1 อักขระ คุณสามารถบันทึกอีก 2 $a[]=$r($b)." {$r($b,$n)} ".$r($b);ตัวอักษรโดยการทำให้ส่วนอักขระช่องว่างของสตริงที่ใหญ่กว่าเดียวกันที่มีการแสดงออกในกลางการขยายตัว:
จัดการ

@ manatwork - ขอบคุณสำหรับเคล็ดลับอัปเดต
ArtisticPhoenix

1
@ manatwork - ถ้าฉันใช้9เป็นตัวคั่นไม่จำเป็นต้องมีการหลบหลีกอาจเป็นไปได้ที่จะทำงานกับตัวเลขอื่น ๆ ได้ไม่ใช่0
ArtisticPhoenix

1
และอีกอันหนึ่งคือคุณสามารถนิยาม $r()ฟังก์ชั่นแลมบ์ดาได้ตามปกติfunction r()(อาจอยู่ในตำแหน่งเดียวกันสามารถใช้ฟังก์ชันในฟังก์ชั่นได้) คุณจำเป็นต้องแก้ไขการแยกสตริง: " {r("")} "จะไม่ทำงาน อีก -7 ไบต์;)
7ochem

8

Java, 310 307 300 275 ไบต์

ขอบคุณ DevelopingDeveloper สำหรับการแปลงเป็นแลมบ์ดา

i->{int j=1;String o="     .";for(;j++<i;)o+="--.__.--.";o+="\n   _(_    ";for(;--j>2;)o+="   _Y_   ";o+="    _)_";String[]a={"  [___]  ","  /:' \\  "," |::   | "," \\::.  / ","  \\::./  ","   '='   "};for(String b:a)for(j=0;j++<i;)o+=j==1?"\n"+b+" ":j==i?" "+b:b;return o;};

ขยาย:

i->
{
    int j=1;
    String o="     .";
    for(;j++<i;)
        o+="--.__.--.";
    o+="\n   _(_    ";
    for(;--j>2;)
        o+="   _Y_   ";
    o+="    _)_";
    String[]a={"  [___]  ","  /:' \\  "," |::   | "," \\::.  / ","  \\::./  ","   '='   "};
    for(String b:a)
        for(j=0;j++<i;)
            o+=j==1?"\n"+b+" ":j==i?" "+b:b;
    return o;
};

มองหาวิธีที่สั้นกว่าในการคูณสตริงและพบว่าสตรีมนั้นมีความละเอียดมากขึ้นอย่างน่าประหลาดใจ

ลองออนไลน์!


2
String o="";+ o+=" .";=String o=" .";
จัดการ

@ การจัดการขอบคุณที่พลาด
phflack

2
@phflack ฉันได้รับมันลงไปที่ 290 ถ้าคุณใช้นิพจน์ lamda
DevelopingDeveloper

1
@phflack ด้วย OP บอกว่ามันแค่ต้องการคืน String ไม่พิมพ์ไปยังคอนโซลเพื่อให้คุณสามารถวางลงไปที่279 ทำเช่นนี้
DevelopingDeveloper

1
@DevelopingDeveloper Cool ฉันพบวิธีตีกอล์ฟj=#ออกจากลูป
phflack


3

Python 2 (PyPy) , 365 316 315 251 245 ไบต์

-21 ขอบคุณFlipTack

-43 ขอบคุณovs

-6 ขอบคุณMr. Xcoder

v,p=' \n'
a,l,n=".--._",["[___]"," /:' \ ","|::   |","\::.  /"," \::./ ","  '='  "],input()-2
e,b=v*5+"_)_",a[::-1]
r=v*4,a,(b[:4]+a)*n,b,p+"  _(_   ",(v*4+"_Y_  ")*n,e+p+v
for i in l:b=4-2*(i in l[1:]);r+=i+v*-~b,(i+v*b)*n,v+i+p
print''.join(r)

ลองออนไลน์!



1
245 ไบต์
Mr. Xcoder

ฉันคิดว่าคุณลืมปรับปรุง bytecount หลังจากแก้ไขในข้อเสนอแนะล่าสุด
NieDzejkob

1

Kotlin , 261 ไบต์

{val c="  [___]\n/:' \\\n |::|\n \\::./\n  \\::./\n   '='"
(0..7).map{i->print("     .--._\n   _(_\n$c".lines()[i].padEnd(10))
(0..L-3).map{print("_.--.--._\n   _Y_\n$c".lines()[i].padEnd(9))}
if(i>1)print(' ')
print("_.--.\n    _)_\n$c".lines()[i])
println()}}

เชิดชู

{
    val c = "  [___]\n  /:' \\\n |::   |\n \\::.  /\n  \\::./\n   '='"

    (0..7).map {i->
        print("     .--._\n   _(_\n$c".lines()[i].padEnd(10))
        (0..L - 3).map {
            print("_.--.--._\n   _Y_\n$c".lines()[i].padEnd(9))
        }
        if (i > 1) print(' ')
        print("_.--.\n    _)_\n$c".lines()[i])
        println()
    }
}

ทดสอบ

fun f(L: Int)
{val c="  [___]\n/:' \\\n |::|\n \\::./\n  \\::./\n   '='"
(0..7).map{i->print("     .--._\n   _(_\n$c".lines()[i].padEnd(10))
(0..L-3).map{print("_.--.--._\n   _Y_\n$c".lines()[i].padEnd(9))}
if(i>1)print(' ')
print("_.--.\n    _)_\n$c".lines()[i])
println()}}

fun main(args: Array<String>) {
    f(6)
}

TIO

TryItOnline


1

Google ชีต 190 ไบต์

ฟังก์ชันแผ่นงานที่ไม่ระบุชื่อที่รับอินพุตจากช่วงA1และเอาต์พุตไปยังเซลล์ที่เรียก

="    "&Rept(".--.__.--",A1-1)&".
  _(_    "&Rept("   _Y_   ",A1-2)&"    _)_"&RegexReplace("
 [___]   
 /:' \   
|::   |  
\::.  /  
 \::./   
  '='    
","
(.*)","
$1 "&Rept("$1",A1-2)&" $1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.