introduction
Par définition, les identifiants uniques doivent être uniques. Le fait d'avoir plusieurs identifiants identiques entraîne la récupération de données inattendues. Mais avec des données provenant simultanément de plusieurs sources, il peut être difficile de garantir l'unicité. Écrivez une fonction qui unifie une liste d'identifiants.
C'est peut-être le pire casse-tête que j'ai écrit, mais vous avez l'idée.
Exigences
Étant donné une liste de zéro ou plusieurs entiers positifs, appliquez les règles suivantes à chaque nombre du premier au dernier:
- Si le numéro est le premier du genre, conservez-le.
- Si le nombre a déjà été rencontré, remplacez-le par l'entier positif le plus bas qui ne se trouve nulle part dans la liste d'entrée entière ou sur une sortie existante.
Pour la solution:
- La solution peut être un programme ou une fonction.
- L'entrée peut être une chaîne, un tableau, passé comme arguments ou une entrée au clavier.
- La sortie peut être une chaîne, un tableau ou imprimée à l'écran.
- Tous les nombres de la liste de sortie sont distincts.
Hypothèses
- La liste d'entrée est propre. Il ne contient que des entiers positifs.
- Un entier positif a une plage de 1 à 2 31 -1.
- Moins de 256 Mo de mémoire sont disponibles pour les variables de votre programme. (Fondamentalement, aucun tableau à 2 147 483 648 éléments n'est autorisé.)
Cas de test
Input: empty
Output: empty
Input: 5
Output: 5
Input: 1, 4, 2, 5, 3, 6
Output: 1, 4, 2, 5, 3, 6
Input: 3, 3, 3, 3, 3, 3
Output: 3, 1, 2, 4, 5, 6
Input: 6, 6, 4, 4, 2, 2
Output: 6, 1, 4, 3, 2, 5
Input: 2147483647, 2, 2147483647, 2
Output: 2147483647, 2, 1, 3
Notation
Juste un simple golf de code. Le nombre d'octets le plus bas à cette heure la semaine prochaine l'emporte.
code-golf
set-theory
Hand-E-Food
la source
la source
6, 6, 1, 2, 3, 4, 5
6, 7, 1, 2, 3, 4, 5
6, 6, ...
donner6, 1, ...
?6, 6, 4, 4, 2, 2
cas de test confirme l'interprétation d'Adám: la sortie attendue est6, 1, 4, 3, 2, 5
et non6, 1, 4, 2, 3, 5
.Réponses:
Brachylog , 8 octets
Essayez-le en ligne!
Explication
la source
Java 8,
158144 octets.contains(m+c);m++)
pour.contains(++m+c);)
enregistrer 1 octet et converti simultanément en Java 8 pour enregistrer 13 octets supplémentaires.Explications:
Essayez ici.
la source
JavaScript (ES6), 49 octets
la source
Rubis , 63 octets
Essayez-le en ligne!
Explication
la source
05AB1E ,
171618 octetsEssayez-le en ligne!
Explication
la source
6, 6, 1, 2, 3, 4, 5
.[6, '1', '2', '3', '4', '5', '7']
. Devrait donner[6, '7', '1', '2', '3', '4', '5']
.PHP, 121 octets
Version en ligne
Étendu
la source
Python 2,
7779 octetsPrend une saisie au clavier, comme
[3, 3, 3, 3, 3, 3]
.Gardez simplement une trace du plus petit entier positif
j
non utilisé jusqu'à présent. Pour chaque élémentx
de l'entrée, la sortiex
six
n'a pas déjà été utilisée, sinon la sortiej
. Enfin, mettez à jourj
chaque fois que vous sortez quelque chose.EDITED: pour corriger une erreur de gestion d'entrée de
[6, 6, 4, 4, 2, 2]
. Merci à @Rod d'avoir signalé l'erreur ainsi qu'un correctif. L'erreur était que, dans le cas d'une entrée en double, il produirait le plus petit nombre inutilisé à ce point de la liste, même si cette sortie apparaissait plus tard dans l'entrée. (C'était faux, comme expliqué dans le post et les commentaires, mais je l'ai quand même gâché d'une manière ou d'une autre.) Quoi qu'il en soit, le correctif consistait simplement à ajouter la liste d'entréea
, à l'ensemble de valeurs qui ne pouvaient pas être sorties dans ce cas.la source
[6,6,4,4,2,2]
, vous pouvez (probablement) le corriger en ajoutant+a
àwhile j in u:
->while j in u+a:
Haskell ,
7976 octetsMODIFIER:
head
pourrait être remplacé par une correspondance de modèle.([]#)
est une fonction anonyme qui prend et renvoie une liste. Utilisez comme([]#)[2147483647, 2, 2147483647, 2]
.Essayez-le en ligne!
Comment ça marche
?
est un opérateur abrégé pour vérifier si un élément est absent d'une liste.s#l
gère la liste des entiersl
, étant donné une listes
d'entiers déjà utilisés.x
est le prochain entier à regarder,y
les autres.z
est l'entier choisi pour le point suivant. C'estx
six
n'est pas un élément des
, et le premier entier positif ni danss
ni dansy
autrement.(z:s)#y
puis revient avecz
ajouté à la liste entière utilisée.n
est une liste vide, car les listes non vides ont été gérées dans la ligne précédente.([]#)
prend une liste et appelle#
avec elle comme deuxième argument, et une liste vide pour le premier argument.la source
|z:_<-[x|...]...
APL (Dyalog 16.0), 34 octets
la source
Pyth ,
2120 octetsSuite de tests
J'ajouterai une explication quand j'aurai le temps.
la source
C # , 135 octets
Golfé
Ungolfed
Ungolfed lisible
Code complet
Communiqués
135 bytes
- Solution initiale.Remarques
la source
Python 2 , 101 octets
Essayez-le en ligne! ou Essayez tous les cas de test
la source
R , 39
46octetsCrée un vecteur à partir de l'entrée, puis remplace les valeurs dupliquées par une plage de 1 à un million dont les valeurs d'entrée ont été supprimées. Renvoie un vecteur numérique. Aucune entrée ne renverra le vecteur vide numérique (0).
Essayez-le en ligne!
Cela lancera un avertissement sur la longueur du vecteur de remplacement
la source
C
169 octets133 octetsentrée = tableau a, sortie = tableau modifié a
formaté
Trop d'octets gaspillés pour ces boucles. Quelqu'un pense-t-il à raccourcir le code en inventant un nouvel algorithme (qui utilise moins de boucle)? Je pensais, mais je n'en ai pas trouvé.
la source
C # 7, 116 octets
Dentelé
A expliqué
[1, 2, 3, ...]
, en ignorant les valeurs présentes dans l'entrée.Version en ligne
la source
Clojure, 72 octets
Une réduction de base. Si
i
est contenu dans la liste de sortie jusqu'à présent, nous prendrons le 2e élément (1 lorsqu'il est indexé à 0) de la liste infinie d'entiers(range)
dont nous avons supprimé les nombres qui ont déjà été utilisés. La plage commence à zéro, nous ne pouvons donc pas prendre le premier élément mais le second.la source
R, 74 octets
lit la liste depuis stdin; renvoie NULL pour une entrée vide.
explication:
1:length(n)
peut être utilisé car nous sommes garantis de ne jamais avoir besoin d'un remplacement de l'extérieur de cette gamme.Essayez-le en ligne!
la source
Axiome, 169 octets
ungolf et résultat
la source