অন্তর্বর্তী ইউনিয়ন


15

অন্তরগুলির একটি তালিকা দেওয়া, সেগুলির ইউনিয়ন সম্পাদন করুন এবং ওভারল্যাপ হ্রাস করুন। তার মানে, ওভারল্যাপিং অংশগুলি হ্রাস পেয়েছে। ( [a, b] U [c, d] = [a, d]if b > c) সমস্ত অন্তরগুলিতে সমস্ত <b> ধরে নেওয়া [a, b]। ইনপুট অন্তর -> আউটপুট অন্তরগুলির তালিকার একটি ফাংশন হিসাবে প্রয়োগ করুন। সংক্ষিপ্ততম কোড জিতেছে। আপনি কোনও বিদ্যমান লাইব্রেরি ব্যবহার করতে পারবেন না।

ব্যাখ্যা:

  • খোলা এবং বন্ধ অন্তর পৃথক করা হয় না।
  • পূর্ণসংখ্যা নয়, আসল সংখ্যার জন্য অন্তর। ( [2, 3], [4, 5] -> [2, 3], [4, 5])
  • আউটপুট অন্তর বাছাই করার প্রয়োজন নেই
  • আদেশ যদি ইনপুটগুলিতে কিছু আসে না
  • অবৈধ ইনপুট কেবল [a, b]যেখানে b >= a, ইনপুট অন্তরগুলির ক্রম এবং ইনপুট অন্তরগুলির সংখ্যার সাথে এর কোনও যোগসূত্র নেই।
  • অপরিজ্ঞাত আচরণগুলিতে আপনাকে একটি ত্রুটি বার্তা দেখানোর দরকার নেই

উদাহরণ (সংখ্যা লাইন সহ)

 [2, 4], [7, 9] --> [2, 4], [7, 9]
   234
        789
-> 234  789

 [1, 5], [2, 10] --> [1, 10] (overlapping [2, 5] reduced)

   12345
    234567890
-> 1234567890
 [2, 4], [3, 6], [8, 9] -> [2, 6], [8, 9]
   234
    3456
         89
-> 23456 89

 [4, 2], [2, 2] -> (undefined behavior: against the assumption)

3
আপনার উদাহরণগুলিতে অন্তরগুলি সর্বদা বাছাই করা হবে?
পিটার ওলসন

1
কেন [2, 3], [4, 5] ওভারল্যাপ বা [2, 4], [4, 5] হয় না? তারা উভয়ই 2345 উত্পাদন করে
মেল্লামোকব

2
অন্তরগুলি কি কেবল পূর্ণসংখ্যার সেটে থাকে?
লোজ্যাকার

2
আমাদের কিছু স্পষ্টতা দরকার: 1) [4,5], [1,2] আইনী ইনপুট কি? 2) [2,3], [4,5] এর আউটপুট [2,5] বা [2,3], [4,5] হওয়া উচিত? 3) [2,3], [3,4] এর আউটপুট [2,4] বা [2,3], [3,4] হওয়া উচিত?
এমটিএনভিউমার্ক

1
স্পষ্টতার জন্য ধন্যবাদ, তবে "বাছাই করার দরকার নেই" এর অর্থ কী? আউটপুট সাজানোর দরকার নেই? বা ইনপুট ইতিমধ্যে বাছাই করা হয়?
এমটিএনভিউমার্ক

উত্তর:


2

গল্ফস্ক্রিপ্ট, 32

[{1$1$*-2%~2->{*$[(\)\;]}{}if}*]
  • আপনি যদি কোনও ব্লক পছন্দ করেন তবে 2 টি অক্ষর যুক্ত করুন, আপনি যদি নামযুক্ত ব্লকটি পছন্দ করেন 4।
  • ইনপুট এবং আউটপুট জোড়াগুলির অ্যারে, যেমন [[2 4] [3 5]]
  • ধরে নিই যে প্রথম উপাদান দ্বারা ইনপুট অর্ডার করা হয়েছে।
  • পরিচিতিগুলি "সংলগ্ন" ব্যাপ্তি ([2 4] [5 6] -> [2 6])
  • প্রথম গল্ফস্ক্রিপ্ট প্রচেষ্টা। পরামর্শ এবং পচা ফল প্রশংসা।

সম্পূর্ণ পরীক্ষার প্রোগ্রাম:

[~](;2/[{1$1$*-2%~2->{*$[(\)\;]}{}if}*]`

অনুরোধের উদাহরণ:

ruby golfscript.rb intervals.gs <<EOF
3
2 4
3 6
8 9
EOF
# Expected output: [[2 6] [8 9]]

4

হাস্কেল (103)

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

m%(x:y)|x>m=m:x:y|2>1=x:m%y;m%_=[m]
(x:y)?l|x`elem`l=y?l|0<1=x:y?(x:l);a?_=a
a∪b=foldr(%)[](a++b)?[]

মধ্যে Haskell, থেকে একটি intervall aকরার bদ্বারা প্রকাশ করা হয় [a..b]। আমার স্বরলিপি গাণিতিক স্বরলিপির সাথে খুব মিল। এটি এর মতো ব্যবহার করুন:

[a..b] ∪ [c..d] ∪ ... ∪ [y..z]

3

ঠিক আছে, এখানে আমার 250 টি চরিত্রের ক্র্যাক।

void n(int a[]){if(!a[2])return;if(a[2]<=a[1]){if(a[1]<a[3])a[1]=a[3];
int *b=a+2;while(*b=*(b+2))++b;n(a);}n(a+2);}
void m(int a[]){if(!a[2])return;if(a[0]>a[2]){int s=a[0],t=a[1];
a[0]=a[2];a[2]=s;a[1]=a[3];a[3]=t;m(a+2);m(a);n(a);}m(a+2);n(a+2);}

ফাংশনটি একটি int অ্যারে নেয়, এবং এটি সিটুতে পরিচালনা করে। অ্যারে 0 দ্বারা শেষ করা হয়, এবং অন্তরগুলি কোনও ক্রমে দেওয়া যেতে পারে।

নমুনা আউটপুট:

input list: (7,9) (5,6) (1,4) (15,18) (13,16) (2,3) (8,11) 
output list: (1,4) (5,6) (7,11) (13,18) 

নমুনা প্রোগ্রাম:

#include <stdio.h>

void n(int a[]){if(!a[2])return;if(a[2]<=a[1]){if(a[1]<a[3])a[1]=a[3];
int *b=a+2;while(*b=*(b+2))++b;n(a);}n(a+2);}
void m(int a[]){if(!a[2])return;if(a[0]>a[2]){int s=a[0],t=a[1];
a[0]=a[2];a[2]=s;a[1]=a[3];a[3]=t;m(a+2);m(a);n(a);}m(a+2);n(a+2);}


/*
void n(int a[])
{
    if(!a[2])return;
    if(a[2]<=a[1]) {
        if(a[1]<a[3])
            a[1]=a[3];
        int *b=a+2;
        while(*b=*(b+2))++b;
        n(a);
    }
    n(a+2);
}

void m(int a[])
{
    if(!a[2])return;
    if(a[0]>a[2]) {
        int s=a[0],t=a[1];
        a[0]=a[2];a[2]=s;
        a[1]=a[3];a[3]=t;
        m(a+2);m(a);n(a);
    }
    m(a+2);n(a+2);
}
*/

void p(int a[]) 
{
    if(!*a) {
        printf("\n");
        return;
    }
    printf("(%d,%d) ",a[0],a[1]);
    p(a+2);
}

int main (int argc, const char * argv[]) 
{
    // Code golf entry
    // Interval Merging

    int a[] = {7,9,5,6,1,4,15,18,13,16,2,3,8,11,0};
    printf( "input list: " ); p(a);
    m(a);
    printf( "output list: " ); p(a);

    return 0;
}

perform the union of themনেতৃত্ব দেওয়া (1,11) (13,18)উচিত, তাই না?
ব্যবহারকারী অজানা

@ ব্যবহারকারীর অজানা: আমিও একই জিনিসটি ভাবতাম, তবে আমি অনুমান করি যে নির্দেশাবলী যদি ওভারল্যাপ হয় তবে কেবল মিলিত হবে। সুতরাং (1, 4) (5, 6) নিয়ম অনুসারে সংযুক্ত হয় না ([a, b] U [c, d] = [a, d] if b > c)। এবং এই বিষয়ে, এমনকি (1, 5) (5, 6) একত্রিত হবে না।
মেল্লামোকব

"অন্তরগুলির একটি তালিকা দেওয়া, সেগুলির ইউনিয়ন সম্পাদন করুন এবং ওভারল্যাপগুলি andহ্রাস করুন " ওভারল্যাপগুলি হ্রাস করুন - না if they overlap। ঠিক আছে - নিম্নলিখিত that means ...বিষয়গুলি আবার বিপরীত দিকে।
ব্যবহারকারী অজানা

@ ব্যবহারকারী অজানা: আমি সম্মত। সে কারণেই আমি প্রশ্নে এটি সম্পর্কে মন্তব্য করেছি। আশা করি ওপি প্রতিক্রিয়া জানাবে :)
মেল্লামোকব

2

পাইথন, ১০০ টি চর

def f(L):R=sorted(set(p for p in sum(L,[])if 1-any(x<p<y for x,y in L)));return zip(R[::2],R[1::2])
print f([[2, 4], [7, 9]])
print f([[1, 5], [2, 10]])
print f([[3, 6], [2, 4], [8, 9]])
print f([[1, 5], [3, 5], [4, 5]])

উত্পন্ন

[(2, 4), (7, 9)]
[(1, 10)]
[(2, 6), (8, 9)]
[(1, 5)]

অন্তরগুলির সমস্ত শেষবিন্দু নিয়ে যায়, অন্য বিরতির অভ্যন্তরে থাকা যে কোনওটিকে সরিয়ে দেয়, আলাদা করে দেয় এবং সাজিয়ে তোলে এবং জোড়া দেয়।



2

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

v(q@(a,b):p@(c,d):r)|c>b=q:v(p:r)|1<3=v((a,d):r);v x=x

যদি ইনপুটটি সাজানো না থাকে তবে 88 টি অক্ষর:

p@(a,b)§(q@(c,d):r)|b<c=p:q§r|a>d=q:p§r|1<3=(min a c,max b d)§r;p§_=[p]
u i=foldr(§)[]i

টেস্ট রান:

ghci> testAll v
pass: [(2,4),(7,9)] --> [(2,4),(7,9)]
pass: [(1,5),(2,10)] --> [(1,10)]
pass: [(2,4),(3,6),(8,9)] --> [(2,6),(8,9)]
ghci> testAll u
pass: [(2,4),(7,9)] --> [(2,4),(7,9)]
pass: [(1,5),(2,10)] --> [(1,10)]
pass: [(2,4),(3,6),(8,9)] --> [(2,6),(8,9)]

আমি ধরে নিচ্ছি যে "কোনও বিদ্যমান লাইব্রেরি ব্যবহার করতে পারবেন না" আমদানি করা Listএবং কল করা বাদ দেয় sort। যদি এটি আইনী হয় তবে অরসেটেড সংস্করণটি কেবল 71১ টি অক্ষর হতে পারে।


Listপ্যাকেজ থেকে আমদানি Haskell98করা যথেষ্ট আইএমএইচও হবে।
FUZxxl

2

স্কালা, 272 টি অক্ষর

type p=List[(Int,Int)];def f(l:p):p={var(a,s,c,o)=(new Array[Int]((l map(x=>x._2)max)+1),0,0,List[Int]());l map(x=>(a(x._1)+=1,a(x._2)-=1));while(c<a.size){s+=a(c);if(a(c)==1&&s==1)o=o:+c;if(a(c)== -1&&s==0)o=o:+c;c+=1};return(o.grouped(2).map(x=>(x.head,x.last)).toList)}

ব্যবহার:

object Intervals2 extends Application
{
    type p=List[(Int,Int)];def f(l:p):p={var(a,s,c,o)=(new Array[Int]((l map(x=>x._2)max)+1),0,0,List[Int]());l map(x=>(a(x._1)+=1,a(x._2)-=1));while(c<a.size){s+=a(c);if(a(c)==1&&s==1)o=o:+c;if(a(c)== -1&&s==0)o=o:+c;c+=1};return(o.grouped(2).map(x=>(x.head,x.last)).toList)}

    print(f(List((1,2),(3,7),(4,10))))
}

একটি অ্যারে তৈরি করে এবং প্রতিটি অন্তর প্রারম্ভের জন্য একটি 1 এবং প্রতিটি অন্তর শেষের জন্য একটি -1 সন্নিবেশ করে। তারপরে অ্যারের মধ্য দিয়ে পদক্ষেপগুলি প্রতিবার 0 থেকে 1 এবং 1 থেকে 0 এর ধাপে যখন শেষ হয় তখন প্রতিবার আউটপুটটিংয়ের শুরুতে মানগুলি যুক্ত করে থাকে সম্ভবত অহেতুক জটিল।

আউটপুট:

List((1,2), (3,10))

1

পার্ল (146) (92) (90)

সৃজনশীলভাবে রেজেক্স ইঞ্জিনটি ব্যবহার করে 90 টি চর ছড়িয়ে পড়ে

উপ u {মানচিত্র $ এইচ [$ _] = 1, @ $ _ [0] .. @ $ _ [1] @_ এর জন্য; $ ডাব্লু। = $ _ + 0 @ হ জন্য; টিপুন @ আর, $ - [0 ], $ [0] -1while $ W = ~ / 1 + + / ছ; @r}

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

আমার @ আউট 1 = ইউ ([1, 5], [2, 10]); # (1,10)
আমার @ আউট 2 = ইউ ([2, 4], [3, 6], [8, 9]); # (২,,, ৮, ৯)

আসুন এই কোডটি কিছুটা ব্যাখ্যা করুন।

এই সাবরুটাইন অ্যারেরেফগুলির একটি অ্যারে গ্রহণ করে, প্রতিটি আরেফ দুটি উপাদান যুক্ত অ্যারেটির দিকে ইশারা করে, অন্তরটির শুরু এবং শেষ: ([2, 4], [3, 6], [8, 9])

প্রতিটি আরেফের জন্য, আমরা প্রথম থেকে শেষ পর্যন্ত উপাদানগুলির একটি অ্যারে তৈরি করি ($_->[0] .. $_->[1])। তারপরে আমরা @ h থেকে 1 তে এই জাতীয় সূচকের উপাদান সেট করতে মানচিত্র ব্যবহার করি।

(@_) for এর জন্য
    মানচিত্র {$ এইচ [$ _] = 1} ($ _-> [0] .. $ _-> [1]);
}

এর পরে, @h স্পষ্টতার জন্য হাইফেন হিসাবে নীচে চিত্রিত (অন্তরগুলির জন্য) বা অপরিবর্তিত উভয়ই থাকবে।

সূচক: 0 1 2 3 4 5 6 7 8 9
@ এইচ: - - 1 1 1 1 1 - 1 1

এরপরে আমরা @h থেকে একটি স্ট্রিং তৈরি করি, অপরিবর্তিতদের আরও কার্যকর কিছু (undef + 0 = 0) এর সাথে প্রতিস্থাপন করতে 0 যুক্ত করে।

$w .= $_+0 for @h;

$ ডাব্লু 011111011এখন অন্তর্ভুক্ত।

এটি সময়টি রেজেক্স ইঞ্জিনটিকে কিছুটা অপব্যবহার করার।

push @r, ($-[0], $+[0]-1) while $w=~/1+/g;

সফল ম্যাচের পরে, @ - এবং @ + অ্যারেতে প্রতিটি ম্যাচের শুরু এবং শেষের যথাক্রমে অবস্থান থাকে; 0 তম উপাদানটি পুরো ম্যাচের জন্য ব্যবহার করা হয়, প্রথমে 1 ডলারে, দ্বিতীয়টি 2 ডলারে এবং এই জাতীয় কিছু।

$+[0] প্রকৃতপক্ষে প্রথম অ-মিলের চরের অবস্থান রয়েছে, সুতরাং আমাদের একটিকে বিয়োগ করতে হবে।

@r(2, 6, 8, 9)এখন অন্তর্ভুক্ত

@r

সাব রিটার্ন করা @r


আসল সংখ্যা [2,3],[4,5]ফলনের জন্য কাজ করে না2 5
Xcali

1

বিনা আমন্ত্রণ ছাড়াই স্কাল 305 279 টি অক্ষর:

type I=(Int,Int)
def l(p:I,q:I)=if(p._1<q._1)true else if(p._1>q._1)false else p._2<q._2
def r(l:List[I]):List[I]=l match{case x::y::z=>{if(y._1<=x._2&&y._2>x._2)(x._1,y._2)::r(z)else
if(y._1<=x._2&&y._2<=x._2)x::r(z)else  
x::r(y::z)}case _=>l}
def c(v:List[I])=r(v.sortWith(l))

আবাহন:

val i=List((7,9),(5,6),(1,4),(15,18),(13,16),(2,3),(8,11))
c(i)
res0: List[(Int, Int)] = List((1,4), (5,6), (7,11), (13,18))

1

ব্র্যাচল্যাগ , 12 বাইট

⟦₂ᵐcod~c~⟦₂ᵐ

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

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

        ~⟦₂ᵐ    The output is a list of intervals, where each interval is a range in
      ~c        the smallest partition of
  ᵐ             each element of the input
⟦₂              converted to an inclusive range,
   c            concatenated,
    o           sorted,
     d          and deduplicated
        ~⟦₂ᵐ    for which each element of the partition is a range.

1

ক্লোজার, 138 বাইট

#(let[S(set(apply mapcat range(apply map list %)))Q(sort S)](map list(for[s Q :when(not(S(dec s)))]s)(for[s(map inc Q):when(not(S s))]s)))

ইনপুটটি আরও নমনীয় হলে এটি 119 বাইটে সংক্ষিপ্ত হয়ে যায় , যথা: অন্তরগুলির সূচনা পয়েন্টগুলির একটি তালিকা এবং অন্তরগুলির শেষের পয়েন্টগুলির তালিকা:

#(let[S(set(mapcat range % %2))Q(sort S)](map list(for[s Q :when(not(S(dec s)))]s)(for[s(map inc Q):when(not(S s))]s)))

এখানে অবশ্যই একটি ভাল রাস্তা আছে।



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