ওডে গল্ফ - পত্র মোছা


17

অভিধানের ফাইল দেওয়া (প্রতিটি পংক্তিতে একটি শব্দ বা বাক্য সম্বলিত একটি পাঠ্য ফাইল, সম্ভাব্য বিরামচিহ্ন সহ তবে সংখ্যা নেই; লাইন বর্ণমালাভ করা হয়), আপনাকে অবশ্যই প্রতিটি শব্দের সংমিশ্রণ আউটপুট করতে হবে যেখানে একটি শব্দ থেকে অন্যটি তৈরি করতে একটি অক্ষর সরানো যেতে পারে; সরানো চিঠিটি বন্ধনীতে আবদ্ধ করা উচিত।

উদাহরণস্বরূপ, ইনপুট

cat
cart
code
golf
ode
verify
versify

এর একটি আউটপুট দেওয়া উচিত

ca(r)t
(c)ode
ver(s)ify

একই জুটি পাওয়ার একাধিক উপায় কেবল একবারে প্রদর্শিত হবে। আপনি আউটপুট করতে পারেন , scra(p)pedবা scrap(p)edউভয় না।

দীর্ঘ এন্ট্রি দ্বারা আউটপুট বর্ণমালা অনুসারে অর্ডার করা উচিত ;

mart
mar
mat
ma

এর একটি আউটপুট থাকা উচিত

ma(r)
ma(t)
ma(r)t
mar(t)

এবং দ্বিতীয়টি দুটি ক্রম হতে পারে।

অভিধান ফাইলটিতে মূলধন, স্থান, হাইফেন বা অ্যাডোস্ট্রোফস অন্তর্ভুক্ত থাকতে পারে; এগুলি উপেক্ষা করা উচিত। এই ক্ষেত্রে,

inlay 
in-play

উত্পাদন করা উচিত in(p)lay। আপনার আউটপুট সব একই ক্ষেত্রে হওয়া উচিত। অতিরিক্ত সাদা স্থান অনুমোদিত ace

ইনপুট STDIN বা কোনও ফাইল হতে পারে; এটি নিউলাইন দ্বারা পৃথক করা হয়। আউটপুট কোনও ফাংশন বা STDOUT এর রিটার্ন মান হতে পারে (বা আপনি চাইলে কোনও ফাইলে লিখিত)।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

(এটি পিপিসিজিতে আমার প্রথম চ্যালেঞ্জ - আমি কোনও ভুল করেছি কিনা তা আমাকে জানান এবং আমি এটি ঠিক করে দেব))


3
কিসের জন্য আউটপুট হওয়া উচিত mart mar mat ma? এটা হবে mar(t) ma(r)t ma(r) ma(t)?
Sp3000

@ এসপি: অর্ডার নির্দিষ্ট করতে ভুলে গেছেন - স্পষ্ট করার জন্য সম্পাদিত।
Deusovi

প্রথম উদাহরণে গল্ফ শব্দটি আউটপুটটিতে নেই। এটি কি এমন একটি শব্দ যার সাথে অন্য সংমিশ্রণ নেই?
LukStorms

@ লুক: হ্যাঁ! বেশিরভাগ অভিধানের ফাইলগুলির জন্য, প্রচুর শব্দ থাকবে যা অন্য শব্দগুলি মোটেও তৈরি করে না - সেগুলি আউটপুটে কোথাও প্রদর্শিত হবে না।
দেউসোভি

2
(বড়) স্ট্রিং প্যারামিটার দিয়ে কোনও ফাংশনকে অনুমতি দেওয়ার বিষয়ে কী অনুরোধ করা আউটপুটটিকে স্ট্রিং অ্যারে হিসাবে ফিরিয়ে দেবে? এটি I / O ফাইল পরিচালনা করার প্রয়োজনীয়তা এড়িয়ে অ্যালগরিদমকে কেন্দ্র করে put
edc65

উত্তর:


1

পার্ল -an0, 101 + 3 বাইট

@F=sort{length$a<=>length$b}map{s/\W//g;lc}@F;map{$`.$'~~@F?print"$`($1)$'\n":$\while/(.)(?!\1)/g}@F;

কোথায়

  • @Fরানাইটাইম ফ্ল্যাগ ম্যাজিক দ্বারা সরবরাহ করা একটি অভিধান, একটি অ্যারেতে সঞ্চিত। (বি-ওস্ট, বোও # @% @ # $% $ # @ টি)
  • map{s/\W//g;lc}@Fশব্দ থেকে সমস্ত প্রতীক সরান এবং সবকিছু ছোট করে তোলে। (বুস্ট, বুট)
  • sort{length$b<=>length$a}দৈর্ঘ্যের উপর প্রকারের। (বুট, বুস্ট)
  • map{ (...) while/(.)(?!\1)/g}@Fএকই অক্ষর অনুসারে অনুসরণ না করা সমস্ত অক্ষরের সাথে মেলে ([b] উট, বো [ও] টি, বো [টি], ...)
  • print"$`($1)$'\n"যে অংশগুলি পূর্ববর্তী, প্রথম বন্ধনীকরণ এবং একটি ম্যাচ সফল করার জন্য প্রিন্ট করে ... (বু (গুলি) টি)
  • if $`.$'~~@F... যদি ম্যাচের আগে এবং পরে সমস্ত কিছুর অভিধানে থাকে। ([প্রচার করা])

5

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

স্ট্রিং প্যারামিটার সহ একটি ফাংশন, ফাইল থেকে কোনও ইনপুট নেই। আমি ওপিকে জিজ্ঞাসা করেছিলাম এটি বৈধ হতে পারে কিনা?

একটি ইকামাস্ক্রিপ্ট comp অনুবর্তী ব্রাউজারে স্নিপেট চালনা পরীক্ষা করুন (তীর ফাংশন, টেম্পলেট স্ট্রিং, স্প্রেড অপারেটর - ফায়ারফক্স, সম্ভবত সাফারি বা এমএস এজ, ক্রোম নয়)

f=t=>t.split`
`.map(w=>(d[k=w.replace(/\W/g,'').toLowerCase()]={},k),d={},r=[]).map(w=>[...w].map((c,i,v)=>(d[v[i]='',x=v.join``]&&!d[x][w]&&r.push(d[x][w]=(v[i]=`(${c})`,v.join``)),v[i]=c)))&&r.sort((a,b)=>a.length-b.length)

// LESS GOLFED

Q=t=>{
  // convert to canonical form and put in a dictionary
  // each value in the dictionary is an hashtable tha will store the list
  // of words that can generate the current word, removing a letter
  d={},
  t=t.split`\n`.map(w=>(k=w.replace(/\W/g,'').toLowerCase(),d[k]={},k))
  r=[], // result array 
  t.forEach(w =>
    [...w].forEach((c,i,v)=>( // for each letter in word, try to remove
      v[i]='', x=v.join``, // build string with missing letter
      v[i]='('+c+')', y=v.join``, // and build string with brackets
      v[i]=c, // restore the current letter
      d[x] && // if the word with removed letter is present in the dictionary
      !d[x][w] && // and not already from the same generating word
         r.push(d[x][w]=y) // update dictionary and add word to result array
    ))
  )
  return r.sort((a,b)=>a.length-b.length) // sort result by length
}  

// TEST
function test() { R.innerHTML=f(I.value) }
textarea { height: 20em }
Test <button onclick="test()">-></button>
<span id=R></span>
<br><textarea id=I>cat
cart
code
golf
node
scraped
scrapped
verify
versify
mart
mar
mat
ma</textarea>


@ এথ প্রডাকশনগুলি ডান,
থেক্স

3

রুবি, 173

->d{o=[]
c={}
d=d.sort_by{|w|[w.size,w]}.map{|w|w=w.upcase.gsub /[^A-Z]/,''
c[w]=l=1
w.size.times{|i|p,x,s=w[0...i],w[i],w[i+1..-1]
c[p+s]&&l!=x&&o<<p+"(#{w[i]})"+s
l=x}}
o}

এটি এখানে পরীক্ষা করুন: http://ideone.com/86avbe

এখানে পঠনযোগ্য সংস্করণ: http://ideone.com/ynFItB


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

@ দেউসোভি এই মামলাটি সঠিকভাবে কাজ করে না। আমি এখন এটি ঠিক করছি ...
ক্রিশ্চিয়ান লুপাস্কু

@ দেউসোভি আপডেট হয়েছে!
ক্রিশ্চিয়ান লুপাস্কু

এই উত্তরটি ['jacklantern','jackslantern','jack-o-lantern']ডিকের জন্য সঠিক আউটপুট সরবরাহ করে না ।
14mRh4X0r

1
@ 14mRh4X0r প্রশ্নের মধ্যে এই অনুরোধটি খুঁজে পাচ্ছেন না ... The output should be ordered by the longer entry;...and the latter two could be in either order.
edc65

1

রুবি, 211

আমি সিদ্ধান্ত নিয়েছি, রেজেজেক্স ব্যবহার করে এটি সমাধানের জন্য আমি একটি ভিন্ন পদ্ধতি গ্রহণ করব।

->d{o=[]
d.map{|x|x.upcase!.gsub! /[-' ]/,''}
d.map{|x|(x.size+1).times{|i|o+=d.map{|w|w.b.sub! /(#{x[0...i]})(.)(#{x[i..-1]})/,'\1(\2)\3'if w[i]!=w[i+1]}}}
o.compact.sort_by{|w|[w.size,w.gsub(/[()]/,'')]}.uniq}

0

পার্ল 5, 210

কোডটি বাছাই করা অ্যারেতে ইনপুট লোড করে এবং 1 বাইট দীর্ঘতর অ্যারের সমস্ত মানের বিপরীতে প্রতিটি মান পরীক্ষা করে।

map{@W=split//,$w=$_;map{@X=split//,$x=$_;if(@W+1==@X){$i=0;while($W[$i]eq$X[$i]&&$i<@W){$i++}$c=$X[$i];$e=substr($w,$i);print substr($w,0,$i)."($c)$e\n",if substr($x,$i+1)eq$e}}@D}@D=sort(map{s/[^\w]//g;lc}<>)

পরীক্ষা

$ perl dictionairy_same_words.pl dictionairywords.txt
ca(r)t
in(p)lay
ma(r)
ma(t)
mar(t)
ma(r)t
(c)ode
ver(s)ify

0

হাস্কেল, 201 বাইট

import Data.List
import Data.Char
a#(b:c)=(a,b,c)
g a=[l++'(':m:')':n|x<-a,((l,m,n):_)<-[[o|o@(i,j,k)<-zipWith(#)(inits x)$init$tails x,elem(i++k)a]]]
f=sortOn length.g.map(filter isLetter.map toLower)

আমি নিশ্চিত না কোন ইনপুট ফর্ম্যাটটি অনুমোদিত। fস্ট্রিংয়ের একটি তালিকা নেয়। শুধুমাত্র একটি একক পংক্তি (NL পৃথক শব্দের সঙ্গে) অনুমতি দেওয়া হয়, তাহলে যোগ .linesকরার f(+6 বাইট)।

ব্যবহারের উদাহরণ:

f ["cat","cart","code","golf","od-e","verify","versify","on","s-o-n","Scrapped","scraped"]

["(s)on","ca(r)t","(c)ode","ver(s)ify","scra(p)ped"]

এটি কীভাবে কাজ করে: প্রতিটি শব্দকে ছোট হাতের দিকে পরিণত করুন এবং কেবল অক্ষর রাখুন। প্রতিটি শব্দকে xপ্রতিটি সম্ভাব্য অবস্থানে দুটি ভাগে বিভক্ত করুন এবং প্রথম অংশ (i,j,k)যেখানে ত্রিভুজ তৈরি করুন এটি দ্বিতীয় অংশের প্রথম চরিত্র এবং দ্বিতীয় অংশের লেজ। শব্দ তালিকায় প্রদর্শিত হবে যেখানে ট্রিপল রাখুন । যদি এই তালিকাটি খালি না থাকে তবে প্রথম উপাদানটি নিন, কল করুন । পার্শ্ববর্তী দ্বারা ঘুরুন প্রয়োজনীয় আউটপুট বিন্যাসে সমস্ত তালিকা মাথা দিয়ে এবং তাদের মধ্যে এটি নির্বাণ এবং ।ijki++k(l,m,n)m()ln

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