समवर्ती पूर्णांकों से सबसे बड़ा और सबसे छोटा मान


14

यह समस्या पाँच प्रोग्रामिंग समस्याओं से है प्रत्येक सॉफ्टवेयर इंजीनियर को 1 घंटे से भी कम समय में हल करने में सक्षम होना चाहिए जो स्वयं एक दिलचस्प रीड है। पहली कुछ समस्याएं तुच्छ हैं, लेकिन चौथा थोड़ा अधिक दिलचस्प हो सकता है।

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

उदाहरण के लिए:

इनपुट:

5 56 50

आउटपुट:

50556
56550

आदेश के विभिन्न बिंदु:

  • परिणामों का क्रम सबसे छोटा और फिर सबसे बड़ा है।
  • केवल सबसे छोटे और सबसे बड़े मूल्यों को मुद्रित किया जा सकता है (सभी विविधताओं पर पुनरावृत्ति करना और उन्हें प्रिंट करना मान्य नहीं है)।
  • सूची में हमेशा दो या अधिक पूर्णांक होंगे।
  • यह सबसे बड़ा और सबसे छोटा परिणाम एक ही होना संभव है। इनपुट के मामले में 5 55, संख्या 555को दो बार मुद्रित किया जाना चाहिए।
  • पूर्णांक आवश्यक नहीं हैं। 5 5वैध इनपुट है
  • 0पूर्णांकों पर अग्रणी s वैध इनपुट नहीं हैं । आपको खाते की आवश्यकता नहीं होगी 05 55

जैसा कि यह कोड गोल्फ है, सबसे छोटी प्रविष्टि जीतती है।


यदि इनपुट नंबरों में से एक में अग्रणी 0 (जैसे 05) है, तो क्या हम इसे 05या बस के रूप में मानते हैं 5?
ऑप्टिमाइज़र

@ ओप्टिमाइज़र अग्रणी शून्य मान्य इनपुट नहीं हैं।

क्या आउटपुट में 0s की अनुमति है?
टिम

@ अगर इनपुट में अग्रणी जीरो नहीं हैं तो वे कहां से आएंगे?
मार्टिन एंडर

@ मार्टिनबटनर ओह, हाँ, मूर्खतापूर्ण!
टिम

जवाबों:


8

CJam, 14 13 बाइट्स

qS/e!:s$(N@W=

बहुत सीधा। यह इस तरह काम करता है:

qS/                  e# Split the input on spaces
   e!                e# Get all permutations of the input numbers
     :s              e# Join each permutation order into a single string
       $             e# Sort them. This sorts the strings based on each digit's value
        (N@W=        e# Choose the first and the last out of the array separated by '\n'

इसे यहाँ ऑनलाइन आज़माएँ


1
ठीक है मैं हार मानता हूँ। मैं अब e!अस्तित्व में नहीं था (विकी में अभी तक प्रकट नहीं हुआ है)।
डेनिस

5
@ वहाँ आप जाओ
अनुकूलक

1
मीठा पढ़ा। उपयोगी नए सामान के बहुत सारे।
डेनिस

इन अतिरिक्त ट्रिक्स के साथ सीजेएम में गोल्फ के लिए टिप्स अपडेट करना उपयोगी हो सकता है ।

1
@MichaelT युक्तियों में आमतौर पर वह उत्तर नहीं होता है जो किसी भाषा की अंतर्निहित विशेषताओं को समझाता है। उत्तर की एक जोड़ी को अद्यतन करने की आवश्यकता हो सकती है क्योंकि वे इन नई सुविधाओं से लाभ उठा सकते हैं।
ऑप्टिमाइज़र

5

पायथ, 14 13 बाइट्स

hJSmsd.pcz)eJ

पहले और अंतिम तत्व को छापते हुए सभी क्रमपरिवर्तन उत्पन्न करता है और उन्हें क्रमबद्ध करता है।


Jइनलाइन असाइन करें :hJSmsd.pcz)eJ
isaacg

@ लिसाक एक अच्छा! मुझे पता था कि हम उस गंदी गंदी सीजेएम से कमतर नहीं होंगे!
orlp

4

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

हां।

from itertools import*;z=[''.join(x)for x in permutations(raw_input().split())];print min(z),max(z)

संपादित करें: -5 बाइट्स के लिए xnor के लिए धन्यवाद!


1
sortedकोष्ठक के बिना काम के अंदर समझ है , लेकिन आप भी छँटाई से बचने और बस ले सकते हैं minऔर max
xnor

हाँ, हाँ। धन्यवाद!
सैपरकैवल

3

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

Print/@Sort[""<>#&/@Permutations@StringSplit@#][[{1,-1}]]&

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

एलेफाल्फा की बदौलत छह बाइट बच गईं।


{#&@@#,Last@#}=>#[[{1,-1}]]
alephalpha

@alephalpha कभी-कभी सरल बेहतर होता है। धन्यवाद! : डी
मार्टिन एंडर

2

जावास्क्रिप्ट (ईएस 6) 54 72 85

जितना लगता है उससे कहीं ज्यादा आसान है। बस उन्हें शाब्दिक रूप से क्रमबद्ध करें। अच्छी खबर यह है कि वास्तव में सादे जावास्क्रिप्ट प्रकार कैसे काम करता है। खैर ... नहीं, यह गलत है ... अभी भी एक (अधिक दृढ़) lexicograph तुलना काम कर सकता है।

नोट: a और b न्यूमेरिक होने पर, a + [b] a + '' + b के लिए एक शॉर्टकट है, क्योंकि हमें एक स्ट्रिंग कॉन्सेप्टन की आवश्यकता है, न कि योग की।
नोट 2: `` के अंदर की नई रूपरेखा महत्वपूर्ण है और इसे गिना जाना चाहिए

एक मध्यस्थ के साथ बहस न करें (... सिर्फ मजाक कर रहे हैं)

Edit2 पॉपअप का उपयोग कर फिक्स्ड I / O प्रारूप ( कोड गोल्फ के लिए डिफ़ॉल्ट देखें : इनपुट / आउटपुट तरीके )

// Complete program with I/O
// The sorting function is shorter as input are strings

alert((l=prompt().split(' ')).sort((a,b)=>a+b>b+a).join('')+`
`+l.reverse().join(''))

// Testable function (67 chars)
// With an integer array parameter, the sorting function must convert to string 

F=l=>(l.sort((a,b)=>a+[b]>b+[a]).join('')+`
`+l.reverse().join(''))

फ़ायरफ़ॉक्स / फायरबग कंसोल में टेस्ट करें

F([50, 2, 1, 9])
F([5,56,50])
F([52,36,526])
F([52,36,525])
F([52,36,524]

१२,५०९
95,021

50556
56550

3652526
5265236

3652525
5255236

3652452
5252436


1
मुझे लगता है कि आपका इनपुट प्रारूप गलत है। "मानक इनपुट पर एकल स्थान द्वारा अलग किए गए पूर्णांक" होना चाहिए।
nimi

@ निम्मी आप सही हैं।
फ़िक्सड

2

जे, 34 36 , 42 बाइट्स

सरल जानवर बल:

h=:3 :'0 _1{/:~;"1":&.>y A.~i.!#y'

h 5 50 56
50556 
56550

h 50 2 1 9
12509
95021

1

हास्केल, 98 बाइट्स

import Data.List
g=sort.map concat.permutations.words
h i=unlines[g i!!0,last$g i]
main=interact h

रिक्त स्थान पर इनपुट स्ट्रिंग विभाजित करें, प्रत्येक क्रमपरिवर्तन और क्रमबद्ध करें। पहले और अंतिम तत्व को प्रिंट करें।


1

जूलिया, 77 बाइट्स

v->(Q=extrema([int(join(x)) for x in permutations(v)]);print(Q[1],"\n",Q[2]))

यह एक अनाम फ़ंक्शन बनाता है जो एक वेक्टर को इनपुट के रूप में स्वीकार करता है और सम्मिलित तत्वों के न्यूनतम और अधिकतम के प्रिंट करता है। इसे कॉल करने के लिए, इसे एक नाम दें, जैसे f=v->...

असंगठित + स्पष्टीकरण:

function f(v)
    # Create an integer vector of the joined permutations using comprehension,
    # then get the minimum and maximum as a tuple using extrema().

    Q = extrema([int(join(x)) for x in permutations(v)])

    # Print the minimum and the maximum, separated by a newline.
    print(Q[1], "\n", Q[2])
end

सुझावों का स्वागत है!


1

जावास्क्रिप्ट ( ईएस 6 ) 134

अफसोस की बात है, जेएस में कोई निर्माण-क्रमबद्ध क्रमांकन कार्य नहीं है :(

f=(o,y,i,a)=>y?o.concat(a[1]?a.filter((k,j)=>j^i).reduce(f,[]).map(z=>y+z):y):(q=o.split(' ').reduce(f,[])).sort().shift()+`
`+q.pop()
<!-- Snippet Demo (Firefox only) -->

<input id="input" value="5 56 50" />
<input type="button" onclick="output.innerHTML=f(input.value)" value="Run" />
<pre id="output"></pre>


1

आर, 59 बाइट्स

write(range(combinat:::permn(scan(),paste,collapse="")),"")

1
अच्छा काम। आप सिर्फ दो कॉलनों का उपयोग करके एक बाइट को बचा सकते हैं, हालांकि combinat::permn
एलेक्स ए

मैंने सोचा था ::कि पैकेज को लोड (के माध्यम libraryसे require) या नहीं किया जाना चाहिए :::। मै गलत हो सकता हूँ; इसके बारे में थोड़ा और पढ़ने की जरूरत है। धन्यवाद।
फ्लोडेल

यदि लाइब्रेरी भरी हुई है, तो आपको कॉलन की बिल्कुल भी आवश्यकता नहीं है; पैकेज को नाम स्थान से संलग्न करने के बाद से आप सीधे फ़ंक्शन को कॉल कर सकते हैं। यदि पैकेज स्थापित है, लेकिन लोड नहीं किया गया है, तो आप दो कॉलनों के साथ एक विशेष पैकेज में कार्यों को संदर्भित कर सकते हैं।
एलेक्स ए

तो 58 यह हो सकता है। मैं अपने आप को permnसीधे बिना उपयोग की अनुमति नहीं देता library(combinat)
फ्लोडेल

हाँ, क्योंकि आपको library(combinat)इससे पहले कि आप किसी permnभी तरह से उपयोग कर सकते पुस्तकालय को लोड करना होगा । ;)
एलेक्स ए

1

रूबी 75

मेरी 'मूल' भाषा नहीं है, लेकिन मैंने सोचा कि मैं एक कोशिश करूँगा ... इस प्रकार यह संभवत: कुछ गोल्फ युक्तियाँ का उपयोग कर सकता है। फिर भी, एक बुरा प्रवेश नहीं।

puts STDIN.read.split(" ").permutation.map{|x|x.join}.sort.values_at(0,-1)

मैं यह नहीं कहूंगा कि यह सुरुचिपूर्ण है कि भाषा में सब कुछ बनाया गया है। यह बिल्कुल स्पष्ट होना चाहिए कि यह कैसे काम करता है।


आप एक 3 बाइट बचत के {|x|x.join}साथ बदल सकते हैं (&:join)
एंड्रयू

48 बाइट्स के लिए कुछ और रूबी शॉर्टकट:puts$<.read.split.permutation.map(&:join).minmax
ब्लोटोरेंज


इनपुट पढ़ने के लिए और भी कम हो जाता है:puts gets.split.permutation.map(&:join).minmax
blutorange

1

पर्ल, 79 70 बी (68 + 2)

use Math::Combinatorics;say for(sort map{join'',@$_}permute@F)[0,-1]

के साथ बुलाओ echo 13 42 532 3 6|perl -M5.10.0 -an scratch.pl। के लिए +2 बाइट जुर्माना है -an। मॉड्यूल नाम की लंबाई के बारे में शर्म ...


0

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

F=a=>(c=a.split(" ").sort((b,a)=>b+a-(a+b)),`${c.join("")}
${c.reverse().join("")}`)

उपयोग:

F("50 2 1 9")
/*
    12509
    95021
*/

1
टेम्प्लेट स्ट्रिंग्स के साथ प्यार में मत पड़ो। a + `` + b `$ {a} $ {b}` से छोटा है
edc65
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.