স্ট্রিংগুলিকে অনন্য রাখার সময় অক্ষরগুলি সরান


15

এই দুর্দান্ত (মতামত এবং ভোটের সংখ্যার ভিত্তিতে) চ্যালেঞ্জের দ্বারা অনুপ্রাণিত , যা আমার নম্র মতে, খুব কম উত্তর রয়েছে।

প্রদত্ত (যে কোনও উপায়ে) একটি স্ট্রিংয়ের তালিকা দেওয়া, (যে কোনও উপায়ে) অক্ষরের একটি সেট প্রদান করুন যা প্রদত্ত স্ট্রিংগুলি থেকে সরিয়ে ফেলা হলে, যতটা সম্ভব ছোট ছোট স্ট্রিংয়ের (যেটির অবশেষ) মোট দৈর্ঘ্য রেখে যায়, প্রতিটি রাখে স্ট্রিংটি অনন্য এবং কমপক্ষে একটি অক্ষর দীর্ঘ।

উদাহরণ:

"দিন" এবং "দিন" দেওয়া; "আই" প্রত্যাবর্তন করুন, কারণ "অ্যায়" অক্ষরগুলি সরানো হলে প্রদত্ত স্ট্রিংগুলি "ডি" এবং "ডি" হবে।

"হ্যালো ওয়ার্ল্ড!", "হ্যালো ওয়ার্ল্ড।", এবং "হ্যালো ওয়ার্ল্ড" দেওয়া হয়েছে; "হেলো ডাব্লুআরডি" প্রদান করে কারণ স্ট্রিংগুলি "!", "ডাব্লু।" এবং "ডাব্লু" হবে যখন "হেলো ওয়ার্ড" (একটি স্থান সহ) অক্ষরগুলি সরিয়ে ফেলা হবে।

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

ফিরে আসা সেটটির ক্রম এবং বিন্যাসটি গুরুত্বপূর্ণ নয়।


1
আপনার দ্বিতীয় কেসটি ভুল: "হেলো ডাব্লুআরডি" "!", "ডাব্লু" দিয়ে মোট 4 টি দৈর্ঘ্য দেয়। এবং W".
লুক

1
@ লুক ধন্যবাদ আমি এটা ঠিক করব। এটি দেখায় যে আমাদের একটি অ্যালগরিদম প্রয়োজন, কারণ এটি নিজের হাতে করা ত্রুটিযুক্ত।
অ্যাডম

এবং তৃতীয়টির জন্য, 'সেন্টুরডোওই' ফলন করে 'y', 'এ', 'ইয়া', 'এমএইচ', 'কে', 'আই', 'এইচ', 'এম', 'এস' এর মোট দৈর্ঘ্যের জন্য 12.
লুক


আপনাকে অন্য চ্যালেঞ্জে সহায়তা করতে চ্যালেঞ্জ ব্যবহার করার জন্য +1!
লুক

উত্তর:


4

হাস্কেল, 138 130 বাইট

import Data.List
c=concat
f i=snd$minimum[(length$c q,s)|s<-subsequences$nub$c i,q<-[map(filter(`notElem`s))i],nub q==q,all(>"")q]

ব্যবহারের উদাহরণ: f ["century", "decade", "year", "month", "week", "day", "hour", "minute", "second"]-> "centurdoki"

এটি একটি নিষ্ঠুর শক্তি পদ্ধতির।

     s<-subsequences$nub$c i  -- concatenate input i to a single string, remove
                              -- duplicates and make a list of all subsequences
       q<-[map(filter(...))i] -- remove chars appearing in subsequence s from all
                              -- input words, call result q
          nub q==q            -- keep those s where q has no duplicates (i.e. each
                              -- resulting string is unique) and
            all(>"")q         -- contains no empty strings
  (length$c q,s)              -- make pairs from all kept s, where the first element
                              -- is the combines length of all strings in q,
                              -- second element is s itself
snd$minimum                   -- find minimum of those pairs and discard length

সম্পাদনা করুন: @ সেক আমাকে 8 টি বাইট সংরক্ষণ করতে সহায়তা করেছেন ধন্যবাদ!


কীভাবে map(#s), সুতরাং আপনার উল্টানোর দরকার নেই notElem? সম্পাদনা: বা আপনি কেবল এটি ইনলাইন করতে পারবেন না?
seequ

@ সিক: যখন কল মাধ্যমে map(#s), (#)অবশ্যই হিসাবে সংজ্ঞায়িত করা উচিত flip (filter . flip notElem)। তবে অবশ্যই ইনলাইনিংটি আরও খাটো। ধন্যবাদ!
নিমি

2

পাইথ, 34

ফর্ম্যাটে ইনপুট নেয় ["century", "decade", "year", "month", "week", "day", "hour", "minute", "second"]। গল্ফিং টিপস বরাবরের মতো প্রশংসা করা হয়।

hh.mlsebfqlQl{eTf!}keTm,dm-kdQy{sQ

2

পাইথ, 24 বাইট

hols-RNQf<}kJ-RTQ{IJy{sQ

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

নোট করুন যে শেষ পরীক্ষার কেসটি চালাতে কিছুটা সময় নেবে।

যেমন অ্যারে আকারে ইনপুট নেয় ["Day", "day"]

আমি খুঁজে পেলাম এবং আরও একটি আকর্ষণীয় আইস্যাকের উন্নতি হয়েছে (এছাড়াও 24 বাইট):

-J{sQhlDsM.A#f{ITm-RdQyJ

আমি 24 বাইটে দ্বিতীয় পদ্ধতির হ্রাস করতে সক্ষম হয়েছি: -J{sQhlDsM.A#f{ITm-RdQyJ এখানে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.