সংক্ষিপ্ততম অনন্য সাবলিস্টটি সন্ধান করুন


14

তালিকার একটি তালিকা দেওয়া হ'ল সংক্ষিপ্ত তালিকাটি হ'ল যা ঠিক এক তালিকার একটি সংক্ষিপ্ত সাবলিস্ট।

উদাহরণস্বরূপ যদি আমাদের ছিল

[[1,2,3],
 [1,2,3,4],
 [2,4,5,6],
 [1,2,4,5,6]]

সংক্ষিপ্ততম সামঞ্জস্যপূর্ণ সাবলিস্টটি [3,4]যেহেতু এটি কেবলমাত্র দ্বিতীয় তালিকায় প্রদর্শিত হবে appears

যদি কোনও অনন্য সংলগ্ন সাবলিস্ট না থাকে (এর জন্য কমপক্ষে একটি সদৃশ প্রবেশের প্রয়োজন), একটি খালি তালিকা আউটপুট করুন। এখানে একটি উদাহরণ

[[1,2,3],
 [1,2,3],
 [1,2]]

যদি ন্যূনতম আকারের একাধিক সংক্ষিপ্ত সাবলিস্টগুলি থাকে তবে আপনি তাদের যে কোনও একটি বা সেগুলিতে থাকা একটি তালিকা আউটপুট করতে পারেন। উদাহরণস্বরূপ যদি ইনপুট ছিল

[[1,2,3],[2],[1],[3]]

আপনি হয় আউটপুট পারে [1,2], [2,3]বা [[1,2],[2,3]]। আপনি যদি পরের বিকল্পটি বেছে নিতে চান তবে কেবলমাত্র একমাত্র সমাধান রয়েছে এমন ক্ষেত্রে আপনি সিঙ্গলটন তালিকাগুলি আউটপুট করতে পারেন।

আউটপুট একই তালিকায় একাধিকবার ঘটতে পারে যতক্ষণ না এটি অন্য কোনও তালিকায় প্রদর্শিত না হয়। উদাহরণ স্বরূপ

[[1,2,1,2],[2,1]]

আউটপুট করা উচিত [1,2]কারণ[1,2] এটি প্রথম তালিকার একটি সাবলিস্ট তবে দ্বিতীয়টি নয়, যদিও এটি দুটি ভিন্ন উপায়ে প্রথম তালিকার একটি সাবলিস্ট।

আপনি যে কোনও ধরণের সমন্বিত তালিকার তালিকা ইনপুট হিসাবে নিতে পারেন যতক্ষণ না সেই ধরণের 100 টিরও বেশি সম্ভাব্য মান রয়েছে, অর্থাত্ কোনও বুলিয়ান নয়।

এটি তাই কম বাইট ভাল হওয়ার সাথে উত্তরগুলি বাইটে স্কোর করা হবে।

পরীক্ষার কেস

[[1,1]] : [1]
[[1],[1]] : []
[[1,1],[1]] : [1,1]

উত্তর:


5

হুশ , 12 14 15 বাইট

কেস জন্য +3 বাইট [[1,1]]

Ṡḟȯ¬€Ṡ-uÖLṁȯtuQ

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

Explaination

          ṁ      -- map and concatenate
           ȯt    --   all but the first
             u   --   unique elements of
              Q  --   contiguous sublist
        ÖL       -- sort by length
Ṡḟ               -- find the first element satisfying this predicate
  ȯ¬€            --   not an element of
     Ṡ-          --   the list of sublists minus
       u         --   its unique elements

দ্রষ্টব্য: Ṡ f g x = f (g x) xএবং উপরের পদ্ধতিটি ব্যবহার করে এটি ব্যাখ্যা করা শক্ত।


একটি লাম্বদা সহ 14 বাইট
জাগারব

এটি ব্যর্থ হয়[[1,1]]
এইচপিউইজ

হুম, এবং ফিক্সিং যা এটি 15 বাইটের ওপরে করে। আচ্ছা ভালো.
জাগারব

4

পাইথ, 15 বাইট

halDs-M.p.:R)QY

পরীক্ষা স্যুট

প্রথমত, আমরা প্রতিটি ইনপুট তালিকার সমস্ত সাবস্ট্রিংগুলি এর সাথে তৈরি করি .:R)Q। তারপরে, আমরা সমস্ত স্ট্রেরিং গ্রুপগুলির সমস্ত সম্ভাব্য ক্রম তৈরি করি.p

এখন চতুর অংশ জন্য: -M। এই ভাঁজ- প্রতিটি ক্রম তালিকার । এটি প্রথম সাবস্ট্রিং তালিকার সাথে শুরু হয়, তারপরে অন্যান্য সমস্ত তালিকার সমস্ত দখলকারীকে ফিল্টার করে।

তারপরে, ফলাফলগুলি সংক্ষিপ্ত আকারে, দৈর্ঘ্য অনুসারে অর্ডার করা হয়, একটি []সংযুক্ত করা হয় এবং তারপরে ফলাফলের তালিকার প্রথম উপাদানটি দিয়ে বের করা হয়h

এটি যদি 4 টি বাইট সংক্ষিপ্ত হয় তবে আমি যদি খালি তালিকার পরিবর্তে কোনও অনন্য সাবলিস্টে ত্রুটি করতে পারি না।


আপনার 11-বাইট সংস্করণটি কী?
Leaky নুন

@ ল্যাকইনুন hlDs-M.p.:Rসম্ভবত তার অর্থ।
FryAmTheEggman

3

পাইথ - 20 বাইট

Ksm.:d)QhalDfq1/KTKY

টেস্ট স্যুট


16 বাইট পেয়েছি , তবে আমি নিশ্চিত না যে এটি সঠিক কিনা। অন্যথায় এটি বেশ অনুরূপ।
FryAmTheEggman

@ ফ্রাইআমএজিগম্যান ভাল, আপনার এটি পোস্ট করা উচিত।
মালটিসেন

সম্প্রতি যুক্ত প্রান্ত কেস পরীক্ষার জন্য ব্যর্থ [[1,1]]
জোনাথন অ্যালান

2

হাস্কেল , 149 128 126 113 বাইট

import Data.List
f l=[x|x<-l,sum[1|y<-l,y==x]<2]
h[]=[]
h(x:y)=x
i=h.f.sortOn length.(>>=tail.nub.(>>=tails).inits)

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

গম উইজার্ড, এইচ.পি.উইজ এবং ব্রুস ফোর্টের জন্য 21 বাইট সংরক্ষণ করা।

এইচ.পি.উইজকে আরও দুটি বাইট সংরক্ষণ করা হয়েছে।

নিমিকে ধন্যবাদ 13 বাইট সংরক্ষণ করা হয়েছে।

সম্পাদনা এটি মূল ব্যাখ্যা ছিল:

  • a তালিকায় যোগদানের জন্য একটি শর্টকাট।

  • sসমস্ত ক্রমাগত সাবলিস্টগুলি গণনা করে (সকলের tailsথেকে inits)। মনে রাখবেন যে nubপ্রতিটি উপাদানের শুধুমাত্র প্রথম উপস্থিতি রাখে, তাই tailসাবলিস্টগুলি থেকে খালি তালিকা সরানো হবে।

  • g প্রদত্ত তালিকাগুলি থেকে সমস্ত উপলিস্টকে সাবলিস্টগুলির একটি বৃহত তালিকায় মার্জ করে এবং দৈর্ঘ্য অনুসারে এগুলি সাজান।

  • f f হ'ল উপাদানগুলির মধ্যে একটি ফিল্টার যা বড় তালিকায় একবারে উপস্থিত হয় appear

  • h এর একটি সুরক্ষিত সংস্করণ head

  • i আঠালো হয়

বেশ অবহেলিত! এর চেয়ে ভাল সমাধান হওয়া উচিত ...


2
দেখে মনে হচ্ছে আপনার কয়েকটি ফাংশন সংক্ষিপ্ত হতে পারে যদি পয়েন্ট-ফ্রি ফাংশন হিসাবে লেখা থাকে।
পোস্ট রক গারফ হান্টার

1
i=আপনার প্রোগ্রামের শেষে আপনাকেও গণনা করতে হবে না কারণ পয়েন্ট-ফ্রি ফাংশনগুলিকে আমাদের বিধি অনুসারে নির্ধারিত করার দরকার নেই।
পোস্ট রক গারফ হান্টার

2
foldl1(++)ঠিক কি concat?
এইচ.পি.উইজ

2
(length$filter(==x)l)এর চেয়ে কম length(filter(==x)l)বা আরও ছোট হতে পারেsum[1|y<-l,y==x]
পোস্ট রক গারফ হান্টার

2
@ H.PWiz ছাড়া জন্য []তা না হয়, কিন্তু >>=idএমনকি খাটো; এছাড়াও @jferard): আপনি (ফাংশন অনেক ইনলাইন করতে যেমন। f, gইত্যাদি) থেকে আপনি এগুলিকে কেবল একবার ব্যবহার করুন।
ბიმო

2

জাভা 8, 251 + 19 = 270 বাইট

একটি অতি স্থূল ল্যাম্বদা, ন্যূনতমভাবে, List<List>থেকে List(এটিকে দেওয়া ভাল)Function<List<List<Integer>>, List<Integer>> যদিও )। এটি একটি নিষ্ঠুর শক্তি সমাধান যা প্রতিটি তালিকায় সেই দৈর্ঘ্যের প্রতিটি অংশের উপরে পুনরাবৃত্তি করে এবং প্রতিটি অন্যান্য তালিকায় সমান আকারের প্রতিটি অংশের বিপরীতে এ জাতীয় প্রতিটি অংশের পরীক্ষা করে থাকে list

আমাকে ভয় করো, আবর্জনা সংগ্রহকারী।

import java.util.*;

i->{int x,l=x=0,s,t;for(List z:i)x=Math.max(x,z.size());List r=i;while(l++<=x)for(List a:i)c:for(s=0;s<=a.size()-l;s++){for(List b:i)for(t=0;t<=b.size()-l;)if(b.subList(t,l+t++).equals(r=a.subList(s,s+l))&a!=b)continue c;return r;}return new Stack();}

অবহেলিত ল্যাম্বদা

i -> {
    int
        x,
        l = x = 0,
        s, t
    ;
    for (List z : i)
        x = Math.max(x, z.size());
    List r = i;
    while (l++ <= x)
        for (List a : i)
            c: for (s = 0; s <= a.size() - l; s++) {
                for (List b : i)
                    for (t = 0; t <= b.size() - l; )
                        if (b.subList(t, l + t++).equals(r = a.subList(s, s + l)) & a != b)
                            continue c;
                return r;
            }
    return new Stack();
}

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

জাভা 8, 289 + 45 = 334 বাইট

এটি স্ট্রিম ব্যবহার করে আরও কার্যকরী পদ্ধতি। যদি Streamকেবলমাত্র একবারে উপস্থিত উপাদানগুলিকে হ্রাস করার কোনও পদ্ধতি ছিল , তবে এই সমাধানটি উপরেরটিকে হারাতে পারত। উপরের মত একই ধরণের বরাদ্দ করুন।

import java.util.*;import java.util.stream.*;

l->{List<List>o=l.stream().flatMap(a->IntStream.range(1,a.size()+1).boxed().flatMap(n->IntStream.range(0,a.size()-n+1).mapToObj(k->a.subList(k,k+n)))).collect(Collectors.toList());o.sort((a,b)->a.size()-b.size());for(List a:o)if(o.indexOf(a)==o.lastIndexOf(a))return a;return new Stack();}

অবহেলিত ল্যাম্বদা

l -> {
    List<List> o = l.stream()
        .flatMap(a -> IntStream.range(1, a.size() + 1)
            .boxed()
            .flatMap(n -> IntStream.range(0, a.size() - n + 1)
                .mapToObj(k -> a.subList(k, k + n))
            )
        )
        .collect(Collectors.toList())
    ;
    o.sort((a, b) -> a.size() - b.size());
    for (List a : o)
        if (o.indexOf(a) == o.lastIndexOf(a))
            return a;
    return new Stack();
}

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


1

জেলি , 15 বাইট

Ẇ€Q€ẎɓċỊµÐf⁸LÐṂ

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

-3 বাইট জোনাথন অ্যালানকে ধন্যবাদ


পারি ċ1প্রতিস্থাপিত হতে S?

@ দ্য পাইরেট বে সত্যিই এটি পারে, ধন্যবাদ। যদিও আমি আলাদা সংস্করণ তৈরি করেছি। (যদিও এটি এটিকে একই উপজাতের কাছে এনে দেবে)
হাইপারনিউট্রিনো

আপনার নতুন সমাধানটি সংক্ষিপ্ত থাকাকালীন ইনপুটটির [1, 2, 1]জন্য প্রিন্ট করে । [[1,2],[1,2,1],[2,1,1]][1,1]

@ দ্য পাইরেটবে ফিক্সড, ধন্যবাদ
হাইপারনিউট্রিনো

1
পুনঃটুইট আমি ওহো গণনা করতে পারি না। : পি
হাইপারনিউটারিনো


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