Encontre a interseção de 2 conjuntos na notação de intervalo unido
Dados dois conjuntos de números reais descritos como a união de intervalos, produza uma descrição da interseção desses dois conjuntos como uma união do mesmo tipo de intervalo.
Os conjuntos de entrada sempre consistem em uniões de intervalos, de modo que cada intervalo comece e termine em um número inteiro diferente (ou seja, nenhum intervalo tem a medida zero). No entanto, diferentes intervalos no mesmo conjunto podem começar ou terminar no mesmo número inteiro ou se sobrepor.
O conjunto de saída também deve ser uma união de intervalos que começam e terminam em números inteiros, mas nenhum intervalo na saída pode se sobrepor a nenhum outro mesmo em um único número inteiro.
A entrada pode assumir qualquer formato que seja adequado ao seu idioma de escolha, contanto que consista em duas listas de pares de números inteiros.
Por exemplo, você pode representar o conjunto como:
[-10,-4]u[1,5]u[19,20]
Ou como:
[[-10,-4],[1,5],[19,20]]
Ou como:
[-10,-4;1,5;19,20]
Sua representação de saída deve ser idêntica à sua representação de entrada (exceto que é apenas uma lista de intervalos em vez de dois).
Exemplos / casos de teste:
Entrada:
[[[-90,-4],[4,90]],[[-50,50]]]
Resultado:
[[-50,-4],[4,50]]
Em outras palavras, estamos cruzando o conjunto que contém todos os números reais entre -90 e -4 e todos os números reais entre 4 e 90 com o conjunto que contém todos os números reais entre -50 e 50. A interseção é o conjunto que contém todos números reais entre -50 e -4 e todos os números reais entre 4 e 50. Uma explicação mais visual:
-90~~~~~-4 4~~~~~90 intersected with
-50~~~~~~~~50 yields:
-50~-4 4~~50
Entrada:
"[-2,0]u[2,4]u[6,8]
[-1,1]u[3,5]u[5,9]"
Resultado:
"[-1,0]u[3,4]u[6,8]"
Entrada:
[-9,-8;-8,0;-7,-6;-5,-4]
[-7,-5;-1,0;-8,-1]
Resultado:
[-8,0]
Saída inválida (mesmo que represente o mesmo conjunto):
[-8,0;-7,-5;-5,0]
Pontuação:
Isso é código-golfe pelo que a fonte mais curta em bytes vence, potencialmente modificada pelo seguinte bônus.
Bônus:
-15% se você também suporta infinito positivo e negativo como limites de intervalos. Você pode escolher quais tokens representam esses números. (E sim, infinito é um número nos hiperreais; P)
[[[4,90],[-90,-4]],[[-50,50]]]