প্রদত্ত স্ট্রিং থেকে একটি স্ট্রিং বের করুন


17

আপনাকে একটি স্ট্রিং এবং দুটি অক্ষর দেওয়া হয়েছে। স্ট্রিং থেকে আপনাকে এই অক্ষরগুলির মধ্যে স্ট্রিংটি মুদ্রণ করতে হবে।

ইনপুট

ইনপুটটিতে প্রথমে একটি স্ট্রিং থাকবে (খালি নয় বা null )। পরের লাইনে, দুটি স্পেস পৃথক করে পৃথক হবে।

চ্যালেঞ্জ

দুটি অক্ষরের মধ্যে স্ট্রিংটি ফিরিয়ে দিন

উদাহরণ

Hello! What's your name?
! ?

ফলাফল আউটপুট হতে হবে:

" What's your name"

বিধি

  • স্ট্রিংটি 100 টি অক্ষরের বেশি হবে না এবং কেবলমাত্র পরিসীমা (স্পেস) থেকে ~(টিলডে) অক্ষর কোডগুলি 0x20 থেকে 0x7E, সমেত) থাকবে I রেফারেন্সের জন্য ASCII টেবিলটি দেখুন ।
  • আপনাকে অবশ্যই stdin(বা নিকটতম বিকল্প) থেকে ইনপুট নিতে হবে ।
  • আউটপুটটি কোট ( ") দিয়ে বেষ্টিত হওয়া উচিত ।
  • আপনি একটি সম্পূর্ণ প্রোগ্রাম, বা একটি ফাংশন লিখতে পারেন যা ইনপুট নেয় এবং চূড়ান্ত স্ট্রিংটিকে আউটপুট দেয়
  • দুটি অক্ষরে কেবলমাত্র পরিসীমা (স্থান) থেকে ~(টিলডে) অক্ষর কোডগুলি 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
যদি স্ট্রিংগুলিতে একটি থাকে "? আমাদের কি অন্য একটি উক্তি দিয়ে কেবল এটি ঘিরে রাখা উচিত এবং এটির যত্ন নেওয়া উচিত নয়?
জিমি 23013

@ মার্টিনবাটনার, হ্যাঁ সম্পাদিত পরীক্ষার
কেসটি

@ ব্যবহারকারী23013, হ্যাঁ উদাহরণ ইনপুট: one"two-three \n" -আউটপুট: "two"( \nএকটি নতুন লাইন)
স্পিক্যাট্রিক্স

1
আমি একাধিকবার চিহ্নিতকারীদের প্রদর্শিত না হওয়া বা প্রদর্শিত না হওয়া সম্পর্কে ফেইডলি বিবরণের ফ্যান নই। আমি মনে করি ইনপুটগুলির শক্তিশালী গ্যারান্টি দিয়ে সমস্যাটি সমাধান করা আরও উপভোগ্য হবে।
xnor

উত্তর:


3

সিজেম, 34 33 32 বাইট

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

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন

ধারণা

  1. লাইন 2 থেকে দ্বিতীয় অক্ষর সরান।

  2. উভয় লাইনের মিল রয়েছে এমন সমস্ত অক্ষরের একক অনুলিপি নিয়ে একটি স্ট্রিং তৈরি করুন।

  3. ফলস্বরূপ স্ট্রিংটি দু'বার করুন এবং এর প্রথম দুটি অক্ষর বাতিল করুন discard

    এটি দ্বি-চরিত্রের স্ট্রিংয়ের ফলাফল দেয় (যদি লাইন 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

সিজেম, 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)]+'"')

অবরুদ্ধ সংস্করণ:

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

আমি এখানে আপনার কোড চালাচ্ছি কেন আমি কোনও আউটপুট দেখতে পাচ্ছি না ?
স্পিক্যাট্রিক্স

@ কুলগুয়ে এটি একটি নামবিহীন ফাংশন, সুতরাং আপনাকে এটিকে এই ->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>",?>,?<]জাতীয় কল করা দরকার [...]শেষে এই ফাংশনটি বলে।
ব্লুটোরেঞ্জ

@ ব্লুটোরেঞ্জ, ঠিক আছে এই সাজানোর কাজ, কিন্তু আমি শেষ পরীক্ষার কেসটি কীভাবে পরীক্ষা করব?
স্পিক্যাট্রিক্স

@ কুলগুই সাধারণত উদ্ধৃত স্ট্রিংগুলি ব্যবহার করুন:->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"," ","-"]
ব্লুটোরেঞ্জ করুন

এর সাথে ত্রুটি বাড়ানোর পরিবর্তে raiseআপনি raiseএকটি অপরিবর্তিত ভেরিয়েবল যেমন _বা এর সাথে প্রতিস্থাপন করতে পারেন y। এটি একটি নেমরার উত্থাপন করে। এছাড়াও, আমি মনে করি আপনি সুস্পষ্ট উদ্ধার ছাড়াই আরও কয়েকটি বাইট সংরক্ষণ করতে পারেন:->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

জাভাস্ক্রিপ্ট ( ES6 ), 125 123 বাইট

@ 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মামলার উদ্ধৃতি অনুপস্থিত ।
ডেনিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.