একটি প্যালিনড্রোমে ডাউনগ্রেড


47

একটি স্ট্রিং দেওয়া হয়েছে s, আপনি একটি প্যালিনড্রোম তৈরি করতে মুছতে পারেন এমন সর্বনিম্ন সংক্ষিপ্ত সংক্ষিপ্ত স্ট্রিংগুলিকে ফিরিয়ে দিন।


উদাহরণ:

800233008   -> 2
racecarFOOL -> FOOL
abcdedcba   -> (empty string)
ngryL Myrgn -> "L " (or " M")
123456789   -> 12345678 (or 23456789)
aabcdbaa    -> c (or d)
[[]]        -> [[ (or ]])
a           -> (empty string)

ব্যবহারকারীদের কাছ থেকে পরীক্ষার কেস পরামর্শ (আপনি যদি প্রান্তের কেসটি তালিকাভুক্ত না দেখতে পান তবে দয়া করে একটি মন্তব্য পোস্ট করুন):

aabaab      -> b    | Suggested by Zgarb, some returned "aa".

বিধি

  • কেবল প্রিন্টযোগ্য এএসসিআইআই অক্ষরগুলি ইনপুটটিতে উপস্থিত হবে (কোনও নতুন লাইন নেই, এটি সহজ রাখবেন না)।
  • সত্যিই নেই একটি নিয়ম, কিন্তু নোট <>, /\, (), []এবং {}palindromes নয়।

এটি , সবচেয়ে ছোট বাইট-কাউন্ট জেতা।


আদনান দাবি করেছে +100 অনুগ্রহ দাবি করেছে


3
তেসফ কেস:aabaab
জাগারব

14
আমি মনে করি যদি এটি "সিএমসি" এর মতো এনট্রিপ জার্গন এড়ানো হয় তবে এটি আরও দর্শকদের কাছে প্রশ্নগুলির অ্যাক্সেস রাখতে সহায়তা করবে (এটি সন্ধান করে এটি "চ্যাট মিনি চ্যালেঞ্জ" এর পক্ষে দাঁড়িয়েছে বলে আমি মনে করি যার অর্থ চ্যাট রুমে যুক্ত একটি ছোট চ্যালেঞ্জ পোস্ট করা হয়েছে) এউ সাইটে).
শ্রীভাতসারআর

[[]]প্যালিনড্রোম না ?
কার্ল

4
@ কার্ল এটি দেখতে একরকম মনে হতে পারে তবে আপনি যখন অক্ষরগুলি বিপরীত করেন তখন আপনি পাবেন ]][[aabbএটি একই জিনিসটি বিবেচনা করুন , কেবল বিভিন্ন চরিত্র।
কনর ও'ব্রায়েন

1
" (7/12 পুরষ্কার দেওয়া হবে) " হাহ?
এরিক আউটগল্ফার

উত্তর:


8

জেলি , 16 বাইট

Ḣ;Ṫµ=Ṛ
0,0jŒṖÇÞṪ

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

কিভাবে এটা কাজ করে

0,0jŒṖÇÞṪ  Main link. Argument: s (string)

0,0j       Join [0, 0], separating by s. This prepends and appends a 0 to s.
    ŒṖ     Build all partitions of the resulting array.
      ÇÞ   Sort the partitions by the helper link.
           As a side effect, this will remove the first and last element of each
           partition. The 0's make sure that not removing any characters from s
           will still remove [0] from both sides.
        Ṫ  Tail; extract the last one.


Ḣ;Ṫµ=Ṛ     Helper link. Argument: A (array/partition)

Ḣ          Head; yield and remove the first chunk of A.
  Ṫ        Tail; yield and remove the last chunk of A.
 ;         Concatenate head and tail.
   µ=Ṛ     Compare the result, character by character, with its reverse.
           A palindrome of length l will yield an array of l 1's, while a
           non-palindrome of length l will yield an array with at least one 0 among
           the first l/2 Booleans. The lexicographically largest result is the one
           with the longest prefix of 1's, which corresponds to the longest
           palindrome among the outfixes.

10

জে , 24 বাইট

(0{::(-:|.)\.#&,<\)~i.@#

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

ব্যাখ্যা

(0{::(-:|.)\.#&,<\)~i.@#  Input: array of chars S
                       #  Length of S
                    i.@   Range, [0, 1, ..., len(S)-1]
(                 )~      Dyadic verb on range and S
           \.               For each outfix of S of size x in range
        |.                    Reverse
      -:                      Matches input (is palindrome)
                <\          Box each infix of S of size x in range
             #&,            Flatten each and copy the ones that match
 0{::                       Fetch the result and index 0 and return

সম্ভবত আপনি (;&quote f)&>পরীক্ষা জোতা ক্রিয়া হিসাবে চয়ন করতে চান ?
কনর ও'ব্রায়েন

7

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

বাইট গণনাটি সিপি -1222 এনকোডিং অনুমান করে।

±{a___,Shortest@b___,c___}/;PalindromeQ[a<>c]:={b}

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

একটি unary অপারেটর ±(বা একটি ফাংশন PlusMinus) সংজ্ঞায়িত করে । ইনপুট এবং আউটপুট হ'ল অক্ষরের তালিকা। সুবিধার জন্য পরীক্ষার স্যুটটি প্রকৃত স্ট্রিং থেকে রূপান্তর করে।


Reverseতারপরে কি প্যালিনড্রোমকিউর চেয়ে মূল সংক্ষিপ্তটির সাথে তুলনা করা হচ্ছে? আমি ম্যাথমেটিকাকে জানি না, তাই ধারণা নেই।
ম্যাজিক অক্টোপাস উরান

উত্তম উত্তর, তবে স্ট্রিংগুলিকে বিভক্ত করার জন্য এবং অ্যাকাউন্টে আপনার চরিত্রের গণনায় একসাথে যোগদান করা উচিত নয়? Characters@#/.{a___,Shortest@b___,c___}/;PalindromeQ[a<>c]:>b~~""&
কেলি লোডার

@ ম্যাজিক অ্যাক্টপাস ইউরন Reverse[x={a,c}]==xদুটি বাইট দীর্ঘ। কোন ছোট বিকল্প আছে কিনা তা আমি জানি না।
মার্টিন ইন্ডার

@ কেলিলাউডার অক্ষরের তালিকা পিপিসিজিতে স্ট্রিংগুলির বৈধ উপস্থাপনা। এটি ম্যাথামেটিকায় কিছুটা বিশ্রী, যেখানে আপনি সাধারণত প্রতিনিধিত্ব করেন না, তবে এটি এখনও বৈধ। আমি একটি মেটা পোস্ট খনন করব।
মার্টিন ইন্ডার

1
@ কেলিলাউডার আমি মনে করি এটিই অনুমোদিত নীতি । এটি গাণিতিকের মধ্যে বিশ্রী হওয়ার মূল কারণটি হ'ল ম্যাথমেটিকার একটি প্রকৃত চরিত্রের ধরণ নেই, তাই অক্ষরগুলি সিঙ্গলটন স্ট্রিং হিসাবে শেষ হয়।
মার্টিন ইন্ডার


5

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

ā<Œ¯¸«ʒRõsǝÂQ}éнèJ

05AB1E এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


ফিল্টারটির আকর্ষণীয় ব্যবহার সেখানে ... আমরা "a বি বি" ধরণের ডিল করার চেষ্টা করছিলাম, তবে সাবস্ট্রিংয়ের দুটি উদাহরণ থাকলে আমরা মিথ্যা sণাত্মক হয়ে উঠতাম। মনে হচ্ছে আমরা এখন এই লোলটি দেখছি যে আমরা এটি অতিরিক্ত জটিল করে তুলছি। নোস, আমি আপনাকে 2 দিনের মধ্যে 100 অনুদান দেব।
ম্যাজিক অক্টোপাস আরন

ǝযদিও গুরুতর প্রতিভা ছিল।
ম্যাজিক অক্টোপাস উরান


3

পাইথন 2 , 116 বাইট

def f(i):R=range(len(i)+1);print min([i[y:k+1]for y in R for k in R if(i[:y]+i[k+1:])[::-1]==i[:y]+i[k+1:]],key=len)

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

হালওয়ার্ড হুমেলের সাহায্যে কয়েকটা বাইট সংরক্ষণ করেছেন !



@ হালওয়ার্ডহুমেল ধন্যবাদ, আমিও এটি পরিবর্তন করার পরিকল্পনা করছিলাম কিন্তু গত ২ ঘন্টা ধরে ইন্টারনেট সংযোগ নেই।
মিঃ এক্সকডার

2

জাপট , 26 22 বাইট

¬£¬ËUjEY ꬩUtEY
c æ+0

এটি অনলাইন পরীক্ষা! কীভাবে falseমিথ্যা কিছু এবং কোনও বাইটে সত্যবাদী কোনও স্ট্রিংয়ের মানচিত্র কীভাবে তা বের করার চেষ্টা করছেন । বর্তমানে আমি ব্যবহার করছি +0...


2

বাশ , 108 বাইট

for((j=0;;j++)){
for((i=0;i<${#1};i++)){
r=${1:0:i}${1:j+i}
[[ $r = `rev<<<$r` ]]&&echo "${1:i:j}"&&exit
}
}

কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয়।

এটি অনলাইন চেষ্টা করুন! নেতৃস্থানীয় / পিছনের স্থান দেখার জন্য আউটপুট চারপাশে মুদ্রিত উদ্ধৃতি সহ।


2

প্রোলোগ , 271 বাইট

p([_]).
p([X,X]).
p([X|Y]):-append([P,[X]],Y),p(P).

s(P,M,S,R,N):-p(P),append([M,S],N).
s(P,M,S,S,N):-p(S),append([P,M],N).
s(P,M,S,P,M):-append([P,S],X),p(X).

d(Y,P,N):-
    findall([A,B,C],(append([R,M,X],Y),s(R,M,X,B,C),length(B,A)),S),
    sort(1,@>,S,[[_,P,N]|_]).

এক পর্যায়ে আমি বুঝতে পেরেছিলাম যে এটি কোড-গল্ফের মানদণ্ডে বিশাল আকার ধারণ করতে চলেছে, তাই আমি অ-আবদ্ধ সংস্করণটির সাদৃশ্য রক্ষার জন্য কয়েকটি অতিরিক্ত ফাঁকা জায়গা রেখেছি। তবে আমি এখনও মনে করি এটি আকর্ষণীয় হতে পারে যেহেতু এটি সমস্যার ভিন্নতর দৃষ্টিভঙ্গি।

অপ্রকাশিত সংস্করণ:

palindrome([_]).
palindrome([X, X]).
palindrome([X | Xs]) :-
    append([Prefix, [X]], Xs),
    palindrome(Prefix).

palindrome_split(Prefix, Mid, Suffix, Prefix, N) :-
    palindrome(Prefix),
    append([Mid, Suffix], N).
palindrome_split(Prefix, Mid, Suffix, Suffix, N) :-
    palindrome(Suffix),
    append([Prefix, Mid], N).
palindrome_split(Prefix, Mid, Suffix, P, Mid) :-
    append([Prefix, Suffix], P),
    palindrome(P).

palindrome_downgrade(NP, P, N):-
    findall(
        [La, Pa, Na],
        (append([Prefix, Mid, Suffix], NP),
         palindrome_split(Prefix, Mid, Suffix, Pa, Na),
         length(Pa, La)),
        Palindromes),
    sort(1, @>, Palindromes, [[_, P, N] | _]).

2

সি ++, 254 248 246 বাইট

-6 বাইট জ্যাচারে -2 বাইট টবি স্পিডের জন্য ধন্যবাদ

#include<string>
#define S size()
#define T return
using s=std::string;int p(s t){for(int i=0;i<t.S;++i)if(t[i]!=t[t.S-i-1])T 0;T 1;}s d(s e){if(!p(e))for(int i,w=1;w<e.S;++w)for(i=0;i<=e.S-w;++i){s t=e;t.erase(i,w);if(p(t))T e.substr(i,w);}T"";}

তাই ...

  • আমি Tম্যাক্রো সংজ্ঞা হিসাবে ব্যবহার করেছি কারণ R""স্ট্রিং আক্ষরিকের উপর অন্য প্রভাব হিসাবে এটি করা (এটি কাঁচা স্ট্রিং লিটারালগুলি সংজ্ঞায়িত করতে ব্যবহৃত একটি উপসর্গ, আরও তথ্যের জন্য cppreferences দেখুন) যা আমি যখন করি না তখনT""
  • প্রাক প্রসেসর সংজ্ঞা একই লাইনে থাকতে পারে না এবং সংজ্ঞাটিতে নাম এবং বিষয়বস্তুর মধ্যে কমপক্ষে একটি স্থান থাকতে হবে
  • 2 টি কার্য: p(std::string)স্ট্রিংটি প্যালিনড্রোম কিনা তা পরীক্ষা করতে। যদি তা হয় তবে এটি 1কোনটি কাস্ট করে তা ফিরিয়ে দেয় true, অন্যথায় এটি ফিরে আসে 0, কোনটি কাস্ট করেfalse
  • অ্যালগরিদম পুরো স্ট্রিং টেস্টিংয়ের উপরে লুপ করে যদি প্রতিটি প্লে 1 এলিমেন্টটি মুছে ফেলার সময় এটি কোনও প্যালিনড্রোম হয়, তবে প্রথম সূচক থেকে শুরু করে 2 টি উপাদান (স্ট্রিংয়ের সর্বাধিক আকারের উপরে লুপ করে) পরীক্ষা করুন the last index - number of erased char। যদি এটি কিছু অংশ মুছে ফেলা একটি প্যালিনড্রোম হয় তবে তা ফিরে আসে। উদাহরণস্বরূপ, "aabcdbaa"প্যারামিটার হিসাবে স্ট্রিংটি পাস করার সময় , উভয়ই cএবং dবৈধ উত্তর, তবে এই কোডটি ফিরে আসবে cকারণ এটি মুছে ফেলা হবে এবং এটি যদি প্যালিনড্রোম হয় তবে এটি পরীক্ষা করার আগে পরীক্ষার আগে যদি এটি কোনও প্যালিনড্রোম আসে তবে পরীক্ষা করা dহবে
  • পরীক্ষা করার কোডটি এখানে:

    std::initializer_list<std::pair<std::string, std::string>> test{
        {"800233008","2"},
        { "racecarFOOL","FOOL" },
        { "abcdedcba","" },
        { "ngryL Myrgn","L " },
        { "123456789","12345678" },
        { "aabcdbaa","c" },
        { "[[]]","[[" },
        { "a","" },
        { "aabaab","b" }
    };
    
    for (const auto& a : test) {
        if (a.second != d(a.first)) {
            std::cout << "Error on : " << a.first << " - Answer : " << a.second  << " - Current : " << d(a.first) << '\n';
        }
    }

এই শেষ লাইনের জন্য কাজ করবে? using s=std::string;int p(s t){for(int i=0;i<t.S/2;++i)if(t[i]!=t[t.S-i-1])T 0;T 1;}s d(s e){if(!p(e))for(int i,w=1;w<e.S;++w)for(i=0;i<=e.S-w;++i){s t=e;t.erase(i,w);if(p(t))T e.substr(i,w);}T"";}
জাকারিয়া 19

যাবে /2বাদ দেওয়া যেতে? পুরো দৈর্ঘ্যের উপর দিয়ে আইট্রেট করা কেবল আমাদের করা পরীক্ষাগুলির পুনরাবৃত্তি করবে, যা নিরীহ হতে হবে। আপনি "অন্যান্য প্রভাব" দ্বারা অর্থ কী বোঝাতে চাইছেন R""(অর্থাত এটি কাঁচা স্ট্রিং আক্ষরিক হিসাবে পার্স করা হয়েছে)।
টবি স্পিটি

আমি এটিকে সংশোধন করেছি এবং ফলাফলটি আমার নিজের উত্তর হিসাবে যুক্ত করেছি ।
টবি স্পিড




1

জাভাস্ক্রিপ্ট, 90 বাইট

a=>a.map((_,p)=>a.map((_,q)=>k||(t=(b=[...a]).splice(q,p),k=''+b==b.reverse()&&t)),k=0)&&k

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



1

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

(s,i=0,j=0,S=[...s],b=S.splice(i,j))=>S+''==S.reverse()?b:f(s,s[++i]?i:!++j,j)

ইনপুট এবং আউটপুট হ'ল অক্ষরের তালিকা।

প্যালিনড্রোম না পাওয়া পর্যন্ত পুনরাবৃত্তভাবে ইনপুট থেকে আরও বড় এবং বৃহত্তর স্লাইস সরিয়ে দেয়।

স্নিপেট:


1

টিএসকিউএল (2016) 349 বি

সর্বাধিক কমপ্যাক্ট নয় তবে সোজা সমাধান:

DECLARE @i VARCHAR(255)='racecarFOOL'
;WITH DAT(v,i,l)AS(SELECT value,(ROW_NUMBER()OVER(ORDER BY value))-1,LEN(@i)FROM STRING_SPLIT(REPLICATE(@i+';',LEN(@i)+1),';')WHERE value<>'')
SELECT TOP 1C,S
FROM(SELECT LEFT(D.v, D.i)+SUBSTRING(D.v,D.i+E.i+1,D.l)C,SUBSTRING(D.v,D.i+1,E.i)S
FROM DAT D CROSS APPLY DAT E)C
WHERE C=REVERSE(C)
ORDER BY LEN(C)DESC

আপনি @কয়েকটি বাইটের জন্য চলক হিসাবে ব্যবহার করতে পারেন । সিটিইতে আপনি where''=value)অন্য একটির জন্য ব্যবহার করতে পারেন এবং ফলাফলটিতে আপনাকে ফিরে আসতে হবে না C
মিকিটি

1

হুশ , 18 বাইট

◄LfmS=↔†!⁰ṠM-Qŀ⁰Q⁰

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

ব্যাখ্যা

◄LfmS=↔†!⁰ṠM-Qŀ⁰Q⁰  Input is a string, say s="aab"
              ŀ⁰    Indices of s: x=[1,2,3]
             Q      Slices: [[],[1],[1,2],[2],[1,2,3],[2,3],[3]]
          ṠM-       Remove each from x: [[1,2,3],[2,3],[3],[1,3],[],[1],[1,2]]
       †!⁰          Index into s: ["aab","ab","b","ab","","a","aa"]
   mS=↔             Check which are palindromes: [0,0,1,0,1,1,1]
  f             Q⁰  Filter the slices of s by this list: ["aa","aab","ab","b"]
◄L                  Minimum on length: "b"

1

হাস্কেল , 98 94 81 80 বাইট

""#0
(h#n)t|(==)=<<reverse$h++drop n t=take n t|x:r<-t=(h++[x])#n$r|m<-n+1=t#m$h

এটি অনলাইন চেষ্টা করুন! ব্যবহারের উদাহরণ: ""#0 $ "aabaab"ফলন "b"

সম্পাদনা: -1 বাইট ধন্যবাদ Ørjan জোহানসেনকে।


1
আপনি সর্বশেষ ""দ্বারা প্রতিস্থাপন করতে পারেন t
janrjan জোহানসেন

1

সি ++, 189 186 176 167 বাইট

আমি হ্যাটসুপয়েন্টারকুনের জবাব দিয়ে শুরু করেছি , বিপরীত স্ট্রিংয়ের সাথে কেবল সাম্যের তুলনা করার জন্য পরীক্ষা পরিবর্তন করেছি; তারপরে আমি পরিবর্তন করেছি যে আমরা কীভাবে প্রার্থীর স্ট্রিংগুলি গণনা করব। এটি অনুসরণ করার পরে, ম্যাক্রোগুলি কেবল একবার বা দু'বার ব্যবহৃত হয়েছিল এবং সেগুলিকে ইনলাইন করা সংক্ষিপ্ত ছিল।

#include<string>
using s=std::string;s d(s e){for(int i,w=0;;++w){s t=e.substr(w);for(i=-1;++i<=t.size();t[i]=e[i])if(t==s{t.rbegin(),t.rend()})return e.substr(i,w);}}

ব্যাখ্যা

সমান পাঠযোগ্য কোড:

std::string downgrade(std::string e)
{
    for (int w=0; ; ++w) {
        std::string t = e.substr(w);
        for (int i=0;  i<=t.size();  ++i) {
            if (t == std::string{t.rbegin(),t.rend()})
                // We made a palindrome by removing w chars beginning at i
                return e.substr(i,w);
            t[i] = e[i];  // next candidate
        }
    }
}

প্রার্থীদের সংখ্যা গণনা শুরু না করে প্রথম wঅক্ষর বাদ দিয়ে একটি স্ট্রিং শুরু করে এবং তারপরে ফাঁকটি সরানোর জন্য মূল থেকে ধারাবাহিক অক্ষর অনুলিপি করে শুরু হয় । উদাহরণস্বরূপ, স্ট্রিং সহ foobarএবং w== 2:

foobar
  ↓↓↓↓
  obar
foobar
↓
fbar
foobar
 ↓
foar
foobar
  ↓
foor
foobar
   ↓
foob

প্রথম পাসটি ( w== 0 সহ) একটি নো-অপশন, তাই পুরো স্ট্রিংটি বারবার বিবেচনা করা হবে। এটা ঠিক - গল্ফিং ট্রাম্প দক্ষতা! এই লুপের শেষ পুনরাবৃত্তিটি এক-অতীত-শেষের সূচকটি অ্যাক্সেস করবে; আমি জিসিসির সাথে এটির সাথে পালিয়ে যাব বলে মনে হচ্ছে, তবে কঠোরভাবে, এটি অপরিজ্ঞাত আচরণ।

পরীক্ষা প্রোগ্রাম

হাটসুপয়েন্টারকুনের উত্তর থেকে সরাসরি লিফট :

static const std::initializer_list<std::pair<std::string, std::string>> test{
    { "800233008", "2" },
    { "racecarFOOL", "FOOL" },
    { "abcdedcba", "" },
    { "ngryL Myrgn", "L " },
    { "123456789", "12345678" },
    { "aabcdbaa", "c" },
    { "[[]]", "[[" },
    { "a","" },
    { "aabaab", "b" }
};

#include <iostream>
int main()
{
    for (const auto& a : test) {
        if (a.second != d(a.first)) {
            std::cout << "Error on: " << a.first
                      << " - Expected: " << a.second
                      << " - Actual: " << d(a.first) << '\n';
        }
    }
}

0

রেক্সএক্স, 132 বাইট

a=arg(1)
l=length(a)
do i=1 to l
  do j=0 to l-i+1
    b=delstr(a,i,j)
    if b=reverse(b) & m>j then do
      m=j
      s=substr(a,i,j)
      end
    end
  end
say s

0

রুবি , 86 84 বাইট

->s{l=i=0
(l+=(i+=1)/z=s.size-l+1
i%=z)while(w=s[0,i]+s[i+l..-1])!=w.reverse
s[i,l]}

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

  • সাইওসকে ধন্যবাদ 2 বাইট সংরক্ষণ করা

আপনার চারপাশে প্রথম বন্ধনী প্রয়োজন নেই z=s.size-l+1
সাইয়েস

@ কিয়েস আপনাকে ধন্যবাদ। সমস্ত অপারেটরের নজির মনে রাখার জন্য আমার খুব কষ্ট হয়েছে।
iamnotmaynard

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