Soit une liste d'entiers positifs sans ordre particulier et pouvant contenir des doublons. Écrivez un programme ou une fonction qui génère une liste d'entiers positifs (dont l'ordre n'est pas important) de telle sorte que la fusion de et aboutit à la plus petite liste qui peut être entièrement divisée en plages identiques d'entiers , où est le plus grand élément deM L M [ 1 .. i ] i L
Exemple
Soit L = [5,3,3,2,7]
. L'élément maximal de L
est 7
. Le plus grand nombre de fois qu'un entier spécifique se produit est 2
( 3
apparaît 2 fois). Par conséquent, nous devons afficher la liste M
qui permettra de terminer L
afin que nous puissions construire des 2
plages d'entiers de 1
à 7
.
Par conséquent, nous devons sortir M = [1,1,2,4,4,5,6,6,7]
, de sorte que chaque entier de 1
à 7
apparaisse 2
fois.
Entrées et sorties
- Utilisez quelque chose dans votre langue qui ressemble aux listes. La structure de données utilisée pour l'entrée et la sortie doit être la même.
- La liste d'entrée ne contiendra que des entiers positifs.
- La liste d'entrée ne sera pas vide.
- Vous ne pouvez pas supposer que la liste d'entrée est triée.
- L'ordre dans la liste de sortie est sans importance.
Cas de test
Input Output
[1] []
[7] [1, 2, 3, 4, 5, 6]
[1, 1, 1] []
[1, 8] [2, 3, 4, 5, 6, 7]
[3, 3, 3, 3] [1, 1, 1, 1, 2, 2, 2, 2]
[5, 2, 4, 5, 2] [1, 1, 3, 3, 4]
[5, 2, 4, 5, 5] [1, 1, 1, 2, 2, 3, 3, 3, 4, 4]
[5, 3, 3, 2, 7] [1, 1, 2, 4, 4, 5, 6, 6, 7]
Notation
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.
la source
i
l'élément le plus important deL
ouM
?i
est le plus gros élémentL
, c'était une faute de frappe dans les spécifications.M=[1,1,2,2,3]
pendantL=[3]
que "la fusion de L et M aboutit à une liste qui peut entièrement se diviser en plages identiques d'entiers [1..i]"?[1,2]
. Je vais le clarifier afin qu'il soit clair que cela devrait aboutir au nombre minimum de plages.Réponses:
Gelée , 9 octets
Enregistré 1 octet grâce à Jonathan Allan . Le pied de page appelle le lien principal, trie le résultat pour qu'il corresponde aux cas de test et formate la sortie sous forme de grille.
Essayez-le en ligne! ou Découvrez une suite de tests!
Alternatives
Essayez l'un d'entre eux en ligne!
Explication
la source
Perl 6 ,
3733 octets-4 octets grâce à nwellnhof!
Essayez-le en ligne!
Bloc de code anonyme qui prend un sac et renvoie un sac de valeurs.
Explication:
la source
{^.max+1 xx.Bag.values.max∖.Bag}
{^.keys.max+1 xx.values.max∖$_}
enregistre un autre octet.R ,
594948 octetsEssayez-le en ligne!
la source
rep
différemment, mais est par ailleurs le même que le vôtre. Je pourrais le poster moi-même mais je ne pense pas y avoir pensé à moins d'avoir vu le vôtre en premier. Je vous mets au défi de le trouver!split
maistabulate
c'est bien mieux!x=max(L<-scan());rep(1:x,1:x-lengths(split(L,c(L,1:x))))
qui, lors de tests supplémentaires, ne fonctionne pas pour les cas de test comme7
...Python 2 ,
86838072 octetsEssayez-le en ligne!
la source
05AB1E ,
171617 octets-1 octet grâce à @ Mr.Xcoder .
+1 octet après avoir corrigé le bogue.
Peut-être que je regarde complètement au-delà, mais 05AB1E a-t-il même a supprimer tous les éléments de la liste b de la liste a .. (EDIT: Ce n'est pas le cas ..) Je sais comment supprimer tous les plusieurs fois, mais pas une fois chacun .. (différence multiset)
Peut certainement être joué au golf. Pas vraiment content, tbh ..
Je vais voir si je peuxjouer augolf avant d'ajouter une explication.EDIT: Ajout d'une explication ..Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
K a,b Push a without b's
? Oh attendez, "une fois chacun" ... hmm[1,2,3,4,5,6,7,1,2,3,4,5,6,7]
et[5,3,3,2,7]
avec desK
résultats[1,4,6,1,4,6]
malheureusement. Il supprime tous les éléments au lieu de faire une différence multiset.¢ZIZLŠŠи
devrait économiser 1 octetR ,
5955 octetsEn utilisant le
vecsets
package, nous pouvons en réduire la longueur. Avecgl
nous pouvons obtenir la sortie commandée. Cela ne fonctionne pas dans TIO. Suivant le style de solution de @ digEmAll (plutôt intelligent) sans définition de fonction, cela peut être considéré comme une solution de 55 octets.la source
f(c(5,3,3,2,7))
JavaScript (ES6), 98 octets
Cela s'est avéré assez difficile à jouer au golf en dessous de 100 octets. Il pourrait y avoir une meilleure approche.
Essayez-le en ligne!
Comment?
Nous parcourons d'abord le tableau d'entrée
a[]
pour recueillir les données suivantes:M
= élément le plus élevé trouvé dans le tableau d'entréem
= le plus grand nombre d'occurrences du même élémento[n]
= nombre d'occurrences den
Notez que
o
est principalement défini comme une fonction, mais l'objet sous-jacent est également utilisé pour stocker le nombre d'occurrences.Nous utilisons ensuite la fonction récursive
g()
pour construire la sortie.la source
Haskell, 72 octets
Essayez-le en ligne!
la source
Brachylog ,
1817 octetsEssayez-le en ligne!
1 octet enregistré grâce à @Kroppeb.
Explication
la source
⌉
place deot
Java 10, 186 octets
Essayez-le en ligne.
Explication:
la source
Husk , 12 octets
1 octet enregistré grâce à BWO .
Essayez-le en ligne!
la source
MATL ,
2421 octetsEssayez-le en ligne!
la source
MATL , 14 octets
L'entrée est un vecteur colonne, avec
;
comme séparateur.Essayez-le en ligne! Ou vérifiez tous les cas de test (ceci s'affiche
--
après chaque sortie afin que la sortie vide puisse être identifiée).Explication
Considérez la saisie
[5; 2; 4; 5; 5]
comme exemple.la source
Pyth , 13 octets
Essayez-le ici! ou Découvrez une suite de tests!
la source
Fusain , 19 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Aurait été de 16 octets si les entiers avaient été non négatifs au lieu de positifs. Explication:
la source
APL (Dyalog Classic) ,
1817 octetsEssayez-le en ligne!
les usages
⎕io←1
la source
Prolog (SWI) , 211 octets
Cela fait un moment que je n'ai pas programmé à Prolog. Peut certainement être joué au golf plus loin, mais j'ai un examen pour étudier hahaha.
Code
Essayez-le en ligne!
Version non golfée
la source
Clojure, 94 octets
la source
C ++, 234 octets
(Les sauts de ligne dans le corps de la fonction sont pour la lisibilité).
La fonction prend et retourne un vecteur d'entiers. Il utilise
std::map
pour trouver l'élément max de la liste d'entrée et aussi pour compter les occurrences de chaque élément distinct.Explication:
la source
Gaia , 12 octets
Essayez-le en ligne!
la source
C (gcc) , 177 octets
L'entrée et la sortie se font via stdin et stdout. Les deux tableaux sont limités à 2 ^ 15 éléments, mais ils peuvent atteindre 2 ^ 99 éléments.
Avec une mise en forme:
Essayez-le en ligne!
la source