इंटेग्रेटर्स को इंपैक्ट करें


19

इंटेग्रेटर्स को इंपैक्ट करें

दिए गए संख्याओं के सेट के लिए, उन्हें वर्णमाला के क्रम में रखें, जब उन्हें वर्तनी दिया जाता है (यानी 1: एक, 2: दो, 90: नब्बे, 19: उन्नीस)। आपका कोड रेंज के लिए काम करना चाहिए [-999999, 999999]। आउटपुट में संख्याओं के बीच परिसीमन होना चाहिए। एक अंतरिक्ष काम करेगा, जैसा कि नीचे दिए गए उदाहरणों में दिखाया गया है। इनपुट पूर्णांक की एक सरणी हो सकती है, सीमांकित संख्याओं की एक स्ट्रिंग, या हालांकि आप फिट दिखते हैं। सभी पूर्णांक अद्वितीय माने जाते हैं।

इस चुनौती के प्रयोजनों के लिए संख्याओं को हाइफ़न नहीं किया गया है और किसी भी अन्य वर्णों से पहले रिक्त स्थान वर्णानुक्रम में हैं। नकारात्मक संख्याओं को शब्द का उपयोग करके व्यक्त किया जाता है minus। उदाहरण के लिए, fourपूर्ववर्ती होगा four thousandऔर -40स्ट्रिंग का उपयोग करके संख्या को क्रमबद्ध किया जाएगा minus forty। मान लें कि सभी संख्याओं में केवल संख्या शब्द शामिल होंगे और कोई संयुग्मन (जैसे two thousand forty twoइसके बजाय उपयोग two thousand and forty two)।


परीक्षण के मामलों

एकल अंक पूर्णांक:

इनपुट:

1, 2, 3, 4, 5

आउटपुट:

5, 4, 1, 3, 2

एकाधिक अंक पूर्णांक:

इनपुट:

-1002, 5, 435012, 4, 23, 81, 82

आउटपुट:

81, 82, 5, 4, 435012, -1002, 23

शब्दों के बीच रिक्त स्थान, कोई हाइफ़न, कॉमा या "और":

इनपुट:

6, 16, 60, 64, 600, 6000, 60000, 60004, 60008, 60204, 60804

आउटपुट:

6, 600, 6000, 16, 60, 64, 60000, 60008, 60804, 60004, 60204

याद रखें, यह , इसलिए सबसे कम बाइट्स वाला कोड जीत जाता है। कोई खामियों की अनुमति नहीं!


यहाँ प्रासंगिक सैंडबॉक्स पोस्ट का लिंक दिया गया है।
वॉब्स

क्या इनपुट में कभी भी एक से अधिक पूर्णांक होंगे?
ETHproductions 20

@ETHproductions नहीं, यह नहीं होगा। मैं उस प्रश्न में निर्दिष्ट करूँगा।
वॉब्स

8
PPCG में आपका स्वागत है। अच्छा अवतार। : डी नीस पहला सवाल।
AdmBorkBork

@TimmyD धन्यवाद! मैं PowerShell के लिए आगे देख रहा हूँ सब कुछ मैं यहाँ के आसपास कर सकते हैं।
शावक

जवाबों:


5

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

let f =

a=>a.sort((x,y)=>!x-!y||(X=q(x),Y=q(y),X>Y)-(X<Y),q=n=>n<0?"L"+q(-n):n>999?q(n/1e3)+"Z"+q(n%1e3):n>99?q(n/100)+"K"+q(n%100):n>19?"  cYHFVSCO"[n/10|0]+q(n%10):"0PdaIGTQAMWDbXJEURBN"[n|0])

let g = a => console.log(`[${f(a)}]`)

g([1,2,3,4,5])
g([-1002,5,435012,4,23,81,82])
g([0,1000,1100])
<input id=I value="1 2 3 4 5"><button onclick="g(I.value.match(/\d+/g)||[])">Run</button>

मूल विचार प्रत्येक इनपुट नंबर को एक छोटी स्ट्रिंग में बदलना है जो अन्य सभी संख्या-स्ट्रिंग जोड़े की तुलना में सही स्थिति में है। यहां इस्तेमाल किया गया शब्दकोश है: (स्निपेट को न चलाएं; यह सिर्फ लंबी सूची को छिपाने के लिए उपयोग किया जाता है।)

यह प्रत्येक संख्या को उसके शाब्दिक रूप से सही स्थिति में मैप करने का एक बहुत संक्षिप्त तरीका बनाता है। यही कारण है कि पुनरावर्ती qकार्य करता है:

q(-X)        => "L" + q(X)
q(XYYY)      => q(X) + "Z" + q(YYY)
q(XYY)       => q(X) + "K" + q(YY)
q(XY >= 20)` => "  cYHFVSCO"[X] + q(Y)
q(X)         => "0PdaIGTQAMWDbXJEURBN"[X]

0स्ट्रिंग की शुरुआत में है कि जैसे 100 (सुनिश्चित करने के लिए है one hundred, के लिए परिवर्तित PK0) से पहले सॉर्ट की गई है 101( one hundred one, के लिए परिवर्तित PKP)। यह एक विषम परिदृश्य बनाता है जहां 0 ( zero) सरणी के सामने की ओर सॉर्ट किया जाता है, इसलिए इसके चारों ओर पाने के लिए, सॉर्टिंग फ़ंक्शन में हम पहले किसी भी शून्य को दाईं ओर सॉर्ट करते हैं !x-!y||(...


ऐसा लगता है कि यह काम नहीं करता है [1100, 1000]। मुझे उम्मीद है कि आउटपुट होगा 1000 (one thousand), 1100 (one thousand one hundred), लेकिन आउटपुट इनपुट के समान ही है।
दूध

@milk हम्म ... मुझे यकीन नहीं है कि ऐसा क्यों होता है, लेकिन मैं इस पर गौर करूंगा।
ETHproductions

@milk आह, के 1000रूप में पार्स किया जा रहा है one thousand zero; मैं इस पल को ठीक कर दूँगा। 0हालांकि हमें इसका समर्थन करना चाहिए ? यह एक अनूठा मामला है जो मेरे कोड में 15 बाइट या तो जोड़ देगा।
ETHproductions

11

सूचना 7, 214 201 118 बाइट्स

सूचना 7 गोल्फ के लिए एक बहुत ही भयानक भाषा है, इसलिए मैं इसे यहां मौका देना चाहता था।

इंडेंटेशन को टैब ( \t) वर्णों का उपयोग करना चाहिए , लेकिन HTML उन्हें पसंद नहीं करता है। इसके विपरीत, सूचित करना इंडेंटेशन के लिए रिक्त स्थान को पसंद नहीं करता है, इसलिए यदि आप इसका परीक्षण करने के लिए यहां से कोड कॉपी-पेस्ट करते हैं, तो आपको टैब के साथ रिक्त स्थान को बदलना होगा। या मार्कडाउन स्रोत से केवल कॉपी-पेस्ट करें।

golfed:

एक्स को:
    तालिका 1 के माध्यम से दोहराएं:
        अब क्यू प्रविष्टि "" शब्दों में आर प्रविष्टि है ";
    क्रम-क्रम में तालिका 1 को क्रमबद्ध करें;
    "[तालिका 1 में आर]"।

इनपुट एक सूचना तालिका होनी चाहिए, जैसे ( \tस्तंभों के बीच):

तालिका एक
R (संख्या) Q (पाठ)
-1002
5
435,012
4
23
81
82

आउटपुट:

81, 82, 5, 4, 435012, -1002, 23

यह फ़ंक्शन एक बार तालिका के माध्यम से चलता है, एक नए कॉलम में प्रत्येक संख्या का एक पाठीय प्रतिनिधित्व करता है। फिर यह पाठ स्तंभ के अनुसार तालिका पंक्तियों को क्रमबद्ध करता है; सूचना में, तार lexicographically हल कर रहे हैं। अंत में, यह नए ऑर्डर में मूल कॉलम को प्रिंट करता है। आसानी से, सूचित करें 7 का "क्रूड लेकिन कभी-कभी उपयोगी" टेबल कॉलम को प्रिंट करने के लिए प्रारूप अल्पविराम से अलग हो जाता है, बिल्कुल अनुरोध के रूप में।

Ungolfed, बॉयलरप्लेट दिखा रहा है कि फ़ंक्शन कैसे कॉल करें:

वर्णमाला क्रम में संख्याओं को मुद्रित करने के लिए:
    क्रमबद्ध संख्याओं की तालिका के माध्यम से दोहराएं:
        अब नाम प्रविष्टि "[शब्दों में सूचकांक प्रविष्टि]" है;
    नाम क्रम में क्रमबद्ध संख्याओं की तालिका को क्रमबद्ध करें;
    "[क्रमबद्ध संख्याओं की तालिका में सूचकांक स्तंभ]"।

क्रमबद्ध संख्याओं की तालिका
सूचकांक (संख्या) नाम (पाठ)
-1002
5
435,012
4
23
81
82

एक कमरा है।
जब प्ले शुरू होता है: संख्याओं को वर्णानुक्रम में प्रिंट करें।

1
मैं इससे थोड़ा उलझन में हूं। है wordsसंख्या के संस्करणों, में निर्मित वर्तनी बाहर के संदर्भ में सूचित 7?
पावेल

1
@ फैवल वास्तव में! शब्दों में "(संख्या)" संख्या के एक पाठीय प्रतिनिधित्व के साथ एक स्ट्रिंग देता है। यह नकारात्मक संख्याओं के लिए "माइनस" का उपयोग आसानी से करता है, और जब यह शब्दों के बीच हाइफ़न डालता है, तो यह सभी अक्षरों से पहले हाइफ़न को लगातार और वर्णमाला करता है (इसलिए अंतिम परिणाम समान होता है)।
ड्रेकनिस

2
भाषा विकल्प के लिए +1। मुझे जाँच करनी होगी, लेकिन मुझे संदेह है कि कुछ गोल्फ के अवसर बाकी हैं, हालाँकि; उदाहरण के लिए, क्या पार्सर को वास्तव में उन सभी "लेखों" की आवश्यकता होती है? और आपको ओपी से पूछना होगा, लेकिन मुझे कोई स्पष्ट कारण नहीं दिख रहा है कि "और" एक वैध परिसीमन नहीं होगा। यदि नहीं, तो भी एक ही स्थान को स्पष्ट रूप से अनुमति दी जाती है, इसलिए बस say "[R entry] "पर्याप्त होना चाहिए।
इल्मरी करोनें

मैं कहता हूँ "और" अंत में ठीक है। मैंने यह नहीं कहा कि परिसीमन को एकरूप होना था, इसलिए यह एक पूर्ण स्वीकार्य उत्तर है। अगर मैं सबसे दिलचस्प जवाब के लिए अंक दे सकता हूं, तो मैं आपको दे दूंगा। मैं वास्तव में इस भाषा की पठनीयता का आनंद लेता हूं, यहां तक ​​कि गोल्फ भी। अच्छी नौकरी!
शावक

अंत में मुझे Inform7 के साथ थोड़ा खेलने का मौका मिला, और आपकी प्रविष्टि को केवल 118 बाइट्स के साथ फिर से गोल्फ करने में कामयाब रहा। चूंकि टिप्पणियों में सूचना कोड पोस्ट करने से बहुत अच्छा काम नहीं होता है, इसलिए मैंने आगे बढ़कर इसे सीधे आपके उत्तर में संपादित कर दिया। मुझे आशा है कि आपको कोई आपत्ति नहीं है, यदि आप चाहें तो मेरे संपादन को किसी भी तरह से वापस करने और / या संपादित करने के लिए स्वतंत्र महसूस करें।
इल्मरी करोनें

4

गणितज्ञ, 67 बाइट्स

SortBy[#,#~IntegerName~"Words"~StringReplace~{","->"","-"->""}&]&

अपने तर्क के रूप में पूर्णांकों की एक सूची ले लो और इसके मूल्य के रूप में पूर्णांकों की सूची लौटाएं। #~IntegerName~"Words"एक अंतर्निहित है जो अंग्रेजी में अपने नाम के साथ एक पूर्णांक बदलता है। IntegerNameकभी-कभी इसके आउटपुट में कॉमा और हाइफ़न होते हैं, इसलिए StringReplaceकॉल से छुटकारा मिल जाता है। (दुख की बात है कि हाइफ़न वास्तव में UTF-8 में 3-बाइट वर्ण 8208 है।) फिर SortByसंशोधित पूर्णांक नाम के मूल्य के अनुसार मूल सूची को वर्णानुक्रम में क्रमबद्ध करें।

एक अच्छा संयोग: इसके आउटपुट के बजाय का IntegerNameउपयोग करता है - लेकिन किसी भी अनुमत संख्या के नाम में दिखाई देने वाला कोई शब्द उन दो शब्दों के बीच वर्णानुक्रम में नहीं है, इसलिए कोई प्रतिस्थापन की आवश्यकता नहीं है!negativeminus

(मुझे याद दिलाने के लिए ngenisis के लिए टोपी टिप Sortby।)


कुडोस! मैं इस समाधान को पाने के बहुत करीब आ गया था, लेकिन वह पानी का छींटा मुझे सिरदर्द दे रहा था!
ngenisis

क्या यहां आपका जवाब वास्तव में सही हाइफ़न का उपयोग करता है? अगर मैं आपके यहां जो कुछ भी गणित में कॉपी करता हूं, वह हाइफ़न से प्रतिस्थापित नहीं करता है IntegerName। वोल्फ्राम प्रलेखन कहता है कि यह यूनिकोड चरित्र 2010 है
ngenisis

शायद नहीं, तब-मैंने इस उत्तर में सही हाइफ़न प्राप्त करने की कोशिश की, लेकिन लगता है कि मैं सफल नहीं हुआ।
ग्रेग मार्टिन

मैंने आपका उत्तर आधे में काट दिया;)
जे। एंटोनियो पेरेज़

और फिर कुछ ... आप स्ट्रिंग में अनावश्यक संशोधन करते हैं।
जे। एंटोनियो पेरेज़

4

बाश + ग्नू के बर्तन + bsdgames, 52

  • 4 बाइट्स @izabera की बदौलत बच गईं।
sed 's/.*/echo `echo &|number`:&/e'|sort|sed s/.*://

I / O न्यूलाइन-सीमांकित लाइनें हैं।

  • पहली sed अभिव्यक्ति प्रत्येक संख्यात्मक संख्या को एक शेल कमांड के साथ बदल देती है जो संख्या के शब्द रूप (जैसा कि bsdgamesnumber उपयोगिता द्वारा दिया गया है ) को आउटपुट करता है , इसके :बाद संख्या का संख्यात्मक रूप होता है।
  • यह तब sortएड है।
  • फिर दूसरी sedस्ट्रिप्स में और उसके सहित प्रमुख पात्र :, संख्यात्मक रूप को छोड़ते हुए आवश्यकतानुसार छंटते हैं।

numberसही ढंग से "माइनस" संभालता है, और इसका आउटपुट विशिष्ट प्रारूप के करीब है जो sortआवश्यकतानुसार काम करता है। यह "चौंसठ" के बजाय "चौंसठ" आउटपुट करता है, लेकिन यह सॉर्टिंग परिप्रेक्ष्य से कोई फर्क नहीं पड़ता।

Bsdgames पैकेज को स्थापना की आवश्यकता हो सकती है:

sudo apt-get install bsdgames

sedऔर sortउपयोगिताओं लगभग निश्चित रूप से अपने distro में पहले से ही कर रहे हैं।


-t:बेकार है और आप उपयोग कर सकते हैंnumber<<<&
izabera

@izabera हाँ - धन्यवाद - मैंने हटा दिया -t:। हालांकि, सेड की eवैल फीचर कमांड का उपयोग करती है sh, इसलिए बैश फीचर <<<काम नहीं करेंगे।
डिजिटल ट्रामा

यह तब तक ठीक काम करता है जब तक आपका श

@ हिजाबेरा नोप - अगर बैश शुरू हो गया shतो जितना संभव हो सके पॉज़िक्स श का अनुकरण करने की कोशिश करता है, जिसका अर्थ है कि बैशम जैसे कि <<<बंद कर दिया जाता है। GNU sedकी eवैल सुविधा कमांड के साथ शुरू होती है /bin/sh -c ...और नहीं /bin/bash -c ...। क्या आपने यह कोशिश की है?
डिजिटल ट्रामा

बैश कभी बंद <<<नहीं होता,
पॉज़िक्स

1

अजगर + विभक्ति, 97 91 89 बाइट्स

from inflect import*
a={x:engine().number_to_words(x)for x in words}
sorted(a,key=a.get)

पूर्णांक / सरणी प्रतिनिधित्व में पूर्णांकों inflectके wordsसरणी को बदलने के लिए पुस्तकालय का उपयोग किया । K / v जोड़े के एक शब्दकोश में संग्रहित किया गया जहां कुंजियां संख्यात्मक प्रतिनिधित्व थीं और मान स्ट्रिंग प्रतिनिधित्व थे। मानों द्वारा क्रमबद्ध कुंजी की सूची लौटा दी।

संपादित करें: 5 और 3 बाइट्स सहेजे गए, ETHproductions और Alex.S की बदौलत!


PPCG में आपका स्वागत है! आप रिक्त स्थान हटाकर इसे गोल्फ कर सकते हैं ; उदाहरण के लिए, दूसरी पंक्ति हो सकती है a={x:inflect.engine().number_to_words(x)for x in words}
ETHproductions 4

आप दूसरी पंक्ति में दो बाइट का उपयोग करके from inflect import*और फेंककर बचा सकते हैं inflect.
एलेक्स।

काश, ऐसा लगता है कि यह भी सूची 40, 44, 40000, 40804, 40004, 40204 (जो उस क्रम में रहना चाहिए) को सही ढंग से क्रमबद्ध करने में विफल रहता है।
इल्मरी करोनन

0

गणितज्ञ, 30 बाइट्स

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

SortBy[#~IntegerName~"Words"&]

यहाँ ungolfed संस्करण है:

SortBy[IntegerName[#, "Words"]&]

और यहाँ एक उदाहरण है:

SortBy[#~IntegerName~"Words"&][{0,1,2,3,4,5,6,7,8,9,10}]

जिसे भी लिखा जा सकता है

SortBy[#~IntegerName~"Words"&]@{0,1,2,3,4,5,6,7,8,9,10}

वे समान आउटपुट का उत्पादन करते हैं - गणितज्ञ में, f[x]के बराबर है f@x

Outputs: {8, 5, 4, 9, 1, 7, 6, 10, 3, 2}

एक बहुत लंबा जवाब है कि एक अन्य उपयोगकर्ता ने Mathematica में पोस्ट किया है। उस तरीके के बीच कुछ छोटे अंतरों के लिए सही करने की कोशिश करता है, जिस तरह से गणितज्ञ अल्फाजेटाइज़ करता है, जिस तरह से ओपी द्वारा बताई गई संख्याओं को अल्फ़ाबेटाइज़ किया जाना चाहिए, वैसे ही वे क्रमबद्ध तरीके को प्रभावित नहीं करते हैं, और मेरा जवाब उनके लिए समान रूप से प्रभावित करता है:

MyF = SortBy[#~IntegerName~"Words"&];
TheirF = SortBy[#, #~IntegerName~"Words"~ StringReplace~{"," -> "", "-" -> ""} &] &;
MyF[Range[-999999, 999999]] == TheirF[Range[-999999, 999999]]
(*Outputs True*)

एक महान जांच! - दुर्भाग्य से, वे वास्तव में एक ही आदेश नहीं देते हैं। TheirF880,000 से पहले सही ढंग से 888, जबकि MyFनहीं। संभवतः समस्या अजीब हाइफ़न की कॉपी-पेस्टिंग के साथ है: आपका संस्करण TheirFसंभवतः सामान्य हाइफ़न की जगह ले रहा है (जिनमें से कोई भी नहीं हैं), जबकि वास्तविक संस्करण अजीब 3-बाइट यूनिकोड हाइफ़न की जगह लेता है। (यह देखना अभी भी दिलचस्प होगा कि क्या कॉमा को हटाना जरूरी है।)
ग्रेग मार्टिन

मैंने इसे रेंज [999999] पर परीक्षण किया। लगता है कि कॉमा को खत्म करना अनावश्यक है, लेकिन "[हाइफ़न]" को "" के साथ बदलना निश्चित रूप से आवश्यक है।
ngenisis

0

कॉमन लिस्प, 113 बाइट्स

कोई बाहरी पुस्तकालय आवश्यक नहीं है।

(print(mapcar #'cdr(sort(loop for i in x collect(cons(format()"~r"i)i))(lambda(y z)(string-lessp(car y)(car z))))))

आउटपुट यदि xहै '(1 2 3 4 5):

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