อักษรย่อของสหรัฐอเมริกานั้น!


50

ให้ชื่อรัฐหนึ่งใน 50 รัฐทางด้านซ้ายเป็นอินพุตส่งออกรหัสไปรษณีย์สองตัวอักษรตามที่แสดงทางด้านขวา:

Alabama         AL
Alaska          AK
Arizona         AZ
Arkansas        AR
California      CA
Colorado        CO
Connecticut     CT
Delaware        DE
Florida         FL
Georgia         GA
Hawaii          HI
Idaho           ID
Illinois        IL
Indiana         IN
Iowa            IA
Kansas          KS
Kentucky        KY
Louisiana       LA
Maine           ME
Maryland        MD
Massachusetts   MA
Michigan        MI
Minnesota       MN
Mississippi     MS
Missouri        MO
Montana         MT
Nebraska        NE
Nevada          NV
New Hampshire   NH
New Jersey      NJ
New Mexico      NM
New York        NY
North Carolina  NC
North Dakota    ND
Ohio            OH
Oklahoma        OK
Oregon          OR
Pennsylvania    PA
Rhode Island    RI
South Carolina  SC
South Dakota    SD
Tennessee       TN
Texas           TX
Utah            UT
Vermont         VT
Virginia        VA
Washington      WA
West Virginia   WV
Wisconsin       WI
Wyoming         WY

กฎระเบียบ

  • อินพุตและเอาต์พุตเป็นทั้งตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ คุณจำนวนมากไม่เอาท์พุทเช่นสำหรับAlAlabama
  • คุณอาจสมมติว่าอินพุตเป็นหนึ่งใน 50 ชื่อของรัฐที่แสดงด้านบน
  • คุณไม่สามารถเข้าถึงอินเทอร์เน็ตหรือใช้ข้อมูลสถานะในตัว (ดูที่คุณ Mathematica)

รายการแยกต่างหากของอินพุตและเอาต์พุตสามารถพบได้ในตัวอย่างนี้ (โปรดอย่าเรียกใช้มันเป็นเพียงการบีบอัดโพสต์):

(ไม่ใช่การให้คะแนน) คะแนนบราวนี่ถ้าคุณสามารถรับDistrict of Columbiaข้อมูลและผลิตDC, หมู่เกาะเวอร์จิน ฯลฯ

เกณฑ์การให้คะแนน

นี่คือดังนั้นรหัสที่สั้นที่สุดในไบต์ในแต่ละภาษาชนะ

(แต่เดิมเสนอโดย ETHProductions)


11
สำหรับผู้ที่อยากรู้วิธีการของ Mathematica:Entity[a="AdministrativeDivision",{#,"UnitedStates"}]@EntityProperty[a,"StateAbbreviation"]&
DavidC

12
@BetaDecay คำถามที่ถูกปิดเป็นนอกหัวข้อไม่ใช่เป้าหมายของการดักจับที่มีประโยชน์
Mego

7
@DavidC คุณสามารถบันทึก20ไบต์: Entity["AdministrativeDivision",{#,"UnitedStates"}]@"StateAbbreviation"&:)
ngenisis

2
เสนอเครดิตพิเศษสำหรับการรวมรหัส 12 ตัวอักษรสองตัวอื่น ๆ ในรายการอย่างเป็นทางการของตัวย่อไปรษณีย์ของสหรัฐอเมริกา: AA (กองทัพกองกำลังของอเมริกา), AE (กองกำลังกองทัพยุโรป), AP (กองกำลังทหารแปซิฟิก), AS (AMERICAN SAMOA), DC (อำเภอของ COLUMBIA), FM (รัฐสหพันธรัฐไมโครนีเซีย), GU (กวม), MH (หมู่เกาะมาร์แชลล์), MP (เกาะมาเรียนาเหนือ), PR (เปอร์โตริโกเปอร์โตริโก, PW (PALAU), VI (หมู่เกาะเวอร์จิน)
joe snyder

2
ใช่นี่ไม่ใช่คนหลงกล
Christopher

คำตอบ:


25

Javascript, 124 117 bytes

(บันทึกแล้ว 7 ไบต์ด้วย hvd)

x=>/.+[A-Z]|A..[sz]k?|M.ss.s?|M[io]n?t?|Nev?|[AFIOUW][^o]|T..|.+/.exec(x)[0].replace(/(.).*(.)/,'$1$2').toUpperCase()

คำอธิบาย:

  • regexp พบการแข่งขันกับตัวอักษรตัวแรกและตัวสุดท้ายตัวอักษรสองตัวของตัวย่อ
  • ส่วนแรกจับคู่รัฐที่มีคำมากกว่าสองคำ (รวมถึง District of Columbia)
  • ส่วนที่สองตรงกับอลาสก้าและแอริโซนา
  • ส่วนที่สามตรงกับ Massachusets, Mississippi และ Missouri
  • ส่วนที่สี่ตรงกับมิชิแกนมินนิโซตาและมอนแทนา
  • ส่วนที่ห้าจับคู่เนบราสก้าและเนวาดา
  • ส่วนที่หกตรงกับรัฐที่เหลือทั้งหมดย่อไปถึงตัวอักษรสองตัวแรกของพวกเขาด้วยกรณีพิเศษที่จะยกเว้นรัฐไอโอวา
  • ส่วนที่เจ็ดตรงกับรัฐที่เหลือทั้งหมดย่อให้ตัวอักษรตัวแรกและตัวที่สาม
  • ส่วนที่แปดตรงกับทุกสิ่งทุกอย่างซึ่งย่อมาจากอักษรตัวแรกและตัวสุดท้าย
  • จากนั้นเป็นเพียงการลอกจดหมายและใช้อักษรตัวพิมพ์ใหญ่
  • จับคู่กับเปอร์โตริโกและอเมริกันซามัวด้วย แต่ไม่ใช่เกาะกวม, เกาะมาริอานาสหรือหมู่เกาะเวอร์จินของสหรัฐอเมริกา

ว้าวนี่เยี่ยมมาก! +1!
NoOneIsHere ที่

3
ดี! โอกาสเพิ่มเติมบางอย่าง: การเริ่มต้น[A-Z]ไม่จำเป็นเนื่องจากอินพุตทราบว่าถูกต้อง กรณีพิเศษไอโอวาสามารถลงไปจะไม่รวมมันทิ้งไว้สุดท้าย[AFIOUW][^o] .+
hvd

1
เครื่องจักร regex ของคุณมีประสิทธิภาพมากเมื่อเทียบกับของฉัน ... หวังว่าจะมีวิธีที่จะทำให้มันทำงานกับ regex ที่สั้นกว่าของฉัน แต่พวกเขาสร้างขึ้นบนหลักการที่แตกต่างกัน
Steve Bennett

1
มีค่อนข้างน้อยที่แปลกในแบบของพวกเขาเอง มีคอลเล็กชันที่ดีที่ตรงกับกฎ "แรกและสุดท้าย" และ "สองแรก" (โคโลราโดเดลาแวร์แคลิฟอร์เนีย ... ) แต่แล้วมิสซิสซิปปี (MS) ก็ทำลายมัน
Steve Bennett

1
101: s=>s[0]+/.+[A-Zz]|Nev?|.*sk|M.ss.s?|M[io]n?t?|[AFIOUW][^o]|Te.|.+/.exec(s)[0].slice(-1).toUpperCase()เราไปถึง 100 ได้ไหม :)
Steve Bennett

22

javascript, 137 135 134 132 113 110 108 101 99 94 93 92 ไบต์

สิ่งนี้ขึ้นอยู่กับโซลูชัน HP Williams พร้อมการปรับปรุงบางอย่างนอก regex และการปรับแต่งสองสามอย่างในนั้น

s=>s[0]+
/.*( .|z)|...s.s?|T..|M[i-t]+|[AFINOUW][^o]v?|.*/
.exec(s)[0].slice(-1).toUpperCase()

(การแบ่งบรรทัดสำหรับการอ่านได้เท่านั้น)

ความเห็นสำหรับ regex:

.*( .|z)|      // Two-or-three word states, plus Arizona
...s.s?|       // Mississippi, Missouri, Massachussetts, Alaska, and (non-harmfully) Kansas
M[i-t]+|       // Montana, Minnesota, Michigan
[AFINOUW][^o]v?|  // All the other first-two-letter states, avoiding Iowa, plus Nevada
T‌​..|           // Tennessee, Texas
.+             // Everything else is first-and-last

regex ทางเลือกที่ไม่มีจุดหมาย (ความยาวเท่ากัน):

/...(a$|z|s.s?|.* .)|M[i-t]+|T..|[AFINOUW].v?|.*/  

ประวัติศาสตร์

94

s=>s[0]+/.*( .|z)|...s.s?|M[io]n?t?|[AFIOUWN][^o]v?|T..|.*/
.exec(s)[0].slice(-1).toUpperCase()

99

s=>s[0]+/.*( .|z|l.*k)|T..|M.ss.s?|M[io]n?t?|[AFIOUWN][^o]v?|.*/
.exec(s)[0].slice(-1).toUpperCase()

101

s=>s[0]+/.+[A-Zz]|Nev?|.*sk|M.ss.s?|M[io]n?t?|[AFIOUW][^o]|T‌​e.|.+/
.exec(s)[0].sl‌​ice(-1).toUpperCase(‌​)

108

 s=>s[0]+/MI(N|SSO|S)|[CDGHKLPV].*|.* .|.*[XZV]|.*?N[NTE]|.*(SK|D$|WA)|../
.exec(s.toUpperCase())[0].slice(-1)

110

s=>s[0]+/MI(N|SSO|S)|[CGHKLPV].*|.* .|.*[XZV]|.*?N[NTE]|.*(SK|[ED]$|WA)|../
.exec(s.toUpperCase())[0].slice(-1)

113

s=>s[0]+/^MI(N|SSO|S)|^[CGHKLPV].*|.*?( .|[XZV])|.*?N[NTE]|.*(SK|[ED]$|WA)|../
.exec(s.toUpperCase())[0].slice(-1)

132

s=>(S=s.toUpperCase(),' ._SSO_^MI[NS]_^[CGHKLPV].*_.V_N[TNE]_SK_[ED]$_WA_Z_X_..'
.split`_`.some(p=>s=S.match(p)),S[0]+s[0].slice(-1))

134

s=>' ._SSO_^MI[NS]_^[CGHKLPV].*_.V_N[TNE]_SK_E$_D$_WA_Z_X_..'.split`_`
.map(p=>s=(z=s.toUpperCase().match(p))?s[0]+z[0].slice(-1):s)&&s

135

s=>' ._SSO_^MI[NS]_LASK_^[CGHKLPV].*_NT_EN_[DE]$_WA_.[XVZ]_..'.split`_`
.map(p=>s=(z=s.toUpperCase().match(p))?s[0]+z[0].slice(-1):s)&&s

137

s=>' ._OWA_SSO_ONT_^MI[NS]_LASK_^[CGHKLPV].*_EN_[DE]$_.[XVZ]_..'.split`_`.
map(p=>s=(z=s.toUpperCase().match(p))?s[0]+z[0].slice(-1):s)&&s

นี่มันบ้าไปหมดฉันหวังว่าฉันจะสามารถโหวตขึ้นอีกครั้งได้
ETHproductions

อย่ามองตอนนี้! 99!
Steve Bennett

94. บ้าสุด ๆ ฉันค้นพบการเพิ่มประสิทธิภาพนี้ ( ...s.s?จับมิสซิสซิปปี, มิสซูรี่, Massachussetts และอะแลสกา) โดยไม่ได้ตั้งใจ ที่จริงฉันอยู่ในขั้นตอนการย้าย.*skชิ้นส่วนไปที่อื่นและการทดสอบก็เกิดขึ้นกับการวิ่งและผ่านไปในขณะที่ชิ้นส่วนไม่ได้ปรากฏที่ใดก็ได้ ได้รับ 5 ตัวละครที่ง่ายที่สุด!
Steve Bennett

ว้าวและฉันเพิ่งตระหนักว่า...s.s?มันเป็นการจับคู่ที่ไม่ได้ตั้งใจของแคนซัสด้วยเช่นกันโดยปาฏิหาริย์ยังคงให้ผลลัพธ์ที่ถูกต้อง
Steve Bennett

M[onti]+และเป็นหนึ่งในตัวละครมากขึ้นด้วย แปลกมาก: ถ้าสถานะเริ่มต้นด้วย M ดังนั้นตัวอักษรที่สองเป็นตัวสุดท้ายในลำดับอย่างน้อยหนึ่ง o, n, t หรือ i วิธีที่แปลกมากในการจับภาพมิคากันมินนิโซตาหรือมอนแทนา
Steve Bennett

20

JavaScript (ES6), 156 136 ไบต์

s=>s[0]+'.KT..N.VEA.XVL.H.TZ.AA..I.EADATO.JTISRDIYOI.DALA.Y.KE.C.D.R.YAS.NM...C.L...N'[parseInt(s.split` `.join``,36)%359%248*8%99*3%83]

การสาธิต


1
นี่เป็นสัตว์เดรัจฉานที่เหมาะสมที่สุดในการใช้วิธีนี้หรือไม่?
ASCII - เท่านั้น

2
@ ASCII-only สิ่งนี้มีความสำคัญกับช่วงอนุญาโตตุลาการดังนั้นจึงรับประกันได้ว่าจะเหมาะสมที่สุดX MOD[50-1000] MOD[50-1000] MOD[50-100]เท่านั้น แต่.slice(1)นั่นเป็นความผิดพลาด กำลังทำงานอีกครั้งบนสตริงทั้งหมด
Arnauld

2
คุณช่วยอธิบายให้ newb สิ่งนี้ได้อย่างไร
Hankrecords

1
@Hankrecords แน่นอนว่าจะทำ (แต่ตอนนี้ฉันอยู่ในรถไฟที่มีการ จำกัด การใช้อินเทอร์เน็ต)
Arnauld

1
ตอนนี้ของฉันคือ 135!
Steve Bennett

17

เยลลี่ , 75 ไบต์

³Oḅ⁹%⁽qġ%14ị⁽"wB¤Ḥ
“¿ØƈṢḍw÷S=)µZṂ÷ĿæÆɱ»Ḳiµ%2+3¢⁸?
e“\B“½ƈN»ȧ5ȯÇ’
i⁶ȯÇ‘ịṭḢŒu

ลองออนไลน์!

... หรือดูชุดการทดสอบ - สังเกตว่าต้องทำการเปลี่ยนแปลงเล็กน้อยเพื่อเรียกใช้โปรแกรมเต็มรูปแบบสำหรับอินพุตหลาย ๆ อันในครั้งเดียว (ฉันสลับอะตอมอินพุตของโปรแกรมออกไป³เพื่อเรียกคืนจากรีจิส®เตอร์หนึ่งและตั้งค่ารีจิสเตอร์ ในแต่ละรัฐในทางกลับกัน)

อย่างไร?

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

ขั้นแรกให้หาดัชนีของอักขระเว้นวรรค (หรือ 0 หากไม่พบ)

ตรวจสอบว่ามันเป็นอลาสก้าหรือรัฐมิสซูรี (ให้ผล 5 kหรือo);

อื่นค้นหาดัชนีของสถานะอินพุตในรายการArizona Minnesota Mississippi Nevada Montana Texas Tennessee(หรือ 0 หากไม่พบ) - ถ้าเป็นเช่นนั้นจะใช้ดัชนี mod 2 บวก 3 (สำหรับz n s v t x n);

อื่นจะแปลงสตริงเป็น ordinals โดยแปลงจากฐาน 256 ค้นหาส่วนที่เหลือหลังจากหารด้วย 29487 ค้นหาส่วนที่เหลือหลังจากหารด้วย 14 และใช้ดัชนีนั้นในการแทนเลขฐานสองของ 9620 และเพิ่มผลลัพธ์เป็นสองเท่า สำหรับรัฐที่ใช้อักษรตัวสุดท้ายและ 2 สำหรับรัฐที่ใช้อักษรตัวที่สอง

ทั้งหมดยกเว้นกรณีแรกคือการเพิ่มและค่าผลลัพธ์จะลดลง (upping ดัชนีพื้นที่ที่พบโดยหนึ่ง)

i⁶ȯÇ‘ịṭḢŒu - Main link: state string
 ⁶         - space character
i          - first index (of a space character in the state) or 0 if not found  (n-1 or 0)
   Ç       - call link 3 as a monad  (get n-1 in other cases)
  ȯ        - logical or  (yielding n-1)
    ‘      - increment   (yielding n)
     ị     - index into the state string (get the nth character)
       Ḣ   - head the state string (get the first character)
      ṭ    - tack
        Œu - convert to uppercase
           - implicit print

e“\B“½ƈN»ȧ5ȯÇ’ - Link 3: n-5 or ... : state string
 “\B“½ƈN»      - ["Alaska","Missouri"]
e              - exists in? (1 if so, 0 if not)
          5    - 5
         ȧ     - logical and
            Ç  - call link 2 as a monad
           ȯ   - logical or
             ’ - decrement

“¿ØƈṢḍw÷S=)µZṂ÷ĿæÆɱ»Ḳiµ%2+3¢⁸? - Link 2: n = 3 or n = 4 or ... : state string
“¿ØƈṢḍw÷S=)µZṂ÷ĿæÆɱ»           - "Arizona Minnesota Mississippi Nevada Montana Texas Tennessee"
                    Ḳ          - split at spaces
                     i         - first index of state string in that list or 0
                      µ        - monadic chain separation (call that i)
                             ? - if: 
                            ⁸  -   link's left argument, i
                               - then:
                       %2      -   mod 2
                         +3    -   plus 3  - odd entries to 4: AriZona, MisSissippi, MonTana, TenNessee
                               -            even entries to 3: MiNnesota, NeVada, TeXas
                               - else:
                           ¢   -   call link 1 as a nilad

³Oḅ⁹%⁽qġ%14ị⁽"wB¤Ḥ - Link 1 ...n=2 or n=0: no arguments
³                  - program's 1st input    e.g. Iowa          or Ohio
 O                 - cast to ordinals            [73,111,119,97]  [79, 104, 105, 111]
   ⁹               - 256
  ḅ                - convert from base           1232041825       1332242799
     ⁽qġ           - 29487
    %              - modulo                      15991            20139
        %14        - modulo 14                   3                7
                ¤  - nilad followed by link(s) as a nilad:
            ⁽"w    -   9620                     V       V
               B   -   convert to binary = [1,0,0,1,0,1,1,0,0,1,0,1,0,0]
           ị       - index into                  0                1
                 Ḥ - double                      0                2
                   -   ...0th index of Iowa is 'a', 2nd of Ohio is 'h'

1
นี่คือเยลลี่ที่ยาวที่สุดเท่าที่ฉันเคยเห็น =)
caird coinheringaahing


11

Python 2, 94 90 ไบต์

lambda s:s[0]+s[(19**9*0x4710b8f6019c1b61deca10eef13b1>>hash(s)%8199472%52*3&7)+1].upper()

ลองออนไลน์

(เฉพาะ Python 2 เท่านั้นเนื่องจาก Python 3 แฮชไม่เสถียรและคุณไม่สามารถแฮชสตริงได้โดยไม่ต้องเปลี่ยนเป็นไบต์)

ทำงานร่วมกับทุก ๆ 50 รัฐรวมถึงโบนัส District of Columbia และเปอร์โตริโก

มันจะเป็นไปได้ที่จะบันทึกหนึ่งไบต์โดยการเขียนตัวเลขที่อยู่ในฐาน int("5clu7x0aixb0pelmpugv5iiibphrpf",36)36: ฉันรอเพื่อดูว่าฉันสามารถคิดโซลูชันที่สร้างสรรค์มากขึ้นได้ไหม

ปรับปรุง:

เนื่องจากมีตำแหน่งที่ไม่ได้ใช้งาน 12 ตำแหน่งในแฮชจึงมีตัวเลขที่เป็นไปได้2 36หมายเลขที่จะใช้ ดูเหมือนสมเหตุสมผลที่จะเชื่อว่าหนึ่งในนั้นจะมีปัจจัยสำคัญที่มีเลขชี้กำลังจำนวนมาก สำหรับไพรม์และเลขชี้กำลังใด ๆ การหาค่าค่อนข้างเร็ว ฉันจัดการเพื่อหาหนึ่งด้วยปัจจัยที่ 19 9ลดขนาดของการแสดงออกที่จำเป็นในการแสดงตัวเลขโดยสี่ไบต์

นี่เป็นขั้นตอนเดียวกับคำตอบ C ของฉันแต่ใช้ Python เนื่องจากฟังก์ชั่นแฮชพื้นฐานแตกต่างกันฉันจึงต้องหาฟังก์ชั่นการลดที่แตกต่างกันซึ่งกลายเป็น mod 52 แทน mod 54 แต่การประหยัดที่ใหญ่ที่สุดใน C มาจากความเป็นไปได้ของการใช้ bignums เพื่อเข้ารหัสเวกเตอร์และแน่นอน ความจริงที่ว่ามาตรฐานของ Python นั้นน่าจะเป็นเรื่องที่ดีที่จะใช้ตัวอักษรแลมบ์ดาแทนที่จะเป็นโปรแกรมที่สมบูรณ์


9

เรติน่า , 113 81 80 77 70 68 ไบต์

M1!`.+[A-Zz]|...s.s?|M[io]n?t?|[AFIOUWN][^o]v?|T..|.*
\B.*(?=.)

T`l`L

ลองออนไลน์! รวมกรณีทดสอบ 51 ข้อ บันทึก 32 ไบต์โดยการจัดสรร regex ของ @ JörgHülsermannที่พบจดหมายฉบับที่สอง (ด้วยการบิดเพื่อรองรับ DC; แก้ไข: บันทึก 1 ไบต์ขอบคุณ @ JörgHülsermann) บันทึก 3 ไบต์โดยสลับไปที่ @ SteveBennett regex จากความคิดเห็นของเขาเป็นคำตอบของ @ HPWilliam บันทึกแล้ว7 9 ไบต์ขอบคุณ @SteveBennett อีกครั้ง จากนั้นตัวอักษรอื่น ๆ จะถูกลบและสตริงจะเป็นตัวพิมพ์ใหญ่


ดีมากไม่คิดว่าคุณจะได้ชุดของสตริงที่ถอดออกได้อย่างสมบูรณ์
colsw

@ConnorLSW eเป็นสิ่งที่ลำบากที่สุดจริงๆ
Neil

@ JörgHülsermannขอบคุณสำหรับความโปรดปรานในการกลับมา!
Neil

@ JörgHülsermannโอ้ดังนั้นฉันจะสามารถช่วยไบต์อีกแล้ว?
Neil

1
รออินเดียนาไม่กลายเป็น ID คุณอาจจะสามารถแก้ไขได้โดยการเพิ่มเพียง $ dหลังจากที่ (คุณอาจต้องการใช้การทดสอบอัตโนมัติ - ฉันมีสคริปต์ที่ตรวจสอบทั้งหมด 50 ราย)
Steve Bennett

8

PHP> = 7.1, 113 ไบต์

<?=($a=$argn)[0],ucfirst(preg_match('#[vxz]| .|owa|lask|[CGHKLPV].*|ssi?.|n(n|t|[de]$)#',$a,$t)?$t[0][-1]:$a[1]);

เวอร์ชั่นออนไลน์

นัดหยุดงานมีการแข่งขันผ่านการแข่งขันเริ่มต้นก่อนหน้านี้ก่อน

([vxz])ไม้ขีดไฟแอริโซนาเนวาดาเม็กซิโก เพนซิลเวเนียเท็กซัส

(.) (หนึ่งช่องว่างก่อน) จับคู่นิวแฮมป์เชียร์นิวเจอร์ซีย์นิวเม็กซิโกนิวยอร์กนอร์ ธ แคโรไลนานอร์ ธ ดาโคตาโรดไอส์แลนด์เซาท์แคโรไลนาเซาท์ดาโคตาเซาท์เวอร์จิเนีย

[CGHKLPV].*(.)แมตช์แคลิฟอร์เนีย, โคโลราโด, คอนเนตทิคัต, จอร์เจีย, ฮาวาย, แคนซัส, เคนตักกี้, ลุยเซียนา, นิวแฮมป์เชียร์ , นอร์ทแคโรไลนา,เพนซิลเวเนีย, เซาท์แคโรไลนา , เวอร์มอนต์, เวอร์จิเนีย, เวสต์เวอร์จิเนีย

ow(a) ตรงกับไอโอวา

las(k) ตรงกับอลาสก้า

ssi?(.)ตรงกับแมสซาชูเซตส์, มิสซิสซิปปี, มิสซูรี่, เทนเนสซี

n(n|t|[de]$)ไม้ขีดไฟคอนเนตทิคัต เคนตักกี้เมนแมริแลนด์มินนิโซตามอนแทนาเพนซิลเวเนีย โรดไอส์แลนด์เทนเนสซีเวอร์มอนต์

ไม่มีการจับคู่สำหรับรัฐเหล่านี้ดังนั้นเราจึงนำตัวอักษรสองตัวแรกแอละแบมาอาร์คันซอเดลาแวร์ฟลอริดาไอดาโฮอิลลินอยส์อินดีแอนามิชิแกนเนแบรสกาโอไฮโอโอคลาโฮมาออริกอนยูทาห์วอชิงตันวิสคอนซินไวโอมิง

ครั้งแรกที่ฉันใช้Subpatter Regex นี้?|ด้วยอนุญาตให้เก็บ backreferences ในที่เดียว

สนับสนุน District of Columbia

แทนที่(.)ด้วย([^o])+3 ไบต์

ลองออนไลน์!

PHP, 150 ไบต์

<?=($t=preg_replace("#.\K\w+ |las|ri|nec|eorgi|awa|ow|[aio]ni?|e(?=n|v|x)|ntuck|ouisi|a?in|arylan|issi?|nnsylv|erm|irg#","",$argn))[0],ucfirst($t[1]);

ลองออนไลน์! Testcases


3
ไม่ได้เป็นn|t|ไบต์สั้นกว่า[nt]|?
Neil

@ นีลใช่มันเป็น ฉันไม่ได้ตระหนักถึงมัน ขอขอบคุณ
JörgHülsermann

7

PHP, 887 854 ไบต์

<?=array_combine(['Alabama','Alaska','Arizona','Arkansas','California','Colorado','Connecticut','Delaware','Florida','Georgia','Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland','Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York','North Carolina','North Dakota','Ohio','Oklahoma','Oregon','Pennsylvania','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming'],['AL','AK','AZ','AR','CA','CO','CT','DE','FL','GA','HI','ID','IL','IN','IA','KS','KY','LA','ME','MD','MA','MI','MN','MS','MO','MT','NE','NV','NH','NJ','NM','NY','NC','ND','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VT','VA','WA','WV','WI','WY'])[$argv[1]];

ลองออนไลน์!

จับเวลาครั้งแรกไชโย!


1
วิธีนี้ golfed เล็กน้อยในอาเรย์เป็นค่าที่มีช่องว่างหรือที่ตัวอักษรที่สองจะถูกลบออกอย่างถูกต้อง และ$argv[1]ถูกแทนที่ด้วย$argn sandbox.onlinephpfunctions.com/code/…
JörgHülsermann

@ JörgHülsermannขอบคุณมาก! ฉันสนุกกับคำตอบของคุณที่นี่ใน codegolf มาphp!
Ivanka Todorova

ฉันเป็นเพียงแสงสว่างเล็กน้อยกับคนอื่นที่นี่ ความพยายามในการเรียนรู้นั้นดีถ้ามีคนพบการพัฒนา ฉันหวังว่าคุณจะตอบคำถามเพิ่มเติมในอนาคต
JörgHülsermann

7

C, 945 937 718 711 660 616 ไบต์

บันทึกแล้ว 219 ไบต์ขอบคุณ ASCII-only

struct{int*a,b;}m[]={"laba",76,"lask",75,"rizo",90,"rkan",82,"alif",65,"olor",79,"onne",84,"elaw",69,"lori",76,"eorg",65,"awai",73,"daho",68,"llin",76,"ndia",78,"owa",65,"ansa",83,"entu",89,"ouis",65,"aine",69,"aryl",68,"assa",65,"ichi",73,"inne",78,"issi",83,"isso",79,"onta",84,"ebra",69,"evad",86,"ew H",72,"ew J",74,"ew M",77,"ew Y",89,"orth",67,"orth",68,"hio",72,"klah",75,"rego",82,"enns",65,"hode",73,"outh",67,"outh",68,"enne",78,"exas",88,"tah",84,"ermo",84,"irgi",65,"ashi",65,"est ",86,"isco",73,"yomi",89};
i;char b[99];main(){gets(b);putchar(*b);for(;m[i].a;i++)if(!strncmp(m[i].a,b+1,4))puts(&m[i].b);}

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

มันทำงานอย่างไร:

  • struct{int*a,b;}m[]=...ประกาศแผนที่ที่mมีสองค่า - สตริงสี่ไบต์และอักขระหนึ่งตัว สิ่งนี้ถูกใช้ในลูปการเปรียบเทียบซึ่งเปรียบเทียบดัชนีที่สองถึงห้าchar*aในแผนที่
  • gets(b)bอ่านสตริง นี่จะเป็นสถานะที่จะย่อ
  • putchar(*b) พิมพ์อักขระตัวแรกของสตริงนั้นเนื่องจากตัวย่อแต่ละตัวจะเริ่มต้นด้วยตัวอักษรตัวแรกของรัฐ
  • for(;m[i].a;i++)วนซ้ำในแต่ละค่าของแผนที่ (สิ่งนี้อาจสั้นลงได้)
  • if(!strncmp(m[i].a,b+1,4))เปรียบเทียบค่าแผนที่ปัจจุบันกับอักขระตัวที่สองถึงตัวที่ห้าของb(สถานะเป็นตัวย่อ) นี่เป็นเพราะความแตกต่างเพียงอย่างเดียวคือในอักขระห้าตัวแรก แต่เราได้พิมพ์อักขระตัวแรกแล้ว
  • puts(&m[i].b); พิมพ์ตัวอักษรตัวที่สองของตัวย่อ (หากชื่อรัฐตรงกับค่าแผนที่ปัจจุบัน) และขึ้นบรรทัดใหม่

สิ่งนี้ดูเหมือนว่าจะสร้างผลลัพธ์ผิดสำหรับรัฐ North * / South *
เฟลิกซ์ Dombek

6

C, 148 141 ไบต์

main(){char s[99];gets(s);printf("%c%c\n",*s,s["-2-1--561-1-62--642138364---4142--1416--67-7131-111-7-246"[*(int*)(s+1)%663694%57]-48]&95);}

*(int*)(s+1)พิจารณาอักขระตัวที่สองถึงห้าของอินพุตให้เป็นจำนวนเต็ม จำนวนเต็มที่ถกกันแล้วเป็น 0-56 i%663694%57ใช้กัญชา ค่าที่แฮชจะถูกค้นหาในเวกเตอร์ของออฟเซ็ตซึ่งแสดงตำแหน่งของตัวอักษรตัวที่สองของตัวย่อ ฉันเลือกสี่ไบต์เหล่านั้นเพราะ (1) Missouri และ Mississippi แตกต่างกันเป็นครั้งแรกในตัวละครที่ห้าและ (2) บางรัฐมีเพียงสี่ตัวอักษรใน C คุณสามารถใช้ไบต์ NUL terminator แต่ไม่มีอะไรน่าเชื่อถือ (ซึ่งจะทำให้ทั้งสอง Norths เป็นค่าเดียวกันและทั้ง Souths แต่ไม่สำคัญเนื่องจาก offset ที่เกี่ยวข้องคือ 6 สำหรับสิ่งเหล่านี้ทั้งหมด)

เมื่อมันเกิดขึ้นแฮชนั้นจะให้ตำแหน่งที่ถูกต้องสำหรับตัวอักษรที่สองของตัวย่อของ District of Columbia, เปอร์โตริโกและ "Virgin Islands" (พิมพ์ด้วยวิธีนั้นไม่ใช่ในชื่อ "US Virgin Islands" เนื่องจากอัลกอริทึมยืนยันว่า อักขระของตัวย่อเป็นอักขระตัวแรกของชื่อ)

ค่าคงที่ 663694 และ 57 ถูกพบโดยการทดสอบอัตโนมัติ 57 เป็นช่วงแฮชที่เล็กที่สุดที่ฉันพบ (รุ่นแรกใช้ 380085 และ 63 แต่เมื่อฉันขยายช่วงทดสอบฉันพบใหม่) ดูเหมือนว่าแฮชที่มีขนาดเล็กกว่าเล็กน้อยถ้ารหัสเพิ่มสำหรับ "ใช้อักขระตัวสุดท้ายในชื่อ"; น่าเสียดายที่ไวยากรณ์ C สำหรับการเลือกอักขระตัวสุดท้ายนั้นมีประโยชน์มาก

มีออฟเซ็ตต่างกันเพียง 8 ตัวเท่านั้นดังนั้นจึงสามารถเก็บไว้ในตารางค้นหา 171- บิต (3 * 57) ที่มีสามบิตต่อรายการ แต่ฉันไม่สามารถคิดวิธีแทรกบิตเหล่านั้นลงในโปรแกรมได้อย่างมีประสิทธิภาพ การเข้ารหัส Hex จะต้องใช้อักขระหนึ่งตัวต่อสี่บิตรวมทั้งส่วน0xนำหน้า ฉันไม่สามารถทำได้ดีกว่า 151 ไบต์ซึ่งยาวกว่าเวอร์ชันสตริงมาก หากสามารถแทรก 171 บิตเป็นออคเต็ตดิบได้ก็จะมีขนาด 22 ไบต์ดังนั้นอาจมีวิธีแก้ปัญหา แต่การอ่านไฟล์เป็นสิ่งที่ไม่น่าเชื่อถือ


4

ที่จริงแล้ว 181 ไบต์

2"OHCALAGAMAWVFLNVILMNMOMIRINCDEMTMEINWANYTXORNEOKIDAZNMUTNDMDVAKYSDPAARWYNHIAMSALNJAKTNHIKSVTWICOSCCT"╪"âäà♠îÉæô↨→←∟♣áíå*,▓/12│┤94▼╛?DE╞G╚╠╬ST╒WXßb;Θoq╙|⌂"♂┘Z⌠i≈┐⌡MXO;rR5♀ⁿ*:236@%└

วิธีการแก้ปัญหานี้คาดว่าการป้อนข้อมูลเป็นสตริงที่ยกมา

ลองออนไลน์!

คำอธิบาย

วิธีการแก้ปัญหานี้จะใช้กลยุทธ์คร่ำเครียดเช่นเดียวกับฉันแก้ปัญหาหลาม 3 เพื่อความกระชับฉันจะละเว้นคำอธิบายวิธีคำนวณแฮชและสาเหตุที่เลือก (อ่านคำตอบอื่นถ้าคุณต้องการบิตนั้น)

นอกจากนี้เพื่อความกระชับฉันจะต้องละทิ้งเนื้อหาของสายอักขระที่ยาวมาก ๆ มิฉะนั้นคำอธิบายจะไม่สามารถอ่านได้

2"..."╪"..."♂┘Z⌠i≈┐⌡MXO;rR5♀ⁿ*:236@%└
2"..."╪                                state abbreviations (push the long string, split into length-2 chunks)
       "..."♂┘                         hash values for the state names (a string of CP437-encoded characters, converted to their CP437 ordinals)
              Z                        zip the two lists
               ⌠i≈┐⌡M                  for each pair:
                i                        flatten the pair
                 ≈                       convert hash value to int
                  ┐                      store abbreviation at the register numbered by the hash value
                     X                 discard the now-empty list
                      O                convert input string to list of ASCII ordinals
                       ;rR             range(len(ordinal_list)), reversed
                          5♀ⁿ          5**i mapped over that range
                             *         dot product of powers of 5 and ordinal list
                              :236@%   mod by 236
                                    └  push value in that register

3

Python 3 , 230 ไบต์

lambda s:chr(s[0])+'IA%%L!NOI!M%!E.N!Y.XR.Z$D.I!.D$DA.D%!.HA!LJ%.N%‌​$T.I%!C!T!.HAAT$.A!.‌​VL.V%$CE%%AEK%.T$!.Y‌​.A!.R.Y$O.S%!.K$!.S'‌​.replace('%','$$').r‌​eplace('$','!!').rep‌​lace('!','..')[sum(c‌​*5**i for i,c in enumerate(s[::-1]))%236-5]

ลองออนไลน์!

อินพุตคาดว่าเป็นวัตถุไบต์ (สตริงไบต์แทนที่จะเป็นสตริง Unicode)

ขอบคุณ Johnathon Allan สำหรับจำนวนไบต์ที่ไร้สาระ

คำอธิบาย

แต่ละชื่อรัฐถูกแฮชให้เป็นจำนวนเต็มaโดยใช้แฮชa = sum(o*5**i) % 236(โดยที่oเป็นลำดับ ASCII ของตัวละครและiเป็นดัชนีในสตริงโดยนับถอยหลังจากตอนท้าย) โมดูลัส236ได้รับเลือกเนื่องจากเป็นโมดูลัสขนาดเล็กที่สุดที่ทำให้ค่าแฮชทั้งหมดแตกต่างกันสำหรับชื่อรัฐ 50 แห่งของสหรัฐอเมริกา แฮชเหล่านี้จะถูกแมปกับตัวย่อของรัฐและพจนานุกรมผลลัพธ์ (บีบอัดโดยใช้การแทนที่สตริง) ถูกใช้เพื่อค้นหาตัวย่อที่กำหนดชื่อรัฐ (การแฮชเพื่อให้ได้รหัสที่เหมาะสม)


บันทึก 179 ไบต์ด้วยlambda s:chr(s[0])+'.....IA................L..NOI..M..........E.N..Y.XR.Z....D.I...D....DA.D...........HA..LJ.........N............T.I..........C..T...HAAT.....A...VL.V............CE................AEK.........T.......Y.A...R.Y....O.S...........K.......S'[sum(c*5**i for i,c in enumerate(s[::-1]))%236]
Jonathan Allan

... และอีก 51 อยู่ด้านบนของกับlambda s:chr(s[0])+'IA%%L!NOI!M%!E.N!Y.XR.Z$D.I!.D$DA.D%!.HA!LJ%.N%$T.I%!C!T!.HAAT$.A!.VL.V%$CE%%AEK%.T$!.Y.A!.R.Y$O.S%!.K$!.S'.replace('%','$$').replace('$','!!').replace('!','..')[sum(c*5**i for i,c in enumerate(s[::-1]))%236-5]
Jonathan Allan

ฉันประหลาดใจที่การนับถอยหลังมีค่าใช้จ่ายน้อยกว่าไบต์มากกว่าฟังก์ชันแฮชที่นับต่อไป - แต่ฉันไม่สามารถค้นหาด้วยการเล่นนิดหน่อย
Chris H

1
@ ChrisH ฉันคิดว่าฉันพบหนึ่ง แต่สตริงที่บีบอัดมีราคาแพงกว่า
Mego

2

Ruby, 106 103 ไบต์

->s{s[0]+(s=~/ /?$'[0]:s[(j="()6>P_ac;?.O}AFLKMrS".index((s.sum%136%95+32).chr))?j>7?j/4:-1:1]).upcase}

หากอินพุตมีช่องว่างตัวอักษรเอาต์พุตที่สองคือช่องว่างหลังช่องว่าง อื่น...

แฮชผลรวมของอักขระทั้งหมดในอินพุตเพื่อรับอักขระที่มีดัชนีในสตริงมายากลระบุดัชนีของตัวอักษรเอาต์พุตที่สองในสตริงอินพุตตามสูตรj>8?j/4:-1(-1 หมายถึงจุดสิ้นสุด) หากแฮชให้ตัวละครที่ไม่ได้อยู่ในสายเวทย์มนตร์ตัวอักษรตัวที่สองคือตัวอักษรตัวที่สอง

ตามคำอธิบายของสตริงมายากลตัวอักษรแฮชและดัชนีตัวอักษรที่เข้ารหัสจะอยู่ด้านล่าง โปรดทราบว่าเดลาแวร์ปรากฏแม้ว่าตัวอักษรตัวที่สองจะทำ - นี่เป็นเพราะรหัสแฮชขัดแย้งกับรัฐเคนตักกี้ โชคดีที่จดหมายฉบับสุดท้ายของเดลาแวร์ก็เหมือนกับฉบับที่สอง

Letter(index)
Last  (-1)  (-MD    )-VA    6-GA-LA  >-DE-KY    P-PA    _-CT    a-KS    c-VT
3rd    (2)  ;-TN    ?-MN    .-TX     O-NV
4th    (3)  }-MS    A-IA    F-MT     L-AZ
5th    (4)  K-MO    M-AK    r-ME     S-HI 

Ungolfed ในโปรแกรมทดสอบ

a="Alabama
Alaska
Arizona
Arkansas
California
Colorado
Connecticut
Delaware
Florida
Georgia
Hawaii
Idaho
Illinois
Indiana
Iowa
Kansas
Kentucky
Louisiana
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
Montana
Nebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
Pennsylvania
Rhode Island
South Carolina
South Dakota
Tennessee
Texas
Utah
Vermont
Virginia
Washington
West Virginia
Wisconsin
Wyoming".split($/)

f=->s{                                                            #String argument s.
  s[0]+(                                                          #Return character s[0] +
    s=~/ /?$'[0]:                                                 #if s contains a space, 1st character after space, ELSE
      s[(j="()6>P_ac;?.O}AFLKMrS".index((s.sum%136%95+32).chr))?  #if (sum of ascii codes, mod 136 mod 95 +32).chr in the magic string
        j>7?j/4:-1:                                                 #return s[j/4] if j>7 else return s[-1] ELSE
      1]                                                          #if not in the magic string, return s[1].
  ).upcase                                                        #Convert the second character to uppercase if needed.
}


a.map{|i|p [i,f[i]]}

2

/// , 619 608 ไบต์

/2/~M//@/~South //1/~North //!/~New //~/\/\///Alabama/AL~Alaska/AK~Arizona/AZ~Arkansas/AR~California/CA~Connecticut/CT~Delaware/DE~Florida/FL~Georgia/GA~Hawaii/HI~Idaho/ID~Illinois/IL~Indiana/IN~Iowa/IA~Kansas/KS~Kentucky/KY~Louisiana/LA2aine/ME2aryland/MD2assachusetts/MA2ichigan/MI2innesota/MN2ississippi/MS2issouri/MO2ontana/MT~Nebraska/NE~Nevada/NV!Hampshire/NH!Jersey/NJ!Mexico/NM!York/NY1Carolina/NC1Dakota/ND~Ohio/OH~Oklahoma/OK~Oregon/OR~Pennsylvania/PA~Rhode Island/RI@Carolina/SC@Dakota/SD~Tennessee/TN~Texas/TX~Utah/UT~Vermont/VT~Virginia/VA~Washington/WA~West Virginia/WV~Wisconsin/WI~Wyoming/WY/

ลองออนไลน์!

เนื่องจากไม่มีวิธีอื่นในการป้อนข้อมูลใน /// มันจะไปที่ส่วนท้ายของโปรแกรม เพียงแค่เพิ่มอินพุตที่ต้องการลงในโปรแกรม

บันทึก 11 ไบต์โดยทำการเปลี่ยนเพิ่มเติมตามที่แนะนำโดย @SteveBennett


อาจมีรูปแบบบางอย่างที่คุณสามารถแทนที่ได้หลายครั้งพร้อมกันเช่น "ใหม่" และ "akota" น่ารำคาญที่คุณไม่สามารถทำอย่างชาญฉลาดได้มากนักเช่นการลบส่วนของชื่อรัฐเนื่องจากการแปลงอักขระที่เหลือเป็นตัวพิมพ์ใหญ่นั้นมีราคาแพงมาก ...
Steve Bennett

@SteveBennett แก้ไขแล้วขอบคุณ!
สหาย SparklePony


1

TAESGLขนาด 386 ไบต์

B=«ōďā,AL,ņćđ,AK,ķċđ,AZ,ćōē,AR,ďċđ,CA,ĭāď,CO,ŕĭ,CT,ćđēą,DE,ĕŕ,FL,īĭ,GA,ńāē,HI,ćĉďą,ID,ĭċď,IL,ľđā,ţ,ńĕĕ,IA,ķő,KS,ŏĝ,KY,ŏĕĕ,LA,ŏđć,ME,ņāē,MD,ńđā,MA,īđą,MI,ļēď,MN,ŕğ,MS,ňė,MO,ććĕĉ,MT,ćċćĉ,NE,ŕēď,NV,ň ćŋā,NH,ň ĩēđ,NJ,ň ğĕċ,NM,ň ĉĝ,NY,ćņ ġĉă,NC,ćņ ńċą,ND,ĩēą,OH,ŋĺ,OK,ļķ,OR,ĺđď,PA,ĉĉğ đēā,RI,ōċ ġĉă,SC,ōċ ńċą,SD,ňďą,TN,ċĕď,TX,ōđą,UT,ćđāā,VT,ğğ,VA,ďĉē,WA,ĉĉć ğğ,WV,ľēđ,WI,ĉĩĕ,WY»Ĵ",";B[BĪA)+1

ล่าม

การบีบอัดชื่อรัฐที่เรียบง่ายมากถูกเพิ่มเข้าไปในอาร์เรย์ด้วยตัวย่อ


1

Japt, 383 ไบต์

การบีบอัดของสายแรกอาจจะแก้ไขได้โดยการทดลองกับคำสั่งของตัวอักษร

g +`lkzÇUaidlnyaÀÍ¥evhjmycdhkÎödnxttaaviy`g`alabaµ
Ã2ka
iza
kÂ6s
Öâfnia
åªv
¬nש
Ü.Ø
fÓQ»
gegia
°ii
i»
ÅJno
Äa
Å0
kÂ6s
kÀ_cky
lia
Úpe
æ¯À
ÚUaÖ³etts
Úòig
·nÌta
æ«7ppi
æ¬
Úa
ßka
va»
w mp¢i
w jÀ y
w ´xi¬
w yk
Íh ÖÚ¦na
Íh »kota
oo
oklaÊá
eg
pnsylvia
r¸ Ó
Ñh ÖÚ¦na
Ñh »kota
âÊte
x
©ah
vÚ
virgia
Øgn
ØÙ virgia
æÈ;n
wyÇg`·bUv) u

ลองออนไลน์


1

Mathematica, 138 140 134 ไบต์

+2 ไบต์ - พบข้อผิดพลาด (จำเป็นต้องมีการชดเชยอาร์เรย์ที่ 1 ไม่ใช่ 0)

-6 ไบต์ - พบแฮชที่ดีกว่า

#~StringTake~1<>"R_ATE__IN_COI_J_I_SLNAT_Y_Y_HKOAE__SAA_DDLM_RVAH_XDTVA__I_N_EA_T_DY_C_KZL"~StringTake~{1+Hash@#~Mod~89866736~Mod~73}&

คล้ายกับคนอื่น ๆ มันใช้ชื่อและใช้ตัวอักษรตัวแรก จากนั้นจะใช้การแฮช Mathematica ที่เป็นค่าเริ่มต้นจากนั้นใช้มอดุลัสสองตัวHash@#~Mod~89866736~Mod~73เพื่อรับตัวเลขที่ไม่ซ้ำกันสำหรับแต่ละรัฐ ค่านี้จะถูกค้นหาในสตริงเพื่อสร้างตัวอักษรที่สอง

อาจจะเล่นกอล์ฟได้มากกว่านี้ แต่พื้นที่การค้นหามีขนาดใหญ่มากสำหรับ Mathematica ในการค้นหา ตัวอักษรที่สองที่ซ้ำกันไม่ได้ถูกพิจารณาในการค้นหาแฮช _อักขระแสดงค่าที่สูญเปล่าในสตริง ในทางทฤษฎีคุณสามารถรับสายอักขระได้เพียง 19 ตัวอักษรเท่านั้น แต่การค้นหาแฮชแบบกำหนดเองเพื่อสร้างเป็นฝันร้าย


1

Perl 5, 150 148 ไบต์ (147 + 1)

นี่ไม่ใช่วิธีที่ดีที่สุด แต่ทำงานได้ดี ต้องการ-nแฟล็กบรรทัดคำสั่ง

s/las//;s/ai?n//;s/[oie]n|ri//;s/e([vx])/$1/;s/issi?//;s/(.).+ /\1/;/(.)(.)/;/^([^W]).*(?:[cogavn][wiku]|[ir][ys][li]|rm)([adyti])$/;print uc"$1$2"

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