Votre tâche ici est simple:
Étant donné une liste d'ensembles entiers, recherchez l'union d'ensemble. En d'autres termes, recherchez la liste la plus courte des ensembles entiers qui contiennent tous les éléments de la liste d'origine des ensembles (mais pas d'autres éléments). Par exemple:
[1,5] and [3,9] becomes [1,9] as it contains all of the elements in both [1,5] and [3,9]
[1,3] and [5,9] stays as [1,3] and [5,9], because you don't want to include 4
Les ensembles sont notés en utilisant la notation de plage: [1,4]
signifie les entiers 1,2,3,4
. Les ensembles peuvent également être illimités: [3,]
signifie tous les entiers >= 3
et [,-1]
signifie tous les entiers <= -1
. Il est garanti que le premier élément de la plage ne sera pas supérieur au second.
Vous pouvez choisir de prendre des ensembles en notation de chaîne, ou vous pouvez utiliser des tuples à 2 éléments, en utilisant une constante non entière comme valeur "infinie". Vous pouvez utiliser deux constantes distinctes pour représenter la limite supérieure infinie et la limite inférieure infinie. Par exemple, en Javascript, vous pouvez utiliser[3,{}]
pour noter tous les entiers >= 3
, tant que vous l'utilisez de manière cohérente {}
dans tous les cas de test.
Cas de test:
[1,3] => [1,3]
[1,] => [1,]
[,9] => [,9]
[,] => [,]
[1,3],[4,9] => [1,9]
[1,5],[8,9] => [1,5],[8,9]
[1,5],[1,5] => [1,5]
[1,5],[3,7] => [1,7]
[-10,7],[1,5] => [-10,7]
[1,1],[2,2],[3,3] => [1,3]
[3,7],[1,5] => [1,7]
[1,4],[8,] => [1,4],[8,]
[1,4],[-1,] => [-1,]
[1,4],[,5] => [,5]
[1,4],[,-10] => [1,4],[,-10]
[1,4],[,] => [,]
[1,4],[3,7],[8,9],[11,20] => [1,9],[11,20]
Il s'agit de code-golf , alors répondez le plus brièvement possible!
la source
Infinity
place{}
?[1.0, 3.0]
au lieu de[1, 3]
?[1.0, 3.0], [4.0, 5.0]
devrait encore devenir[1.0, 5.0]
Infinity
et-Infinity
comme entrée, est-elle autorisée à prendre-999999
et999999
(ou même plus / moins) à la place?Réponses:
R +
intervals
,90 8781 octetsEssayez-le en ligne!
L'entrée est une liste d'intervalles.
-Inf
etInf
sont intégrés R pour moins / plus l'infini. La sortie est une matrice de colonnes d'intervalles.Pas habituellement un fan de l'utilisation de bibliothèques non standard mais celle-ci était amusante. TIO n'a pas
intervals
installé. Vous pouvez l'essayer sur votre propre installation ou sur https://rdrr.io/snippets/Le
intervals
package prend en charge lestype = "Z"
intervalles réels et entiers ( ) et lareduce
fonction est intégrée à ce que le défi veut, mais la sortie semble avoir par défaut des intervalles ouverts, elle est donc nécessaire pour obtenir le résultat souhaité.close_intervals
+c(1,-1)
L'ancienne version avait des exemples dans la liste des listes qui pourraient être pratiques, j'ai donc laissé le lien ici.
la source
function(...)close_intervals(reduce(Intervals(rbind(...),type="Z")))
. Ou encore mieux, vous pouvez vérifier avec op s'ils autorisent une matrice en entrée.reduce
etReduce
là-dedans.f=function(...)t(reduce(Intervals(rbind(...),type="Z")))+c(1,-1)
?JavaScript (ES6), 103 octets
1 octet enregistré grâce à @Shaggy
1 octet enregistré grâce à @KevinCruijssen
Attend
+/-Infinity
des valeurs infinies.Essayez-le en ligne!
Comment?
Nous trions d'abord les intervalles par leur borne inférieure, du plus bas au plus élevé. Les limites supérieures sont ignorées.
Nous itérons ensuite sur les intervalles triés[pn,qn] , tout en gardant une trace des limites inférieures et supérieures actuelles m et M , initialisées respectivement à p1 et q1 .
Pour chaque intervalle[pn,qn] :
A la fin du processus, nous créons un dernier intervalle avec les bornes actuelles[m,M] .
Commenté
la source
p<=M+1
peut êtrep<M+2
?Python 2 ,
118113112111106105104101 octetsEnregistré un octet grâce à Mr.Xcoder, un grâce à Jonathan Frech et trois grâce à Dead Possum.
Essayez-le en ligne!
la source
(b,c),
enregistre un octet.g
signifie pas que votre fonctionf
n'est pas réutilisable et n'est donc pas valide?return
devientprint
pour un autre octet.Rubis ,
8976 octetsEssayez-le en ligne!
Triez le tableau, puis aplatissez en ajoutant toutes les plages à la première: si une plage chevauche la précédente, jetez 2 éléments des 3 derniers (en ne gardant que le maximum).
Aplatissez tout à la fin.
la source
Pascal (FPC) ,
367362357 octetsEssayez-le en ligne!
Une procédure qui prend un tableau dynamique d'enregistrements composé de 2 limites de plage, modifie le tableau en place, puis l'écrit sur la sortie standard, une plage par ligne. (Désolé pour cette phrase tordue.) Utilise
1/0
pour le haut et le-1/0
bas sans limite .Version lisible
Ce serait bien de renvoyer simplement le tableau avec le nombre corrigé d'éléments, mais le tableau dynamique transmis à la fonction / procédure n'est plus un tableau dynamique ... D'abord j'ai trouvé cela , puis il y a ceci excellente explication époustouflante .
C'est la meilleure structure de données que j'ai pu trouver pour raccourcir le code. Si vous avez de meilleures options, n'hésitez pas à faire une suggestion.
la source
Wolfram Language (Mathematica) , 57 octets
Essayez-le en ligne!
Prend l'entrée comme une liste de listes
{a,b}
représentant l'intervalle[a,b]
, oùa
peut être-Infinity
etb
peut êtreInfinity
.Utilise le intégré
IntervalUnion
, mais bien sûr, nous devons d'abord masser les intervalles en forme. Pour prétendre que les intervalles sont des entiers, on ajoute 1 à la borne supérieure (en s'assurant que l'union de[1,3]
et[4,9]
est[1,9]
). À la fin, nous annulons cette opération et transformons le résultat en une liste de listes.Il y a aussi une approche complètement différente, qui affiche 73 octets :
Ici, après avoir trié les intervalles, nous remplaçons simplement deux intervalles consécutifs par leur union chaque fois que ce serait un seul intervalle, et répétons jusqu'à ce qu'il n'y ait plus aucune opération à faire.
la source
05AB1E (hérité) ,
887978 octetsL'infini est saisi sous forme d'alphabet minuscule (
'abcdefghijklmnopqrstuvwxyz'
).Essayez-le en ligne ou vérifiez tous les cas de test .
Remarque importante: s'il y avait un réel
Infinity
et-Infinity
, il aurait plutôt été de43 à42 octets . Si unpeu plus de 50%environ 30% est comme solution de contournement pour le manque deInfinity
..Essayez-le en ligne (avec
Infinity
remplacé par9999999999
et-Infinity
remplacé par-9999999999
).Peut certainement être joué beaucoup. En fin de compte, il s'est avéré très, très laid, plein de solutions de contournement. Mais pour l'instant, je suis juste content que ça marche.
Explication:
la source
C (clang) ,
346342 octetsDrapeaux du compilateur
-DP=printf("(%d,%d)\n"
,-DB=a[i+1]
et-DA=a[i]
Essayez-le en ligne!
la source
i
la valeur globale de.while(A)i++;
devrait êtrefor(i=0;A;)i++;
défini explicitementi=0
avant de l'utiliser dans la boucle while, au lieu d'utiliser sa0
valeur par défaut au niveau global. Je ne sais plus pourquoi, mais c'est requis selon les méta-règles. Principalement parce que les méthodes doivent être autonomes / réutilisables, sans avoir à réinitialiser les valeurs globales entre les appels de méthode, IIRC.i
valeur globaleStax ,
4639 octetsExécuter et déboguer
Ce programme prend l'entrée dans la notation de chaîne spécifiée à l'origine.
la source