PronunciationSort ™


24

हम सभी अलग-अलग फैंसी सॉर्टिंग एल्गोरिदम के बारे में जानते हैं, लेकिन इनमें से कोई भी हमें एक तरह से नंबर नहीं देता है जो उच्चारण करना आसान है। इसे मापने के लिए, मैं संख्याओं की सूचियों को क्रमबद्ध करने के लिए सबसे सामान्य तरीका, उच्चारणSort ™ का उपयोग करता हूं।

उच्चारण

संख्याओं के उच्चारण के लिए आधिकारिक नियम (इस चुनौती में) यह है कि अंकों का एक-एक करके उच्चारण किया जाता है, और परिणामी स्ट्रिंग को लेक्सिकोग्राफिक क्रम में क्रमबद्ध किया जाता है। एक उदाहरण के रूप में, इसका मतलब है कि संख्या 845का उच्चारण किया जाता है "eight four five", और तदनुसार क्रमबद्ध किया जाना चाहिए।

ऋणात्मक संख्या

नकारात्मक संख्याओं का उच्चारण शब्द के बहाने किया जाता है "minus"। इस प्रकार, के -23रूप में उच्चारित किया जाता है "minus two three"। ध्यान दें कि यह उत्पादन के बीच में समाप्त होने वाली नकारात्मक संख्याओं का कारण बनता है, 4(चार) और 9(नौ) के साथ शुरू होने वाली संख्याओं के बीच सही है ।

एक गाइड के रूप में, उच्चारण ™ के लिए शब्दों का आधिकारिक क्रम है:

  • आठ
  • पंज
  • चार
  • ऋण
  • नौ
  • एक
  • सात
  • छह
  • तीन
  • दो
  • शून्य

अर्थात्,

8, 5, 4, -, 9, 1, 7, 6, 3, 2, 0

इनपुट

रेंज में पूर्णांकों की एक सूची [999,999] , जिसमें अधिकतम 100 तत्व हैं। तार की सूची के रूप में इनपुट की अनुमति नहीं है। यदि आपकी भाषा सूची के रूप में इनपुट का समर्थन नहीं करती है, तो अलग-अलग पूर्णांकों के रूप में इनपुट देने की अनुमति है।

इनपुट में कोई भी अमान्य नंबर या 0 से शुरू होने वाली कोई भी संख्या नहीं होगी (केवल संख्या को छोड़कर)। इनपुट आमतौर पर सॉर्ट नहीं किया जाएगा, इसे किसी भी क्रम में दिया जा सकता है।

उत्पादन

एक ही पूर्णांक, उच्चारणSort ™ क्रम में। ध्यान दें कि क्रमांकन प्राप्त करने के लिए संख्याओं को केवल उनके उच्चारण में बदला जाना चाहिए, आउटपुट में कोई तार नहीं होना चाहिए।

उदाहरण

उदाहरणों के लिए, मध्य चरण (कोष्ठक में लिपटे) केवल एक मार्गदर्शक के रूप में कार्य करता है, और आउटपुट का हिस्सा नहीं है।

[1, 2, 3] -> (['one', 'two', 'three']) -> [1, 3, 2]
[-1, 0, 1, 2] -> (['minus one', 'zero', 'one', 'two']) -> [-1, 1, 2, 0]
[-100, 45, 96] -> (['minus one zero zero', 'four five', 'nine six']) -> [45, -100, 96]
[11, 12, 13, 134, 135] -> (['one one', 'one two', 'one three', 'one three four', 'one three five']) -> [11, 13, 135, 134, 12]

आपके परिणामों को सत्यापित करने के लिए एक स्क्रिप्ट भी है ।


5
"एक" (उच्चारण "जीता") दो और शून्य से पहले क्यों नहीं आता है?
बेन मिलर -

3
@BenMiller मुझे याद नहीं आ रहा है अगर यह वह था जो सैंडबॉक्स में टिप्पणी की थी, लेकिन उस टिप्पणी ने मुझे देजा वू दिया। इसका उत्तर देने के लिए, मैंने इस पर विचार किया, लेकिन मैं स्पेलिंग चर्चा से बचने के लिए वर्तनी के साथ गया (उदाहरण के लिए "दो" बनाम "भी", "जीता" या "वान")
अधिकतम

17
तो यह वास्तव में "
सर्वनाम

3
ओह। मैं उम्मीद कर रहा था कि वे उच्चारण करने में कितने कठिन होंगे ...
एनएच।

2
इस चुनौती का वास्तव में नाम बदला जाना चाहिए, क्योंकि यहां छंटाई का उच्चारण के साथ कोई लेना- देना नहीं है। यदि यह उच्चारण-आधारित था, तो यह बहुत अधिक जटिल होगा (उदाहरण के लिए, चार पांच से पहले आ सकते हैं यदि आप द्विध्रुवीय haɪ⟩ से पहले मोनोफथ you सॉर्ट करते हैं, लेकिन ओ से पहले ए-व्युत्पन्न aaa सॉर्ट करने पर चार से पहले पांच -Dived ⟨ɔ⟩ - मेरे ज्ञान में, उच्चारण के लिए कोई स्थापित क्रमबद्ध क्रम नहीं है, न तो आईपीए में और न ही किसी अन्य योजना में)।
Janus Bahs Jacquet

जवाबों:


8

05AB1E (विरासत) , 15 बाइट्स

Σε•Koéa₃•'-3ǝsk

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

व्याख्या

Σ                 # sort by
 ε                # apply to each
             sk   # index of the element in
  •Koéa₃•         # "85409176320"
         '-3ǝ     # with "-" inserted at index 3

संपीड़ित पूर्णांक में एक बग प्रतीत होता है •ĆU‘•.. यह मैपिंग के दौरान एक नई रेखा जोड़ता है / जो भी कारण के लिए छंटाई करता है। Σ•ĆU‘•"54-ÿ"sSkअगर मैं उस अजीब बग के लिए नहीं था, तो मैं एक 15-बाइट विकल्प पर काम कर सकता था .. अगर मैं •ĆU‘•शाब्दिक में बदलूं तो 9176320 यह ठीक काम करता है ..
केविन क्रूज़सेन

1
@ केविनक्रूजसेन: यह अजीब है। तुम्हारा …54-ìभी 14 के साथ होगा
Emigna

@ केविनक्रूजसेन: आप Σ•RT‹•Á…54-ìsSk15 के लिए कर सकते हैं
एमिग्ना

•t∍ýJ•'-ìÁÁयह भी काम करेगा
Emigna


8

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

ṾV€ị“Þ⁽3Z6»µÞ

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

एक मोनडिक लिंक पूर्णांक की एक सूची को स्वीकार करता है जो पूर्णांक की एक सूची देता है।

कैसे?

पूर्णांक के अंकों के क्रमिक मानों (जहां --1 का "अंक" है) द्वारा मैजिक स्ट्रिंग "मृगांड लिक्स" में उनके 1-आधारित और मॉड्यूलर इंडेक्स पर पात्रों का उपयोग करके स्ट्रिंग में परिवर्तित किया जाता है।

सॉर्ट प्रभावी रूप से अल्फ़ाबेटिक है जहां एक अंतरिक्ष को किसी भी पत्र से कम माना जाता है।

संपीड़न में प्रयुक्त जेली के शब्दकोशों का निरीक्षण करके मैजिक स्ट्रिंग "म्यूरिन लिक्स" पाया गया। 11 अक्षरों के कोई शब्द नहीं हैं जो आवश्यकताओं को संतुष्ट करते हैं (और कोई भी ऐसा नहीं है जो डी-डुप्लीकेशन पर होगा)। चिट्ठियों से पहले एक स्पेस सॉर्ट के बाद अगली सबसे स्पष्ट पसंद लंबाई सात का शब्द है और उसके बाद एक स्पेस तीन लंबाई वाला शब्द है। "मृगनय" और "लिक्स" एकमात्र संतोषजनक संयोजन है, हालांकि एक स्थान के बिना अन्य संभव हो सकता है (उदाहरण के “£Py:ƥ»लिए "मर्गेनोलीक्स" जो एक ही बाइट-काउंट के लिए काम करता है)

ṾV€ị“Þ⁽3Z6»µÞ - Link: list of integers
            Þ - sort by:
           µ  -   the monadic link: -- i.e. do this for each integer, then sort by that
Ṿ             -     unevaluate  (e.g. -803 -> ['-','8','0','3'])
 V€           -     evaluate each as Jelly code  (e.g. ['-','8','0','3'] -> [-1,8,0,3])
    “Þ⁽3Z6»   -     "murgeon lix" (compression of words in Jelly's dictionary plus a space)
   ị          -     index into (1-indexed & modular) (e.g. [-1,8,0,3] -> "i xr")

पिछला @ 15 बाइट्स :

ṾV€ị“¡Zo⁶’Œ?¤µÞ

यहां “¡Zo⁶’Œ?¤प्राकृतिक संख्याओं का पहला क्रमांकन पाया गया है जो 21,340,635 सूचकांक में रहता है जब संख्याओं के सभी क्रमबद्धता को शाब्दिक रूप से क्रमबद्ध किया जाता है - जो है [6,10,9,3,2,8,7,1,5,4,11]। ( “¡Zo⁶’21340635 का आधार 250 प्रतिनिधित्व है, जबकि Œ?गणना और ¤समूह इन निर्देशों को एक साथ करता है)


स्पष्टीकरण के साथ भी, मैं बहुत चालाक नहीं हूँ। बहुत बढ़िया समाधान!
20

छोटा संस्करण शायद समझना भी आसान है!
जोनाथन एलन

7

पर्ल 6 , 30 बाइट्स

*.sort:{TR/0..9-/a5982176043/}

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

जीबी के रूबी समाधान का पोर्ट।

मूल 35 बाइट संस्करण

*.sort: (~*).uninames».&{S/\w*.//}

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

प्रत्येक संख्या को एक स्ट्रिंग में परिवर्तित करें, प्रत्येक वर्ण का यूनिकोड नाम प्राप्त करें, पहले शब्द ("DIGIT" या "HYPHEN") को छांटें, फिर छाँटें।


6

जावास्क्रिप्ट (स्पाइडरमोनी) , 69 बाइट्स

a=>a.sort((a,b)=>(g=n=>[...n+''].map(c=>':598217604'[c]||3))(a)>g(b))

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


ऐसा लगता है कि आप इसे हटा सकते हैं +'', यह देखकर कि आप स्ट्रिंग्स के एक सरणी के रूप में इनपुट ले रहे हैं।
झबरा

@ शैगी मैं अब तार नहीं ले रहा हूँ, क्योंकि मुझे यकीन नहीं है कि यहाँ अनुमति है।
अरनुलद

आह ... आप सही कह रहे हैं। वह मेरे समाधान के लिए बाइट्स के एक जोड़े को जोड़ने वाला है।
झबरा

6

K (ngn / k) , 21 20 बाइट्स

{x@<"54-9176320"?$x}

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

{ } तर्क के साथ कार्य करें x

$ तार के रूप में प्रारूपित करें

""?263"8"

< क्रमबद्ध क्रमबद्ध-बढ़ते क्रमांकन

x@ उन सूचकांकों पर तर्क


6

पायथन 3, 68 बाइट्स 67 बाइट्स 64 बाइट्स

lambda x:sorted(x,key=lambda y:[*map('54-9176320'.find,str(y))])

बिल्ट-इन का उपयोग करता है sortedकुंजी के लिए एक अनाम लंबोदर के साथ फ़ंक्शन का । सॉर्ट क्रम को हार्ड-कोड करें और इनपुट सूची में प्रत्येक मान की क्रमबद्धता क्रम सूची में उसकी स्थिति से तुलना करें।

संपादित करें: पैरामीटर नहीं मिलने पर रिटर्न का 8लाभ उठाने के लिए सॉर्ट सूची से हटाकर 1 बाइट को बचाया । अधिकतम धन्यवाद।str.find-1

Edit2: निर्माता के listबजाय शाब्दिक में तारांकित अनपैकिंग सिंटैक्स का उपयोग करके 3 बाइट्स सहेजे listगए

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


1
क्या आप पहले 8 तार में निकाल सकते हैं? पायथन रिटर्न -1 के रूप में अगर सबस्ट्रिंग नहीं मिला है।
अधिकतम

@ मक्सब गुड कैच। संपादित।
mypetlion


5

पायथ, 17 16 बाइट्स

oxL"54-9176320"`

इसे यहाँ ऑनलाइन आज़माएँ , या यहाँ पर सभी परीक्षण मामलों को सत्यापित करें

oxL"54-9176320"`NQ   Implicit: Q=eval(input())
                     Trailing N, Q inferred
o                Q   Order the elements of Q, as N, using...
               `N      Convert N to string
 xL                    Get the index of each character of that string...
   "54-9176320"        ... in the lookup ordering
                       (if character missing, returns -1, so 8 is still sorted before 5)

@ स्ट्रिंग और उनके K उत्तर के लिए 1 बाइट का धन्यवाद , शब्दकोश स्ट्रिंग की शुरुआत से 8 को छोड़ कर


4

जाप, 19 बाइट्स

ñ_s ®n"54-9176320

कोशिश करो

  • ETHproductions के लिए धन्यवाद 2 बाइट्स सहेजें ।

अच्छा समाधान! तार की सूची के रूप में इनपुट दुर्भाग्य से अनुमति नहीं है।
अधिकतम

आप कोस से कुछ बचा सकता है S.n(s): ñ_s ®n"54-9176320(जाहिरा तौर पर S.n(s)बिल्कुल के रूप में एक ही है s.b(S)के लिए S, को छोड़कर यह रिटर्न लंबाई 1 से 0के स्थान पर -1)
ETHproductions

अच्छी चाल, @ETHproductions, धन्यवाद :) मुझे भविष्य के लिए याद रखना होगा।
झबरा

3

रेटिना 0.8.2 , 36 बाइट्स

T`-d`3:598217604
O`
T`3:598217604`-d

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण सूट शामिल है। स्पष्टीकरण:

T`-d`3:598217604

:10 वीं स्थिति का उपयोग करके, उच्चारण क्रम में उनकी स्थिति के लिए ऋण चिह्न और अंकों का अनुवाद करें ।

O`

उच्चारण क्रम में क्रमबद्ध करें।

T`3:598217604`-d

मूल माइनस साइन और अंकों पर वापस ऑर्डर का अनुवाद करें।



3

आर , 58 बाइट्स

function(x)x[order(mapply(chartr,"-0-9","dkfjicbhgae",x))]

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

इनपुट उन नंबरों की एक सूची है जो अंतर्निहित रूप से स्ट्रिंग के रूप में परिवर्तित होते हैं chartrorderउसके बाद उस क्रम को पुनः प्राप्त करने के लिए lexigographic क्रम का उपयोग करता है जिसके द्वारा मूल सूची को सॉर्ट किया जाना चाहिए।


3

जावा (JDK 10) , 123 बाइट्स

l->l.sort(java.util.Comparator.comparing(n->{var r="";for(var c:(""+n).split(""))r+=11+"54-9176320".indexOf(c);return r;}))

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

यह एक भोली जावा कार्यान्वयन है। बहुत गोल्फ होना चाहिए।

क्रेडिट


1
.chars-IntStream और .reduceएक नियमित लूप में बदलने से 2 बाइट्स बचते हैं n->{var r="";for(var c:(""+n).split(""))r+=10+"854-9176320".indexOf(c);return r;}:। इसके अलावा, एक और बाइट को बदलकर बचाया जा सकता 10+"85है 20+"5, क्योंकि .indexOfअंकों के 8बाद -1 में परिणाम होगा। इसे ऑनलाइन प्रयास करें 123 बाइट्स
केविन क्रूज़सेन

2

जावास्क्रिप्ट (स्पाइडरमोनी) , 87 73 बाइट्स

a=>a.sort((p,q,F=b=>[...""+b].map(x=>"54-9176320".search(x)))=>F(p)>F(q))

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

धन्यवाद @Arnauld यह बताने के लिए कि स्पाइडरमोंकी में सॉर्ट स्थिर है, इसलिए ||-(F(q)>F(p))अंत में भाग को गिराया जा सकता है।



2

सी ++, 353 बाइट्स

यह एक कॉमेडी प्रविष्टि है, लेकिन मैं समय बर्बाद कर रहा था और इसे लिखा था, इसलिए मैं इसे पोस्ट नहीं कर सकता ... एक चकली का आनंद लें, और मुझे बताएं कि क्या कोई स्थान-बचतकर्ता है जो मुझे याद आया!

#include<algorithm>
#include<iostream>
#include<iterator>
#include<numeric>
#include<string>
using namespace std;auto f(int i){auto s=to_string(i);for(auto&c:s)c='A'+"854-9176320"s.find(c);return s;}int main(){int a[100];auto b=begin(a);auto e=end(a);iota(b,e,-50);sort(b,e,[](int l,int r){return f(l)<f(r);});copy(b,e,ostream_iterator<int>(cout," "));}

आउटपुट:

५ ४ ४ 40 ४५ ४४ ४ ९ ४ ९ ४ 46 ४२ ४२ ४० -५० -४५ -४ 44 -४४ -४४ -४४ -४४ -४४ -४४ -४ 44 -४६ -४६ -४३ -४२-९ -४० -१ ९ -१15 -१५ - 14 -19 -11 -17 -16 -13 -12 -10 -7 -6 -3 -38 -35 -34 -39 -31 -37 -37 -36 -33 -32 -30 -30 -2 -25 -24 - २ ९ -२१ -२ 9 -२६ -२६ -२३ -२२ ९९ १ १ 6 १५ १४ १४ १ ९ ११ १६ १६ १२ १२ १० १-१ 6 ३ ३ ३ ३ 37 ३४ ३४ ३ ९ ३ 35 ३ 35 ३ ३ ३ ३ ३ ३ ३ २ २ २ २ २ २ २ २ २ २ २ २ २ २ २ २ २ २०


मैं देख रहा हूँ कि आप आदर्श वाक्य से जीते हैं "अगर मैं प्रेस नहीं करता तो वहाँ डिबग करने के लिए बहुत कम लाइनें हैं"
अधिकतम

1
अरे, मैं इस भाषा में तुच्छ व्हाट्सएप नहीं खरीद सकता! ऐसा करना मजेदार है, बाकी समय के रूप में, कुछ चीजें मुझे दूसरों के कोड को खोलने के रूप में गुस्सा करती हैं, जो स्पष्ट रूप से सोचते हैं कि एक भयावह अखंड दीवार लिखने से वे अधिक चालाक लगेंगे, और / या सक्रिय रूप से डॉक भुगतान कर रहे हैं हर नई लाइन के लिए वे टाइप करते हैं।
अंडरस्कोर_ड


@MaxYekhlakov कूल, यह विचार करने के लिए धन्यवाद! मुझे थोड़ा और पढ़ने के बाद एहसास हुआ; ऐसा लगता है कि मुझे आवश्यक रूप से एक पूर्ण संकलन कार्यक्रम प्रदान करने की आवश्यकता नहीं है, लेकिन इसके बजाय केवल वे फ़ंक्शन हैं जो निर्दिष्ट इनपुट और आउटपुट को संसाधित करेंगे। डी 'ओह!
अंडरस्कोर_ड

2

मैथमेटिका, 68 बाइट्स

SortBy[If[# < 0,"m ",""]<>StringRiffle@IntegerName@IntegerDigits@#&]

समारोह। पूर्णांक की सूची को इनपुट के रूप में लेता है और क्रमबद्ध सूची को आउटपुट के रूप में लौटाता है। बस के साथ प्रत्येक संख्या के अंकों को अलग करता हैIntegerDigits , प्रत्येक अंक को "zero","one" आदि, के साथ IntegerName, एक अलग-अलग स्ट्रिंग में सूची को धर्मान्तरित करता है StringRiffle, "m "यदि संख्या नकारात्मक है, और इस स्ट्रिंग के आधार पर सॉर्ट करता है। वास्तव में, यह सबसे छोटा तरीका है जो मुझे मिल सकता है, क्योंकि गणितज्ञ केवल मूल रूप से एक ही लंबाई की सूचियों के लिए लेक्सिकोग्राफिक छँटाई का उपयोग करता है; इस प्रकार, एक दृष्टिकोण के आधार पर 854-9176320और अधिक बाइट्स लेने पर आधारित है क्योंकि स्ट्रिंग फ़ंक्शन इतने महंगे हैं।


हमेशा बिल्डिंस के संयोजन के लिए गणितज्ञ पर भरोसा करें। चतुर समाधान!
अधिकतम

1

05AB1E , 15 14 बाइट्स

Σ•ĆU‘•…54-ìsSk

-1 बाइट @ इग्निना के लिए धन्यवाद ।

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

स्पष्टीकरण:

Σ                 # Sort by:
 •ĆU‘•            #  Push the compressed integer 9176320
      54-        #  Push the string "54-"
          ì       #  Prepend this string before the integer: "54-9176320"
           s      #  Swap so the current number to sort is at the top of the stack
            S     #  Convert it to a list of characters
             k    #  Check for each its index in the string (resulting in -1 for '8')

मेरा 05AB1E टिप देखें (अनुभाग में बड़े पूर्णांक कैसे संपीड़ित करें ) यह समझने के लिए कि क्यों •ĆU‘•है 9176320

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