किसी दिए गए स्ट्रिंग से एक स्ट्रिंग निकालें


17

आपको एक स्ट्रिंग और दो अक्षर दिए गए हैं। आपको इन वर्णों के बीच स्ट्रिंग को स्ट्रिंग से प्रिंट करना होगा।

इनपुट

इनपुट में पहले एक स्ट्रिंग (खाली नहीं या नहीं null) होगी। अगली पंक्ति में, एक स्थान द्वारा अलग किए गए दो वर्ण होंगे।

चुनौती

दो वर्णों के बीच स्ट्रिंग लौटाएँ

उदाहरण

Hello! What's your name?
! ?

उत्पादन में परिणाम चाहिए:

" What's your name"

नियम

  • स्ट्रिंग 100 वर्णों से अधिक नहीं होगी और इसमें ASCII वर्ण ( रेंज ) से लेकर ~(टिल्ड) (वर्ण कोड 0x20 से 0x7E, समावेशी) शामिल होंगे। संदर्भ के लिए ASCII तालिका देखें ।
  • आपको stdin(या निकटतम विकल्प) से इनपुट लेना होगा ।
  • आउटपुट को उद्धरण ( ") के साथ घिरा होना चाहिए ।
  • आप एक पूर्ण कार्यक्रम, या एक फ़ंक्शन लिख सकते हैं जो इनपुट लेता है, और अंतिम स्ट्रिंग को आउटपुट करता है
  • दोनों वर्णों में केवल ASCII वर्ण (स्पेस) से लेकर ~(टिल्ड) (वर्ण कोड 0x20 से 0x7E, समावेशी) शामिल होंगे। संदर्भ के लिए ASCII तालिका देखें ।
  • इस बात की कोई गारंटी नहीं है कि दोनों पात्र स्ट्रिंग में होंगे।
  • यदि कोई भी वर्ण स्ट्रिंग में नहीं मिला है, तो प्रिंट करें "null"
  • यदि किसी भी वर्ण को एक स्ट्रिंग में एक से अधिक बार (जब तक कि दोनों वर्ण समान नहीं हैं) पाया जाता है, तो प्रिंट करें "null"
  • यदि दोनों वर्ण समान वर्ण हैं, तो स्ट्रिंग मुद्रित करें "null"

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

1)

<HTML>code</HTML>
> <                       --> "null"

2)

What's what?
' '                       --> "null"

3)

abcdefghijklmnopqrstuvwxyz
n k                       --> "lm"

4)

Testing...
e T                       --> ""

5)

Last test-case
  -                       --> "test"

स्कोरिंग

यह कोड गोल्फ है, इसलिए सबसे छोटा सबमिशन (बाइट्स में) जीतता है।


3
क्या अक्षर स्ट्रिंग में विपरीत क्रम में हो सकते हैं? यदि हां, तो यह एक परीक्षण मामले का उपयोग कर सकता है।
मार्टिन एंडर

1
यदि सबस्ट्रिंग में ए "हो तो क्या होगा ? क्या हमें इसे सिर्फ एक और उद्धरण उद्धरण के साथ घेरना चाहिए और उस पर ध्यान नहीं देना चाहिए?
jimmy23013

@ मार्टिनबटनर, हाँ। संपादित परीक्षण मामला देखें 3. मुझे उस बारे में याद दिलाने के लिए धन्यवाद
स्पाइकट्रिक्स

@ user23013, हाँ। उदाहरण इनपुट: one"two-three \n" -आउटपुट: "two"( \nएक नई
पंक्ति है

1
मैं कई बार प्रदर्शित नहीं होने या प्रदर्शित नहीं करने वाले मार्करों के बारे में पूरी तरह से जानकारी का प्रशंसक नहीं हूं। मुझे लगता है कि इनपुट पर मजबूत गारंटी के साथ समस्या को हल करने में अधिक सुखद होगा।
xnor

जवाबों:


3

CJam, 34 33 32 बाइट्स

'"l_l2%&2*2>NerN/0"null"t_,3=='"

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

विचार

  1. पंक्ति 2 से दूसरा वर्ण निकालें।

  2. सभी वर्णों की एक ही प्रति से मिलकर एक तार को बनाते हैं जो दोनों पंक्तियों में समान है।

  3. परिणामी स्ट्रिंग को दो बार दोहराएं और इसके पहले दो वर्णों को छोड़ दें।

    इसका परिणाम दो-वर्ण स्ट्रिंग में होता है (यदि पंक्ति 2 से वर्ण भिन्न होते हैं और दोनों पंक्ति 1 में होते हैं) या रिक्त स्ट्रिंग।

  4. पंक्ति में परिणामी स्ट्रिंग के वर्णों को लाइनफ़ीड द्वारा 1 में बदलें।

  5. स्प्लिट लाइन 1 को लाइनफीड पर।

    परिणामी सरणी का दूसरा तत्व वांछित स्ट्रिंग होगा यदि सरणी में तीन चंक होते हैं।

  6. सरणी के पहले तत्व को स्ट्रिंग नल के साथ बदलें ।

  7. सरणी का दूसरा तत्व प्राप्त करें यदि उसकी लंबाई 3 है और पहले अन्यथा।

  8. प्रीपेन्ड करें और एक डबल उद्धरण जोड़ें।

कोड

'"       e# Push a double quote.
l_       e# Read one line from STDIN. Push a copy.
l2%      e# Read one line from STDIN. Only keep characters at odd indexes.
&        e# Intersect both strings.
2*2>     e# Repeat the intersection twice and discard the first two characters.
Ner      e# Replace the characters of the resulting string with linefeeds.
N/       e# Split the result at linefeeds.
0"null"t e# Replace the first element of the resulting array with "null".
_,3=     e# Push 1 if the length of the array is 3 and 0 otherwise.
=        e# Retrieve the corresponding element from the array.
'"       e# Push a double quote.

2

CJam, 38 बाइट्स

l:Tl2%f#_W-$2,=2,@f#$~T<>1>"null"?'"_o

बहुत लंबा...

व्याख्या

l:T             e# Read a line and store in T.
l2%             e# Read the two characters into a list.
f#              e# Find each character in the list of two characters.
_W-             e# Copy and remove not found results.
$2,=            e# Sort and check if the result is exactly [0 1].
                e# If true:
2,@f#           e# Find 0 and 1 in the original results.
$               e# Sort.
~T<>            e# Get a slice of T between the two positions (left-closed).
1>              e# Remove the first character.
                e# If false:
"null"          e# The string "null".
?               e# End if.
'"_o            e# Append a quote and output another quote at the beginning.

2

पायथ, 37 36 34 बाइट्स

p?"null"njT9m/zd{J%2wt:z.uSmxzdJNN

@ बसाक को दो बाइट बचाने के लिए धन्यवाद।

इसे ऑनलाइन आज़माएं: पायथ कंपाइलर / एक्ज़ीक्यूटर

स्पष्टीकरण:

                                     implicit: z = first input line
                    w                second input line
                  %2                 only use every 2nd char
                 J                   and store in J
                {J                   set(J), gets rid of duplicates
            m/zd                     count the number of appearances of each char
        njT1                         != [1, 1] ([1,1] is 10 in base 9)
 ?      njT1m/zd{J%2w                ... if [1,1] != number of appearances else ...
  "null"                               string "null"
                           mxzdJ     find the index for each char
                          S          sort the indices
                      :z.u           take the substring of z using these indices
                     t               remove the first char

p                               NN  print '"' + ... + '"'

*2]1से छोटा है [1 1), और - ... 1अभी भी छोटा है।
isaacg

@ आइसाकग -...1काम नहीं करता है, क्योंकि मुझे यह भी जांचने की आवश्यकता है कि वास्तव में दो नंबर हैं।
जकुबे

2
मैं सिर्फ बनाने के लिए एक 3 चरित्र जिस तरह के बारे में सोचा [1 1): jT9
isaacg

2

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

s,i=input(),input();a,b=s.find(i[0]),s.find(i[2]);print('"'+('null',[s[a+1:b],s[b+1:a]][b<a])[(s.count(i[0])==s.count(i[2])==1)*(a!=b)*(a*b>-1)]+'"')

Ungolfed संस्करण:

string, chars = input(), input()
a, b = string.find(chars[0]), string.find(chars[2])

    if string.count(chars[0]) == string.count(chars[2]) == 1 and a!=b and a*b>-1:
        if b<a:
            print('"' + string[b+1:a] + '"')
        else:
            print('"' + string[a+1:b] + '"')
else:
    print('"null"')

यह यहाँ मेरा पहला उत्तर है, इसलिए युक्तियों और आलोचनाओं को बहुत सराहा गया।


2

रूबी, 108 95 94

->s,f,l{a,b=[f,l].map{|u|(f==l||s.count(u)>1)&&abort('"null"');s.index u}.minmax;p s[a+1...b]}

और ungolfed संस्करण के लिए

def between(string, first, last)
    left, right = [first, last].map do |substring|
        abort('"null"') if first == last || string.count(substring) != 1
        string.index(substring)
    end.minmax
    p string[left + 1 ... right]
end

जब मैं आपका कोड यहां चलाऊंगा तो मुझे कोई आउटपुट क्यों नहीं मिल सकता है ?
स्पिकैट्रिक्स

@CoolGuy यह एक अनाम समारोह है, तो आप इसे इस तरह कॉल करने की आवश्यकता पर अंत क्या फ़ंक्शन को कॉल है। ->s,f,l{begin a,b=[f,l].map{|u|raise if f==l||s.count(u)>1;s.index u}.minmax;p s[a+1...b];rescue;p'null'end}["<html>test</html>",?>,?<][...]
ब्लुटोरांगे

@blutorange, Ok। उस तरह का काम किया है, लेकिन मैं अंतिम परीक्षण मामले का परीक्षण कैसे करूं?
स्पाइकट्रिक्स

@CoolGuy आमतौर पर उद्धृत स्ट्रिंग्स का उपयोग करें:->s,f,l{begin a,b=[f,l].map{|u|raise if f==l||s.count(u)>1;s.index u}.minmax;p s[a+1...b];rescue;p'null'end}["Last test-case"," ","-"]
blutorange

के साथ एक त्रुटि बढ़ाने के बजाय raise, आप raiseएक अपरिभाषित चर जैसे _या के साथ बदल सकते हैं y। यह एक NameError उठाता है। इसके अलावा, मुझे लगता है कि आप एक स्पष्ट बचाव के बिना कुछ और बाइट्स बचा सकते थे:->s,f,l{a,b=[f,l].map{|u|(f==l||s.count(u)!=1)&&p('null')&&exit;s.index u}.minmax;p s[a+1...b]}
ब्लुटोरेंज

1

सी, 192 बाइट्स

f(){char b[101],c,d,*p,*t;scanf("%[^\n]%*c%c%*c%c",b,&c,&d);p=strchr(b,c);t=strchr(b,d);c==d||!p||!t||strchr(p+1,c)||strchr(t+1,d)?puts("\"null\""):printf("\"%s\"",p<t?(*t=0,p+1):(*p=0,t+1));}

अघोषित कोड:

f()
{
    char b[101],c,d,*p,*t; //Variables

    scanf("%[^\n]%*c%c%*c%c",b,&c,&d); //Scan input

    p=strchr(b,c);
    t=strchr(b,d); //Find occurrence of characters

    c==d         ||  //If both characters are the same
    !p           ||  //If no occurrence of first character found
    !t           ||  //If no occurrence of second character found
    strchr(p+1,c)||  //If two occurrence of first character found
    strchr(t+1,d) ?  //If two occurrence of second character found
    puts("\"null\"") //Print "null"
                  :  //else
    printf("\"%s\"",p<t?(*t=0,p+1):(*p=0,t+1)); //print the string
}

इसका परीक्षण यहां करें


1

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

x=input()
a=input()
a,b=a[0],a[2]
if(a!=b)&(x.count(b)==x.count(a)==1):
 if x.index(a)>x.index(b):q=a;a=b;b=q
 print('"'+x.split(a)[1].split(b)[0]+'"')
else:print('"null"')

1

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

Idea ने @ edc65 के समाधान से भारी चोरी की।

[a,,b]=(p=prompt)(s=p()),[,c,d,e,,f]=s.split(RegExp('(['+(a+b).replace(/\W/g,'\\$&')+'])'))
p('"'+(!e||f||c==e?null:d)+'"')


मुझे ज्यादातर पसंद है [a,,b]=, मैं अगली बार इसका इस्तेमाल करूंगा। जैसा कि रेगेक्स एक परेशानी है, यहाँ एक [a,,b]=(P=prompt)(s=P()), P((s=s.split(a)).length==2& (s=[].concat(...s.map(s=>s.split(b)))).length==3 ?``"${s[1]}"``:null)
रेगीक्स

(आखिरी तार टेम्प्लेट है, एक टिप्पणी में डालना मुश्किल है)
edc65

1

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

import re,sys
s,p=sys.stdin
m=re.match('[^%s]*([%s])([^%s]*)([%s])[^%s]*$'%((p[0]+p[2],)*5),s)
if m:g=m.group
print'"null"'if not m or g(1)==g(3)else'"'+g(2)+'"'

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

यहाँ एक उत्तर के लिए पायथन का उपयोग करने का यह मेरा पहला प्रयास है। इसलिए संभावित सुधारों पर प्रतिक्रिया बहुत स्वागत योग्य है। मुझे विशेष रूप से यह महसूस होता है कि प्रिंट स्टेटमेंट को छोटा करने का एक तरीका होना चाहिए।



1

गोल्फलुआ, 132 बाइट्स

L=I.r()I,J=I.r():m("(.) (.)")i=L:f(I)j=L:f(J)K,c=L:g(I,'')_,b=K:g(J,'')?i>j i,j=j,i$w((i==j|c+b!=2)&'"null"'|'"'..L:s(i+1,j-1)..'"')

बहुत बदसूरत जवाब। इनपुट बिट थोड़ा मोटा है (और दो लाइनों की आवश्यकता है, पहले स्ट्रिंग के साथ और दूसरा स्लाइस पात्रों के साथ)। झंडे के स्थानों को खोजना सीधा-आगे है, लेकिन अन्य उत्तरों के साथ प्रतिस्पर्धा करने के लिए बस बहुत लंबा है। आउटपुट बहुत आसान है। एक समान लुआ कार्यक्रम होगा

Line1 = io.read()
Line2 = io.read()
I,J = Line2:match("(.) (.)")     -- boobs return the char flags
i = Line1:find(I)                -- find location of flags
j = Line1:find(J)
K,c = Line1:gsub(I,'')           -- replace flag w/ empty & store in K
_,b = K:gsub(J,'')               -- taking K ensures single flags fail
if i > j then i,j=j,i end        -- ensure we start low to high
if i==j or not (c+b == 2) then   -- if i & j are the same or not 2 counts, fail
   print('"null"')
else                             -- print the string otherwise
   print('"'..Line1:sub(i+1,j-1)..'"')
end

क्या कोई ऑनलाइन संकलक है जिसे मैं गोल्फ संस्करण का परीक्षण कर सकता हूं?
स्पिकट्रिक्स

मेरा मानना ​​है कि कोई ऑनलाइन संस्करण नहीं है, लेकिन स्रोत कोड उपलब्ध है । यह लुआ का 1: 1 मानचित्रण है (लुआ की व्याख्या या अनुवाद नहीं), इसलिए लुआ कोड को आइडोन पर परीक्षण किया जा सकता है ।
काइल कानोस

0

पर्ल, 65

#!perl -p0
$.*=s/\Q$1/
/g while s/ ?(.)\z//;/
(.*)
/;$_=$.-1?null:"\"$1\""

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


अच्छी नौकरी। यह हालांकि दोहरे उद्धरण चिह्नों को याद कर रहा है।
डेनिस

@ डेनिस, तय। मैंने उदाहरण को गलत समझा।
नटकी

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