दूसरा गैर-दोहराव चरित्र क्या है?


18

कोड रिव्यू के इस सवाल के आधार पर

मुद्रण योग्य ASCII वर्णों की एक गैर-रिक्त स्ट्रिंग को देखते हुए, दूसरे गैर-दोहराए जाने वाले वर्ण को आउटपुट करता है । उदाहरण के लिए, इनपुट DEFD, आउटपुट के लिए F

इनपुट

उत्पादन

  • दूसरा चरित्र है कि दोहराया नहीं जाता है, जब बाएँ-से-सही पढ़ने के लिए एक उपयुक्त प्रारूप में फिर से,।
  • आउटपुट चरित्र केस-असंवेदनशील है।
  • यदि ऐसा कोई चरित्र मौजूद नहीं है (उदाहरण के लिए, सभी वर्ण दोहराते हैं), एक रिक्त स्ट्रिंग आउटपुट।

नियम

  • एल्गोरिथ्म को मामले को अनदेखा करना चाहिए। यही है, Dऔर dएक ही चरित्र के रूप में गिना जाता है।
  • या तो एक पूर्ण कार्यक्रम या एक समारोह स्वीकार्य हैं।
  • इनपुट स्ट्रिंग को गैर-रिक्त (यानी, लंबाई में कम से कम एक वर्ण) की गारंटी दी जाएगी।
  • इनपुट स्ट्रिंग ASCII है। कोई भी वैध चरित्र दोहरा सकता है, न कि केवल अल्फ़ान्यूमेरिक (इसमें स्थान शामिल हैं)।
  • मानक खामियों को मना किया जाता है।
  • यह इसलिए सभी सामान्य गोल्फिंग नियम लागू होते हैं, और सबसे छोटा कोड (बाइट्स में) जीतता है।

उदाहरण

इनपुट पहली लाइन पर है, आउटपुट दूसरी लाइन पर है।

DEFD
F

FEED
D

This is an example input sentence.
x

...,,,..,,!@
@

ABCDefgHijklMNOPqrsTuVWxyz
B

AAAAAABBBBB


Thisxthis


This this.
.

8
यदि यह मामला असंवेदनशील नहीं था, तो मैं इसे फोर्थ में करने पर विचार करूंगा। स्ट्रिंग ऑपरेशन उस भाषा में चूसना, यद्यपि।
mbomb007

क्या होगा अगर मेरी भाषा लोअरकेस अक्षरों का समर्थन नहीं करती है?
Adám

@ Adám क्या यह एक अलग कोड पेज का उपयोग करता है? यदि यह लोअरकेस अक्षरों का समर्थन नहीं करता है तो यह आमतौर पर ASCII स्ट्रिंग को कैसे इनपुट करेगा?
AdmBorkBork

1
मेरे पास जो सिस्टम था, उसमें 7-बिट कोड पेज था; एक संशोधित मानक कोड पृष्ठ जहां अपरकेस अक्षर लोअरकेस स्थिति पर कब्जा कर लेते हैं, और ग्लिप्स के लिए अपरकेस पदों का उपयोग किया जाता था। यह पुराने एपीएल सिस्टम पर किया गया था ताकि एपीएल ग्लिफ़ को एक्सेस करने के लिए शिफ्ट का उपयोग किया जा सके, जबकि अनशिक्षित अक्षर क्लासिक कोडिंग-शैली की राजधानियाँ थीं।
Adám

जवाबों:


10

MATL , 11 बाइट्स

tk&=s1=)FT)

यदि दूसरा गैर-दोहराया वर्ण नहीं है, तो यह त्रुटि (डिफ़ॉल्ट रूप से अनुमत) के साथ बाहर निकलता है।

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

व्याख्या

t      % Implicitly take input string. Duplicate
k      % Convert to lowercase
&=     % 2D array of equality comparisons
s      % Sum of each column
1=     % True for entries that equal 1
)      % Apply logical index to the input string to keep non-repeated characters
TF)    % Apply logical index to take 2nd element if it exists. Implicitly display 

निंजा संपादित फिर से हमला करता है। : पी
डेनिस

@ डेनिस हाहाहा। खैर, मुझे लगता है कि आप जल्द ही बाइट्स के एक जोड़े को हटा देंगे
लुइस मेंडो

10

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

i!2=`(.)(?<!\1.+)(?!.*\1)

इसे ऑनलाइन आज़माएं! (पहली पंक्ति कई इनपुट के परीक्षण सूट पर कोड को चलाने में सक्षम बनाती है।)

व्याख्या

यह केवल एकल रेगेक्स मैच है, रेगेक्स:

(.)(?<!\1.+)(?!.*\1)

यही है, एक चरित्र से मेल खाते हैं और यह सुनिश्चित करते हैं कि यह इनपुट में कहीं और दिखाई न दे। बाकी विन्यास है:

  • i केस असंवेदनशीलता को सक्रिय करता है।
  • ! रेटिना से कहता है कि उन्हें गिनने के लिए मैचों को प्रिंट करें।
  • 2= रेटिना को इन सभी के विपरीत केवल दूसरे मैच को प्रिंट करने के लिए कहता है।

1
आह, मुझे सिखाने के लिए धन्यवाद 2=
लीक

6

05AB1E, 15 12 बाइट्स

l©v®y¢iy}}1@

व्याख्या की

l©            # store lower case string in register
  v     }     # for each char in lower case string
   ®y¢iy      # if it occurs once in string, push it to stack
         }    # end if
          1@  # push the 2nd element from stack and implicitly display

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

@ Adnan के लिए 3 बाइट्स को सहेजा गया


या 12 बाइट्स के लिए l©v®y¢iy}}1@:)।
अदनान

@ अदनान: अच्छा! @ का उपयोग करने के बारे में नहीं सोचा था।
एमिगा जूल

5

पायथन 2, 59 58 बाइट्स

यदि कोई आउटपुट नहीं है, तो एकल वर्ण की सूची, या खाली सूची लौटाता है। (बेवकूफ मामला-असंवेदनशीलता ...)

s=input().lower();print[c for c in s if s.count(c)<2][1:2]

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



यह मान्य इनपुट नहीं है। उपयोगकर्ता को कभी भी अपने इनपुट से बचना नहीं चाहिए।
mbomb007

4
यकीन से यही है। हम भाषा के सूची प्रारूप में STDIN पर सूची प्रदान करते हैं। तार किसी भी अलग क्यों होंगे?
डेनिस

5

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

Œlµḟœ-Q$Ḋḣ1

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

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

Œlµḟœ-Q$Ḋḣ1  Main link. Argument: s (string)

Œl           Convert s to lowercase.
  µ          Begin a new, monadic chain. Argument: s (lowercase string)
       $     Combine the two links to the left into a monadic chain.
      Q        Unique; yield the first occurrence of each character.
    œ-         Perform multiset subtraction, removing the last occurrence of each
               character.
   ḟ         Filterfalse; keep characters that do not appear in the difference.
        Ḋ    Dequeue; remove the first character.
         ḣ1  Head 1; remove everything but the first character.

4

बैच, 171 बाइट्स

@echo off
set a=.
set s=%~1
:l
if "%s%"=="" exit/b
set c=%s:~0,1%
call set t=%%s:%c%=%%
if "%s:~1%"=="%t%" set a=%a%%c%
set s=%t%
if "%a:~2%"=="" goto l
echo %c%

वैकल्पिक सूत्रीकरण, भी 171 बाइट्स:

@echo off
set a=.
set s=%~1
:l
if "%s%"=="" exit/b
set c=%s:~0,1%
set t=%s:~1%
call set s=%%s:%c%=%%
if "%s%"=="%t%" set a=%a%%c%
if "%a:~2%"=="" goto l
echo %c%

इसे W2008R2 पर चलाने के लिए नहीं बना सकते। लाइन "कॉल सेट ..." का विस्तार "कॉल सेट टी =% s: D =%" तक है और "कमांड का सिंटैक्स गलत है" संदेश के साथ गर्भपात होता है।
23

@ खेद, क्षमा करें, कुछ टाइपोस मेरी पोस्ट में हैं। मृत जीविका यह थी कि पोस्ट जितना मैंने कहा था उससे छोटा था! वे अब तय कर रहे हैं।
नील

3

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

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

= Rz1.xhtfq1 / zTzk
= rz1: fq1 / zTz1 2

परीक्षण सूट।


2
मुझे पाइथ का भी पता नहीं है, लेकिन अगर आप ऐसा कहते हैं। : D
mbomb007

@ mbomb007 तुम्हें पता है, [1:2]चाल।
लीक नून

आप के t<…2बजाय के साथ एक बाइट बचा सकते हैं :…1 2। आप को ले जाकर एक और बाइट बचा सकता है =rz1, इसके पहले उपयोग करने के लिए अगर आप भी बदल जाते हैं 1करने के लिए Z(के बजाय लोअरकेस अपरकेस उत्पादन के लिए): t<fq1/zT=rzZ2
एंडर्स केसरग


3

सी #, 129 128 बाइट्स

char c(string i){var s=i.Where((n,m)=>i.ToLower().Where(o=>o==Char.ToLower(n)).Count()<2).ToArray();return s.Length>1?s[1]:' ';}

ठीक काम करता है। काश मैं सब कुछ कम करने की जरूरत नहीं थी


जब मैं "Thisxthis" को एक तर्क के रूप में पास करता हूं, एक IndexOutOfRangeException को फेंकता है। इसके अलावा, मुझे लगता है कि == 1 को <2 में बदला जा सकता है।
यति

2

लिनक के साथ सी # लैम्ब्डा, 63 बाइट्स

s=>(s=s.ToUpper()).Where(c=>s.Count(C=>c==C)<2).Skip(1).First()

आप के .Skip(1).First()साथ बदलने में सक्षम होना चाहिए.ElementAt(1)
aloisdg कहते हैं, बहाल मोनिका

इससे भी बेहतर है कि आप सूची को सूचीबद्ध कर सकते हैं और सूचकांक का उपयोग कर सकते हैं.ToList()[1]
अलोइसडग का कहना है कि मोनिका को पुनः स्थापित करें

यह "", "एएबीबी", और "एएबीसीबीसी" जैसे इनपुट के लिए एक अपवाद फेंकता है, जहां 2 स्थिति में एक मिलान चरित्र नहीं है। मुझे लगता है कि आपको FirstOrDefault की जरूरत है।
Grax32

2

सी #, 141 बाइट्स

void p(){var x=Console.ReadLine().ToLower();var c=0;foreach(char i in x){if(x.Split(i).Length-1<2){if(++c==2){Console.WriteLine(i);break;}}}}

बिना ब्रेक (सबसे छोटा), 135 बाइट्स

void p(){var x=Console.ReadLine().ToLower();var c=0;foreach(char i in x){if(x.Split(i).Length-1<2){if(++c==2){Console.WriteLine(i);}}}}

(;;) के साथ, 150 बाइट्स के साथ

void p(){for(;;){var x=Console.ReadLine().ToLower();var c=0;foreach(char i in x){if(x.Split(i).Length-1<2){if(++c==2){Console.WriteLine(i);break;}}}}}

टिप्पणियों के साथ अपुष्ट

void p()
{
    var x=Console.ReadLine().ToLower();//Get lowercase version of input from STDIN
    var c=0; //Create "count" integer
    foreach(char i in x){//For each char in input from STDIN
        if(x.Split(i).Length-1<2)//If current char occurs once in input from STDIN
        {
            if(++c==2){ //Add 1 to count and if count is 2
                Console.WriteLine(i); //Print result to STDOUT
                break; //Exit foreach
            } //End of IF
         } //End of IF
     } //End of FOREACH
} //End of VOID

12 बाइट्स तुक्केका द्वारा सहेजे गए (सी के लिए गिनती बदलें)।

TuukkaX (var में स्ट्रिंग बदलें) द्वारा 3 बाइट्स बचाए गए।

TuukkaX द्वारा "के साथ (;;)" के लिए "(जबकि (सत्य;) के लिए बदल दिया गया;);) द्वारा 4 बाइट्स बचाए गए।

TuukkaX द्वारा 2 बाइट्स सहेजे गए (परिवर्तित c ++; if (c == 2 to if (++ c == 2))।

ब्रायस वेगनर (परिवर्तित x.ToCharArray () से x) द्वारा सहेजे गए 14 बाइट्स।


@TuukkaX ओह, वास्तव में। धन्यवाद!
r3pear

PPCG में आपका स्वागत है! यह एक अच्छी पहली पोस्ट है! चूंकि नियमों का उल्लेख है कि इस समस्या के उत्तर या तो फ़ंक्शन या पूर्ण कार्यक्रम होने चाहिए, इसलिए आपके कोड को बहुत कम जुड़वा की आवश्यकता होती है। आप varइसके बजाय का उपयोग करके stringऔर cइसके बजाय कुछ की तरह बाइट्स बचा सकते हैं count
यति

@TuukkaX फिर से धन्यवाद! शीघ्र ही मैं कोड को संशोधित करूंगा और स्ट्रिंग को var में बदलूंगा।
r3pear

@TuukkaX क्या मुझे शून्य प्रोग्राम () {} की तरह कुछ जोड़ना चाहिए ???
r3pear

हाँ, लेकिन बाइट्स को बचाने के लिए एक बाइट फंक्शन नाम दें! :)
यति

2

x86 मशीन कोड, 43 बाइट्स

हेक्स में:

FC31C031C95641AC84C0740E3C6172F63C7A77F28066FFDFEBEC5EAC49740B89F751F2AE5974F44A77F1C3

फ़ंक्शन (E) SI में इनपुट स्ट्रिंग के लिए एक पॉइंटर ले जाता है और (E) DX में एक पूर्णांक होता है और ऐसा कोई वर्ण नहीं होने पर (E) DX-th गैर-दोहराए जाने वाले वर्ण या शून्य देता है। एक साइड-इफेक्ट के रूप में यह स्ट्रिंग को ऊपरी मामले में परिवर्तित करता है।

disassembly:

fc             cld
31 c0          xor    eax,eax
31 c9          xor    ecx,ecx
56             push   esi
_loop0:                         ;Search for the NULL char,
41             inc    ecx       ;counting the length in the process
ac             lodsb
84 c0          test   al,al
74 0e          je     _break0   ;NULL found, break
3c 61          cmp    al,0x61   ;If char is
72 f6          jb     _loop0    ;between 'a' and 'z'
3c 7a          cmp    al,0x7a   ;convert this char
77 f2          ja     _loop0    ;to uppercase in-place
80 66 ff df    and    byte ptr [esi-0x1],0xdf
eb ec          jmp    _loop0
_break0:
5e             pop    esi       ;Reset pointer to the string
_loop:                          ;ECX=string length with NULL
ac             lodsb            ;Load next char to AL
49             dec    ecx
74 0b          je     _ret      ;End of string found, break (AL==0)
89 f7          mov    edi,esi   ;EDI points to the next char
51             push   ecx
f2 ae          repnz scasb      ;Search for AL in the rest of the string
59             pop    ecx
74 f4          je     _loop     ;ZF==1 <=> another instance found, continue
4a             dec    edx
77 f1          ja     _loop     ;If not yet the EDX-th non-rep char, continue
_ret:
c3             ret

2

एपीएल, 32 बाइट्स

{⊃1↓⍵/⍨1=+/∘.=⍨(⎕UCS ⍵)+32×⍵∊⎕A}

इसे आजमाएँ || सभी परीक्षण मामले

स्पष्टीकरण:

                (⎕UCS ⍵)+32×⍵∊⎕A  Add 32 to uppercase letters
            ∘.=⍨                    Make an equality matrix
          +/                        Check how many matches
    ⍵/⍨1=                           Keep elements with 1 match
  1↓                                Drop the first one
⊃                                   Return the second one

मैं इसे 16 बाइट्स के साथ पोस्ट करने वाला था, लेकिन मुझे एहसास हुआ कि इसे केस-इन्सेंसिव होना चाहिए ...


1
(⎕UCS ⍵)+32×⍵∊⎕A819⌶⍵
एडम

मैंने पहले कभी उस ऑपरेटर को नहीं देखा है। यह किस संस्करण में काम करता है?
Woofmao

इसे आई-बीम कहा जाता है । यह Dyalog APL के सभी संस्करणों में एक ऑपरेटर है। यह मूल रूप से आईबीएम प्रणाली के लिए विशेष कॉल के लिए आईबीएम के एपीएल के पुराने संस्करणों में एक समारोह था। उसे ले लो? आईबीएम - आई-बीम ?
अड्म


खैर, मैंने कुछ नया सीखा है। tryapl.org इसे पहचान नहीं पा रहा है, तो क्या आपको बुरा लगता है अगर मैं सिर्फ आपके TIO लिंक का उपयोग करूं?
Woofmao


1

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

Cases[Tally@ToUpperCase@#,{_,1}][[2,1]]~Check~""&

अनाम फ़ंक्शन। इनपुट के रूप में वर्णों की एक सूची लेता है। उत्पन्न होने वाली किसी भी त्रुटि को अनदेखा करें।


1

जावास्क्रिप्ट (फ़ायरफ़ॉक्स 48 या उससे पहले), 60 बाइट्स

f=s=>(m=s.match(/(.).*\1/i))?f(s.replace(m[1],"","gi")):s[1]

undefinedयदि केवल शून्य या एक गैर-दोहराए जाने वाले वर्ण हैं, तो लौटाता है । केस के असंवेदनशील तरीके से काम करता है जो स्ट्रिंग में एक से अधिक बार दिखाई देने वाले वर्णों की सभी घटनाओं को हटा देता है। एक गैर-मानक फ़ायरफ़ॉक्स एक्सटेंशन पर निर्भर करता है जो फ़ायरफ़ॉक्स 49 में हटा दिया गया था। 119 91 बाइट ES6 संस्करण:

f=s=>(m=s.match(/(.).*?(\1)(.*\1)?/i))?f((m[3]?s:s.replace(m[2],"")).replace(m[1],"")):s[1]

स्ट्रिंग में कम से कम दो बार दिखाई देने वाले सभी वर्णों की पुन: खोज करता है। यदि चरित्र ठीक दो बार दिखाई देता है, तो दोनों घटनाएं हटा दी जाती हैं अन्यथा केवल पहली घटना को हटा दिया जाता है (अन्य घटनाओं को बाद में हटा दिया जाएगा)। यह आवृत्तियों को एक अंतर मामला होने की अनुमति देता है।


मेरा मानना है कि आप वास्तव में बदल कर अपनी फ़ायरफ़ॉक्स 48 जवाब अनुकूलन ES6 अनुरूप होना करने के लिए कर सकते हैं m[1]के साथnew RegExp(`${m[1]}`,"gi")
मूल्य इंक

@ केविनलाउ-नकेनी जो विशेष पात्रों के लिए काम नहीं करेगा, और यह मुझे विशेष बाइट करने के लिए 33 बाइट्स की लागत, मुझे 93 तक ले जा रहा है, दुर्भाग्य से।
नील

noooooo विशेष वर्ण नहीं! मुझे अपने रूबी उत्तर को उनके लिए समायोजित करने के लिए संपादित करना होगा, अब।
वैल्यू इंक

1

जे, 25 बाइट्स

(1{2{.]-.]#~1-~:)@tolower

प्रयोग

   f =: (1{2{.]-.]#~1-~:)@tolower
   f 'DEFD'
f
   f 'FEED'
d
   f 'This is an example input sentence.'
x
   f '...,,,..,,!@'
@
   f 'ABCDefgHijklMNOPqrsTuVWxyz'
b
   f 'AAAAAABBBBB'

   f 'Thisxthis'

   f 'This this.'
.

व्याख्या

(1{2{.]-.]#~1-~:)@tolower  Input: s
                  tolower  Converts the string s to lowercase
              ~:           Mark the indices where the first time a char appears
            1-             Complement it
         ]                 Identity function to get s
          #~               Copy only the chars appearing more than once
      ]                    Identity function to get s
       -.                  Remove all the chars from s appearing more than once
   2{.                     Take the first 2 chars from the result (pad with empty string)
 1{                        Take the second char at index 1 and return it

1

बैश, 58 बाइट्स

tr A-Z a-z>t
tr -dc "`fold -1<t|sort|uniq -u`"<t|cut -c2

सावधानी: यह एक अस्थायी फ़ाइल बनाता है जिसका नाम t है । यदि यह पहले से मौजूद है, तो इसे अधिलेखित कर दिया जाएगा।


1

सी, 174 बाइट्स

int c(char*s){int y=128,z=256,c[384],t;memset(c,0,z*6);for(;t=toupper(*s);s++){c[t]++?c[t]-2?0:c[z+(c[y+c[z+t]]=c[y+t])]=c[z+t]:c[z]=c[y+(c[z+t]=c[z])]=t;}return c[y+c[y]];}

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

एक छोटा सा ungolfed संस्करण:

int c(char*s)
{
    int y=128,z=256,c[384],t;
    //It's basically c[3][128], but with linear array the code is shorter

    memset(c,0,z*6);

    for(;t=toupper(*s);s++)
    {
        c[t]++ ?        // c[0][x] - number of char x's occurrence
            c[t] - 2 ?  // > 0
                0       // > 1 - nothing to do  
                : c[z + (c[y + c[z + t]] = c[y + t])] = c[z + t]  // == 1 - remove char from the list
            : c[z] = c[y + (c[z + t] = c[z])] = t; // == 0 - add char to the end of the list
    }
    return c[y + c[y]];
}

1

सी #, 143 बाइट्स

char c(string s){var l=s.Select(o=>Char.ToLower(o)).GroupBy(x=>x).Where(n=>n.Count()<2).Select(m=>m.Key).ToList();return l.Count()>1?l[1]:' ';}

1

TSQL, 128 बाइट्स

golfed:

DECLARE @ varchar(99)=',,zzzbb@kkkkkkJgg'

,@i INT=99WHILE @i>1SELECT
@i-=1,@=IIF(LEN(@)>LEN(x)+1,x,@)FROM(SELECT
REPLACE(@,SUBSTRING(@,@i,1),'')x)x PRINT SUBSTRING(@,2,1)

Ungolfed:

DECLARE @ varchar(99)=',,zzzbb@kkkkkkJgg'

,@i INT=99

WHILE @i>1
  SELECT
    @i-=1,@=IIF(LEN(@)>LEN(x)+1,x,@)
  FROM
    (SELECT 
       REPLACE(@,SUBSTRING(@,@i,1),'')x
    )x

PRINT SUBSTRING(@,2,1)

बेला


1

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

इनपुट STDIN है, आउटपुट STDOUT है। रूबी में, एक सरणी या स्ट्रिंग रिटर्न में आउट-ऑफ-इंडेक्स स्थिति nil, जो मुद्रित नहीं होती है।

String#countरूबी में एक अजीब समारोह है क्योंकि स्ट्रिंग के लिए होने वाली घटनाओं की संख्या की गणना की गई थी, जिसमें वह उस स्ट्रिंग में प्रत्येक अक्षर के लिए घटनाओं की संख्या को गिना जाता है। यह आमतौर पर कष्टप्रद होता है लेकिन हम इस समय इसका उपयोग अपने लाभ के लिए कर सकते हैं। String#swapcaseऊपरी और निचले मामले पत्रों को स्वैप करता है।

$><<gets.chars.reject{|c|$_.count(c+c.swapcase)>1}[1]

पुराना संस्करण जो विशेष वर्णों के विरुद्ध सुरक्षित नहीं था, जैसे .- 46 बाइट्स

$><<gets.chars.reject{|c|$_=~/#{c}.*#{c}/i}[1]

1

जावा 8, 172 157 बाइट्स

(String s)->{s=s.toLowerCase();for(char i=0,c;s.length()>0;s=s.replace(c+"","")){c=s.charAt(0);if(!s.matches(".*"+c+".*"+c+".*")&&++i>1)return c;}return' ';}

-15 बाइट्स .. डैंग I वापस गोल्फ में खराब था। ;)

स्पष्टीकरण:

इसे यहाँ आज़माएँ।

(String s)->{                          // Method with String parameter and character return-type
  s=s.toLowerCase();                   // Make the input-String lowercase
  for(char i=0,c;s.length()>0;         // Loop over the characters of `s`
      s=s.replace(c+"","")){           // And after every iteration, remove all occurrences of the previous iteration
    c=s.charAt(0);                     // Get the current first character
    if(!s.matches(".*"+c+".*"+c+".*")  // If it doesn't occur more than once
     &&++i>1)                          // And this was the second one we've found
      return c;                        // Return this second characters
  }                                    // End of loop
  return' ';                           // Else: return an empty character/nothing
}                                      // End of method

1

आर , 79 बाइट्स

function(z){y=tolower(el(strsplit(z,"")));x=table(y);y[y%in%names(x[x==1])][2]}

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

मुझे निश्चित रूप से ऐसा लग रहा है कि यहां से कुछ निकाला जा सकता है। लेकिन मुझे वास्तव में इस चुनौती का आनंद मिला।

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






0

जावास्क्रिप्ट (बाहरी पुस्तकालय का उपयोग करके) (107 बाइट्स)

मैंने लिखी गई लाइब्रेरी का उपयोग करके इसे कुचल दिया। सुनिश्चित नहीं है कि मुझे चर "एस" की घोषणा को गिनना है, जो प्रश्न में स्ट्रिंग है।

(s)=>_.From(s).ToLookup(y=>y.toLowerCase(),z=>z).Where(g=>g.Value.Count()==1).Select(x=>x.Key).ElementAt(1)

यह एक खाली स्ट्रिंग इनपुट, केवल एक गैर-दोहराए जाने वाले वर्ण और 2+ गैर-दोहराए गए वर्णों के साथ एक इनपुट को हैंडल करेगा

चित्र 1


क्या आपके पास पुस्तकालय का प्रश्न है? इसके अलावा, यह कोड गोल्फ होने के कारण, आप व्हॉट्सएप निकाल सकते हैं जहां आप कर सकते हैं
वैल्यू इंक

अरे, हाँ, यह github.com/mvegh1/Enumerable है । अभी तक कोई डॉक्स नहीं। क्षमा करें, मैं
व्हाट्सएप

आपको उत्तर निकाय में संभवतः इसका उल्लेख और लिंक करना चाहिए। इसके अलावा, बायटेकाउंट के बारे में, सर्वसम्मति से इसे एक अनाम लंबोदर (इसलिए s=> ...) में डाल दिया जाता है
वैल्यू इंक

ठीक, कोई समस्या नहीं। मैं अपने कोड से लिंक करके किसी को नाराज नहीं करना चाहता था, लेकिन मैंने उल्लेख किया कि मैंने अपने पुस्तकालय का उपयोग किया है। मैं अपना जवाब
लंबोदर के

0

क्लोजर, 109 बाइट्स

#(let[s(clojure.string/lower-case %)](or(second(remove(set(map(fn[[k v]](if(> v 1)k))(frequencies s)))s))""))

ऑउग, मुझे आशा है कि एक अधिक रसीला तरीका है।

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