সবচেয়ে সংক্ষিপ্ততর, অভিধান সংক্রান্ত ক্ষুদ্রতর উত্পাদক স্ট্রিং


16

একটি স্ট্রিং একটি স্ট্রিং x উত্পন্ন করেy যদি এর yঅসীম পুনরাবৃত্তির একটি স্ট্রিং থাকে x। উদাহরণস্বরূপ abcউত্পন্ন bcabcab

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

ইনপুট

bcabcabca

আউটপুট

abc

সংক্ষিপ্ততম কোড জিতেছে। আপনি ধরে নিতে পারেন ইনপুটটিতে কেবল অজ অক্ষর (এবং আপনি চাইলে একটি ট্রেলিং নিউলাইন) রয়েছে।


আউটপুট কোন ক্রমে থাকা উচিত? বলুন আউটপুট bacপরিবর্তে আপনার উদাহরণ হতে পারে abc?
পিঁপড়ের

@ গ্রোভিউজার: না, ইনপুটটি bacএস এর পুনরাবৃত্ত প্যাটার্নের একটি স্তর নয় ।
কিথ র্যান্ডাল

কিন্তু ইনপুট পারে একটি সাবস্ট্রিং গঠিত (bca)^n, যার মানে bcaঠিক যেমন দেওয়া উদাহরণস্বরূপ বৈধ হিসাবে abc
জাব

1
@ জ্যাব: bcaঅভিধানের তুলনায় ক্ষুদ্রতম নয়।
কিথ র্যান্ডাল

আহ, আমি একরকম অংশটি মিস করেছি।
জ্যাব

উত্তর:


9

রুবি 1.9, 40 টি অক্ষর

gets;a=?a;a.next!until(a*~/$/)[$_];$><<a

ধরে নিই ইনপুটটি কোনও নতুন লাইনের মাধ্যমে শেষ করা হয়নি। এছাড়াও এটি সম্ভবত বৃহত্তর ফলাফলের জন্য হাস্যকরভাবে ধীর।

$ echo -n "bcabcabca" | ruby genlex.rb 
abc
$ echo -n "barfoobarfoobarfoo" | ruby1.9 genlex.rb 
arfoob

2

পাইথন 88 185 চর

import re
s=raw_input()
m=s.index(min(s))
s=s[m:]+s[:m]
i=0
while s.replace(s[:i],''):i+=1
m=min(s[:i])
s=re.findall('%s[\w]*?(?=%s|$)'%(m,m),s[:i])
m=s.index(min(s))
print ''.join(s[m:]+s[:m])

আউটপুট:

bcabcabca
abc

aaa
a

abc
abc

cccbbcccbbcccbb
bbccc

barfoofoobarfoofoo
arfoofoob

bacabac
abacbac

কিছু ইনপুটগুলির জন্য আপনাকে অভিধানের ক্ষুদ্রতম স্ট্রিং দেয় না, যেমন "বিকাব্যাক"
হাওয়ার্ড

পছন্দ করুন আমি আমার কোড আপডেট করেছি, এটি এখন অনেক দীর্ঘ, তবে স্ট্রিংগুলি bacabacসঠিকভাবে পরিচালনা করে ।
ভাদের

"অ্যাবাক" সঠিক হবে, @ যোগসোটোথের উত্তর দেখুন: একটি ব্যাকাব্যাক অ্যাবাক।
হাওয়ার্ড

2

হাস্কেল, 299 128 টি অক্ষর

import Data.List
main=interact(\z->minimum$filter(\w->isInfixOf z$concat$replicate(length z)w) $filter((/=)"")$inits=<<tails z)

জ্লো ধন্যবাদ! এখন সংস্করণ উভয়ই খাটো এবং আমি সঠিক বিশ্বাস করি।


1
সুতরাং, সুসংবাদটি হ'ল যদি আপনি ভেন্টোরোর রুবির সমাধান হিসাবে স্টিডিনে ইনপুট গ্রহণ করেন তবে এই সমাধানটি প্রায় 91 টি চর থেকে নিচে গল্ফ করা সম্ভব। দুর্ভাগ্যক্রমে, ইনপুটটি cabcabcabcউত্পাদন করে abcabc, সুতরাং এই সমাধানটি যথেষ্ট নয়। আমি মনে করি q++q++qকাঙ্ক্ষিত ফলাফল পেতে আপনাকে পরিবর্তন করতে হবে। চূর্ণবিচূর্ণ জিনিসগুলি ঠিক করার জন্য আমার দ্রুত প্রচেষ্টা যদিও 145 টি পর্যন্ত চর রয়েছে। ( স্পোলাররা এখানে আছেন: gist.github.com/1035161 )

ধন্যবাদ! আমি ইন্টারেক্ট সম্পর্কে জানতাম না বা ইনসাইটগুলি সম্পর্কেও জানতাম না << = সমস্ত সাবস্ট্রিংগুলি পাওয়ার জন্য লেজ। আমি কিছুটা অক্ষর অর্জন করতে আপনার সংস্করণটি সামান্য পরিবর্তন করেছি। আমি বাছাই এবং ফিল্টার পরিবর্তন করেছি (not.null) ফিল্টার দ্বারা ((/ =) "")। আবার ধন্যবাদ!
যোগসোটোথ

আপনার (/=)""শর্তের দরকার কেন ? মনে হচ্ছে কিছু করার নেই। এছাড়াও, ল্যাম্বডাস থেকে মুক্তি পাওয়া সহায়তা করে: আপনি .অপারেটরটি ব্যবহার করে পুরোপুরি পরিত্রাণ পেতে পারেন এবং main=interact sকয়েকটি চরিত্র সংরক্ষণ করতে মূল ফাংশন পরিবর্তন করতে পারেন।
রোটসর

আমি মনে করি "বিসিএ" এর উত্তরটি ভুল। এটি "এবিসি" হওয়া উচিত, তবে এখন "বিসিএ"।
রোটসর

এর একটি সম্ভাব্য সমাধান এর permutationsপরিবর্তে ব্যবহার করা tails
রোটসর

2

পাইথন, 121 137 129 অক্ষর

s=raw_input()
n=len(s)
l=[(s+s)[i/n:i/n+i%n+1]for i in range(n*n)]
print min(filter(lambda x:(x*len(s)).find(s)+1,sorted(l)),key=len)

সম্পাদনা: জিমিনপি দ্বারা চিহ্নিত বাগটি স্থির করে


বাহ, এটা দুর্দান্ত! দুর্ভাগ্যক্রমে, এটি aababস্ট্রিংয়ের জন্য প্রিন্ট করে ababa... :(
জিমিনপি

ঠিক আছে, স্থির হয়েছে ... এটি দীর্ঘ হচ্ছে :(
জুলুস ওলান

2

রুবি 1.9, 36

$><<(?a..gets).find{|s|(s*~/$/)[$_]}

ভেন্টোরোর সমাধান হিসাবে একই পন্থা ব্যবহার করে।


2

পাইথন, 161 159 166 140 141 134 132 চর

y=raw_input();i=n=l=len(y)
while i:
 if (y[:i]*l)[:l]==y:n=i
 i-=1
x=y[:n];y=x*2
while i<n:
 x=min(x,y[i:i+n])
 i+=1
print x

সম্পাদনা : জুলস ওলনের মন্তব্য পড়ে কোডটি গল্ফ করে। bcdabcdabফলস্বরূপ একটি 'বাগ' সরানো হয়েছে abbc

সম্পাদনা 2 : জুলস ওলোন দ্বারা চিহ্নিত বাগটি স্থির করে ( abaaফলস্বরূপ aaa)।

পাইথন সম্পর্কে আমি ভালভাবে জানি না, সুতরাং এই কোডটি সম্ভবত 'গল্ফড নয়'।

আমি এই নিয়ম ভালবাসি:

আপনি ধরে নিতে পারেন ইনপুটটিতে কেবল অক্ষর রয়েছে ...

ইনপুট এবং আউটপুট

bcdabcd
abcd

bcabcabca
abc


abcdabcd
abcd

bcdabcdab
abcd

barfoofoobarfoofoobar
arfoofoob

cccbbcccbbcccbb
bbccc

aaaaaaaaaaaaaaaa
a

thequickbrownfox
brownfoxthequick

ababa
ab

abaa
aab

1
ব্রাউন শিয়াল, দ্রুত! কুকুর, অলস!
জিমিনপি

সুন্দর সমাধান, বেশ সংক্ষিপ্ত এবং সম্ভবত এখানে সেরা জটিলতা! আপনি এটি কিছুটা গল্ফ করতে পারেন - উদাহরণস্বরূপ, স্ট্রিংগুলির তুলনা করার জন্য আপনার "ইনট" দরকার নেই; এবং "যখন আমি> 0" দ্বারা "যখন" এবং "y = y + y" দ্বারা "y * = 2" প্রতিস্থাপন করুন।
জুলিউস ওলান

আসলে একটি সমস্যা আছে: আবাবের জন্য এটি আআ প্রিন্ট করে ...
জুলুস ওলান

@ জুলস মন্তব্যের জন্য ধন্যবাদ! আমি সে সম্পর্কে ভেবে
দেখিনি

আপনি i-=1পরিবর্তে করতে পারেন i=i-1। অনুরূপভাবে ইনক্রিমেন্টের জন্য।
লোজ্যাকার

1

গণিত 124 বাইট

x = StringLength@(y = "");
For[i = 1, ! (s = y~StringTake~i)~StringRepeat~x~StringContainsQ~y,i++];
First@Sort@StringPartition[s <> s, i, 1]

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

ইনপুট প্রথম লাইনে উদ্ধৃতি চিহ্নের মধ্যে চলে যায়। যদি কোনও ফাংশন হিসাবে পুনরায় পোস্ট করা হয় তবে স্ট্রিং ইনপুটটি এর মতো লাগে:

f=(x=StringLength@(y=#);For[i=1,!(s=y~StringTake~i)~StringRepeat~x~StringContainsQ~y,i++];First@Sort@StringPartition[s<>s,i,1])&

f@"bca"

(* "abc" *)

f@"abaa"

(* "aab" *)

তারপরে এটি 128 বাইট।

Forলুপ প্রথম লাগে iইনপুট অক্ষর এবং তাদের অন্তত আপ ইনপুট দৈর্ঘ্যের পুনরাবৃত্তি, তারপর চেক যদি ইনপুট ফলাফলের একটি সাবস্ট্রিং হয়। স্ট্রিংয়ের সময়কালের দৈর্ঘ্য সন্ধান করার পরে, StringPartitionকমান্ডটি সেই সময়ের দুটি অনুলিপি সন্নিবেশ করে এবং সেই দৈর্ঘ্যের সমস্ত সাবস্ট্রিংগুলি সেখান থেকে নেয় (মূলত সমস্ত চক্রীয় অনুভূত হয়), তারপরে First@Sortলিক্সোগ্রাফিকভাবে আদেশ করার পরে তাদের প্রথমটি খুঁজে পায়।


0

জাভাস্ক্রিপ্ট 96 অক্ষর।

var temp = {},len = str.length;
for(i in str) 
temp[str[i]] = true;
Object.keys(temp).join(""); 

ওয়ার্কিং প্লঙ্কার


1
সম্প্রদায় স্বাগতম! যদিও আমি আপনার কোডটি পরীক্ষা করতে পারছি না, আপনি GET / POST থেকে কোড রিডিং এবং সতর্কতা বা কনসোল.লগ বা কোনও ফাংশন প্যারামিটার হিসাবে ইনপুট গ্রহণ করে এবং আউটপুট ফিরিয়ে দিতে পারেন?
অ্যারন

@ আরনগোজিউজিট যোগ করেছেন pluckr
এনজিউভার

ধন্যবাদ, যে সাহায্য করে। তবুও, আপনার পোস্ট করা কোডটি একা ব্যবহার করা যাবে না, যাতে বাইট গণনাটি ঠকায়। আরও গুরুত্বপূর্ণ, আমি ভয় করি যে আপনার কোডটি চশমাগুলিকে সম্মান করে না: আমি বিশ্বাস করি যে আপনি "উত্পন্ন স্ট্রিং" এর পরিবর্তে ব্যবহৃত অনন্য বর্ণের একটি সেট ফিরে পেয়েছেন, যা আমরা wholeচ্ছিক কাটছাঁটি করে পুনরায় (পুরো হিসাবে) সক্ষম করতে হবে ইনপুট প্রাপ্ত। আমি আপনার আপডেট কোডটি দেখার অপেক্ষায় রয়েছি!
হারুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.