আমার আয়না কোথায় রাখা উচিত?


30

এই আয়না: |। আমি সবেমাত্র জানতে পেরেছি যে স্ট্রিংটি নিজেই মিরর করা যায় যদি আপনি একটি স্ট্রিংয়ের মাঝখানে একটি আয়না আটকে রাখতে পারেন! উদাহরণস্বরূপ, স্ট্রিং abccba। যদি আপনি এটি অর্ধেক কাটা হয় তবে দুটি অংশই একে অপরের মিরর চিত্র:

abc  <-->  cba

সুতরাং, আমরা স্ট্রিংয়ের মাঝখানে একটি আয়না আটকে রাখতে পারি, এবং আমাদের নতুন স্ট্রিংটি abc|cba। কখনও কখনও কেবল স্ট্রিংয়ের কিছু অংশ নিজেই মিরর করা যায়। উদাহরণস্বরূপ, স্ট্রিং "মিরর"। দুটি আর মিরর করা হয়েছে, তবে বাকী স্ট্রিংটি তা নয়। এটি ঠিক আছে, আমরা কেবল স্ট্রিংয়ের অংশগুলি সরিয়ে দেব যা একে অপরকে আয়না দেয় না এবং আমরা নিম্নলিখিত স্ট্রিংটি পাই:

r|r

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

xyz|zyx

কিছু স্ট্রিং দেখে মনে হচ্ছে এগুলি মিরর করা যায়, তবে বাস্তবে তা করা যায় না। যদি কোনও স্ট্রিং কোথাও মিরর করা যায় না, আপনার কিছুই আউটপুট করা উচিত নয়।

চ্যালেঞ্জ:

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

বৃহত্তম সম-দৈর্ঘ্যের প্যালিনড্রোমিক সাবস্ট্রিং সন্ধান করুন, তারপরে এটি একটি পাইপের অক্ষর দিয়ে আউটপুট করুন '|' এটির মাঝখানে

ইনপুটটি 1-50 অক্ষর দীর্ঘ হবে।

আপনি ধরে নিতে পারেন |ইনপুটটিতে আয়না বা নিউলাইন থাকবে না । এর বাইরে, সমস্ত মুদ্রণযোগ্য-আসকি অক্ষরগুলি মেলা খেলা। দীর্ঘতম মিররযুক্ত সাবস্ট্রিং যদি দুটি সাবস্ট্রিংয়ের মধ্যে আবদ্ধ থাকে তবে আউটপুটটি বেছে নিতে পারেন। উদাহরণস্বরূপ, "আব্বা ওলো" স্ট্রিংয়ের জন্য আপনাকে অবশ্যই "আব | বা" বা "অল | লো" আউটপুট দিতে হবে তবে আপনি কোনটি আউটপুট দিচ্ছেন তা বিবেচ্য নয়। স্ট্রিংগুলি কেস-সংবেদনশীল, উদাহরণস্বরূপ "ABBA" "AB | ba" আউটপুট করা উচিত নয় , এটি খালি স্ট্রিংটিকে আউটপুট দেয়।

নমুনা আইও:

"Hello World"     --> "l|l"
"Programming Puzzles and Code-Golf"     --> Either "m|m" or "z|z"
"abcba"           --> ""
"Hulluh"          --> "ul|lu"
"abcdefggfedcba"  --> "abcdefg|gfedcba"
"abcdefggfabc"    --> "fg|gf"
"AbbA"            --> "Ab|bA"
"This input is a lot like the last one, but with more characters that don't change the output. AbbA" --> "Ab|bA"

যথারীতি, এটি কোড-গল্ফ, সুতরাং মানক লুফোলগুলি প্রয়োগ হয় এবং বাইটের মধ্যে সংক্ষিপ্ত উত্তরটি জিতে যায়!


ইনপুট দৈর্ঘ্যের একটি সীমা আছে?
মেগো

@ মেগো যতক্ষণ আপনার অ্যালগরিদম তাত্ত্বিকভাবে যে কোনও ইনপুটটিতে কাজ করে, আমি এটি কতক্ষণ নিচ্ছি / কত স্মৃতি লাগে তা বিবেচ্য নয়।
ডিজেএমসিএমহেম

আমি জিজ্ঞাসা করেছি কারণ ভ্যানিলা রেজেক্স ইঞ্জিনগুলি কেবল নির্দিষ্ট, সসীম মান (নির্বিচারে-দীর্ঘ প্যালিনড্রোমের বিপরীতে) পর্যন্ত দৈর্ঘ্যের প্যালিনড্রোমগুলির সাথে ম্যাচ করতে সক্ষম, এবং একটি রেজেক্স-ভিত্তিক সমাধানের সম্ভাবনা কোনও উপরের আছে কিনা তার উপর নির্ভর করবে ইনপুট দৈর্ঘ্যের উপর আবদ্ধ।
মেগো

@ মেগো আহ, এটি উপলব্ধি করে। ধরা যাক ইনপুটটি 50 টি পর্যন্ত অক্ষর পর্যন্ত দীর্ঘ হতে পারে। শব্দটা কেমন ছিল?
ডিজেএমসিএমহেম

উত্তর:


9

পাইথ - 19 17 15 13 বাইট

আমাকে দুটি বাইট বাঁচানোর জন্য @ ফ্রাইআমএইটিজিমনকে ধন্যবাদ।

কোনও উত্তর না দেওয়ার জন্য বিশেষ মামলা এআরজিএইচ। যে সমাধান!

e_I#jL\|cL2.:

টেস্ট স্যুট

e                Last element in list, this works out to longest one
  _I             Invariance under reverse, this detect palindrome
   #             Filter
   jL            Map join
    \|           By "|"
    cL2          Map chop in two pieces
     .:Q)        Substrings. Implicit Q). ) makes it do all substrings.

2
Nooooo! পাইঞ্জ উত্তরটি নিনজা চাইবে; _;
ডাউনওয়েট

ব্যাখ্যা দয়া করে? : 3
ডাউনগোট

@ ডাউনগোট তিনি সমস্ত সাবস্ট্রিংগুলি নিয়ে দুটি টুকরো টুকরো করে প্রতি জোড়ায় যোগ দিলেন | প্রতিসম দ্বারা ফিল্টার করুন, এটি [কে] এ যুক্ত করুন এবং শেষ উপাদানটি (যা দীর্ঘতম) পান
বুসুক্সুয়ান

@ ডাউনগোট সম্পন্ন হয়েছে
মালটিসেন

2
:Q)= বিগনোজ
gcampbell

8

05 এ বি 1 , 19 17 14 বাইট

কোড:

Œévy2ä'|ý©ÂQi®

ব্যাখ্যা:

Π               # Get all substrings of the input
 é               # Sort by length (shortest first)
  vy             # For each element...
    2ä           # Split into two pieces
      '|ý        # Join by "|"
         ©       # Copy this into the register
          Â      # Bifurcate, pushing a and reversed a
           Q     # Check if it's a palindrome
            i®   # If so, push that string again
                 # Implicit, the top element is outputted

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


5

পাইথন 2, 102 97 বাইট

def f(s):h=len(s)/2;r=s[:h]+'|'+s[h:];return s and max(r*(r==r[::-1]),f(s[1:]),f(s[:-1]),key=len)

বরং ধীর এবং অদক্ষ ... আইডিয়নে আরও ছোট পরীক্ষার কেস যাচাই করুন ।


4

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

s=>eval('for(O=i=0;s[i++];O=O[j+j]?O:o)for(o="|",j=0;(S=s[i-1-j])&&S==s[i+j++];o=S+o+S);O[1]?O:""')

অথবা

s=>eval('for(O="",i=0;s[i++];O=O[j+j]||j<2?O:o)for(o="|",j=0;(S=s[i-1-j])&&S==s[i+j++];o=S+o+S);O')

শুধু কৌতুহলী, কি evalজন্য?
gcampbell

@gcampbell evalএড়াতেreturn
edc65

আপনি কি এড়াতে কমা অপারেটরটি ব্যবহার করতে পারবেন না?
মেয়রমন্টি

পুনঃটুইট forএকটি অভিব্যক্তি নয়, সুতরাং এটির জন্য সাধারণত return
সমৃদ্ধ


2

রেটিনা , 66 বাইট

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

M!&`(.)+(?<-1>\1)+(?(1)¶)
O$#`.+
$.&
A-2`
^(.)+?(?=(?<-1>.)+$)
$&|

এটি অনলাইন চেষ্টা করুন! (প্রথম লাইন একবারে একাধিক লাইনফিড-বিচ্ছিন্ন পরীক্ষার পরীক্ষার সক্ষম করে en

হুম, আমার চেয়ে অনেক দীর্ঘ ...


2

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

s=>[...s].map((d,i)=>{for(a='|',j=0;d=s[i-j],d&&d==s[i-~j];r=r[j+++j]?r:a)a=d+a+d},r='')&&r

কম গল্ফড

f=s=>
  [...s].map(
    (d,i) => {
    for(a='|', j=0; d=s[i-j], d&&d==s[i-~j]; r = r[j++ +j]? r : a)
      a = d+a+d
    }, r=''
  ) && r

পরীক্ষা

F=
s=>[...s].map((d,i)=>{for(a='|',j=0;d=s[i-j],d&&d==s[i-~j];r=r[j+++j]?r:a)a=d+a+d},r='')&&r

;[["Hello World", "l|l"]
,["Programming Puzzles and Code-Golf", "m|m"]
,["abcba", ""]
,["Hulluh", "ul|lu"]
,["abcdefggfedcba", "abcdefg|gfedcba"]
,["abcdefggfabc", "fg|gf"]
,["AbbA", "Ab|bA"]
,["This input is a lot like the last one, but with more characters that don't change the output. AbbA", "Ab|bA"]]
.forEach(t=>{
  var i=t[0],k=t[1],r=F(i)
  console.log(k==r?'OK ':'KO ',i+' -> '+r,k!=r?'(check '+k+')':'')
})  


2

পার্ল 5, 105 100 98 + 1 = 106 101 99 বাইট

/(?=((.)(?1)?\2)(?{[push@_,$1})(?!))/;($_)=sort{length$b<=>length$a}@_;substr($_,length>>1,0)='|'if$_

আমি কেবল পুনরাবৃত্তিমূলক রেগেক্সকে একবার যেতে চেয়েছিলাম। -pবিকল্পের প্রয়োজন । সম্পাদনা করুন: সংরক্ষিত (4 টি অতিক্রম করেছেন) 7 বাইট @ এমএস 210 এর জন্য ধন্যবাদ। (অনুপস্থিত বাইটটি এমন একটি সাশ্রয়ের কারণে যা @ msh210 এর সর্বশেষ সঞ্চয়টি ছাড়িয়ে গেছে))


আমি এর কোনটি পরীক্ষা করিনি, তবে সম্ভবত এটি বিভিন্ন উপায়ে সংক্ষিপ্ত হতে পারে, সহ: (1) @_=(@_,$1)হতে পারে push@_,$1। (২) নিউলাইন এবং ফাইনাল ছেড়ে দিন ;। (3) আমি সন্দেহ সেখানে একটি সংক্ষিপ্ত সাজানোর শর্ত আপনি ব্যবহার করতে পারেন (যদি তারপর অন্য কিছুই অন্তত --- সম্ভবত --- বিকল্প নেই -জন্য <=>)
msh210

@ এমএস 210 প্রথম দুটি পয়েন্টের জন্য ধন্যবাদ তবে আমি ইতিমধ্যে চেষ্টা করেছি -এবং এটি কার্যকর হয়নি (সম্ভবত অগ্রাধিকারের জন্য প্যারেন্স দরকার যা সঞ্চয়কে পরাস্ত করে)।
নিল

চেষ্টা y...c>>1বা y...c/2পরিবর্তে length>>1। (স্বীকৃত।)
এমএস 210

@ এমশ 210 আমার প্রথমে পার্লে গল্ফ করার টিপসটি অবশ্যই পড়া উচিত ছিল ...
নীল

আমি অনুমান করছি যে আপনার শেষ জুটি পেরেনও যেতে পারে।
msh210

2

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

f=lambda s,p='':s and max((''<p<=s<p+'\x7f')*(p[::-1]+'|'+p),f(s[1:]),f(s[1:],s[0]+p),key=len)

\x7fআসল চরিত্রের দেল, যা ASCII 127 (ডেনিসের কৃতিত্ব) দিয়ে প্রতিস্থাপন করুন ।

এই একটি অনুরূপ কৌশল অনুসরণ করে ডেনিস এর উত্তর ব্যবহারের maxএবং যাও recursively দীর্ঘতম যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে ব্যবধান এটি শাখাবিন্যাস। তবে পরিবর্তে, এটি বাম অর্ধেকটি সন্ধান করে যা পরীক্ষা করে দেখায় যে সংশ্লিষ্ট মিরর করা ডান অর্ধেকটি স্ব-তৈরি শুরুর সাথে ঠিক পরে আসে ।

ফাংশনটি অনুমান করে যে প্রথম চরিত্রটি মিরর করা বাম অর্ধে রয়েছে কিনা। যদি তা না হয় তবে এটি কেবল এটি ফেলে দেয় এবং বাকী অংশগুলিতে পুনরাবৃত্তি করে। যদি এটি হয় তবে এটি pবিপরীত অক্ষরের স্ট্যাকটিতে যুক্ত হয়েছে । স্ট্রিংটি যদি স্ট্যাকের সাথে শুরু হয় তবে মিরর স্ট্রিংটি তৈরি করা এবং একটি দীর্ঘতম আয়না হিসাবে বিবেচনা করা হয়। |আউটপুট হিসাবে এড়াতে কেবল খালি খালি স্ট্যাকগুলি বিবেচনা করা হয়।


2

জেলি , 17 বাইট

ẆŒḂÐfṪœs2j”|µẋLḂ$

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

সহায়তায় সম্পন্ন জনাব Xcoder এবং DJMcMayhem চ্যাটে

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

ẆŒḂÐfṪœs2j”|µẋLḂ$ - Main link. Argument s  e.g.    ; 'AbbA'

Ẇ                 - All contiguous sublists
   Ðf             - Keep elements that are...
 ŒḂ               -  Palindromic                   ; [['A'], ['b'], ['b'], ['A'], ['bb'], ['AbbA']]
     Ṫ            - Final element                  ; 'AbbA'
      œs2         - Split into 2 chunks            ; ['Ab', 'bA']
         j”|      - Join with "|"                  ; 'Ab|bA'
            µ     - New link with ^ as argument
              LḂ$ - Is the length odd?             ; 1
             ẋ    - Repeat the string ^ many times ; 'Ab|bA'

1

হাস্কেল, 126 111 বাইট

(!)=drop
f s|n<-length s=last$"":[a++'|':b|k<-[1..n],t<-map(!s)[1..n-k],let[a,b]=take k<$>[t,k!t],a==reverse b]

1

টিএসকিউএল 227 223 বাইট

আমি দৈর্ঘ্যটি সর্বোচ্চ 99 বাইটে হার্ডকোড করেছি, এটি সংরক্ষিত বাইটস কিন্তু এটি আরও ধীর করে তুলেছে। এটি এখনও একটি শালীন কর্মক্ষমতা আছে।

Golfed:

DECLARE @t varchar(99)='AbccbA'

,@z char(99)='',@a INT=0,@ INT=0WHILE @a<LEN(@t)SELECT
@z=IIF(LEN(x)>LEN(@z)/2and @t LIKE'%'+x+REVERSE(x)+'%'COLLATE
Thai_bin,x+'|'+REVERSE(x),@z),@=IIF(@=50,1,@+1),@a+=IIF(@=1,1,0)FROM(SELECT
SUBSTRING(@t,@a,@)x)x PRINT @z

Ungolfed:

DECLARE @t varchar(99)='AbccbA'

,@z char(99)='',
@a INT=0,
@ INT=0
WHILE @a<LEN(@t)
  SELECT
    @z=IIF(LEN(x)>LEN(@z)/2and @t LIKE'%'+x+REVERSE(x)+'%'COLLATE Thai_bin,x+'|'
       +REVERSE(x),@z),
    @=IIF(@=99,1,@+1),
    @a+=IIF(@=1,1,0)
  FROM
    (SELECT SUBSTRING(@t,@a,@)x)x

PRINT @z

বেহালা


1
শেষ উদাহরণটি কেবল 99 টি চর দীর্ঘ হিসাবে আপনি 99 এ সীমাবদ্ধ হলে আপনি 2 বাইট শেভ করতে পারেন
অ্যালেক্স কার্লসেন

1
@ ভিজ্যুয়ালবিয়ান থানকিউ, স্ক্রিপ্টটি কেবলমাত্র 99 টি চরিত্রের অনুমতি দেওয়ার জন্য পরিবর্তন করেছে, থাই_সিএস_এএস থেকে থাই_বিনে কোলেশনও পরিবর্তন করেছে
t-clausen.dk

0

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

R,L,s=range,len,input()
t=max([s[i:j/2+i/2]for i in R(L(s))for j in R(L(s)+1)if s[i:j]==s[i:j][::-1]and(j-i)%2<1],key=L)
print t+'|'*(L(t)>0)+t[::-1]

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

এই প্রোগ্রামটি এমনকি দৈর্ঘ্যের বৃহত্তম প্যালিনড্রোমিক স্ট্রিংয়ের প্রথম অর্ধেকটি সন্ধান করে এবং স্ট্রিংটি প্রিন্ট করে একটি এর পরে |, তার পরে স্ট্রিংটি বিপরীত হয়। যদি কোনও উপযুক্ত স্ট্রিং tনা থাকে তবে খালি স্ট্রিংটি হবে এবং খালি স্ট্রিংয়ের '|'*(L(t)>0)মূল্যায়ন করবে।


0

জাভা 8, 294 283 232 বাইট

s->{int l=s.length(),i=0,j,z,y=0;String a,b="";for(;i<l;i++)for(j=0;j<=l-i;)if((a=s.substring(i,i+j++)).equals(new StringBuffer(a).reverse()+"")&(z=a.length())%2<1&z>y){y=z;b=a;}return y>0?b.substring(0,y/=2)+"|"+b.substring(y):"";}

ব্যাখ্যা:

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

s->{                               // Method with String as both parameter and return-type
  int l=s.length(),                //  Length of the input-String
      i=0,j,                       //  Index-integers
      z,y=0;                       //  Temp-integers
  String a,b="";                   //  Temp-Strings
  for(;i<l;i++)                    //  Loop (1) from 0 to `l` (exclusive)
    for(j=0;j<=l-i;                //   Inner loop (2) from 0 to `l-i` (inclusive)
      if((a=s.substring(i,i+j++))  //    Set the current substring to `a`
          .equals(new StringBuffer(a).reverse()+"")
                                   //    If `a` is a palindrome
         &(z=a.length())%2<1       //    And the length of `a` is even
         &z>y){                    //    And the length of `a` is larger than `y`
        y=z;                       //     Change `y` to `z`
        b=a;}                      //     Change `b` to `a`
                                   //   End of inner loop (2) (implicit / single-line body)
                                   //  End of loop (1) (implicit / single-line body)
  return y>0?                      //  If the result-length is not 0:
    b.substring(0,y/=2)+"|"+b.substring(y)
                                   //   Return the result
   :                               //  Else:
    "";                            //   Return an empty String
}                                  // End of method
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.