ชื่อ Insta ... เพียงแค่เพิ่ม Coder!


17

ในภาษาอังกฤษซึ่งเป็นวิธีที่ surefire เพื่อให้ผสมตัวอักษรเรื่องไร้สาระออกเสียงคือการทำให้มันทั้งหมดออกจากคู่พยัญชนะสระเช่นวู เกาะ PA ฮ่าหรือฉัน ฟะ RO , พยัญชนะแรกตามด้วยสระ

ท้าทาย:

เขียนโปรแกรมหรือฟังก์ชั่นที่จะกำหนดจำนวนตัวอักษรที่ผู้ใช้กำหนดให้สร้างชื่อแบบสุ่มโดยใช้หลักการนี้ มันง่ายมาก

การป้อนข้อมูล:

จำนวนเต็มที่มากกว่าหรือเท่ากับ 2 ซึ่งกำหนดจำนวนตัวอักษรที่ต้องการในเอาต์พุต อินพุตสามารถนำมาจาก STDIN อาร์กิวเมนต์บรรทัดคำสั่งหรืออาร์กิวเมนต์ของฟังก์ชัน

เอาท์พุท:

สตริงของความยาวที่กำหนดซึ่งมีคู่ของพยัญชนะ - สระที่เลือกแบบสุ่ม มันสามารถพิมพ์ไปที่ STDOUT หรือทางเลือกที่ใกล้เคียงที่สุดหรือกลับมาในกรณีของฟังก์ชั่น

กฎ:

  1. พยัญชนะตัวอักษรภาษาอังกฤษแต่ละตัวควรมีความน่าจะเป็นเท่ากันในการเลือกตัวอักษรตัวแรกของแต่ละคู่และแต่ละสระของตัวอักษรภาษาอังกฤษควรมีความน่าจะเป็นเท่ากับที่จะถูกเลือกสำหรับตัวอักษรตัวที่สองของแต่ละคู่
  2. ตัวอักษรคู่อาจซ้ำ
  3. เนื่องจากนี่คือชื่ออักษรตัวแรกจะต้องเป็นตัวพิมพ์ใหญ่
  4. หากการป้อนข้อมูลเป็นคี่คู่ตัวอักษรที่เลือกแบบสุ่มในชื่อควรมีyหรือhต่อท้าย ตัวเลือกของ y หรือ h ควรเป็นแบบสุ่มเช่นกัน
  5. ไม่อนุญาตช่องโหว่มาตรฐาน
  6. รหัสที่เล็กที่สุดในหน่วยไบต์ชนะ

คำจำกัดความจดหมาย:

พยัญชนะ:

bcdfghjklmnpqrstvwxyz

สระ:

aeiou

ตัวอย่าง I / O:

Input: 6
Output: Mefaro

Input: 9
Output: Wukohpaha

สนุก!


3
และยังไงก็ตามขอต้อนรับสู่ Programming Puzzles และ Code Golf.SE :)
trichoplax

ฉันคิดว่ารูปแบบใหม่ของฉันชัดเจนยิ่งขึ้น ใช่ไหม? @trichoplax
jman294

1
ฉันโพสต์คำถามที่อาจเป็นไปได้ทั้งหมดในแซนด์บ็อกซ์ซึ่งพวกเขาจะได้รับคำติชมมากมายก่อนโพสต์ที่นี่ มันทำให้สิ่งต่าง ๆ ง่ายขึ้น - ฉันแนะนำสำหรับคำถามในอนาคต
trichoplax

ขอบคุณ @alex เนื่องจากเป็นคำถามแรกของฉันตอนนี้ฉันรู้เทคนิคที่ดีเกี่ยวกับวิธีการใช้เว็บไซต์นี้ ฉันได้เรียนรู้มากมายและฉันหวังว่าคำถามต่อไปของฉันจะดีขึ้น!
jman294

1
@ ASCIIThenANSI ตามกฎ # 4 คู่ของตัวอักษรที่เลือกแบบสุ่มจะได้รับ ay หรือ h ในตัวอย่างนั้นมันเป็นเกาะที่มีเอชที่ไม่ได้ฮ่า jman: หากนั่นไม่ใช่สิ่งที่คุณมีอยู่ในใจให้ปรับเปลี่ยนกฎอย่างรวดเร็วก่อนที่จะมีคำตอบเพิ่มเติมเริ่มเข้ามา!
Alex A.

คำตอบ:



6

JavaScript ES6, 187 180 168 ไบต์

f=l=>{r=m=>Math.random()*m|0
d=l%2&&r(--l/2)*2+1
for(s='';l--;s+=s?a:a.toUpperCase())a=l%2?'bcdfghjklmnpqrstvwxyz'[r(21)]:'aeiou'[r(5)]+(l==d-1?'hy'[r(2)]:'')
return s}

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

f=function(l){
  // Function to return a random integer between 0 and m-1 inclusive
  r=function(m){
    return Math.random()*m|0
  }
  // d is the position the h or y will be added
  // l is decremented only if l is odd so an extra consonant won't be added to the end
  d=l%2&&r(--l/2)*2+1
  
  for(s='';l--;){
    a=l%2?'bcdfghjklmnpqrstvwxyz'[r(21)]:'aeiou'[r(5)]+(l==d-1?'hy'[r(2)]:'')
    // If `s` is empty (i.e. this is the first leter), make it uppercase
    s+=s?a:a.toUpperCase()
  }
  return s
}

run=function(){ip=parseInt(document.getElementById('input').value);if(ip<2)return alert('Input must be greater than one.');document.getElementById('output').innerHTML=f(ip)};document.getElementById('run').onclick=run;run()
<input type="number" id="input" value="7" min="2" /><button id="run">Run</button><br />
<pre id="output"></pre>


1
หมายเหตุ: อย่าใส่ตัวเลขติดลบใน UI ทดสอบ ..
ลุง

4

SWI-Prolog, 286 285 ไบต์

a(I):-a(I,[]).
a(I,R):-(I=1,r(1,K),nth0(K,`hy`,V),length(R,L),random(1,L,W),nth0(W,[O:P|Q],V:0xFEFF,R);I=0,[O:P|Q]=R),N is O-32,p([N:P|Q]);r(5,A),nth0(A,`aeiou`,X),r(21,B),nth0(B,`bcdfghjklmnpqrstvwxyz`,Y),J is I-2,a(J,[Y:X|R]).
p([A:B|R]):-put(A),put(B),p(R);!.
r(I,R):-random(0,I,R).

ตัวอย่าง: เอาท์พุทa(13).Leqihsekeqira

หมายเหตุ: คุณอาจต้องแทนที่`ด้วย"หากคุณมี SWI-Prolog เวอร์ชันเก่า


3

Pyth, 52 42 ไบต์

V/Q2=k++kO-GJ"aeiou"OJ;rs.SXZck2*%Q2O"hy"4

คุณสามารถลองได้ในคอมไพเลอร์ออนไลน์ที่นี่

ขอขอบคุณที่ Jakube สำหรับการเล่นกอล์ฟมันลงเพิ่มเติม NinjaBearMonkey สำหรับคำชี้แจงท้าทายและ issacg สำหรับการสร้าง Pyth Xโดยไม่ตั้งใจและการเรียนการสอนเกี่ยวกับฉัน

โปรแกรมนี้สุ่มเลือกเสียงพยัญชนะและสระเพื่อเติมสตริงเพิ่ม 'h' หรือ 'y' ให้กับหนึ่งคู่หากอินพุตเป็นคี่แล้วใส่อักขระตัวแรกเป็นตัวพิมพ์ใหญ่ นี่คือรายละเอียด:

V/Q2                                              For N in range(1, input/2):
    =k                                            Set k to:
        k                                         k (defaults to ""),
       + O G                                      plus a random letter from the alphabet... 
          - J"aeiou"                              without the vowels,
      +             OJ                            plus a random vowel
                      ;                           End the loop
                             ck2                  Chop k into strings of length 2
                           XZ                     Append to the first string:
                                    O"hy"         'h' or 'y' picked at random,
                                *%Q2              repeated input mod 2 times
                         .S                       Shuffle the strings
                        s                         Convert them back to a single string
                       r                 4        Capitalize and print the string

ดูเหมือนว่าไม่มีประสิทธิภาพในการผนวก 'h' หรือ 'y' กับคู่พยัญชนะสระตัวแรกและจากนั้นเบียดรายการ ฉันพยายามต่อท้ายคู่สุ่ม แต่รหัสนั้นยาวกว่านี้เสมอ


Pyth และผู้เขียนที่รู้มันจะทำให้ฉันประหลาดใจเสมอ
jman294

1
เพียงแค่ไม่กี่เทคนิค: พิมพ์ใหญ่rX1 เป็นสิ่งเดียวกับ Xt_P_
Jakube

1
คุณสามารถลบการมอบหมายJเนื่องจากคุณใช้Jเพียงครั้งเดียว
Jakube

2
ฉันคิดว่านี่จะเพิ่ม h หรือ y ไปยังจุดสิ้นสุดไม่ใช่คู่ที่สุ่มเลือก
NinjaBearMonkey

@ Jakube ขอบคุณอีกครั้งสำหรับความช่วยเหลือของคุณ!
Mike Bufardeci

2

Perl, 253 238 ไบต์

@c=split"","bcdfghjklmnpqrstvwxyz";@v=split"","aeiou";@t=();chomp($n=<>);for(1..$n/2){$l=$c[$$=rand(21)];if($_<2){$l=uc$l};push@t,$l.$v[$$=rand(5)]};$x=0;$y=int(rand(@t));for(@t){print;if($x==$y&&$n%2>0){print qw(h y)[int(rand(1))]};$x++}

ฉันสามารถเล่นกอล์ฟต่อไปได้ แต่ตอนนี้ควรทำตอนนี้

การเปลี่ยนแปลง:

  • บันทึก 10 ไบต์ด้วยตัวเองและ 5 ขอบคุณ Alex A.

2

Julia, 141 ไบต์

n->(R=rand;r=isodd(n)?R(1:n÷2):0;ucfirst(join([string("bcdfghjklmnpqrstvwxyz"[R(1:21)],"aeiou"[R(1:5)],i==r?"yh"[R(1:2)]:"")for i=1:n÷2])))

สิ่งนี้จะสร้างฟังก์ชั่นแลมบ์ดาที่ไม่มีชื่อซึ่งยอมรับจำนวนเต็มเป็นอินพุตและส่งคืนสตริง มันใช้ประโยชน์จากความจริงที่ว่าสตริงใน Julia สามารถทำดัชนีและอ้างอิงเช่นอาร์เรย์อักขระ f=n->...เรียกว่าให้มันชื่อเช่น

คำอธิบาย Ungolfed +:

function f(n)
    # There will be n÷2 consonant-vowel pairs
    p = n ÷ 2

    # Determine which pair will get a y or h, if any
    r = isodd(n) ? rand(1:p) : 0

    # Consonants and vowels
    c = "bcdfghjklmnpqrstvwxyz"
    v = "aeiou"

    # Randomly select letters for pairs, appending y or h as needed
    s = [string(c[rand(1:21)], v[rand(1:5)], i == r ? "yh"[rand(1:2)] : "") for i in 1:p]

    # Join s into a string and convert the first letter to uppercase
    ucfirst(join(s))
end

ตัวอย่าง:

julia> f(9)
"Luyvunize"

julia> f(2)
"Fe"

julia> f(16)
"Pahonapipesafuze"

2

Python 2, 148 169 156

from random import*
I=input()
R=choice
i=I/2
S=[R('hybcdfgjklmnpqrstvwxz')+R('aeiou')for _ in[0]*i]
if I%2:S[R(range(i))]+=R('hy')
print ''.join(S).title()

แก้ไข: รับรู้ว่าไม่ได้ใช้อักษรตัวแรกเป็นตัวพิมพ์ใหญ่ ไม่ลองดูว่าฉันจะตีกลับได้ไหมในวันพรุ่งนี้
แก้ไข 2: จำได้.titleแต่ฉันคิดว่ามันจะเป็น


หากสตริงสนับสนุนเฉพาะการกำหนดรายการ ...
mbomb007

2

SmileBASIC 2 (Petit Computer), 197 177 ไบต์

แก้ไขร่วมสมัยพฤษภาคม 2018 : นี่คือการส่งครั้งแรกของฉันที่เคยเกือบ 3 ปีที่ผ่านมา! ทักษะของฉันพัฒนาขึ้นมากตั้งแต่นั้นมา -20 เพียงจากการปรับเปลี่ยนเล็กน้อย

มันเริ่มต้นด้วยพรอมต์ (มันเว้นว่างไว้เพื่อบันทึกไบต์ดังนั้นมันเป็นแค่?) ที่คุณใส่ความยาว (เก็บไว้ในตัวแปรL)

C$="bcdfgjklmnpqrstvwxzhyaeiou"INPUT L
J=0 OR L/2K=-1IF L%2THEN K=RND(J)
FOR I=0TO J-1?CHR$(ASC(MID$(C$,RND(21),1))-32*!I)+MID$(C$,RND(5)+21,1)+MID$(C$,RND(2)+19,1)*(K==I);
NEXT

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


1

Marbelous, 203 ไบต์

}0}0@1
>>^0&1
--=0@1FF
??&0}0&0
&1
qqqqqq\\\\
//\\pppppp
:p
0000
?K\\?4..}2
<G++<4+5=0\/}0
<B++<3+5?111>1!!
<6++<2+3Mult-2
<3++<1+3+7}2{<
++//mm//mm--
mm..{1..{2{>
{0
:q
}2{2}0
pppppp{0{1
-W
:m
}061
{0{0

ทดสอบที่นี่ (ล่ามออนไลน์) อินพุตผ่านอาร์กิวเมนต์ ต้องเปิดใช้งานไลบรารีและกระดานทรงกระบอก

ความเห็น / รุ่นที่อ่านได้:

}0 }0 @1 .. .. # 1st column: generate a number from 0 to length/2-1, wait on &1
>> ^0 &1 .. .. # 2nd column: check bottom bit; if zero activate &1, otherwise &0
-- =0 @1 FF .. # FF (wait on &0): if no h/y, set counter to 255 (0xFF)
?? &0 }0 &0 .. # Send copy of full length to :q
&1 .. .. .. .. 
qq qq qq \\ \\ # Call :q with counter and length
// \\ pp pp pp # Output of :q falls into :p, which is called repeatedly until done

:p                      # prints a consonant/vowel pair, and h/y if needed
00 00 .. .. .. .. .. .. # two zeros, to be passed into ?K and ?4
?K \\ ?4 .. }2 .. .. .. # pass through ?K (0-20 = consonants) and ?4 (0-4 = vowels)
<G ++ <4 +5 =0 \/ }0 .. # 1st/2nd column: add 1-4 to skip vowels
<B ++ <3 +5 ?1 11 >1 !! # 3rd/4th column: add 3/6/11/16 to create nth vowel
<6 ++ <2 +3 Mu lt -2 .. # 5th/6th column: if counter is 0, generate either h or y 
<3 ++ <1 +3 +7 }2 {< .. # 7th/8th column: if length left to print is 0-1, terminate
++ // mm // mm -- .. .. # mm: add 'a'. 1st/2nd start at 'b' (++)
                        #              5th/6th start at 'h' (+7)
mm .. {1 .. {2 {> .. .. # output consonant, vowel, h/y to {0, {1, {2
{0 .. .. .. .. .. .. .. # left input (length left): -2 + output to left
                        # right input (counter until print h/y): -1 + output to right

:q             # calls :p, but with the first letter capitalized
}2 {2 }0 .. .. # {2 is an unused output which prevents exit when all outputs are filled
pp pp pp {0 {1 # call :p, and forward return outputs to MB to start loop
-W .. .. .. .. # subtract W (0x20) from the first letter = capitalize it

:m    # add 0x61 ('a')
}0 61
{0 {0 # input + 0x61 is returned

สิ่งนี้เทียบเท่ากับ pseudocode ต่อไปนี้โดยประมาณ ( random(a,b)สร้างตัวเลขระหว่างaและbรวม):

main(length)
    if length & 0x01 == 0 then
        counter, length_left = q(0xFF, , length)
    else
        counter, length_left = q(random(0, (length >> 1) - 1), , length)
    end
    while true do
        length_left, counter, consonant, vowel, hy = p(length_left, , counter) 
        print consonant, vowel, hy
    end
p(length_left, , counter)
    if length_left <= 1 then terminate_program end
    consonant = random(0, 20)
    switch consonant
        case >16: ++consonant
        case >11: ++consonant
        case >6:  ++consonant
        case >3:  ++consonant
    ++consonant
    consonant = m(consonant)
    vowel = random(0, 4)
    switch vowel
        case >4: vowel += 5
        case >3: vowel += 5
        case >2: vowel += 3
        case >1: vowel += 3
    vowel = m(vowel)
    if counter == 0 then
        hy = random(0, 1) * 0x11
        hy += 7
        hy = m(hy)
    return length_left - 2, counter - 1, consonant, vowel, hy
q(counter, , length_left)
    length_left, counter, consonant, vowel, hy = p(length_left, , counter)
    print consonant - 0x20, vowel, hy
    return counter, length_left
m(number)
    return number + 'a'

1

Ruby, 119 ไบต์

13 ไบต์สำหรับการใช้ประโยชน์ ...

->n{z=(0...n/2).map{([*(?a..?z)]-v=%w[a e i o u]).sample+v.sample}
n.odd?&&z[rand n/2]+='yh'[rand 2]
(z*'').capitalize}

การใช้งาน:

f=
->n{z=(0...n/2).map{([*(?a..?z)]-v=%w[a e i o u]).sample+v.sample}
n.odd?&&z[rand n/2]+='yh'[rand 2]
(z*'').capitalize}

2.upto(20) do |i|
  puts f[i]
end

เอาท์พุท:

Qo
Gah
Gilu
Baygu
Tevaba
Rohyori
Jigupadi
Diguvareh
Bidifenaji
Xohsuyileze
Depixoyizili
Boqizurejupiy
Buhuboketedasa
Vuwuhojetayduno
Forigikedawojawe
Qacetihxiheciyaju
Zoqigafukedugusoku
Bavuhlarofetucebapi
Zusiraxoxureqimavugo

0

C, 219 ตัวอักษร

ดูเหมือนว่าจะทำงานฉันยังใหม่กับสิ่งนี้

char o[]="aeiouqwrtypsdfghjklzxcvbnm";n,i=0;main(int h,char**v){n=atol(v[1]);srand(time(0));h=n%2;for(;i<n-n%2;i+=2)printf("%c%c%c",o[rand()%21+5]-(i?0:32),o[rand()%5],(rand()%(n-1)<(i+2)&h)?h=0,'h'+(rand()%2?17:0):0);}

1
คุณต้องการrand()%(n-1-i)<2แทนที่จะrand()%(n-1)<(i+2)ได้รับการแจกแจงแบบสม่ำเสมอเว้นแต่คุณจะสร้างหมายเลขสุ่มนี้เพียงครั้งเดียว
jimmy23013

อักขระแต่ละตัวเป็นไบต์หรือไม่กี่ไบต์
jman294

@ jman294 เนื่องจากตัวอักษร ASCII ใช้ 8 บิตต่อตัวอักษรอักขระหนึ่งไบต์ คุณจำเป็นต้องใช้ไบต์เท่านั้นหากคุณใช้อักขระที่ไม่ใช่ ASCII เช่น🙋ที่ใช้มากกว่าหนึ่งไบต์
สลายตัวเบต้า

0

R, 166 ไบต์

รับอินพุตจาก STDIN และเอาต์พุตไปยัง STDOUT

l=letters;s=sample;n=scan();v=c(1,5,9,15,21);o=rbind(s(l[-v],i<-n/2),s(l[v],i,T));if(n%%2)o[a]=paste0(o[a<-s(i,1)*2],s(c('h','y'),1));o[1]=toupper(o[1]);cat(o,sep='')

คำอธิบาย

# Alias letters and sample
l=letters;
s=sample;
# Get input
n=scan();
# Vowel positions
v=c(1,5,9,15,21);
# Create a matrix with a row of 
# consonants and a row of vowels 
o=rbind(s(l[-v],i<-n/2),s(l[v],i,T));
# If odd paste either h or y to a vowel
if(n%%2)o[a]=paste0(o[a<-s(i,1)*2],s(c('h','y'),1));
# Upper case first letter
o[1]=toupper(o[1]);
# Output
cat(o,sep='')

การทดสอบบางอย่าง

> l=letters;s=sample;n=scan();v=c(1,5,9,15,21);o=rbind(s(l[-v],i<-n/2),s(l[v],i,T));if(n%%2)o[a]=paste0(o[a<-s(i,1)*2],s(c('h','y'),1));o[1]=toupper(o[1]);cat(o,sep='')
1: 13
2: 
Read 1 item
Vetigiysurale
> l=letters;s=sample;n=scan();v=c(1,5,9,15,21);o=rbind(s(l[-v],i<-n/2),s(l[v],i,T));if(n%%2)o[a]=paste0(o[a<-s(i,1)*2],s(c('h','y'),1));o[1]=toupper(o[1]);cat(o,sep='')
1: 12
2: 
Read 1 item
Mucowepideko

0

K5, 131 ไบต์

{r:(`c$-32+c@1?#c),{*d@1?#d:(v;(c::(`c$97+!26)^v::"aeiou"))@2!x}'1+1_!x;$[x=p:2*_x%2;r;,/(*w),("yh"@1?2),*|w:(0,2+2**1?_(#r)%2)_r]}

สิ่งนี้จะไม่ทำงานกับ Kona หรือ kdb +; คุณจำเป็นต้องใช้ล่าม K5 เช่นตกลง

การสาธิตสด (ลองตั้งค่า5ในตอนท้ายให้เป็นตัวเลขอื่นเพื่อลองอินพุตที่แตกต่างกัน)


0

ทับทิม, 316 238 216 ตัวอักษร

v=%w{a e i o u};c=[];(?a..?z).map{|i|v.include?(i)||c.push i};combos=[];c.map{|i| v.map{|j| combos.push i+j}};i=gets.to_i;o="";(i/2).times{o+=combos.sample};if i%2==1;(rand(4)==1?o+=?y:o+=?h); end; puts o.capitalize;

คี่จำนวนคอมโบสิ้นสุดในหรือhy

ขอบคุณ @blutorange สำหรับพจนานุกรมฉบับสมบูรณ์ของเคล็ดลับการตีกอล์ฟ

อ๊ะฉันย่อโค้ดของฉันลง 100 ตัวอักษร


คอมโบพิเศษนั้นไม่จำเป็น ฉันคิดว่าช่องว่างในนั้นก็ไม่จำเป็นเช่นกัน อาจดูเคล็ดลับสำหรับการเล่นกอล์ฟใน Rubyเพื่อช่วยให้รหัสของคุณสั้นลง นอกจากนี้ยังใช้อินพุตหรือไม่
Alex A.

ใช่ต้องใช้การป้อนคอมโบพิเศษนั้นจำเป็นสำหรับคะแนนพิเศษก่อนที่คำถามจะได้รับการทำใหม่และฉันคิดว่าพวกเขายังคงใช้งานได้ jเป็นตัวพิมพ์ผิด
ตบมือ

เพียงไม่กี่ลูกเล่นกับทับทิม: for i in ?a..?z;...;endสามารถถูกแทนที่ด้วย(?a..?z).map{...}; thenหลังจากifเป็นตัวเลือก สั้นสำหรับv.include?(i)||c.push(i) unless v.include?(i);c.push(i)ใช้สำหรับc<<i จะสั้นกว่า สั้นสำหรับ ไม่จำเป็นต้องใช้ใน codegolf; )c.push(i)c.map{}c.each{}i%2==1?1:2if i%2==1;1;else;2;endprint "Enter..."
blutorange

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