ইউনিয়নযুক্ত অন্তর্বর্তী সংকেতের মধ্যে 2 টি ছেলের ছেদটি সন্ধান করুন


10

ইউনিয়নযুক্ত অন্তর্বর্তী সংকেতের মধ্যে 2 টি ছেলের ছেদটি সন্ধান করুন

অন্তর্ভুক্তির ইউনিয়ন হিসাবে বর্ণিত আসল সংখ্যার দুটি সেট দেওয়া, একই ধরণের অন্তরগুলির মিলন হিসাবে এই দুটি সেটের ছেদগুলির একটি বর্ণনা আউটপুট দেয়।

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

আউটপুট সেটটি অবশ্যই বিরতিগুলির একটি ইউনিয়ন হতে হবে যা শুরু হয় এবং পূর্ণসংখ্যার সাথে শেষ হয়, তবে আউটপুটে কোনও বিরতি এমনকি কোনও একক পূর্ণসংখ্যায় অন্য কোনওটিকে ওভারল্যাপ করতে পারে না

ইনপুটটি আপনার পছন্দের ভাষার জন্য উপযুক্ত যে কোনও ফর্ম নিতে পারে, যতক্ষণ না এটিতে জোড়া সংখ্যার দুটি তালিকা থাকে।

উদাহরণস্বরূপ, আপনি সেটটি উপস্থাপন করতে পারেন সমীকরণ:

[-10,-4]u[1,5]u[19,20]

বা হিসাবে:

[[-10,-4],[1,5],[19,20]]

বা হিসাবে:

[-10,-4;1,5;19,20]

আপনার আউটপুট প্রতিনিধিত্ব অবশ্যই আপনার ইনপুট উপস্থাপনের অনুরূপ হতে পারে (এটি দুটি এর পরিবর্তে কেবলমাত্র অন্তরগুলির একটি তালিকা)।

উদাহরণ / পরীক্ষার কেস:

ইনপুট:

[[[-90,-4],[4,90]],[[-50,50]]]

আউটপুট:

[[-50,-4],[4,50]]

অন্য কথায়, আমরা সেই সেটটিকে ছেদ করছি যা -৯০ থেকে -4 এর মধ্যে সমস্ত আসল সংখ্যা এবং 4 এবং 90 এর মধ্যে সমস্ত আসল সংখ্যার সাথে সেট রয়েছে যা 50 এবং 50 এর মধ্যে সমস্ত আসল সংখ্যা রয়েছে -50 এবং -4 এর মধ্যে আসল সংখ্যা এবং 4 থেকে 50 এর মধ্যে সমস্ত আসল সংখ্যা A আরও চাক্ষুষ ব্যাখ্যা:

-90~~~~~-4  4~~~~~90   intersected with
    -50~~~~~~~~50        yields:
    -50~-4  4~~50

ইনপুট:

"[-2,0]u[2,4]u[6,8]
[-1,1]u[3,5]u[5,9]"

আউটপুট:

"[-1,0]u[3,4]u[6,8]"

ইনপুট:

[-9,-8;-8,0;-7,-6;-5,-4]
[-7,-5;-1,0;-8,-1]

আউটপুট:

[-8,0]

অবৈধ আউটপুট (যদিও এটি একই সেট উপস্থাপন করে):

[-8,0;-7,-5;-5,0]

স্কোরিং:

এটি তাই বাইট জয়ের সংক্ষিপ্ততম উত্স, নিম্নলিখিত বোনাস দ্বারা সম্ভাব্য সংশোধিত।

বোনাস:

-15% যদি আপনি বিরতি সীমা হিসাবে ইতিবাচক এবং নেতিবাচক অনন্ত সমর্থন করেন। টোকেন (গুলি) এই সংখ্যাগুলি উপস্থাপন করে তা বেছে নিতে পারেন। (এবং হ্যাঁ, অনন্তটি হাইপাররিয়ালে একটি সংখ্যা; পি)


আমরা কি ধরে নিতে পারি যে প্রতিটি চৌরাস্তা জোটের বিভিন্ন ইউনিড সেটগুলি ক্রমবর্ধমান ক্রমে লিখিত আছে? অন্য কথায় (তবে বিপরীতে), নিম্নলিখিত ইনপুটটি বৈধ? [[[4,90],[-90,-4]],[[-50,50]]]
এমএস 210

2
@ এমএস 210 তৃতীয় উদাহরণটির এই প্রশ্নের উত্তর দেওয়া উচিত। (না। এগুলি নিজেই বাছাই করুন))
কুইন্টোপিয়া

@ নিমি আপনি ঠিক বলেছেন। স্থির
কুইন্টোপিয়া

উত্তর:


3

গণিত, 41 বাইট - 15% = 34.85

গণিতের অন্তর ছেদ করার জন্য অন্তর্নির্মিত ফাংশন রয়েছে।

List@@IntervalIntersection@@Interval@@@#&

উদাহরণ:

In[1]:= List@@IntervalIntersection@@Interval@@@#&[{{{-90, -4}, {4, Infinity}}, {{-50,Infinity}}}]

Out[1]= {{-50, -4}, {4, Infinity}}

2
বাহ ... আমি কেবল এটি না পড়ে ঠিক একই সমাধান নিয়ে এসেছি। +1
লিজিয়নম্যামাল 978

গাট্টা ম্যাথমেটিকার অটো-ইউনিয়নকে ভালবাসে Interval
mbomb007

3

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

import Data.List
q(a,b)=[a,a+0.5..b]
p@(a,b)%(h:t)|h==b+0.5=(a,h)%t|1<2=p:(h,h)%t
p%_=[p]
a#b|h:t<-nub$sort$intersect(q=<<a)$q=<<b=(h,h)%t|1<2=[]

ব্যবহারের উদাহরণ: [(-2.0,0.0),(2.0,4.0),(5.0,6.0),(6.0,8.0)] # [(-1.0,1.0),(3.0,5.0),(5.0,9.0)]-> [(-1.0,0.0),(3.0,4.0),(5.0,8.0)]

কিভাবে এটা কাজ করে:

                 q=<<a            -- turn each pair in the 1st input list into
                                  -- lists with halves in between (e.g. (1,4) ->
                                  -- [1,1.5,2,2.5,3,3.5,4]) and concatenate them
                                  -- to a single list
                      q=<<b       -- same for the second input list
    nub$sort$intersect            -- sort the intersection of those lists
                                  -- and remove duplicates
h:t<-                             -- call the first element h and the rest t
                       (h,h)%t    -- start rebuilding the intervals
                          |1<2=[] -- if there's no first element h, one of the
                                  -- input lists is empty, so the output is also
                                  -- empty


p@(a,b)%(h:t)                     -- an interval p = (a,b), build from a list (h:t)
             =(a,h)%t             -- becomes (a,h)
      |h==b+1                     --   if h equals b+0.5
                    p:(h,h)%t     -- or is put in the output list, followed by
                                  --       a new interval starting with (h,h)
      |1<2                        --   otherwise
p%_=[p]                           -- base case of the interval rebuilding function 

আমি x.5তালিকায় "অর্ধেক" -র মূল্যায়ন করছি , কারণ আমার থেকে আলাদা (1,2),(3,4)হওয়া দরকার (1,4)। ছাড়া x.5, উভয় হয়ে উঠবে [1,2,3,4], তবে x.51 ম হয়ে যায় [1,1.5,2,3,3.5,4](যার অভাব রয়েছে 2.5) এবং দ্বিতীয়টি [1,1.5,2,2.5,3,3.5,4]


আউটপুট ইনপুট অনুরূপ হওয়া উচিত। ... সুতরাং কেবল বলুন যে আপনার
ইনপুটটির

@ কুইন্টোপিয়া: হ্যাঁ, ধন্যবাদ
নিমি

2

রুবি, 90 বাইট

দুটি সেটগুলির প্রতিটি একটি ফ্ল্যাট অ্যারে মানচিত্রের জন্য, সেই অ্যারেগুলির সেট ছেদ পেয়ে যায়, তারপরে ফলাফলটি ধারাবাহিক অংশগুলিতে টুকরো টুকরো করে প্রতিটি খণ্ডকে প্রথম এবং শেষ উপাদানটিতে ম্যাপ করে। সহজ কিছু.

->s{a,b=s.map{|y|y.flat_map{|f,l|[*f..l]}.sort}
(a&b).slice_when{|a,b|b-a>1}.map &:minmax}

ব্যবহার:

f=->s{a,b=s.map{|y|y.flat_map{|f,l|[*f..l]}.sort}
(a&b).slice_when{|a,b|b-a>1}.map &:minmax}

s = [[[-90,-4],[4,90]], [[-50,50]]]
p f[s] # => [[-50, -4], [4, 50]]

s = [[[-2,0],[2,4],[6,8]], [[-1,1],[3,5],[5,9]]]
p f[s] # => [[-1, 0], [3, 4], [6, 8]]

s = [[[-9,-8],[-8,0],[-7,-6],[-5,-4]],[[-7,-5],[-1,0],[-8,-1]]]
p f[s] # => [[-8, 0]]

আপনার প্রোগ্রাম আউটপুট কি জন্য s = [[[1,2],[3,4]], [[1,2],[3,4]]]? (আমার রুবি সংস্করণটি নেই slice_when, তাই আমি নিজেকে পরীক্ষা করতে পারি না)
নিমি

@ মিমি এটি দেয় [[1, 4]]slice_whenপদ্ধতি রুবি 2.2 প্রায় কোথাও আমার মনে হয় যোগ করা হয়েছিল।
ডানিরো

... তবে এটি হওয়া উচিত [[1,2], [3,4]]
নিমি

সেটগুলি সত্যিকারের সংখ্যার চেয়ে বেশি, কেবলমাত্র বিরতিসীমাগুলি পূর্ণসংখ্যা হয়, সুতরাং ইনপুটটিতে 2.2নয় s = [[[1,2],[3,4]], [[1,2],[3,4]]], তবে আপনার আউটপুটে [[1, 4]]
নিমি

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