अधिक कुशल अमेरिकी राज्य कोड


20

उस अमेरिकी राज्य को संक्षिप्त करें! मजेदार था, लेकिन हमने सीखा कि अमेरिकी राज्य के नामों को कुशलतापूर्वक संक्षिप्त करना वर्तमान प्रणाली के साथ कठिन है। चलो कुशल गोल्फ के लिए एक वैकल्पिक राज्य कोड योजना के साथ आते हैं।

आपका कार्य:

एक फ़ंक्शन (या प्रोग्राम) लिखें, जिसे एक वैध अमेरिकी राज्य नाम दिया गया (केवल 50 सामान्य राज्यों की आवश्यकता है), इसे पहचानने वाले अपरकेस में एक अद्वितीय दो-अक्षर कोड देता है। कोड को इन आवश्यकताओं को पूरा करना चाहिए:

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

उदाहरण के लिए, "अलबामा" को देखते हुए, आपका फ़ंक्शन "AL", "AA", "AB" या "AM" लौटा सकता है - जब तक कि वह अलास्का, अर्कांसस, आदि में से किसी के लिए उस मूल्य को वापस नहीं करता है ("AA) "केवल संभव है क्योंकि" ए "राज्य के नाम में एक से अधिक बार दिखाई देता है।"

मानक खामियों को मना किया। मानक इनपुट / आउटपुट ठीक है। यह कोड गोल्फ है, इसलिए बाइट्स में सबसे कम समाधान, जीतता है।

संभावित इनपुट की पूरी सूची यहां है:

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

2
क्या आउटपुट हमेशा दो अपरकेस अक्षरों में होना चाहिए, या क्या यह मिश्रित मामले के उत्पादन के लिए ठीक है? यदि मिश्रित ठीक है तो "एबी" को "एबी" से अलग माना जाना चाहिए; और पहला अक्षर हमेशा अपरकेस होना चाहिए?
जोनाथन एलन

क्या अंतरिक्ष वर्ण को एक वैध अक्षर माना जाता है?
जोनाथन एलन

नहीं। पत्र पत्र हैं।
स्टीव बेनेट

आउटपुट अपरकेस होना चाहिए। क्षमा करें, मुझे वास्तव में यह निर्दिष्ट करना चाहिए था।
स्टीव बेनेट

धन्यवाद, मैं उन दोनों शासनों के साथ गया क्योंकि मुझे लगता है कि उन्होंने सबसे अधिक समझ में आता है।
जोनाथन एलन

जवाबों:


7

जेली ,  13  12 बाइट्स

907ị;⁸Qḣ2ṢŒu

पात्रों की सूची लेने और लौटाने की एक विवादास्पद कड़ी।

इसे ऑनलाइन आज़माएं! या एक परीक्षण सूट देखें

कैसे?

907ị;⁸Qḣ2ṢŒu - Monadic link: list of characters, state    e.g. Alabama   or   Kansas
907          - literal 907
   ị         - index into state                                b              K
     ⁸       - link's left argument, state
    ;        - concatenate                                     bAlabama       KKansas
      Q      - de-duplicate (unique by 1st appearance)         bAlam          Kans
       ḣ2    - head to index 2                                 bA             Ka
         Ṣ   - sort                                            Ab             Ka
          Œu - convert to uppercase                            AB             KA

जेली में इंडेक्सिंग 1-इंडेक्सेड और मॉड्यूलर है, इसलिए लंबाई एल के कुछ का 907 वें इंडेक्स (907-मॉडुलो-एल) वें आइटम है। उदाहरण के लिए "अलबामा" की लंबाई 7 है इसलिए आइटम 907 सूचकांक में है (907-मोडुलो -7) वें , और 907-मोडुलो -7 4 है (907 = 129 * 7 + 4 ), इसलिए आइटम सूचकांक में है। 907 'बी ’है।

907 पहला पॉजिटिव इंडेक्स है, जिस पर इंडेक्स 1 का उपयोग करने वाले स्टेट कॉन्सेप्ट और सभी 50 राज्यों में इंडेक्स अद्वितीय हो जाते हैं।

राज्य के नाम, उनके रिक्त स्थान सहित, 14 समावेशी के माध्यम से लंबाई 4 के हैं, और 907-मोडुलो -6 1 है (जबकि अन्य सभी लंबाई के लिए मूल्य 1 नहीं है)। इसका अर्थ है कि अगर हम अलास्का, हवाई, कंसास, नेवादा और ओरेगन के लिए 1 और 907 वें वर्ण का उपयोग करते थे, तो क्रमशः AA, HH, KK, NN और OO होगा - यह हवाई, केन्सास, के लिए स्वीकार्य नहीं है या नेवादा; इसलिए एक समायोजन करने की आवश्यकता है; यह अनुक्रमण, डी-डुप्लीकेशन, हेड टू इंडेक्स 2 और सॉर्ट का कारण है, इससे अलास्का, हवाई, कंसास, नेवादा, और ओरेगन क्रमशः AL, HA, KA, NA और OR बन जाते हैं और मौजूदा स्टेट्स से नहीं टकराते हैं ।


@LevelRiverSt अब ठीक होना चाहिए, हालांकि इस पैच से मेरे मूल त्रुटिपूर्ण समाधान का एक छोटा समाधान है।
जोनाथन एलन

क्या आप कृपया एक संक्षिप्त विवरण जोड़ सकते हैं?
user1502040

@ user1502040 मैं ऐसा कर रहा था, अब स्पष्ट होना चाहिए, मुझे पता है अगर आप कुछ भी नहीं समझते हैं।
जोनाथन एलन

आप इसके साथ कैसे आए?
user1502040

@ user1502040 मुझे पता था कि हमें इनपुट में अक्षरों से कोड बनाने की आवश्यकता है, और यह कि जेली इंडेक्सिंग मॉड्यूलर था, इसलिए मैंने सिर्फ एक इंडेक्स की तलाश की, जिसमें 50 यूनिक कोड दिए गए (मैंने ऐसे इंडेक्स खोजने के लिए कुछ पायथन कोड लिखा था - यह भी पाया गया) -341 और -773 -1000 से 1000 रेंज के भीतर)। मैंने मूल रूप से "अन्य" की आवश्यकता को याद किया इसलिए समस्या को हल किया (जैसा कि वर्णित है)। (मुझे अभी तक कुछ भी कम नहीं मिला है, हालांकि मुझे आश्चर्य नहीं होगा अगर वहाँ थे)।
जोनाथन एलन

3

रूबी, 34 बाइट्स

->s{s[0]+(s[1,8]*999)[445].upcase}

मैंने साथ शुरू किया s[0]+s*99999[x].upcaseऔर x के कई मानों को x = 100000 तक पाया जो सभी 50 राज्यों के लिए अद्वितीय कोड लौटाता है। दुर्भाग्य से उन सभी मामलों में जहां संक्षिप्त नाम का दूसरा पत्र राज्य का पहला अक्षर था, जिसकी अनुमति नहीं है (जब तक कि पत्र राज्य के नाम में दो बार प्रकट नहीं होता है।) इसलिए मैंने अभिव्यक्ति का उपयोग करने का निर्णय लिया s[0]+s[1,8]*999[x]और सबसे छोटा मान पाया। x जो काम किया वह 445 था।

परीक्षण कार्यक्रम, और आउटपुट में टिप्पणी की गई

f=->s{s[0]+            #Return character 0 of the input. Then..
(s[1,8]*999)[          #Concatenate 999 copies of the 8 characters starting at character 1 (or till end of name if state has less than 9 characters) 
   445].upcase         #Return character 445 of the result, converted to uppercase. 
}                     
"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($/).map{|i|p [f[i],i]}

["AA", "Alabama"]
["AL", "Alaska"]
["AI", "Arizona"]
["AS", "Arkansas"]
["CR", "California"]
["CA", "Colorado"]
["CT", "Connecticut"]
["DA", "Delaware"]
["FO", "Florida"]
["GO", "Georgia"]
["HA", "Hawaii"]
["IA", "Idaho"]
["IO", "Illinois"]
["ID", "Indiana"]
["IW", "Iowa"]
["KA", "Kansas"]
["KC", "Kentucky"]
["LA", "Louisiana"]
["MI", "Maine"]
["MA", "Maryland"]
["MH", "Massachusetts"]
["MG", "Michigan"]
["MO", "Minnesota"]
["MS", "Mississippi"]
["MU", "Missouri"]
["MN", "Montana"]
["NS", "Nebraska"]
["NE", "Nevada"]
["NM", "New Hampshire"]
["NR", "New Jersey"]
["NX", "New Mexico"]
["NO", "New York"]
["NC", "North Carolina"]
["ND", "North Dakota"]
["OI", "Ohio"]
["OO", "Oklahoma"]
["OR", "Oregon"]
["PL", "Pennsylvania"]
["RI", "Rhode Island"]
["SC", "South Carolina"]
["SD", "South Dakota"]
["TS", "Tennessee"]
["TX", "Texas"]
["UA", "Utah"]
["VR", "Vermont"]
["VN", "Virginia"]
["WG", "Washington"]
["WI", "West Virginia"]
["WS", "Wisconsin"]
["WO", "Wyoming"]

1
आपने यह नियम कहां देखा कि दूसरा अक्षर पहले जैसा नहीं हो सकता है? उदाहरण के लिए अलबामा के लिए "एए" भी था।
पाओलो एबरमन

3
The second letter must be one of the other letters of the state. अलबामा के लिए AA ठीक है क्योंकि अलबामा में दो A है। केके केंटकी के लिए ठीक है लेकिन उदाहरण के लिए कैनसस के लिए नहीं।
स्तर नदी सेंट


2

जावास्क्रिप्ट (ईएस 6), 46 बाइट्स

s=>s[0]+s[(s>'M')+1153%s.length].toUpperCase()

डेमो


1

रेटिना , 49 46 बाइट्स

\B.*(?=[A-Zflmpxz])|\B.*(?=[hru])

T`l`L
!`^..

इसे ऑनलाइन आज़माएं! यदि राज्य में दूसरा अपरकेस पत्र, या अक्षरों में से एक है flmpxz, तो वह कोड का दूसरा अक्षर बन जाता है। अन्यथा, यदि इसमें कोई एक अक्षर है hru, तो वह कोड का दूसरा अक्षर बन जाता है, अन्यथा राज्य के पहले दो अक्षरों का उपयोग करें।


0

जावास्क्रिप्ट (ईएस 6), 52 बाइट्स

s=>s[0]+(s=s.slice(2,9))[146%s.length].toUpperCase()


जावास्क्रिप्ट (ईएस 6), 52 बाइट्स

s=>s[0]+(s[8]||s[s[1]=='o'?5:4]||s[2]).toUpperCase()


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

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