उस अमेरिकी राज्य को संक्षिप्त करें!


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

नियम

  • इनपुट और आउटपुट दोनों ही संवेदनशील हैं। आप कई नहीं उदाहरण के Alलिए आउटपुट Alabama
  • आप मान सकते हैं कि इनपुट ऊपर दिखाए गए 50 राज्य नामों में से एक है।
  • आप इंटरनेट का उपयोग नहीं कर सकते हैं या अंतर्निहित राज्य डेटा का उपयोग कर सकते हैं (आप को देखकर, गणितज्ञ)।

इनपुट और आउटपुट की अलग-अलग सूचियाँ इस स्निपेट में मिल सकती हैं (कृपया इसे न चलाएं, यह केवल पोस्ट को संपीड़ित करने के लिए है):

(नॉन-स्कोरिंग) ब्राउनी अंक यदि आप District of Columbiaइनपुट और उत्पादन DC, वर्जिन द्वीप समूह, आदि के रूप में भी ले सकते हैं ।

स्कोरिंग

यह , इसलिए प्रत्येक भाषा में बाइट्स में सबसे छोटा कोड जीत जाता है

(मूल रूप से ETHProductions द्वारा प्रस्तावित )


11
मैथमेटिका के दृष्टिकोण को जानने के लिए उत्सुक लोगों के लिए:Entity[a="AdministrativeDivision",{#,"UnitedStates"}]@EntityProperty[a,"StateAbbreviation"]&
डेविड '

12
@BetaDecay प्रश्न जो ऑफ-टॉपिक के रूप में बंद हैं, उपयोगी उपयोगी लक्ष्य नहीं हैं।
मेगो

7
@ डेविड आप 20बाइट्स बचा सकते हैं : Entity["AdministrativeDivision",{#,"UnitedStates"}]@"StateAbbreviation"&:)
ngenisis

2
यूएस पोस्टल संक्षिप्त की पूरी आधिकारिक सूची में अन्य 12 दो-चरित्र कोड को शामिल करने के लिए अतिरिक्त क्रेडिट प्रदान करें: AA (ARMED FORCES AMERICAS), AE (ARMED FORCES EUROPE), AP (ARMED FORCES PACIFIC), AS (AMERICAN SAMOA), DC (DISTRICT OF COLUMBIA), FM (MICRONESIA के संबंधित राज्य), GU (GUAM), MH (MARSHALL ISLANDS), MP (NORTHERN MARIANA ISLANDS), PR (PUERTO RICO), PW (PALAU), VI (VIRGIN ISLANDS)।
जो स्नाइडर

2
हाँ, यह कोई धोखा नहीं है।
क्रिस्टोफर

जवाबों:


25

जावास्क्रिप्ट, 124 117 बाइट्स

(बचाया 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()

स्पष्टीकरण:

  • रेगेक्सपी को पहले और आखिरी अक्षरों के साथ दो अक्षर मिलते हैं
  • पहला भाग दो से अधिक शब्दों वाले राज्यों (कोलंबिया के जिला सहित) से मेल खाता है
  • दूसरा भाग अलास्का और एरिज़ोना से मेल खाता है
  • तीसरे भाग में मासाचुसेट्स, मिसिसिपी और मिसौरी का मिलान होता है
  • चौथा भाग मिशिगन, मिनेसोटा और मोंटाना से मेल खाता है
  • पांचवां हिस्सा नेब्रास्का और नेवादा से मेल खाता है
  • आयोवा को बाहर करने के लिए एक विशेष मामले के साथ, छठे भाग को उनके पहले दो अक्षरों से संक्षिप्त सभी शेष राज्यों से मेल खाता है
  • सातवाँ हिस्सा उनके पहले और तीसरे अक्षरों के संक्षिप्त सभी शेष राज्यों से मेल खाता है
  • आठवां हिस्सा बाकी सब चीजों से मेल खाता है, जो उनके पहले और आखिरी अक्षरों से संक्षिप्त है
  • फिर यह उन पत्रों को छीनने और पूंजीकरण करने का मामला है
  • साथ ही प्यूर्टो रिको और अमेरिकन समोआ से मेल खाता है, लेकिन गुआम, मारियानास द्वीप या यूएस वर्जिन आइलैंड्स से नहीं

वाह, यह बहुत अच्छा है! +1!
NoOneIsHere

3
अच्छा! कुछ और अवसर: [A-Z]इनपुट मान्य होने के बाद से प्रारंभिक आवश्यक नहीं है। आयोवा विशेष मामले [AFIOUW][^o]को इसे बाहर करने के लिए छोटा किया जा सकता है, इसे अंतिम के लिए छोड़ दिया जाएगा .+
HVD

1
आपका रेगेक्स मशीनरी मेरा तुलना में बहुत कुशल है ... काश मेरे छोटे रेगेक्स के साथ काम करने का एक तरीका होता। लेकिन वे ऐसे विभिन्न सिद्धांतों पर निर्मित हैं।
स्टीव बेनेट

1
वैसे काफी कुछ हैं जो अपने तरीके से अजीब हैं। एक अच्छा संग्रह है जो "पहले और अंतिम" और "पहले दो" नियमों (कोलोराडो, डेलावेयर, कैलिफोर्निया ...) से मेल खाता है, लेकिन फिर मिसिसिपी (एमएस) इसे बर्बाद कर देता है।
स्टीव बेनेट

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 पर पहुँच सकते हैं? :)
स्टीव बेनेट

22

जावास्क्रिप्ट, 137 135 134 132 113 110 108 101 99 94 93 92 बाइट्स

यह एचपी विलियम्स समाधान पर आधारित है, जिसमें रेगेक्स के बाहर कुछ सुधार हैं, और इसके भीतर दो जुड़वा बच्चे हैं।

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

(केवल पठनीयता के लिए लाइनब्रेक)

रेगेक्स के लिए टिप्पणी:

.*( .|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

व्यर्थ वैकल्पिक रेगेक्स (एक ही लंबाई):

/...(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!
स्टीव बेनेट

94. पूरी तरह से पागल। मैंने इस अनुकूलन ( ...s.s?दुर्घटना, मिसिसिपी, मिसौरी, नरसंहार और अलास्का को पकड़ लिया) को दुर्घटना से खोजा । मैं वास्तव में .*skटुकड़े को कहीं और ले जाने की प्रक्रिया में था , और परीक्षण सिर्फ भागते और पास होते थे, जबकि टुकड़ा कहीं भी मौजूद नहीं था। सबसे आसान 5 चरित्र कभी!
स्टीव बेनेट

वाह, और मुझे बस एहसास हुआ कि ...s.s?अनजाने में भी कान्सास का मिलान हो रहा है, और चमत्कार से, अभी भी सही परिणाम दे रहा है।
स्टीव बेनेट

और एक और चरित्र के साथ M[onti]+। इतना अजीब: यदि राज्य एम से शुरू होता है, तो दूसरा अक्षर कम से कम एक ओ, एन, टी या आई के अनुक्रम में अंतिम है। मिचिकन, मिनेसोटा, या मोंटाना पर कब्जा करने का एक बहुत ही अजीब तरीका है।
स्टीव बेनेट

20

जावास्क्रिप्ट (ईएस 6), 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
क्या इस विधि का उपयोग करके इसे इष्टतम बनाया जा सकता है?
केवल

2
@ ASCII- केवल यह मध्यस्थ सीमाओं पर भंगुर है, इसलिए यह केवल इष्टतम होने की गारंटी है X MOD[50-1000] MOD[50-1000] MOD[50-100]। लेकिन .slice(1)एक गलती थी। वर्तमान में पूरे स्ट्रिंग पर फिर से चल रहा है।
अरनौलद

2
क्या आप एक newb को समझा सकते हैं कि यह क्या करता है?
हांक्रेकर्स

1
@ हैंकॉर्डर्स ज़रूर, करेंगे। (लेकिन मैं अभी सीमित इंटरनेट एक्सेस वाली ट्रेन में हूं।)
अरनौल्ड

1
अब मेरा 135 है!
स्टीव बेनेट

17

जेली , 75 बाइट्स

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

इसे ऑनलाइन आज़माएं!

... या एक परीक्षण सूट देखें - ध्यान दें कि एक बार में कई इनपुट के लिए पूरा कार्यक्रम चलाने के लिए एक छोटा सा बदलाव किया जाना था (मैंने प्रोग्राम इनपुट परमाणु को स्वैप कर दिया था ³, रजिस्टर से याद करने के लिए ®, एक और रजिस्टर सेट करें प्रत्येक राज्य का नाम बदले में)।

कैसे?

डाक कोड के दूसरे चरित्र के लिए उपयोग करने के लिए सूचकांक की गणना करता है, इसे पहले चरित्र में जोड़ता है और परिणाम को अपरकेस करता है।

पहले एक अंतरिक्ष वर्ण का सूचकांक पाता है (या यदि नहीं मिला तो 0);

यदि यह अलास्का या मिसौरी है ( kया के लिए 5 उपज o);

एल्स सूची में इनपुट स्थिति का सूचकांक पाता है Arizona Minnesota Mississippi Nevada Montana Texas Tennessee(या यदि नहीं मिला तो 0) - यदि ऐसा है तो वह इंडेक्स मॉड 2 प्लस 3 ( z n s v t x n) के लिए लेता है ;

Else स्ट्रिंग को अध्यादेशों में परिवर्तित करता है, जो आधार 256 से परिवर्तित करता है, शेष को 29487 से विभाजित करने के बाद, शेष को 14 से विभाजित करने पर पाता है और 9620 के द्विआधारी प्रतिनिधित्व में अनुक्रमित करने के लिए इसका उपयोग करता है और परिणाम को दोगुना करता है - 0 उन राज्यों के लिए जो अपने अंतिम पत्र का उपयोग करते हैं और 2 उन लोगों के लिए जो अपने दूसरे पत्र का उपयोग करते हैं।

सभी लेकिन पहले ही मामले में वृद्धि हुई है, और परिणामी मूल्य घटाया जाता है (एक द्वारा पाया गया स्थान सूचकांक को ऊपर उठाते हुए)।

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

पायथन 2 , 191 बाइट्स

lambda s:s[0]+("KZD"*5+"HNTD"*5+"AYY"*4+"__L_O_VTA_I__A_T_RS_KA__S_"+"MOO"*5+"I_C_"+"AE"*6+"_I_D__A_"+"EDL"*5+"HV_A"+"IR"*7+"XC"*6+"E____N__YJ_YT___L")[reduce(lambda a,x:a+ord(x)^24,s,0)%174]

इसे ऑनलाइन आज़माएं!

संक्षिप्त नाम के दूसरे वर्ण को खोजने के लिए एक साधारण हैश फ़ंक्शन का उपयोग करता है।


11

पायथन 2, 94 90 बाइट्स

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

इसे ऑनलाइन आज़माएं

(केवल पायथन 2 क्योंकि पायथन 3 हैश स्थिर नहीं हैं और साथ ही आप इसे बाइट्स में बदले बिना एक स्ट्रिंग हैश नहीं कर सकते हैं)

कोलंबिया और प्यूर्टो रिको के बोनस जिले के रूप में सभी 50 राज्यों के साथ काम करता है।

आधार -36 में संख्या लिखकर एक बाइट बचाना संभव होगा int("5clu7x0aixb0pelmpugv5iiibphrpf",36):। मैं यह देखने के लिए इंतजार कर रहा हूं कि क्या मैं अधिक रचनात्मक समाधान के बारे में सोच सकता हूं।

अपडेट करें:

चूंकि हैश में 12 अप्रयुक्त अंकों की स्थिति है, इसलिए 2 36 संभावित नंबर हैं जो काम करेंगे। यह मानना ​​उचित प्रतीत हुआ कि उनमें से एक में एक बड़े घटक के साथ एक प्रमुख कारक होगा। किसी भी दिए गए प्रधान और प्रतिपादक के लिए, मूल्य ढूंढना काफी तेज है; मैं 19 9 के एक कारक के साथ एक खोजने में कामयाब रहा , चार बाइट्स द्वारा संख्या का प्रतिनिधित्व करने के लिए आवश्यक अभिव्यक्ति के आकार को कम करना।

यह मूल रूप से मेरी सी उत्तर के रूप में एक ही प्रक्रिया है लेकिन पायथन का उपयोग कर रहा है। चूंकि बेस हैश फ़ंक्शन अलग है, मुझे एक अलग कमी फ़ंक्शन ढूंढना था, जो कि मॉड 54 के बजाय 52 52 पर निकलता है। लेकिन सी पर सबसे बड़ी बचत वेक्टर को एन्कोड करने के लिए बोगम का उपयोग करने की संभावना से आती है, और निश्चित रूप से यह तथ्य कि पायथन के लिए मानक ऐसा लगता है कि एक पूर्ण कार्यक्रम के बजाय एक लंबोदर शाब्दिक का उपयोग करना ठीक है।


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 परीक्षण मामले शामिल हैं। @ JörgHülsermann के रेगेक्स को अप्वाइंट करने से 32 बाइट्स बचीं, जो दूसरा लेटर (DC को सपोर्ट करने के लिए एक ट्विट के साथ मिला; एडिट: 1 बाइट थैंक्स टू @ JörgHülsermann)। अपनी टिप्पणी से @ HPWilliam के जवाब के लिए @ स्टीवबेनेट के regex पर स्विच करके 3 बाइट्स सहेजे। सहेजे गए 7 9 बाइट्स @SteveBennett को फिर से धन्यवाद। अन्य अक्षर तब हटाए जाते हैं और स्ट्रिंग को बड़ा किया जाता है।


बहुत अच्छा, सोचा नहीं था कि आपको पूरी तरह से हटाने योग्य तार का एक सेट मिल सकता है।
कॉल्व्स

@ConnorLSW eवास्तव में सबसे ज्यादा तकलीफदेह था।
नील

@ JörgHülsermann वापसी पक्ष के लिए धन्यवाद!
नील

@ JörgHülsermann ओह, तो मैं एक और बाइट बचाने में सक्षम हो जाएगा?
नील

1
रुको, इंडियाना करता आईडी बन जाते हैं। आप शायद इसे $ के बाद जोड़कर ठीक कर सकते हैं d। (आप स्वत: परीक्षण का उपयोग करना चाह सकते हैं - मेरे पास एक स्क्रिप्ट है जो लगातार सभी 50 मामलों की जांच करती है।)
स्टीव बेनेट

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]$)मेल खाता कनेक्टिकट, केंटकी, मेन, मैरीलैंड, मिनेसोटा, मोंटाना, पेंसिल्वेनिया, रोड आइलैंड, टेनेसी, वरमोंट

इन राज्यों के लिए कोई मुकाबला नहीं है इसलिए हम पहले दो अक्षर अलबामा, अर्कांसस, डेलावेयर, फ्लोरिडा, इडाहो, इलिनोइस, इंडियाना, मिशिगन, नेब्रास्का, ओहियो, ओरेगोन, ओरेगन, यूटा, वाशिंगटन, विस्कॉन्सिन, व्योमिंग लेते हैं

पहली बार जब मैं इस रेगेक्स सबपैटर का उपयोग कर रहा हूं ?|, तो बैकरेफरेंस को एक में स्टोर करने की अनुमति देता है।

कोलंबिया जिले का समर्थन करें

+3 बाइट्स के (.)साथ बदलें([^o])

इसे ऑनलाइन आज़माएं!

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]);

इसे ऑनलाइन आज़माएं! परीक्षण के मामलों


3
क्या n|t|बाइट से कम नहीं है [nt]|?
नील

@ नील यह है। मुझे इसका एहसास नहीं है। थैंक यू
जोर्ग ह्यूल्समैन

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
इस तरह थोड़ा गोल्फ में ऐरे स्थान के साथ मान हैं या जहां दूसरा अक्षर सही हटा दिया गया है। और $argv[1]साथ बदल दिया है $argn sandbox.onlinephpfunctions.com/code/...
Jörg Hülsermann

@ JörgHülsermann बहुत बहुत धन्यवाद! मैं वास्तव में यहाँ कोडगुफ़ पर आपके उत्तरों का आनंद लेता हूँ php!
इवांका टोडोरोवा

मैं यहां अन्य लोगों के मुकाबले थोड़ा हल्का हूं। यदि कोई सुधार पाता है तो सीखने का प्रयास अच्छा है। मुझे उम्मीद है कि आप भविष्य में और अधिक सवालों के जवाब देंगे
Jörg Hülsermann

7

सी, 945 937 718 711 660 616 बाइट्स

केवल ASCII के लिए 219 बाइट्स सहेजे गए।

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); संक्षिप्त नाम के दूसरे अक्षर को प्रिंट करता है (यदि राज्य का नाम वर्तमान मानचित्र मूल्य के साथ मेल खाता है), और एक नई पंक्ति।

यह उत्तर * / दक्षिण * राज्यों के लिए गलत उत्पादन का उत्पादन करता है।
फेलिक्स डॉम्बेक

6

सी, 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) मिसौरी और मिसिसिपी पहले पाँचवें चरित्र में भिन्न होती हैं और (2) कुछ राज्यों में केवल चार वर्ण होते हैं। C में आप NUL टर्मिनेटर बाइट का उपयोग कर सकते हैं, लेकिन इससे आगे कुछ भी विश्वसनीय नहीं है। (इसने दोनों उत्तर को समान मान के साथ-साथ दोनों दक्षिण में राख कर दिया है। लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि संबद्ध ऑफसेट इन सभी के लिए 6 है।)

जैसा कि होता है, उस विशेष हैश ने कोलंबिया के जिला, पर्टो रीको और "वर्जिन आइलैंड्स" के संक्षिप्त अक्षरों के दूसरे अक्षर के लिए सही स्थिति उत्पन्न की है (टाइप किया गया है कि "यूएस वर्जिन आइलैंड्स" के रूप में नहीं, क्योंकि एल्गोरिथ्म पहले जोर देता है संक्षिप्त नाम का चरित्र नाम का पहला अक्षर है)।

663694 और 57 के स्थिरांक एक स्वचालित परीक्षण के साथ पाए गए; 57 मुझे मिली सबसे छोटी हैश रेंज थी। (पहले संस्करण में 380085 और 63 का उपयोग किया गया था, लेकिन जब मैंने परीक्षण रेंज का विस्तार किया तो मुझे नया मिल गया।) ऐसा लगता है कि "नाम में अंतिम वर्ण का उपयोग करने के लिए" एक कोड जोड़े जाने पर थोड़ा छोटा हैश मौजूद है; दुर्भाग्य से, अंतिम वर्ण का चयन करने के लिए C सिंटैक्स भी सहायक है।

केवल 8 अलग-अलग ऑफ़सेट हैं, इसलिए उन्हें 171-बिट (3 * 57) लुकअप टेबल में तीन बिट्स के साथ संग्रहीत किया जा सकता है। लेकिन मैं उन बिट्स को कार्यक्रम में कुशलता से सम्मिलित करने का तरीका नहीं सोच सकता था। हेक्स-एन्कोडिंग के लिए प्रति चार बिट्स में से एक वर्ण, और 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

पायथन 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]

इसे ऑनलाइन आज़माएं!

इनपुट एक बाइट्स ऑब्जेक्ट (एक बाइट स्ट्रिंग के बजाय एक यूनिकोड स्ट्रिंग) के रूप में अपेक्षित है।

जॉनसन एलन को बाइट्स की एक बेतुकी राशि के लिए धन्यवाद

व्याख्या

प्रत्येक राज्य का नाम हैश को 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]
जोनाथन एलन

... और उसके साथ एक और 51lambda 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]
जोनाथन एलन

मुझे आश्चर्य है कि पीछे की ओर गिनने से एक हैश फ़ंक्शन की तुलना में कम बाइट्स खर्च होते हैं, जो आगे की ओर गिना जाता है - लेकिन मैं एक छोटे से खेल के साथ नहीं मिल सकता
क्रिस एच

1
@ क्रिस मुझे लगा कि मुझे एक मिल गया है, लेकिन संकुचित स्ट्रिंग अधिक महंगा है।
मेगो

2

रूबी, 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 

परीक्षण कार्यक्रम में अपराजित

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 द्वारा अनुशंसित है


शायद कुछ पैटर्न हैं जिन्हें आप एक साथ कई बार बदल सकते हैं, जैसे "नया" और "अकोटा"। कष्टप्रद है कि आप राज्य के नामों के वर्गों को हटाने की तरह अधिक चालाक नहीं हो सकते हैं, क्योंकि शेष चरित्र को अपरकेस में बदलना इतना महंगा है ...
स्टीव बेनेट

@SteveBennett संपादित, धन्यवाद!
कॉमरेड स्पार्कलपनी


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

जाप, 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

गणितज्ञ, १३hem १४० १३४ बाइट्स

+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}&

दूसरों के समान यह नाम लेता है और पहला अक्षर लेता है। फिर यह डिफ़ॉल्ट गणितज्ञ हैश पर लागू होता है, फिर Hash@#~Mod~89866736~Mod~73प्रत्येक राज्य के लिए एक अद्वितीय संख्या प्राप्त करने के लिए उस पर दो मापांक लागू करता है । यह मान दूसरे अक्षर को उत्पन्न करने के लिए एक स्ट्रिंग में देखा जाता है।

संभवत: अधिक गोल्फ हो सकता है, लेकिन खोज के लिए खोज स्थान विशाल है। डुप्लिकेट किए गए दूसरे अक्षरों को हैश खोज में नहीं माना गया था। _वर्ण स्ट्रिंग में व्यर्थ मूल्यों का प्रतिनिधित्व करते हैं। सिद्धांत रूप में आप केवल 19 वर्णों तक स्ट्रिंग प्राप्त कर सकते हैं, लेकिन उत्पादन करने के लिए कस्टम हैश ढूंढना एक बुरा सपना होगा।


1

पर्ल 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"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.