"সাব-প্যালিনড্রোমস" সন্ধান করা হচ্ছে।


24

সংক্ষিপ্ততম কোড যা একটি স্ট্রিংয়ের সমস্ত অনন্য "সাব-প্যালিনড্রোমস" সন্ধান করে, এটি হল: দৈর্ঘ্য> 1 সহ যে কোনও স্ট্রাইং প্যালিনড্রোম।

eg.1

input: "12131331"
output: "33", "121", "131", "313", "1331"

eg.2

input: "3333"
output: "33", "333", "3333"

1
স্ট্রিং কি এটি নিজস্ব সাব-প্যালিনড্রোম হতে পারে? যেহেতু একটি স্ট্রিং এটি নিজস্ব সাবস্ট্রিং।
JPvdMerwe

@ জেপিভিডিমারভে: হ্যাঁ, অবশ্যই
এলেভেক্স

আসলে আরও গুরুত্বপূর্ণ: আউটপুটটি কী হতে 333হবে? উদ্বেগের সাথে আপনি 33দু'বার মুদ্রণ শেষ করবেন
JPvdMerwe

@JPvdMerwe: '333' -> '33', '333'। আমি সেই অনুযায়ী প্রশ্নটি সম্পাদনা করব। ধন্যবাদ।
এলেভেক্স

আউটপুট কিভাবে নির্দিষ্ট করা হয়? আপনি এখানে প্রদর্শিত হিসাবে প্রতিটি উপ-প্যালিনড্রোমে কোটা দিয়ে কমা-সীমাবদ্ধ? প্রতি লাইনে একটি উপ-পি?
জোয়ি

উত্তর:


11

জে, 24 31 40

~.(#~(1<#*]-:|.)&>),<\\.

নমুনা ব্যবহার:

   ~.(#~(1<#*]-:|.)&>),<\\. '12131331'
┌───┬───┬───┬────┬──┐
│121│131│313│1331│33│
└───┴───┴───┴────┴──┘
   ~.(#~(1<#*]-:|.)&>),<\\. '3333'
┌──┬───┬────┐
│33│333│3333│
└──┴───┴────┘

ওটা নিয়ে যাও, গল্ফস্ক্রিপ্ট!


এটি স্বীকার করুন, আপনি /dev/randomআমাদের বোকা বানানোর জন্য এখান থেকে একটি ডাম্প রেখেছেন ;-)
জোয়

@ জোয়াই নিজের জন্য এটি চেষ্টা করে দেখুন; পি (টিবিএইচ, আমি বিশ্বাস করি না এটি প্রথমে কাজ করতে পারে)
জেবি

আমি মোটামুটি নিশ্চিত যে এটি আসল কোড। আমি জেদকে ঘিরে আমার মাথা গুটিয়ে দেওয়ার চেষ্টা করে সপ্তাহান্তে কাটিয়েছি, তবে খারাপভাবে ব্যর্থ হয়েছিল। তবুও, আমি কোড চিনি; এটি কী করে তা আমি কেবল বুঝতে পারি না ;-)
জোয়

2
এটি কি ~.(#~(1<#*]-:|.)&>),<\\.(24 টি অক্ষর) ছোট করা যাবে না ?
প্রশংসিত

@Phemient এটি সত্যিই করে না। (দেখে মনে হচ্ছে যে আমি আটকে ছিলাম "উত্তর অবশ্যই একটি ফাংশন হতে হবে" মানসিকতা, যা এখানে প্রযোজ্য নয়)) সম্পাদিত, ধন্যবাদ!
জেবি

7

পাইথন 124

r=raw_input()
l=range(len(r))
print', '.join(set('"'+r[i:j+1]+'"'for i in l for j in l if i<j and r[i:j+1]==r[i:j+1][::-1]))

5

হাস্কেল 98, 88 91 96

import List
main=interact$show.filter(\x->length x>1&&x==reverse x).nub.(tails=<<).inits

3

পাইথন - 138 136

এই কোডটি সাব-প্যালিনড্রোমগুলি সদৃশ করে না।

r=raw_input()
i,l=0,len(r)
j=l
a=[]
while i<l-1:
 t=r[i:j];j-=1
 if t==t[::-1]:a+=['"'+t+'"']
 if j<i+2:i+=1;j=l
print", ".join(set(a))

1
পরিবর্তন '"'+t+'"'করার জন্য t, কিছু স্থান সঞ্চয় যদিও এটি একক উদ্ধৃতি ব্যবহার করে।
থমাস হে

3

রুবি - 126 102 97 টি অক্ষর

s=gets
*m=*0..s.size
puts m.product(m).map{|h,j|(c=s[h,j+1]).size>1&&c==c.reverse ? c:0}.uniq-[0]

3

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

subpalindrome.gs

{,}{(;}/{{,}{);}/}%{+}*{.,1>\.-1%=*},.&{`}%", "*

ব্যবহার:

echo "12131331" | ruby golfscript.rb subpalindrome.gs

প্রথম ক্রিয়াকলাপটি {,}{(;}/একটি স্ট্রিংকে ট্রেলিং-সাবস্ট্রিংয়ের তালিকায় পরিণত করে। একটি অনুরূপ শীর্ষস্থানীয় সাবস্ট্রিংস রূপান্তর ফলাফলের পরে ম্যাপ করা হয়। তারপরে সমতল করুন {+}*, প্রিনিকেট ব্যবহার করে প্যালিনড্রোমগুলির জন্য ফিল্টার করুন .,1>\.-1%=*, এর সাথে অনন্য মানগুলি ধরুন .&, তারপরে সুন্দর মুদ্রণ করুন।

ট্রেলিং-সাবস্ট্রিংগুলি একটি ব্লক হিসাবে রূপান্তর করা এবং প্রতিটি অনুবর্তনকারী স্তরটিকে বিপরীত করার পরে শীর্ষস্থানীয় সাবস্ট্রিংগুলির প্রতিস্থাপন হিসাবে পুনরায় ব্যবহার করা আরও পরিষ্কার হবে, তবে আমি এটি করার কোনও সংকীর্ণ উপায় বের করতে পারি না।


2

হাস্কেল - 170 , 153

import Data.List
import Data.Set
p a=fromList$[show x|x<-subsequences a,x==reverse x,length x>1]
main=getLine>>=(\x->putStrLn$intercalate", "$toList$p x)

main=getLine>>=(\x->putStrLn$intercalate", "$toList$p x)সঙ্গে প্রতিস্থাপন main=getLine>>=putStrLn.intercalate", ".toList.p। আমি pতার শরীরের সাথে কল করার বিকল্পও চাই ।
ইয়াসির আরসানুকায়েভ

সাবস্ট্রিংস / = subsequences! আপনার প্রোগ্রাম উদাহরণস্বরূপ 1 হিসাবে রেফারেন্স আউটপুট চেয়ে subpalindromes রিপোর্ট (উদাহরণস্বরূপ "1111")
জেবি

2

জে, 48

f=:,@:".
h=:\\.
~.(#~10&<)((]h-:"0&f|.h)#[:f]h)

যেমন

~.(#~10&<)((]h-:"0&f|.h)#[:f]h) '12131331'
121 131 313 1331 33

2

প্রোলোগ, 92

f(S,P):-append([_,X,_],S),X=[_,_|_],reverse(X,X),atom_codes(P,X).
p(S,R):-setof(P,f(S,P),R).

নমুনা ব্যবহার:

?- p("12131331",R).
R = ['121', '131', '1331', '313', '33'].

?- p("3333",R).
R = ['33', '333', '3333'].

2

উইন্ডোজ পাওয়ারশেল, 104 109 111

0..($l=($s="$input").length-1)|%{($a=$_)..$l|%{-join$s[$a..$_]}}|sort -u|?{$_[1]-and$_-eq-join$_[$l..0]}

এটি স্টিডিনে ইনপুটটি প্রত্যাশা করে এবং স্ট্যান্ডআউটে প্রতি সন্ধান পাওয়া সমস্ত প্যালিনড্রোম ফেলে দেবে:

PS Home:\SVN\Joey\Public\SO\CG183> '12131331'| .\subp.ps1
33
121
131
313
1331

( cmdএটি থেকে চালানো হয়ে গেলে echo 12131331|powershell -file subp.ps1- $inputস্ক্রিপ্টটি কীভাবে ডাকা হয়েছিল তার উপর নির্ভর করে এটি কিছুটা আলাদা অর্থ গ্রহণ করে তবে এটি কেবল ইন্টারেক্টিভভাবে নয়, স্টিডিনও হতে পারে))

2011-01-30 13:57 (111) - প্রথম চেষ্টা।

2011-01-30 13:59 (109) - ইনিল্যান্ডেড ভেরিয়েবলের ঘোষণা।

2011-06-02 13:18 (104) - কল করার পরিবর্তে একটি চর অ্যারে যোগদান করে .Substring()আরও কিছুটা ইনলাইন করে সাবস্ট্রিং সন্ধান পুনরায় করুন ।


2

প্রশ্ন, 78

{a::x;(?)(,/)b@'(&:')({x~(|:)x}'')b:-1_1_'({(sublist[;a]')x,'1+c}')c::(!)(#)a}

ব্যবহার

q){a::x;(?)(,/)b@'(&:')({x~(|:)x}'')b:-1_1_'({(sublist[;a]')x,'1+c}')c::(!)(#)a}"12131331"
"121"
"131"
"313"
"1331"
"33"
q){a::x;(?)(,/)b@'(&:')({x~(|:)x}'')b:-1_1_'({(sublist[;a]')x,'1+c}')c::(!)(#)a}"3333"
"33"
"333"
"3333"

2

রেটিনা , 34 27 বাইট

&@!`(.)+.?(?<-1>\1)+(?(1)^)

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

পরীক্ষার স্যুটটির একটি প্রয়োজন Mকারণ এটি পরীক্ষার ক্ষেত্রে ফাঁকা লাইন anotherোকানোর জন্য অন্য পর্যায়ে অনুসরণ করা হয়।

ব্যাখ্যা

&@!`(.)+.?(?<-1>\1)+(?(1)^)

রিজেক্সের !সমস্ত অনন্য ( @), ওভারল্যাপিং ( &) মিলগুলি মুদ্রণ করুন (.)+.?(?<-1>\1)+(?(1)^)। এটি ভারসাম্যপূর্ণ গোষ্ঠীগুলি ব্যবহার করে 2 বা তার বেশি দৈর্ঘ্যের একটি প্যালিনড্রোমের সাথে মেলে। "সমস্ত ওভারল্যাপিং ম্যাচগুলি" অংশের একটি সতর্কতা রয়েছে: আমরা শুরুতে প্রতি পজিশনে একটি করে ম্যাচ পেতে পারি। তবে, একই দৈর্ঘ্যে যদি দুটি দৈর্ঘ্যের দুটি প্যালিনড্রোম শুরু হয়, তবে দীর্ঘ প্যালিনড্রোমের শেষে সংক্ষিপ্ত প্যালিনড্রোম আবার উপস্থিত হবে। এবং যেহেতু +অগ্রাধিকারের লোভ আরও দীর্ঘ মেলে তাই আমরা যাইহোক সমস্ত প্যালিনড্রোম পেয়ে যাচ্ছি।


2


@ স্কটিনেট একক জন্য ব্যর্থ, EG1234142141410010101000
ম্যাজিক অক্টোপাস

1
আপনারও, তবে একইভাবে নয়। o_O এমন কিছু চলছে যা তদন্তের প্রয়োজন। এরই মধ্যে, এখানে একটি 10 বাইট সংস্করণ রয়েছে যা দেখে মনে হচ্ছে
স্কটিটিনেট

অনীকৃত সহ একটি বাগ ছিল, আমি এটি ঠিক করেছি। এখন আপনার 11 বাইট উত্তর এবং আমার 9 বাইট এক কাজ :-)
স্কটিনেট

@ স্কটনেট আপনার 10-বাইটারটি 9-বাইটারে পরিবর্তিত হয়েও হতে 1›পারে । :)
কেভিন ক্রুইজসেন

1

পার্ল, 112

$_=<>;chop;s/./$&$' /g;
map{/../&&$_ eq reverse&&$h{$_}++}split/ /
  for grep{s/./$`$& /g}split/ /;
print for keys %h

1

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

a=>{for(b=0,c=d=a.length,e=[];b<d;--c<b+2?(b++,c=d):1)(f=a.slice(b,c))==f.split``.reverse().join``&&e.push(f);return e}

এই ফাংশনটি ইনপুট হিসাবে একটি স্ট্রিং নেয় এবং একটি অ্যারের আউটপুট দেয়।


1

ক্লোজার, 81 বাইট

#(set(for[i(range 2(+(count %)1))p(partition i 1 %):when(=(reverse p)(seq p))]p))

forএখানে একটি নিখুঁত ম্যাচ ছিল :) :when(=(reverse p)p)ইনপুট অক্ষরগুলির একটি তালিকা বা সম্পূর্ণ স্ট্রিংটিকে প্যালিনড্রোম হিসাবে গণনা না করা হলে ব্যবহার করা যেতে পারে, আসলে সেই ক্ষেত্রে সর্বোচ্চ সীমাটিও iহতে পারে (count %)

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

#(set(for[i(range 2(count %))p(partition i 1 %):when(=(reverse p)p)]p))

1

পাইথন, 83 102 অক্ষর

s=lambda t:(t[1:]or())and(t,)*(t==t[::-1])+s(t[1:])+s(t[:-1])
print set(s(input()))

বাক্যাংশটি (t[1:]or())and...সমান(...)if t[1:]else() একটি চরিত্রের এবং সংরক্ষণ করে! আমি এই পরিমাণে গর্বিত, সঞ্চয় দেওয়া হয়েছে।

উদাহরণ:

python x
"51112232211161"
set(['11', '22', '11122322111', '161', '111', '112232211', '1223221', '22322', '232'])

1

স্কেলা 127

object p extends App{val s=args(0);print(2.to(s.size).flatMap(s.sliding(_).toSeq.filter(c=>c==c.reverse)).toSet.mkString(" "))}

অন্যান্য স্কালার উত্তরের তুলনায় এটি আপেলগুলিকে আপেল রাখতে, আমি আমারটিকে এমন একটি বস্তুও তৈরি করেছি যা অ্যাপ্লিকেশন প্রসারিত করে। ম্যানুয়ালি ইনপুট স্ট্রিংটি পুনরায় করা এবং সাবস্ট্রিং ব্যবহারের পরিবর্তে আমি আমার জন্য সমস্ত সাবস্ট্রাস্টিংয়ের ক্রম তৈরি করতে স্লাইডিং () সজ্জিত করতে লিভারেজ করেছি।


1

স্কালা 156 170

object o extends App{val l=args(0).length-2;val r=for(i<-0 to l;j<-i to l;c=args(0).substring(i,j+2);if(c==c.reverse))yield c;print(r.toSet.mkString(" "))}

object o{def main(s:Array[String]){val l=s(0).length-2;val r=for(i<-0 to l;j<-i to l;c=s(0).substring(i,j+2);if(c==c.reverse)) yield c;println(r.distinct.mkString(" "))}}


হাই ললিথ, আমি আপনার কোডটি কিছুটা ছোট করেছি: মুখ্য, মুদ্রণ => মুদ্রণ এবং স্বতন্ত্র => টু সেট
ব্যবহারকারী অজানা

1

পার্ল 6 ,  35  32 বাইট

{unique m:ex/(.+).?<{$0.flip}>/}

এটা পরীক্ষা করো

{set m:ex/(.+).?<{$0.flip}>/}

এটা পরীক্ষা করো

সম্প্রসারিত:

{  # bare block lambda with implicit parameter 「$_」

  set             # turn into a Set object (ignores duplicates)

  \             # stringify 「~」 all of these 「«」 (possibly in parrallel)
                  # otherwise it would be a sequence of Match objects

  m               # match
  :exhaustive     # in every way possible
  /
    ( .+ )        # at least one character 「$0」
    .?            # possibly another character (for odd sized sub-palindromes)
    <{ $0.flip }> # match the reverse of the first grouping
  /
}


1

আপনার পারমিলিংকের আউটপুটটি ভুল।
ডেনিস

@ ডেনিস কেন এটি তখন একটি দ্বিগুণ টার্গেটে পরিণত হয়েছিল> _ _> স্থির
এরিক দ্য আউটগল্ফার

নতুন জেলি সহ 7 বাইট।
ব্যবহারকারী 202729

1

এপিএল (ডায়ালগ ক্লাসিক) , 27 বাইট

{∪⍵/⍨≡∘⌽¨⍨⍵}∘⊃(,/1↓⍳∘≢,/¨⊂)

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

{∪⍵/⍨≡∘⌽¨⍨⍵}∘⊃(,/1↓⍳∘≢,/¨⊂)    Monadic train:
                                Enclose the input, '12131331'
                     ⍳∘≢          Range from 1 to length of input
                     ⍳∘≢,/¨⊂      List of list of substrings of each length
                   1            Remove the first list (length-1 substrings)
                ,/              Put the rest of the substrings into a single list.
{∪⍵/⍨≡∘⌽¨⍨⍵}                   To the result, apply this function which
                                   keeps all palindromes from a list:
      ≡∘⌽¨⍨⍵                    Boolean value of whether each (¨) string in argument
      ≡∘⌽                      is equal to its own reverse

  ⍵/⍨                           Replicate (filter) argument by those values.
                                 This yields the length >1 palindromes.
                                Remove duplicates from the list of palindromes.

"কোড" এর জন্য ওপি কল করার কারণে, স্নিপেটটি ∪w/⍨≡∘⌽¨⍨w←⊃,/1↓(⍳∘≢,/¨⊂)বৈধ।
অ্যাডাম

@ অ্যাডম আমি মনে করি আমি এই উত্তরটি আধুনিক সাইটের মানদণ্ডের জন্য যেমন রাখব, বিশেষত যেহেতু এটি সামগ্রিকভাবে জয় পায় না।
lirtosiast



1

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

{s.l>1∧.↔}ᵘ

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

(লিঙ্ক হেডার পোস্ট করার সময় নষ্ট হয়ে গেছে, তাই এখানে সম্পৃক্ত (শুধুমাত্র প্রথম টেস্ট মামলা Brachylog ফাংশন সমতুল্য), একটি সঙ্গে wআসলে আউটপুট প্রিন্ট করতে শেষে।)

               The output is
{        }ᵘ    a list containing every possible unique
 s.            substring of
               the input
   l           the length of which
    >          is greater than
     1         one
      ∧        and
       .       which
        ↔      reversed
               is itself. (implicit output within the inline sub-predicate)

আমার মনে হচ্ছে দৈর্ঘ্য ১ এর চেয়ে বড় কিনা তা যাচাই করার জন্য আরও একটি ছোট উপায় আছে (এটি যদি তুচ্ছ প্যালিনড্রোমগুলি ফিল্টার না করে তবে এটি ঠিকই হত {s.↔}ᵘ))


1

এপিএল (এনএআরএস), 65 টি চর, 130 বাইট

{0=≢m←∪b/⍨{1≥≢⍵:0⋄∧/⍵=⌽⍵}¨b←↑∪/{x[⍵;]⊂y}¨⍳≢x←11 1‼k k⊢k←≢y←⍵:⍬⋄m}

পরীক্ষা:

  r←{0=≢m←∪b/⍨{1≥≢⍵:0⋄∧/⍵=⌽⍵}¨b←↑∪/{x[⍵;]⊂y}¨⍳≢x←11 1‼k k⊢k←≢y←⍵:⍬⋄m}
  o←⎕fmt
  o r '1234442'
┌2───────────┐
│┌2──┐ ┌3───┐│
││ 44│ │ 444││
│└───┘ └────┘2
└∊───────────┘
  o r '3333'
┌3───────────────────┐
│┌4────┐ ┌3───┐ ┌2──┐│
││ 3333│ │ 333│ │ 33││
│└─────┘ └────┘ └───┘2
└∊───────────────────┘
  o r  "12131331"
┌5─────────────────────────────────┐
│┌4────┐ ┌3───┐ ┌2──┐ ┌3───┐ ┌3───┐│
││ 1331│ │ 121│ │ 33│ │ 313│ │ 131││
│└─────┘ └────┘ └───┘ └────┘ └────┘2
└∊─────────────────────────────────┘
  o r '1234'
┌0─┐
│ 0│
└~─┘


{0=≢m←∪b/⍨{1≥≢⍵:0⋄∧/⍵=⌽⍵}¨b←↑∪/{x[⍵;]⊂y}¨⍳≢x←11 1‼k k⊢k←≢y←⍵:⍬⋄m}
 y←⍵  assign the argument to y (because it has to be used inside other function)
 x←11 1‼k k⊢k←≢y   assign the lenght of y to k, call the function 11 1‼k k
                   that seems here find all partition of 1 2 ..k
 {x[⍵;]⊂y}¨⍳≢      make partition of arg ⍵ using that set x
 ∪/                set union with precedent to each element of partition y (i don't know if this is ok)
 b←↑               get first assign to b
 {1≥≢⍵:0⋄∧/⍵=⌽⍵}¨ for each element of b return 1 only if the argument ⍵ is such that 
                   "∧/⍵=⌽⍵" ⍵ has all subset palindrome, else return 0
 b/⍨               get the elements in b for with {1≥≢⍵:0⋄∧/⍵=⌽⍵} return 1
 m←∪               make the set return without ripetition element, and assign to m
 0=≢               if lenght of m is 0 (void set) than 
 :⍬⋄m              return ⍬ else return m

এটি কারও পক্ষে আরও ভাল তা কেন, এবং এটিকে আরও ভালভাবে ব্যাখ্যা করতে পারেন, এই সমস্ত পরিবর্তন ছাড়াই ... আমি এই কোড সম্পর্কে এতটা নিশ্চিত নই, যদি পরীক্ষার উদাহরণগুলি আরও অসংখ্য হয় তবে কিছু ভুল হয়ে যাবে ...



0

জাভা 8, 202 201 199 বাইট

import java.util.*;s->{Set r=new HashSet();String x;for(int l=s.length(),i=0,j;i<l;i++)for(j=i;++j<=l;)if((x=s.substring(i,j)).contains(new StringBuffer(x).reverse())&x.length()>1)r.add(x);return r;}

এখানে চেষ্টা করুন।

যদি কোনও ফাংশন অনুমোদিত না হয় এবং একটি পূর্ণ প্রোগ্রামের প্রয়োজন হয়, তার পরিবর্তে এটি 256 255 253 বাইট রয়েছে :

import java.util.*;interface M{static void main(String[]a){Set r=new HashSet();String x;for(int l=a[0].length(),i=0,j;i<l;i++)for(j=i;++j<=l;)if((x=a[0].substring(i,j)).contains(new StringBuffer(x).reverse())&x.length()>1)r.add(x);System.out.print(r);}}

এখানে চেষ্টা করুন।

ব্যাখ্যা:

import java.util.*;      // Required import for Set and HashSet

s->{                     // Method with String parameter and Set return-type
  Set r=new HashSet();   //  Return-Set
  String t;              //  Temp-String
  for(int l=s.length(),  //  Length of the input-String
          i=0,j;         //  Index-integers (start `i` at 0)
      i<l;i++)           //  Loop (1) from `0` to `l` (exclusive)
    for(j=i;++j<=l;)     //   Inner loop (2) from `i+1` to `l` (inclusive)
      if((t=s.substring(i,j) 
                         //    Set `t` to the substring from `i` to `j` (exclusive)
         ).contains(new StringBuffer(t).reverse())
                         //    If this substring is a palindrome,
         &t.length()>1)  //    and it's length is larger than 1:
        r.add(t);        //     Add the String to the Set
                         //   End of inner loop (2) (implicit / single-line body)
                         //  End of loop (1) (implicit / single-line body)
  return r;              //  Return the result-Set
}                        // End of method

0

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

একটি সেট ফেরত দেয় ।

s=>new Set((g=(s,r=[...s].reverse().join``)=>s[1]?(r==s?[s]:[]).concat(g(s.slice(1)),g(r.slice(1))):[])(s))

পরীক্ষার মামলা

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