मुझे अपना दर्पण कहां रखना चाहिए?


30

यह एक दर्पण है |:। मुझे अभी पता चला है कि आप स्ट्रिंग के बीच में एक दर्पण चिपका सकते हैं यदि स्ट्रिंग को खुद पर प्रतिबिंबित किया जा सकता है! उदाहरण के लिए, स्ट्रिंग abccba। यदि आप इसे आधे में काटते हैं तो दो हिस्सों में एक दूसरे के दर्पण चित्र हैं:

abc  <-->  cba

तो, हम स्ट्रिंग के बीच में एक दर्पण चिपका सकते हैं, और हमारा नया स्ट्रिंग है abc|cba। कभी-कभी, स्ट्रिंग के केवल भाग को ही प्रतिबिंबित किया जा सकता है। उदाहरण के लिए, स्ट्रिंग "दर्पण"। दो आर को प्रतिबिंबित किया जाता है, लेकिन बाकी स्ट्रिंग नहीं है। यह ठीक है, हम केवल स्ट्रिंग के उन हिस्सों को हटा देंगे जो एक दूसरे को दर्पण नहीं करते हैं, और हमें निम्नलिखित स्ट्रिंग मिलती है:

r|r

कुछ तारों को कई स्थानों पर मिरर किया जा सकता है। उदाहरण के लिए, "हैलो वर्ल्ड, xyzzyx"। मुझे अपने दर्पण में बहुत सारे पाठ प्रतिबिंबित हैं, इसलिए आपको अपना दर्पण लगाने के लिए सबसे अच्छी जगह खोजने की आवश्यकता है। इस मामले में, आपको लंबे समय तक प्रतिबिंबित स्ट्रिंग का उत्पादन करना चाहिए और हमारे पिछले उदाहरण की तरह, बाकी सब को हटा दें। यह तार बन जाता है:

xyz|zyx

कुछ तार ऐसे दिखते हैं जैसे उन्हें प्रतिबिंबित किया जा सकता है, लेकिन वास्तव में ऐसा नहीं हो सकता। अगर एक तार को कहीं भी नहीं दिखाया जा सकता है, तो आपको कुछ भी नहीं करना चाहिए।

चुनौती:

केवल मुद्रण योग्य-एससीआई युक्त स्ट्रिंग को देखते हुए, अपना दर्पण लगाने के लिए सबसे अच्छी जगह ढूंढें। दूसरे शब्दों में,

सबसे बड़ी समान लंबाई वाली पेलिंड्रोमिक सबस्ट्रिंग का पता लगाएं, फिर इसे एक पाइप कैरेक्टर के साथ आउटपुट करें। '' इसके बीच में।

इनपुट 1-50 वर्ण लंबा होगा।

आप यह मान सकते हैं कि इनपुट में दर्पण |या newlines नहीं होंगे । इसके अलावा, सभी मुद्रण योग्य-अस्सी के अक्षर निष्पक्ष खेल हैं। यदि सबसे लंबा मिरर किया गया विकल्प दो सबस्ट्रिंग के बीच बंधा है, तो आप चुन सकते हैं कि कौन सा आउटपुट दिया जाए। उदाहरण के लिए, स्ट्रिंग "अब्बा ओलो" के लिए, आपको "ab | ba" या "ol | lo" का आउटपुट करना होगा, लेकिन इससे कोई फर्क नहीं पड़ता कि आप कौन सा आउटपुट करते हैं। स्ट्रिंग केस संवेदी, जैसे हैं "अब्बा" चाहिए नहीं उत्पादन "एबी | बा", यह उत्पादन रिक्त स्ट्रिंग चाहिए।

नमूना IO:

"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"

हमेशा की तरह, यह कोड-गोल्फ है, इसलिए मानक कमियां लागू होती हैं, और बाइट्स में सबसे कम जवाब जीतता है!


क्या इनपुट की लंबाई पर कोई सीमा है?
मेगो

@Mego जब तक आपका एल्गोरिथ्म सैद्धांतिक रूप से किसी इनपुट पर काम करता है, मुझे परवाह नहीं है कि कितना समय लगता है / कितनी मेमोरी लगती है।
DJMcMayhem

मैंने पूछा क्योंकि वेनिला रेगेक्स इंजन केवल एक निर्दिष्ट, परिमित मूल्य (मनमाने ढंग से लंबे palindromes के विपरीत) तक लंबाई के पैलिंड्रोमों के मिलान करने में सक्षम हैं, और एक रेगीक्स-आधारित समाधान की संभावना इस बात पर निर्भर करती है कि ऊपरी है या नहीं। इनपुट की लंबाई पर बाध्य है।
Mego

@ मेगो आह, जो समझ में आता है। मान लीजिए कि इनपुट 50 अक्षरों तक लंबा हो सकता है। वह कैसा लगता है?
DJMcMayhem

जवाबों:


9

पायथ - 19 17 15 13 बाइट्स

मुझे दो बाइट बचाने के लिए @FryAmTheEggman को धन्यवाद।

ARRGH कोई जवाब नहीं के लिए विशेष मामला। हल कर दिया!

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
डाउनगेट

@Downgoat उन्होंने सभी सबस्ट्रिंग्स को लिया और दो में काट लिया, प्रत्येक जोड़ी को समरूपता से जोड़ दिया।, समरूपता द्वारा फ़िल्टर करें, अपील करें कि [k] और अंतिम तत्व प्राप्त करें (जो सबसे लंबा है)
Busukxuan

@Downgoat ने किया।
माल्टीसेन

2
:Q)= बिग्नोज
gcampbell

8

05AB1E , 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

CP-1252 एन्कोडिंग का उपयोग करता है । इसे ऑनलाइन आज़माएं!


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)

बल्कि धीमी और अक्षम ... Ideone पर छोटे परीक्षण मामलों की जाँच करें ।


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?
8 अक्टूबर को gcampbell

@gcampbell evalसे बचने के लिएreturn
edc65

क्या आप वापसी से बचने के लिए अल्पविराम ऑपरेटर का उपयोग नहीं कर सकते हैं?
मेयरमोनी

@SpeedyNinja नहीं। forएक अभिव्यक्ति नहीं है, इसलिए इसे आम तौर return
जूल


2

रेटिना , 66 बाइट्स

बाइट गिनती आईएसओ 8859-1 एन्कोडिंग मानती है।

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

इसे ऑनलाइन आज़माएं! (पहली पंक्ति एक ही बार में कई लाइनफ़ीड-अलग-अलग परीक्षण मामलों का परीक्षण करने में सक्षम बनाती है।)

हम्म, मैं जितना चाहूंगा, उससे अधिक ...


2

जावास्क्रिप्ट (ईएस 6), 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 बाइट्स @ msh210 के लिए धन्यवाद। (लापता बाइट एक बचत के कारण है जो @ msh210 की नवीनतम बचत से अलग हो गई थी।)


मैंने इनमें से किसी का भी परीक्षण नहीं किया है, लेकिन शायद यह विभिन्न तरीकों से संक्षिप्त किया जा सकता है, जिसमें शामिल हैं: (1) @_=(@_,$1)हो सकता है push@_,$1। (२) नई खबरों को अंतिम रूप देना ;। (3) मुझे संदेह है कि एक छोटी -<=>
छँटाई की

@ msh210 पहले दो बिंदुओं के लिए धन्यवाद, लेकिन मैं पहले से ही कोशिश कर रहा -था और यह काम नहीं कर रहा था (शायद पूर्ववर्ती के लिए परेंस की जरूरत है जो बचत को हरा देता है)।
नील

के बजाय y...c>>1या की कोशिश करो । ( y...c/2length>>1
अप्राप्त

@ msh210 मैंने स्पष्ट रूप से पहले पर्ल में गोल्फ के लिए टिप्स पढ़े होंगे ...
नील

मैं अनुमान लगा रहा हूं कि आपकी अंतिम जोड़ी में भी जा सकते हैं।
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वास्तविक चरित्र DEL के साथ बदलें , जो ASCII 127 (डेनिस के लिए क्रेडिट) है।

यह डेनिस केmax सबसे लंबे पैलिंड्रोम अंतराल को खोजने के लिए पुनरावर्ती और शाखाओं के उपयोग के उत्तर के समान रणनीति का अनुसरण करता है । लेकिन, इसके बजाय, यह बाएं आधे को ढूंढता है, यह जांचता है कि संबंधित दर्पण सही आधा एक स्व-निर्मित स्टार्टअप के साथ इसके ठीक बाद आता है ।

फ़ंक्शन यह अनुमान लगाता है कि क्या पहला चरित्र आधे बाएं दर्पण में है। यदि नहीं, तो यह इसे छोड़ देता है और शेष पर पुनरावृत्ति करता है। यदि ऐसा है, तो इसे 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

TSQL 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
आप 2 बाइट से दाढ़ी बना सकते हैं यदि आप 99 तक सीमित हैं क्योंकि अंतिम उदाहरण केवल 99 वर्ण लंबा है
एलेक्स कार्लसन

1
@VisualBean thankyou, स्क्रिप्ट को केवल 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.