उच्चतम अद्वितीय अंक प्राप्त करें


33

हैरानी की बात है कि हमारे पास अभी तक एक सरल "उच्चतम अंक नहीं मिला" चुनौती है, लेकिन मुझे लगता है कि यह थोड़ा बहुत तुच्छ है।

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

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

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

12         -> 2
0          -> 0
485902     -> 9
495902     -> 5
999999     -> Anything
999099     -> 0
1948710498 -> 7

यह प्रत्येक भाषा की जीत में इतनी कम बाइट्स है !


2
क्या हम इसके बजाय एक स्ट्रिंग के रूप में इनपुट ले सकते हैं?
कृतिका लिथोस

3
पिछले परीक्षण मामले को देखते हुए, मुझे लगता है कि हम एक स्ट्रिंग के रूप में इनपुट लेने के लिए मजबूर हैं ... (अग्रणी शून्य पूर्णांक में प्रतिनिधित्व नहीं किया जा सकता है)
लियो

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

25
@ Adám "अपरिभाषित व्यवहार" आम तौर पर मतलब है कि आप कुछ भी कर सकते हैं, जिसमें शून्य से भयावह भयावहता को बुलाना शामिल है यदि बाइट्स बचाता है।
मार्टिन एंडर

22
@MartinEnder वास्तव में मैं ख़ुशी से आपके 50% बाइट्स को ख़त्म कर दूंगा यदि आपका कोड सफलतापूर्वक कोई अद्वितीय अंक नहीं होने पर cthulhu को सम्मन करता है;)
Skidsdev

जवाबों:


16

05AB1E , 4 3 बाइट्स

सहेजा गया 1 बाइट श्री एक्सकोडर को सूचित करता है कि एक अंक सूची वैध इनपुट है।

¢ÏM

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

व्याख्या

¢     # count occurrences of each digit in input
 Ï    # keep only the digits whose occurrences are true (1)
  M   # push the highest

05AB1E में प्रतीक्षा करें, सत्य 2नहीं है; केवल 1? : ओ
हाइपरएनुट्रीनो

@ हाइपर न्यूट्रिनो: सही है!
इमीना

2
यह बहुत उपयोगी और बहुत परेशान दोनों लगता है ... यह दिलचस्प है: ओ: डी
हाइपरयूट्रीनो

@ हाइपरनेटिनो: यह अक्सर काम में आता है, लेकिन यह एक नुकसान हो सकता है जब चुनौती कहती है कि एक सत्य मान लौटाएं , जब बहुत सारी भाषाएं किसी भी सकारात्मक पूर्णांक या शायद एक गैर-रिक्त स्ट्रिंग को वापस कर सकती हैं।
इमीना

संख्या पर एक स्ट्राइकथ्रू देखना आसान नहीं है!
मेज़ैंडर

15

पायथन 3 , 40 बाइट्स

सहेजे गए 2 बाइट्स के लिए धन्यवाद Movatica

lambda i:max(x*(i.count(x)<2)for x in i)

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

42 बाइट्स

स्ट्रिंग और अंकों की सूची दोनों प्रकार के पैरामीटर के लिए काम करता है। कोई अद्वितीय अंक के लिए एक त्रुटि फेंकता है, उस कल्पना के दुरुपयोग की तरह:

lambda i:max(x for x in i if i.count(x)<2)

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


व्याख्या

  • lambda i: - एक स्ट्रिंग या अंकों के पैरामीटर की सूची के साथ एक लंबो फ़ंक्शन की घोषणा करता है i।
  • max(...) - जनरेटर का अधिकतम मूल्य पाता है।
  • x for x in i - के अक्षरों / अंकों के माध्यम से Iterates i
  • if i.count(x)<2 - अंक अद्वितीय है, तो जाँच करता है।

40 बाइट्स:lambda i:max(x*(i.count(x)<2)for x in i)
मूवमेंट

1
@movatica धन्यवाद!
श्री एक्सकोडर

8

ऐलिस , 15 बाइट्स

/&.sDo
\i-.tN@/

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

व्याख्या

/...
\.../

यह रैखिक कोड के लिए एक सरल ढांचा है जो पूरी तरह से ऑर्डिनल मोड में संचालित होता है (मतलब यह प्रोग्राम पूरी तरह से स्ट्रिंग प्रसंस्करण के माध्यम से काम करता है)। सामने आया रेखीय कोड तो बस:

i..DN&-sto@

यह क्या करता है:

i    Read all input as a string.
..   Make two copies.
D    Deduplicate the characters in the top copy.
N    Get the multiset complement of this deduplicated string in the input.
     This gives us a string that only contains repeated digits (with one
     copy less than the original, but the number of them doesn't matter).
&-   Fold string subtraction over this string, which means that each of
     the repeated digits is removed from the input.
s    Sort the remaining digits.
t    Split off the last digit.
o    Print it.
@    Terminate the program.

-1, " शून्य से अनाम भयावहता को समन नहीं करता है " यदि कोई अद्वितीय अंक नहीं हैं। ;) (पढ़ें: +1, हमेशा की तरह शानदार जवाब।)
केविन क्रूज़सेन

1
@ केविनक्रूजसेन मैंने कोशिश की, लेकिन यह बाइट्स नहीं बचा। शायद डार्क एक अधिक उपयुक्त भाषा हो सकती है ...
मार्टिन एंडर

7

रेटिना , 16 बाइट्स

O`.
(.)\1+

!`.$

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

व्याख्या

O`.

अंकों को क्रमबद्ध करें।

(.)\1+

बार-बार आने वाले अंकों को हटा दें।

!`.$

अंतिम (अधिकतम) अंक प्राप्त करें।


बहुत खराब Deduplicate यहाँ मदद नहीं करता है :(
कैलकुलेटर

7

चारकोल , 18 12 बाइट्स

Fχ¿⁼№θIι¹PIι

इसे ऑनलाइन आज़माएं! (क्रिया संस्करण से लिंक करें)

अगर कोई हल नहीं निकलता है तो कुछ भी प्रिंट करता है। चाल यह है किfor लूप इनपुट स्ट्रिंग में प्रत्येक अद्वितीय संख्या को प्रिंट करता है, लेकिन कर्सर को स्थानांतरित किए बिना, इस प्रकार मूल्य अंतिम समाधान मिलने तक खुद को दोहराता रहता है।

पिछले संस्करण ने वर्ण A को Z में मुद्रित किया जब कोई समाधान नहीं मिला, इसलिए टिप्पणियाँ:

AααFχA⎇⁼№θIι¹Iιααα

इसे ऑनलाइन आज़माएं! (क्रिया संस्करण से लिंक करें)


3
यह एक दिलचस्प अपरिभाषित व्यवहार है :)
Emigna

यह मेरे लिए फिनिश लगता है: D
fedorqui

2
@fedorqui आपको यहाँ देखकर अच्छा लगा! हाँ, लेकिन चारकोल जेली या O5AB1E की तुलना में सीखना आसान है, और यह ASCII- कला खेलों में उपयोग करने के लिए मजेदार है। :-)
चार्ली

7

भूसी , 7 बाइट्स

→fo¬hgO

इसे ऑनलाइन आज़माएं! (टेस्ट सूट, पिछले परीक्षण मामले पर दुर्घटनाग्रस्त होने के बाद से इसका कोई अद्वितीय अंक नहीं है)

यह बिंदु-मुक्त शैली में कार्यों की एक संरचना है (तर्कों का कहीं भी स्पष्ट रूप से उल्लेख नहीं किया गया है)। इनपुट और रिटर्न को एक स्ट्रिंग के रूप में लेता है, जो भूसी वर्णों की सूची के बराबर है।

व्याख्या

Test case: "1948710498"

      O    Sort:                             "0114478899"
     g     Group consecutive equal elements: ["0","11","44","7","88","99"]
 fo¬h      Keep only those with length 1*:   ["0","7"]
→          Take the last element:            "7"

* लंबाई 1 की जाँच सूची के प्रमुख को ले कर की जाती है (सभी तत्व पिछले एक को छोड़कर) और इसे नकारते हुए (खाली सूचियाँ झूठी हैं, गैर-रिक्त सूचियाँ सत्य हैं)।


7

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

f s=maximum[x|x<-s,[x]==filter(==x)s]

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

यह काम किस प्रकार करता है:

  [  |x<-s   ]          -- loop x through the input string s
    x                   -- and keep the x where
     [x]==filter(==x)s  -- all x extracted from s equal a singleton list [x]
maximum                 -- take the maximum of all the x

7

आर , 41 बाइट्स

function(x,y=table(x))max(names(y[y==1]))

एक अनाम फ़ंक्शन जो अंकों की एक सूची लेता है, या तो पूर्णांक या एकल वर्ण स्ट्रिंग्स के रूप में। यह yफ़ंक्शन बॉडी के लिए घुंघराले ब्रेसिज़ का उपयोग करने से बचने के लिए एक वैकल्पिक तर्क के रूप में सामने आता है। एक स्ट्रिंग के रूप में अंक लौटाता है। यह अन्य आर उत्तर की तुलना में थोड़ा अलग दृष्टिकोण लेता है और सबसे छोटा सा सबसे छोटा होता है! लगता है मेरी टिप्पणी के बाद सभी गलत था ...

tableसूची में प्रत्येक तत्व की घटनाओं की गणना करता है, जिसमें ( names(table(x))मान के xरूप में) अद्वितीय मान होते हैं। चूंकि अंकों को सौभाग्य से संख्यात्मक रूप से उसी रूप में क्रमबद्ध किया जाता है, हम अभी भी उपयोग कर सकते हैं max

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


अच्छा! मुझे उम्मीद नहीं थी कि कुछ करने की tableक्षमता कम होगी (साथ ही मुझे यह भी याद नहीं होगा कि मुझे कैसे namesकाम करना है)।
aPaulT

1
<2एक और बाइट के लिए। मायने में कभी शून्य नहीं होना चाहिए।
मिकट

1
y=table(scan());max(names(y[y<2]))कुछ बाइट्स कम है।
JAD

6

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

एक स्ट्रिंग के रूप में इनपुट लेता है। यदि कोई अद्वितीय अंक नहीं हैं, तो RangeError को लौटाता है।

s=>f=(i=9)=>s.split(i).length-2?f(--i):i

रिक हिचकॉक को -7 बाइट्स धन्यवाद

-1 बाइट शैगी को धन्यवाद

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


39 बाइट्स के लिए अलर्ट निकालें (s,i=9)=>s.split(i).length-2?f(s,--i):i:। आप 42 बाइट्स के लिए स्टैक ओवरफ्लो से बच सकते हैं (s,i=9)=>s.split(i).length-2?i&&f(s,--i):i:।
रिक हिचकॉक

एक बाइट को करीने से बचाएं: s=>g=(i=9)=>s.split(i).length-2?g(--i):iऔर फिर इसे कॉल करेंf("12")()
शैगी

5

पायथन 3, 40 बाइट्स

lambda i:max(x+9-9*i.count(x)for x in i)

केवल अंकों की सूचियों के लिए काम करता है। किनारे का मामला '990' ठीक काम करता है :)

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


PPCG में आपका स्वागत है! ऐसा लगता है कि आपने सब कुछ पा लिया है :)
स्टीफन


4

भूसी , by बाइट्स

एक ही बाइट काउंट पर थोड़ा नट समाधान के सुझाव के लिए लियो को धन्यवाद।

▲‡ȯf=1`#

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

व्याख्या

  ȯ       Compose the following thre functions into one binary function.
      `#  Count the occurrences of the right argument in the left.
    =1    Check equality with 1. This gives 1 (truthy) for values that 
          appear uniquely in the right-hand argument.
   f      Select the elements from the right argument, where the function
          in the left argument is truthy.
          Due to the composition and partial function application this
          means that the first argument of the resulting function actually
          curries `# and the second argument is passed as the second
          argument to f. So what we end up with is a function which selects
          the elements from the right argument that appear uniquely in
          the left argument.
 ‡        We call this function by giving it the input for both arguments.
          So we end up selecting unique digits from the input.
▲         Find the maximum.  

1
¬←अधिक सरल हो सकता है =1, एक ही bytecount :)
सिंह

1
@ लियो आह, मैं परीक्षण करने के लिए बहुत आलसी था कि करी बिना कोष्ठक के काम करेगा या नहीं। मुझे प्रकार के अनुमान में अधिक भरोसा करने की आवश्यकता है। ;)
मार्टिन एंडर

4

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

(t=9;While[DigitCount[#][[t]]!=1,t--];t)&

धन्यवाद @ मर्टिन एंडर

यहाँ मेरे उत्तर पर मार्टिन का दृष्टिकोण है

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

9//.d_/;DigitCount[#][[d]]!=1:>d-1&

4

आर, 45 43 बाइट्स

function(x)max(setdiff(x,x[duplicated(x)]))

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

पूर्णांक के वेक्टर के रूप में इनपुट लेता है। डुप्लिकेट तत्वों को ढूंढता है, उन्हें निकालता है, और अधिकतम लेता है। ( -Infयदि कोई अधिकतम अधिकतम नहीं है तो चेतावनी के साथ लौटाता है।)

प्रति टिप्पणी एक अनाम समारोह में संपादित


max(x[!duplicated(x)])काफी छोटा है, लेकिन यह एक महान जवाब है। मुझे पता था कि जिस तरह से मैं यह करने जा रहा हूं वह यह अच्छा नहीं था। साथ ही आप f=शुरुआत से हटा सकते हैं , क्योंकि अनाम फ़ंक्शन पूरी तरह से मान्य उत्तर हैं। यदि आप इस प्रारूप का उपयोग करते हैं, तो आप अपने कार्यों का परीक्षण करने के लिए TIO का उपयोग कर सकते हैं: इसे ऑनलाइन आज़माएं!
ग्यूसेप

धन्यवाद! मुझे लगता है कि 'डुप्लिकेटेड' फ़ंक्शन डुप्लिकेट तत्व की पहली घटना की गणना नहीं करता है, इसलिए आपका संस्करण काफी काम नहीं करेगा
aPaulT

आह, अच्छी बात है। मैं लगभग कभी उपयोग नहीं करता, duplicatedलेकिन मैंने वास्तव में एक और, छोटा जवाब सोचा!
ग्यूसेप

3

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

->x{(?0..?9).select{|r|x.count(r)==1}[-1]}

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


रूबी ने अजगर को बांध दिया :)
श्री Xcoder

क्योंकि 42 हमेशा जवाब होता है। :-)
जीबी

5
@ जीबी या यह है:->x{x.chars.select{|r|x.count(r)<2}.max}
मार्टिन

1
यह 2 बाइट्स छोटा होगा और पूरी चीज़ को बर्बाद कर देगा। :-)
जीबी

3

एपीएल (डायलॉग यूनिकोड) , 10 चार्ट = 19 बाइट्स

विधि: कई बार शून्य से गुणा करने वाले तत्व, और फिर उच्चतम तत्व को ठीक करते हैं।

⌈/×∘(1=≢)⌸

 प्रत्येक अद्वितीय तत्व और तर्क में इसके सूचकांक के लिए:

× अद्वितीय तत्व को गुणा करें

∘(... इसके ) साथ:

  1= बूलियन के लिए कि क्या एक बराबर है

   सूचकांकों की संख्या (अद्वितीय तत्व कितनी बार होती है)

⌈/ उस की अधिकतम

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

APL (Dyalog Classic) , 15 बाइट्स

⌈/×∘(1=≢)⎕U2338

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

उपरोक्त के लिए समान है, लेकिन ⎕U2338इसके बजाय का उपयोग करता है


3

बैश + कोरुटिल्स, 30 28 बाइट्स

-2 बाइट्स डिजिटल ट्रॉमा के लिए धन्यवाद

fold -1|sort|uniq -u|tail -1

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


बैश + कोरुटिल्स, 20 बाइट्स

sort|uniq -u|tail -1

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

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


2 बाइट्स को बचाने के grep -o .साथ बदलें fold -1। मैं सहमत हूं कि अंकों की सूची के रूप में दिया गया एक इनपुट पूर्णांक नियमों को बहुत दूर खींच रहा है।
डिजिटल ट्रॉमा

+1 सिर्फ इसलिए कि यह पार्टी है
अनुश


3

सी # (.NET कोर) , 27 97 86 58 57 75 बाइट्स

using System.Linq;

n=>n.GroupBy(i=>i).Where(i=>i.Count()<2).Max(i=>i.Key)-48

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

धन्यवाद @CarlosAlejo


यह इनपुट के रूप में "1948710498" के साथ काम नहीं करता है ("7" के बजाय "9" रिटर्न), और आपको using System.Linq;बाइट की गिनती में जोड़ना होगा ।
चार्ली

@CarlosAlejo उफ़! माफ़ कीजिये! बस अब विनिर्देशों को पूरी तरह से पढ़ें। जल्द ही समाधान संपादित करेंगे।
काकरोत

संपादित। क्या मैं कोई अनुकूलन कर सकता हूँ?
काकरोत

ज़रूर: उदाहरण के लिए, के OrderBy(...).Last()बजाय का उपयोग करने का प्रयास करें .OrderByDescending(...).First()। या इससे भी बेहतर, क्लॉज़ के .Max(i=>i.Key)बाद अपने अंतिम भाग को बदलें Where
चार्ली

@CarlosAlejo धन्यवाद! संपादित।
काकरोत

2

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

अंकों की सूची के रूप में इनपुट लेता है। 0यदि कोई अनूठे अंक नहीं हैं, तो लौटाता है ।

s=>s.reduce((m,c)=>m>c|s.filter(x=>x==c)[1]?m:c,0)

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


2

Japt , १२ ११ 10 बाइट्स

अंकों की एक सरणी के रूप में इनपुट लेता है।

k@¬èX ÉÃrw

झसे आज़माओ


व्याख्या

     :Implicit input of array U.
k    :Filter the array to the elements that return false when...
@    :Passed through a function that...
¬    :Joins U to a string and...
èX   :Counts the number of times the current element (X) appears in the string...
É    :Minus 1.
     :(The count of unique digits will be 1, 1-1=0, 0=false)
à   :End function.
r    :Reduce by...
w    :Getting the greater of the current element and the current value.
     :Implicit output of resulting single digit integer.

2

जावा (ओपनजेडके 8) , 89 85 79 बाइट्स

a->{int i=10,x[]=new int[i];for(int d:a)x[d]++;for(;i-->0&&x[i]!=1;);return i;}

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

-6 बाइट्स @ केविनक्रूजसेन की अंतर्दृष्टि के लिए धन्यवाद!


1
आप के return i>0?i:0;साथ बदल सकते हैं return i;। परीक्षण मामले के लिए आउटपुट -1 होगा [9,9,9,9,9,9], लेकिन यह चुनौती के साथ ठीक है: " यदि कोई अद्वितीय अंक नहीं हैं, तो आपका प्रोग्राम कुछ भी (अपरिभाषित व्यवहार) कर सकता है। "
केविन क्रूजसेन

दरअसल, मैं वर्तमान संशोधन के बाद से कर सकता हूं। इससे पहले कि मैं परीक्षण मामले के कारण नहीं कर सका 0। यह कुछ मैं पिछले गोल्फ में देख रहा हूँ! :)
ओलिवियर ग्रेजायर

2

APL (Dyalog) , 14 बाइट्स

-2 धन्यवाद towiNight

⌈/⊢×1=(+/∘.=⍨)

⌈/ का सबसे बड़ा

 तर्क

× से गुणा

1=(...)  बूलियन प्रत्येक के लिए जहां एक बराबर होता है

+/ की पंक्ति है

∘.=⍨ उनकी समानता तालिका

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


चूँकि अपने आप 0को छोड़कर कभी भी उच्चतम अद्वितीय अंक नहीं 0होता है, आप ×इसके बजाय 1 बाइट का उपयोग करके बचा सकते हैं /⍨, फिर एक अन्य बाइट को एक ट्रेन में परिवर्तित करने से बचा सकते हैं
ट्विनट

@TwiNight अच्छा लगा! धन्यवाद।
अदाम




1

एफ # , 88 बाइट्स

let f i=Seq.countBy(fun a->a)i|>Seq.maxBy(fun a->if snd a>1 then 0 else int(fst a))|>fst

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

मेरे पहले प्रयास से बेहतर दृष्टिकोण, कम बाइट में परिणाम।

रुचि के बिंदु: fstऔर sndक्रमशः टुपल के पहले और दूसरे तत्वों को वापस करें।


1

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

ṢŒrṪỊ$ÐfṀ

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



@LeakyNun ने बेटे को पछाड़ दिया,
स्काईड्सदेव

@ माय्यूब लेकिन कोर एल्गोरिदम एक ही है
लीक नून

@LeakyNun नहीं, यह काफी अलग है।
स्टीनबर्ग २ '’

@ LeakyNun मैंने अलग से पोस्ट करने का फैसला किया ... मूल रूप से एक बड़ा अंतर यह है कि मेरे मामले में मैं सिर्फ यह तय करता हूं कि किसको रखना है, जबकि स्टीनबर्ग कुछ सिर या कुछ और लेता है ...
एरिक द आउटगॉल्फ

1

अजगर, 6 बाइट्स

eS.m/Q

परीक्षण सूट

स्पष्टीकरण:

eS.m/Q
eS.m/QbQ    Implicit variable introduction
  .m   Q    Find all minimal elements of the input by the following function:
    /Qb     Number of appearances in the input
eS          Take the maximum element remaining.

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