প্যালিনড্রোম তৈরি করতে একটি চিঠি সরান


15

সমস্যা

ধরা যাক যে একটি শব্দ প্রায় একটি প্যালিনড্রোম তবে যদি এর কোনও একটি অক্ষর সরিয়ে নেওয়া সম্ভব হয় যাতে শব্দটি প্যালিনড্রোমে পরিণত হয়। আপনার কাজটি এমন একটি প্রোগ্রাম লেখা যা কোনও প্রদত্ত শব্দের জন্য একটি প্যালিনড্রোম পাওয়ার জন্য কোন বর্ণটি সরানো উচিত তা নির্ধারণ করে।

যে কোনও প্রোগ্রামিং ভাষায় এটি করতে সবচেয়ে সংক্ষিপ্ত কোড।

ইনপুট

ইনপুটটিতে 2 থেকে 1000 বর্ণের দৈর্ঘ্যের বড় হাতের অক্ষরের একটি শব্দ থাকে।

আউটপুট

অপসারণ করা উচিত চিঠিটির 1-সূচিযুক্ত অবস্থান (বামতম চিঠির অবস্থান 1, পরেরটির পজিশন 2 এবং তাই রয়েছে) আউটপুট করুন। প্যালিনড্রোমের দিকে পরিচালিত সম্ভাব্য পছন্দগুলি থাকলে, এই অবস্থানগুলির মধ্যে যে কোনওটিকে আউটপুট করুন। নোট করুন যে প্রদত্ত শব্দটি ইতিমধ্যে একটি প্যালিনড্রোম হলেও আপনার একটি চিঠি অপসারণ করতে হবে। প্রদত্ত শব্দটি যদি প্রায় কোনও প্যালিনড্রোম না হয় তবে আউটপুট -1।


উদাহরণ

ইনপুট:

racercar

আউটপুট উত্পাদন করতে পারে:

5

কারণ 5অক্ষর অপসারণ উত্পাদন করে racecar, যা একটি প্যালিনড্রোম।

এছাড়াও, ইনপুট

racecar

এখনও আউটপুট উত্পাদন করতে পারেন

4

কারণ 4উত্পাদনের raccarজন্য অক্ষর অপসারণ এখনও একটি প্যালিনড্রোম।


5
কোনও উদাহরণ পোস্ট করা হয়নি? এবং যদি প্যালিনড্রোমে ইনপুট তৈরি করা সম্ভব না হয় তবে আউটপুট কী হবে?
প্রোগ্রামারডান

3
@ আর্ম 103 আপনি এখনও যে উদাহরণগুলি উল্লেখ করছেন তা মিস করছেন
মার্টিন ইন্ডার

27
সতর্কতা: "(উদাহরণ 3 দেখুন")। এটি সূচিত করে যে এটি হোমওয়ার্ক কারণ কোনও উদাহরণ পোস্ট করা হয়নি।
জাস্টিন

3
@ কুইনকুনস ম্যাথমেটিক জমাতে থ্রেডটিও অবশ্যই পড়তে ভুলবেন না। :-)
ক্রিস জেস্টার-ইয়ং

3
এই প্রশ্নটি অফ-টপিক হিসাবে উপস্থিত বলে মনে হচ্ছে কারণ উদাহরণটি 3 প্রশ্ন থেকে অনুপস্থিত।
ডেভনুল

উত্তর:


10

জে - 31 25 চর

(_1{ ::[1+[:I.1(-:|.)\.])

জে এর জন্য বেশিরভাগ স্ট্যান্ডার্ড ভাড়া, তাই আমি ঠিক শীতল বিটগুলি দেখিয়ে দেব।

  • ক্রিয়াপদকে আউটফিক্স\. বলা হয়x u\. yদৈর্ঘ্যের প্রতিটি ইনফিক্স xথেকে সরিয়ে দেয় yএবং uপ্রতিটি অপসারণের ফলাফলের জন্য প্রয়োগ করে। এখানে, x1, yইনপুট স্ট্রিং, এবং uহয় (-:|.), স্ট্রিং তার বিপরীত সাথে মেলে কিনা একটি পরীক্ষা। সুতরাং এই প্রয়োগের ফলাফলটি \.হ'ল বুলিয়ানগুলির একটি তালিকা, প্রতিটি চরিত্রের জায়গায় 1 যার অপসারণটি ইনপুটটিকে প্যালিনড্রোম করে তোলে।

  • I.উপরে 1 থেকে সমস্ত সূচকগুলির (0-উত্স) তালিকা তৈরি করে যেখানে 1 যুক্ত হয়েছিল 1 যুক্ত করে 1+এই 1-উত্স সূচকগুলি তৈরি করে। যদি কোনও সূচকগুলি 1 না হয় তবে তালিকাটি খালি। এখন, আমরা শেষ উপাদানটি সাথে রাখার চেষ্টা করি _1{। (আমাদের অপসারণযোগ্য কোনও অক্ষরের আউটপুট দেওয়ার অনুমতি দেওয়া হয়!) এটি যদি কাজ করে তবে আমরা ফিরে আসি। তবে, তালিকাটি খালি থাকলে, কোনও উপাদানই ছিল না, সুতরাং {একটি ডোমেন ত্রুটি ছুঁড়ে দেয় যা আমরা ধরা ::এবং এর সাথে -1 প্রদান করি [

ব্যবহার (মনে রাখবেন এটি NB.মন্তব্যের জন্য রয়েছে):

   (_1{ ::[1+[:I.1(-:|.)\.]) 'RACECAR'    NB. remove the E
4
   (_1{ ::[1+[:I.1(-:|.)\.]) 'RAACECAR'   NB. remove an A
3
   (_1{ ::[1+[:I.1(-:|.)\.]) 'RAAACECAR'  NB. no valid removal
_1

আমার জে শিখতে হবে পাইথন প্রোগ্রামারটির জন্য কোন টিউটোরিয়াল?
27uʎs

1
@ সিনথেটিকা ​​অফিসিয়ালটি ভাল
জন ডিভোরাক

2
@ সিনথেটিকা ​​পাইথোনারদের জন্য বিশেষত কিছুই নয়, তবে জে ফর সি প্রোগ্রামাররা যে কেউ অপরিহার্য প্রোগ্রামিং থেকে স্থানান্তরিত হওয়ার জন্য এক দুর্দান্ত উত্স।
অ্যালগরিদমশর্ক

10

পিএইচপি পাইথন নয় (73):

[a[:g]+a[g+1:]==(a[:g]+a[g+1:])[::-1] for g in range(len(a))].index(1)

স্ট্রিংটি যেখানে আপনি যাচাই করতে চান। তবে এটি প্যালিনড্রোমে পরিণত করতে না পারলে এটি ত্রুটি ছুঁড়ে। পরিবর্তে, আপনি ব্যবহার করতে পারে

try:print [a[:g]+a[g+1:]==(a[:g]+a[g+1:])[::-1] for g in range(len(a))].index(True)
except ValueError:print -1

সম্পাদনা: না, অপেক্ষা করুন, এটি কাজ করে!

try: eval("<?php $line = fgets(STDIN); ?>")
except: print [a[:g]+a[g+1:]==(a[:g]+a[g+1:])[::-1] for g in range(len(a))].index(1)

ধন্যবাদ, এটি প্রকৃতপক্ষে এই স্ক্রিপ্টের পিএইচপি-বিষয়বস্তুগুলি প্রায় 25% বাড়িয়েছে (এটিই আপনি চান, তাই না?)


10
"পিএইচপি নয়" এর জন্য +1;)
মার্টিন এন্ডার

1
<? পিএইচপি $ লাইন = fgets (STDIN); ?>
ব্যবহারকারী011001

2
@ ব্যবহারকারী011001 কোথায় এটি মাপসই করা হবে?
5uʎs

1
আপনি 1>0পরিবর্তে লেখার Trueমাধ্যমে ]এবং এর forমধ্যে স্থানটি সরিয়ে একটি চর সংরক্ষণ করতে পারেন...[::-1] for g...
কেয়া

1
@Kaya আপনি কেবল ব্যবহার করতে পারেন 1পরিবর্তে Trueপাশাপাশি। 1 == True, সর্বোপরি.
আরশাজী

5

গণিত, 106 98 87 91 টি অক্ষর

আমি মনে করি লম্বা ফাংশন নামগুলি দ্বারা আমি সামান্য প্রতিবন্ধী, তবে এই জাতীয় সমস্যাগুলি ম্যাথমেটিকায় বেশ মজাদার:

f=Tr@Append[Position[c~Drop~{#}&/@Range@Length[c=Characters@#],l_/;l==Reverse@l,{1}],{-1}]&

এটি কিছু সতর্কতা নিক্ষেপ করে, কারণ l_প্যাটার্নটি ভিতরে সমস্ত অক্ষরের সাথেও মেলে, যাReverse কাজ করে না। কিন্তু ওহে, এটা কাজ করে!

কিছুটা নাড়িত:

f[s_] := 
  Append[
    Cases[
      Map[{#, Drop[Characters[s], {# }]} &, Range[StringLength[s]]], 
      {_, l_} /; l == Reverse[l]
    ], 
    {-1}
  ][[1, 1]]

2
@ আর্ম 103 আমি পারলাম, তবে আমি তা অন্য কারও কাছে রেখে দেব। ;)
মার্টিন ইন্ডার

2
@ আর্ম 103 অপেক্ষা করুন, এটি কি আপনার হোমওয়ার্ক?
জন ডিভোরাক

2
@ জনডভোরাক সিএস কোর্স রয়েছে যা পিএইচপি ব্যবহার করে? এটা ভীতিজনক হবে।
ক্রিস জেস্টার-ইয়ং

2
@ আর্ম 103 নং। আপনি ;-) পারবেন না
জন ডিভোরাক

4
@ জনডভোরাক হুম, গণিতের একটি প্রোগ্রাম কী ?
মার্টিন ইন্ডার

5

গল্ফস্ক্রিপ্ট, 28 26 টি অক্ষর

:I,,{)I/();\+.-1%=}?-2]0=)

2 টি অক্ষর ছোট করার জন্য পিটারকে ধন্যবাদ। অনলাইনে পরীক্ষার কেসগুলি ব্যবহার করে দেখুন :

> "RACECAR" 
4
> "RAACECAR" 
2
> "RAAACECAR" 
-1
> "ABCC1BA" 
5
> "AAAAAA" 
1
> "ABCDE" 
-1
> "" 
-1
> "A" 
1

অনুমান করুন এখানে আরও একটি ছোট উপায় থাকতে হবে তবে আমি এটি খুঁজে পাইনি।
হাওয়ার্ড 21

RACECARএখনও ই এর সাথে একটি প্যালিনড্রোম।
চাচায়েত

@ আঙ্কেলমেট, হ্যাঁ অনুমানের দণ্ডিত বাক্য।
পিটার টেলর

কেন -2]$-1=)? সেই ব্লকের শুরুতে আপনার স্ট্যাকের সর্বাধিক একটি আইটেম রয়েছে, যাতে আপনি সহজেই সংক্ষিপ্ত করে নিতে পারেন -2]0=)। (বা একই দৈর্ঘ্যের জন্য, ]-2or)আমি orবিশেষ ক্ষেত্রে পছন্দ করতে শিখেছি )।
পিটার টেলর 22

2
@ গোয়ার্ড যদি আমার কাছে প্রতিবারের মতো নিকেল থাকে তবে আমি গল্ফস্ক্রিপ্টটি সম্পর্কে এমনভাবে অনুভব করি ...
অ্যালগরিদমশর্ক

3

রিবোল (৮১)

r: -1 repeat i length? s[t: head remove at copy s i if t = reverse copy t[r: i]]r

রেবোল কনসোলে ব্যবহারের উদাহরণ:

>> s: "racercar"
== "racercar"

>> r: -1 repeat i length? s[t: head remove at copy s i if t = reverse copy t[r: i]]r
== 5

>> s: "1234"
== "1234"

>> r: -1 repeat i length? s[t: head remove at copy s i if t = reverse copy t[r: i]]r 
== -1


শেষ প্যালিনড্রোমের উপরের সূচকগুলি পাওয়া গেছে। একটি বিকল্প সমাধান (85 অক্ষর) যা পাওয়া প্রতিটি প্যালিনড্রোম দেয় তা হ'ল:

collect[repeat i length? s[t: head remove at copy s i if t = reverse copy t[keep i]]]

সুতরাং "racercar"এই জন্য তালিকা ফিরে হবে [4 5]


আপনি যদি রেবমু ডায়ালেক্টটি ব্যবহার করেন তবে মূল সমাধানটি হ'ল 37 টি অক্ষর, মূলত একই কোড হওয়া সত্ত্বেও :-) রেবুমু / আরগস হিসাবে আহ্বান করুন "Rng01rpNl? A [ThdRMatCYaNieTrvCYt [আরএন]] আর" "রেসকার" । মনে রাখবেন যে রেব্মু ডকুমেন্টেশনটি উন্নত হয়েছে, এবং সাম্প্রতিক পরিবর্তনগুলি এটিকে কিছুটা শক্ত করে দিয়েছে ... তবুও প্রত্যেকের প্রতিক্রিয়া খুঁজছেন এবং তাদের ডি এটি ব্যবহার শুরু করার আগেই । :-)
হোস্টাইলফোর্ক বলেছেন যে এসই

3

সি #, 134 অক্ষর

static int F(string s,int i=0){if(i==s.Length)return-1;var R=s.Remove(i,1);return R.SequenceEqual(R.Reverse())?i+1:F(s,i+1);}

আমি জানি আমি হেরেছি :( তবে এটি এখনও মজাদার ছিল : ডি

পঠনযোগ্য সংস্করণ:

using System.Linq;

// namespace and class

static int PalindromeCharIndex(string str, int i = 0)
{
    if (i == str.Length) return -1;
    var removed = str.Remove(i, 1);
    return removed.SequenceEqual(removed.Reverse()) 
        ? i+1
        : PalindromeCharIndex(str, i + 1); 
}

3
ইয়ে মজা !!!!! :)
অ্যালমো

1
গল্ফযুক্ত সংস্করণে, সংজ্ঞাযুক্ত Rএবং ব্যবহৃত হয় কোথায়?
টুথব্রাশ

ওহ হ্যাঁ, এটির আর = = এস বলা উচিত em সরান (i, 1)। ভাল ক্যাচ
উইল নিউটন

3

স্ট্যাক্স , 8 10 বাইট

ú·àA÷¡%5Ñ╙

এটি চালান এবং এটি ডিবাগ করুন

এই প্রোগ্রামটি সমস্ত 1-ভিত্তিক সূচকগুলি দেখায় যা স্ট্রিং থেকে প্যালিনড্রোম গঠনে সরানো যেতে পারে। এবং যদি কিছু না থাকে তবে এটি -1 দেখায়।


2
কোনও প্যালিনড্রোম না পাওয়া গেলে এটি -1 এর পরিবর্তে শেষ সূচকটি আউটপুট করে (যেমন এর পরিবর্তে aaabbআউটপুট )। 5-1
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন: ঠিক আপনি আছেন। আমি এটি 2 বাইট ব্যয়ে স্থির করেছি।
পুনরাবৃত্ত

2

রুবি (61):

(1..s.size+1).find{|i|b=s.dup;b.slice!(i-1);b.reverse==b}||-1

এখানে, একটি রুবি সমাধান আছে। এটি চরিত্রের অবস্থানটি মুছে ফেলার জন্য বা -1 করা সম্ভব না হলে ফিরিয়ে দেবে।

আমি সাহায্য করতে পারি না তবে অনুভব করতে পারি যে ডুপ এবং স্লাইস বিভাগ দিয়ে আরও উন্নতি করা যেতে পারে, তবে রুবির কাছে একটি স্ট্রিং পদ্ধতি রয়েছে যা একটি নির্দিষ্ট সূচীতে একটি অক্ষর মুছে ফেলবে এবং নতুন স্ট্রিং -__- ফিরিয়ে দেবে বলে মনে হচ্ছে না।

মন্তব্য অনুসারে সম্পাদনা করা হয়েছে, টাই!


1
আপনি কোনও ফাংশন / পদ্ধতিতে মোড় না রেখে কিছু জায়গা বাঁচাতে পারেন। তবে আপনার কোডটি বর্তমানে 0-ভিত্তিক সূচকটি ফেরত দেয় (1-ভিত্তিক হওয়া প্রয়োজন) এবং -1কোনও প্যালিনড্রোম না পাওয়া গেলে এটিও ফিরে আসতে হবে।
draegtun

স্থির -1, ধন্যবাদ। আপনার মনে কী আছে তা নিশ্চিত না হলেও এটি একটি পদ্ধতি গ্রহণের বিষয়ে আমার ধারণা আছে।
মাইক ক্যাম্পবেল

ঠিক আছে, বোর্ডে আপনার পরামর্শ নিয়ে আবার লিখেছেন :), টাই।
মাইক ক্যাম্পবেল

আপনাকে স্বাগতম! এখন এটি আরও বেশি ভাল :) +1
ড্র্যাগটুন

2

05 এ বি 1 ই , 10 বাইট

gL.Δõs<ǝÂQ

এটি অনলাইনে চেষ্টা করুন বা আরও কিছু পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

g           # Get the length of the (implicit) input-string
 L          # Create a list in the range [1,length]
          # Find the first value in this list which is truthy for:
            # (which will output -1 if none are truthy)
    õ       #  Push an empty string ""
     s      #  Swap to get the current integer of the find_first-loop
      <     #  Decrease it by 1 because 05AB1E has 0-based indexing
       ǝ    #  In the (implicit) input-String, replace the character at that index with
            #  the empty string ""
        Â   #  Then bifurcate the string (short for Duplicate & Reverse copy)
         Q  #  And check if the reversed copy is equal to the original string,
            #  So `ÂQ` basically checks if a string is a palindrome)
            # (after which the result is output implicitly)

2

পাইথন নয় পিএইচপি ,85 83 81 বাইট

while($argn[$x])$s!=strrev($s=substr_replace($argn,'',$x++,1))?:die("$x");echo-1;
  • -২ বাইট @ নাইট 2 কে ধন্যবাদ!

এটি অনলাইন চেষ্টা করুন!

অযথা পুনরুক্তিযোগ্য:

পিএইচপি , 96 বাইট

function f($a,$b='',$d=1){return$a?$c==strrev($c=$b.$e=substr($a,1))?$d:f($e,$b.$a[0],$d+1):-1;}

এটি অনলাইন চেষ্টা করুন!


1

হাস্কেল, 107 টি অক্ষর:

(x:y)!1=y;(x:y)!n=x:y!(n-1)
main=getLine>>= \s->print$head$filter(\n->s!n==reverse(s!n))[1..length s]++[-1]

একটি ফাংশন হিসাবে ( 85 অক্ষর ):

(x:y)!1=y;(x:y)!n=x:y!(n-1)
f s=head$filter(\n->s!n==reverse(s!n))[1..length s]++[-1]

মূল অবারিত সংস্করণ:

f str = case filter cp [1..length str] of
          x:_ -> x
          _   -> -1
    where cp n = palindrome $ cut n str
          cut (x:xs) 1 = xs
          cut (x:xs) n = x : cut xs (n-1)
          palindrome x = x == reverse x

1

সি # (184 টি অক্ষর)

আমি স্বীকার করি যে কোড-গল্ফিংয়ের জন্য এটি সেরা ভাষা নয় ...

using System.Linq;class C{static void Main(string[]a){int i=0,r=-1;while(i<a[0].Length){var x=a[0].Remove(i++,1);if(x==new string(x.Reverse().ToArray()))r=i;}System.Console.Write(r);}}

ফর্ম্যাট এবং মন্তব্য:

using System.Linq;

class C
{
    static void Main(string[] a)
    {
        int i = 0, r = -1;
        // try all positions
        while (i < a[0].Length)
        {
            // create a string with the i-th character removed
            var x = a[0].Remove(i++, 1);
            // and test if it is a palindrome
            if (x == new string(x.Reverse().ToArray())) r = i;
        }
        Console.Write(r);
    }
}

1

সি # (৮৪ টি অক্ষর)

int x=0,o=i.Select(c=>i.Remove(x++,1)).Any(s=>s.Reverse().SequenceEqual(s))?x:-1;

লিনিকপ্যাড বিবৃতিটি ভেরিয়েবলটি iইনপুট স্ট্রিংটি ধারণ করবে বলে আশা করে । আউটপুট oভেরিয়েবলের মধ্যে সংরক্ষণ করা হয় ।


1

হাস্কেল, ৮০

a%b|b<1=0-1|(\x->x==reverse x)$take(b-1)a++b`drop`a=b|1<2=a%(b-1)
f a=a%length a

এভাবে ডাকা:

λ> f "racercar"
5


0

হাস্কেল, 118 সি

m s|f s==[]=(-1)|True=f s!!0
f s=[i|i<-[1..length s],r s i==(reverse$r s i)]
r s i=let(a,_:b)=splitAt (i-1) s in a++b

Ungolfed:

fix s
    |indices s==[] = (-1)
    |True = indices s!!0
indices s = [i|i<-[1..length s],remove s i==(reverse$remove s i)]
remove s i = let (a,_:b) = (splitAt (i-1) s) in a++b

0

জেলি , 17 14 বাইট

ŒPṖLÐṀṚŒḂ€TXo-

এটি অনলাইন চেষ্টা করুন!

           X      A random
          T       truthy index
ŒP                from the powerset of the input
  Ṗ               excluding the input
   LÐṀ            and all proper subsequences with non-maximal length
      Ṛ           reversed
       ŒḂ€        with each element replaced with whether or not it's a palindrome,
            o-    or -1.

যেহেতু পুরানো সংস্করণটির সম্পাদনা ইতিহাসে প্রদর্শিত না হওয়ার জন্য আমি আমার পদ্ধতির দ্রুত পরিবর্তন করেছি, এটি হ'ল: ŒPṚḊŒḂ€TṂ©’<La®o-


0

ব্র্যাচল্যাগ , 24 বাইট

{l+₁≥.ℕ₂≜&↔⊇ᶠ↖.tT↔T∨0}-₁

এটি অনলাইন চেষ্টা করুন!

অনেক দীর্ঘ মনে হচ্ছে।

আউটপুট 2-সূচকযুক্ত হতে পারলে দুটি বাইট সংক্ষিপ্ত হতে পারে :

l+₁≥.ℕ₂≜&↔⊇ᶠ↖.tT↔T∨_1

দুটি আগের এবং আরও খারাপ পুনরাবৃত্তি:

ẹ~c₃C⟨hct⟩P↔P∧C;Ȯ⟨kt⟩hl<|∧_1
l>X⁰ℕ≜<.&{iI¬tX⁰∧Ih}ᶠP↔P∨_1

গ্লোবাল ভেরিয়েবলের পরবর্তীটির ব্যবহারের জন্য একটি পৃথক পরীক্ষার শিরোনাম প্রয়োজন



0

ওল্ফ্রাম ভাষা (ম্যাথমেটিকা) , 56 বাইট

FirstCase[Range@Tr[1^#],a_/;PalindromeQ@Delete[#,a],-1]&

এটি অনলাইন চেষ্টা করুন!

অক্ষরের তালিকা হিসাবে ইনপুট নেয়। স্ট্রিং ইনপুট জন্য, সংযোজন @*Characters

PalindromeQ2015 সালে চালু করা হয়েছিল। বিকল্প ব্যয়গুলি 4 বাইট



0

সি (জিসিসি) , 180 168 159 157 140 139 বাইট

f(char*s){int j=strlen(s),m=j--/2,p=-1,i=0;for(;p&&i<m;)p=s[i++]^s[j--]&&!++p?s[i]-s[j+1]?s[i-1]-s[j]?p:j--+2:i++:p;return p<0?m+1:p?p:-1;}

এটি অনলাইন চেষ্টা করুন!

2 16সিলিংক্যাটের জন্য 17 বাইট চাঁচা বন্ধ! এবং আরও 3 টি বাইটস যেহেতু নিয়মগুলি ইনপুটটির সর্বনিম্ন দৈর্ঘ্য 2 অক্ষর উল্লেখ করে তাই খালি স্ট্রিংগুলি পরীক্ষা করতে হবে না।

Ungolfed:

f(char *s) {
  int j = strlen(s);             // j = length of input
  int m = j-- / 2;               // m = midpoint of string,
                                 // j = index of right character
  int p = -1;                    // p = position of extra character
                                 //     -1 means no extra character found yet
                                 //     0 means invalid input
  int i = 0;                     // i = index of left character

  for (; p && i < m; i++) {      // loop over the string from both sides,
                                 // as long as the input is valid.
    p = s[i] ^ s[j--]            // if (left character != right character
        && !++p ?                //     and we didn't remove a character yet*)
          s[i + 1] - s[j + 1] ?  //   if (left+1 char != right char)
            s[i] - s[j] ?        //     if (left char != right-1 char)
              p                  //       do nothing,
            :                    //     else
              j-- + 2            //       remove right char.
          :                      //   else
            ++i                  //       remove left char.
        :                        // else
          p;                     //     do nothing, or:
                                 //     *the input is marked invalid 
  } 

  return p < 0 ?                 // if (input valid and we didn't remove a character yet)
           m + 1                 //   return the midpoint character,
         :                       // else
           p ?                   //   if (we did remove a character)
             p                   //     return that character,
           :                     //   else
             -1;                 //     the input was invalid.
}
```

@ এসিলিংক্যাট এটি &&!++pব্যাখ্যা করার জন্য কেবল বিচক্ষণ :)
জি। স্লিপেন

-1

পাইথন, 84

for i in range(len(s)):
    if s[i]!=s[-(i+1)]:
        if s[i]!=s[-(i+2)]:
            return i+1
        else:
            return len(s)-i

এটি চেক করে না যে ইনপুট (স্ট্রিং) প্রায় প্যালিনড্রোম, তবে সময় দক্ষ এবং পঠনযোগ্য।


2
s[-(i+1)]সংক্ষিপ্ত করা যেতে পারে s[-i-1]। এছাড়াও, আমি নিশ্চিত নই কিন্তু আপনি প্রতিস্থাপন করতে সক্ষম হতে পারে if...else...সঙ্গেreturn i+1 if ... else len(s)-1
user12205

এটি ঠিকঠাকভাবে কাজ করেছে .. কেউ কি এর পিছনে যুক্তি ব্যাখ্যা করতে পারে?
অরিন্দম রায়চৌধুরী

প্রয়োজনীয়তাটি হ'ল এটি যদি কোনও অতিরিক্ত চিঠিযুক্ত প্যালিনড্রোম না হয় তবে এটি -1 আউটপুট হয়। সুতরাং উদাহরণস্বরূপ, যদি s = "abcde"এটি -1 ফিরে আসে।
জি। স্লিপেন

-2

আমার প্রথম কোড-গল্ফ

জাভা। মূল (এবং উপ) ফাংশনে 1200 টি অক্ষর। হ্যা সোনা.

ক্লাস শীর্ষ এবং ব্যবহার:

public class ElimOneCharForPalindrome  {
   public static final void main(String[] ignored)  {
      System.out.println(getEliminateForPalindromeIndex("racercar"));
      System.out.println(getEliminateForPalindromeIndex("racecar"));
   }

প্রধান কাজ:

   public static final int getEliminateForPalindromeIndex(String oneCharAway_fromPalindrome)  {
      for(int i = 0; i < oneCharAway_fromPalindrome.length(); i++)  {
         String strMinus1Char = oneCharAway_fromPalindrome.substring(0, i) + oneCharAway_fromPalindrome.substring(i + 1);

         String half1 = getFirstHalf(strMinus1Char);
         String half2Reversed = getSecondHalfReversed(strMinus1Char);

         if(half1.length() != half2Reversed.length())  {
            //One half is exactly one character longer
            if(half1.length() > half2Reversed.length())  {
               half1 = half1.substring(0, (half1.length() - 1));
            }  else  {
               half2Reversed = half2Reversed.substring(0, (half2Reversed.length() - 1));
            }
         }

         //System.out.println(i + " " + strMinus1Char + " --> " + half1 + " / " + half2Reversed + "  (minus the singular [non-mirrored] character in the middle, if any)");

         if(half1.equals(half2Reversed))  {
            return  i;
         }
      }
      return  -1;
   }

উপ-ফাংশন:

   public static final String getFirstHalf(String whole_word)  {
      return  whole_word.substring(0, whole_word.length() / 2);
   }
   public static final String getSecondHalfReversed(String whole_word)  {
      return  new StringBuilder(whole_word.substring(whole_word.length() / 2)).reverse().toString();
   }
}

সম্পূর্ণ শ্রেণি:

public class ElimOneCharForPalindrome  {
   public static final void main(String[] ignored)  {
      System.out.println(getEliminateForPalindromeIndex("racercar"));
      System.out.println(getEliminateForPalindromeIndex("racecar"));
   }
   public static final int getEliminateForPalindromeIndex(String oneCharAway_fromPalindrome)  {
      for(int i = 0; i < oneCharAway_fromPalindrome.length(); i++)  {
         String strMinus1Char = oneCharAway_fromPalindrome.substring(0, i) + oneCharAway_fromPalindrome.substring(i + 1);

         String half1 = getFirstHalf(strMinus1Char);
         String half2Reversed = getSecondHalfReversed(strMinus1Char);

         if(half1.length() != half2Reversed.length())  {
            //One half is exactly one character longer
            if(half1.length() > half2Reversed.length())  {
               half1 = half1.substring(0, (half1.length() - 1));
            }  else  {
               half2Reversed = half2Reversed.substring(0, (half2Reversed.length() - 1));
            }
         }

         //System.out.println(i + " " + strMinus1Char + " --> " + half1 + " / " + half2Reversed + "  (minus the singular [non-mirrored] character in the middle, if any)");

         if(half1.equals(half2Reversed))  {
            return  i;
         }
      }
      return  -1;
   }
   public static final String getFirstHalf(String whole_word)  {
      return  whole_word.substring(0, whole_word.length() / 2);
   }
   public static final String getSecondHalfReversed(String whole_word)  {
      return  new StringBuilder(whole_word.substring(whole_word.length() / 2)).reverse().toString();
   }
}

3
কোডটি গল্ফ করার কোনও প্রচেষ্টা দেখায় না।
mbomb007
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.