Étant donné une liste de chaînes, triez la liste sous forme de nombres sans savoir quelle base est utilisée. Les valeurs des chiffres sont également inconnues (il est possible que '1'
> '2'
).
Étant donné que les valeurs des chiffres sont inconnues, utilisez la loi de Benford (ou la loi du premier chiffre) pour déterminer la valeur relative des chiffres. Pour les distributions qui suivent la loi de Benford, les chiffres de faible valeur apparaissent plus fréquemment comme chiffre de tête que les chiffres de valeur supérieure.
Règles
- C'est du code-golf
- La liste des chaînes peut provenir d'une source de votre choix (stdin, variable, fichier, utilisateur, etc.)
- Les chaînes sont limitées aux caractères ASCII.
- Les caractères qui n'apparaissent pas comme un caractère de tête ont les valeurs les plus élevées. (supposez qu'il n'y a pas de zéros et triez strictement par fréquence de tête.)
- Les caractères qui apparaissent en tant que chiffres de tête le même nombre de fois que les autres caractères sont pondérés de manière égale.
Exemple
Non trié
['c','ca','ac','cc','a','ccc','cx','cz','cy']
Triés
['c','a','cc','ca','cz','cy','cx','ac','ccc']
Remarque: Dans l'exemple, 'cz'
, 'cy'
et 'cx'
peut apparaître comme la 5e, 6e et 7e éléments dans un ordre quelconque étant donné que les chiffres 'x'
, 'y'
et 'z'
sont également pondérés.
Réponses:
Python, 59
108112L'entrée est fournie sous forme de liste
a
, et cette expression produit la liste triée (+2 caractères à affecter à une variable). Cela trie la liste en sens inverse par longueur annulée puis par fréquence.la source
zip
avecNone
. Bien que cela ne fonctionne pas en Python 3, ce qui serait utileitertools.zip_longest
.None
ne peut pas être comparé à des entiers dans Python 3, donc il échouerait de toute façon.fillvalue
devrait être définie sur quelque chose de moins que la plus petite valeur.Rubis, 65
Trie lexicographiquement sur la taille de la chaîne, puis la fréquence de chaque caractère n'est pas le premier chiffre.
la source
Java (261)
Les méthodes prennent un tableau de chaînes et trient le tableau en place. L'implémentation n'a rien d'extraordinaire, mais elle utilise les expressions lambda ajoutées à Java 8.
la source
Javascript (E6) 147
Limite
Valeurs de fréquence jusqu'à 1000000000: pour le tri, les valeurs de fréquence sont fusionnées dans une grande chaîne rembourrée
Non golfé
Incrément de Sidenote
X-~
de 1 même si le nombre d'origine X n'est pas défini ou NaNUsage
Production:
["c", "a", "cc", "ca", "cx", "cz", "cy", "ac", "ccc"]
la source