Comment, vous ne vous souvenez pas du numéro de téléphone à 6 ou 7 chiffres qui est apparu sur l'écran du téléviseur pendant une seconde?! En utilisant la technique spéciale décrite ci-dessous, vous vous transformerez en un répertoire de marche!
De toute évidence, le nombre 402
est plus facile à retenir que le nombre 110010010
, et le nombre 337377
est plus facile à retenir que le nombre 957472
. Cela signifie que le numéro mémorisé, d'une part, doit contenir le moins de chiffres possible, et d'autre part, il est souhaitable que le numéro contienne autant de numéros répétitifs que possible.
Comme critère de difficulté de mémorisation, nous prenons la somme du nombre de chiffres en nombre et du nombre de chiffres différents en nombre. Un nombre mémorisé peut être écrit dans un autre système numérique, peut-être sera-t-il alors plus facile à retenir. Par exemple, le nombre 65535
dans la notation hexadécimale ressemble FFFF
.
Tâche
Vous devez écrire un programme pour sélectionner la base du système numérique afin de minimiser le critère de complexité. La base du système numérique doit être sélectionnée dans la plage de 2 à 36, puis les chiffres 0-9
et les lettres anglaises A-Z
peuvent être utilisés pour représenter le nombre.
Contribution
L'entrée contient un entier décimal de 1 à 999999999.
Production
La sortie doit contenir la base du système numérique (de 2 à 36), minimisant le critère de complexité de mémorisation, et le nombre dans le système numérique sélectionné, séparés par un espace. Si plusieurs bases donnent la même valeur pour le critère, choisissez la plus petite d'entre elles.
Remarques
- Les lettres doivent être en majuscules (
A-Z
).
Cas de test
Entrée sortie
1
2 1
2
3 2
65535
16 FFFF
123
12 A3
la source
a-z
place deA-Z
?A-Z
?Réponses:
Perl 6 ,
5554 octets-1 octet merci à Jo King.
Essayez-le en ligne!
la source
@$_
par@_
et cela fonctionne toujours.Python 2 ,
150149127144 octetsEssayez-le en ligne!
Python 3 , 136 octets
Essayez-le en ligne!
Python 3.8 (pré-version) , 131 octets
Essayez-le en ligne!
c
convertit un nombre de base 10 en n'importe quelle base (2-36), et la première fonction (anonyme) trouve le résultat le plus petit.la source
05AB1E ,
1614 octets-1 octet grâce à Kevin Cruijssen
Essayez-le en ligne!
Ou ajoutez R) »à la fin pour se conformer exactement au format de sortie spécifié, mais la plupart des autres réponses n'ont pas dérangé.
Explication:
la source
₆L©B®ø
au lieu de₆LεBy‚}
ā
, semble que vous oubliez toujours celui-là.JavaScript (ES6),
8785101 octetsEdit: +16 octets inutiles pour se conformer au format de sortie strict
Essayez-le en ligne!
la source
Japt v2.0a0
-gS
,2423 octetsPas joli, mais ça fait l'affaire. +2 octets pour l'exigence totalement inutile que la sortie soit en majuscules.
Essayez-le
la source
PHP ,
124119 octetsEssayez-le en ligne!
Dommage pour les +12 octets en PHP pour mettre en majuscule la sortie ... mais ... de toute façon.
la source
Zsh , 85 octets
Pour ce nombre d'instructions dans la boucle for, l'utilisation
...&&...&&...
est plus courte que{...;...;...;}
.Essayez-le en ligne!
Voici une solution de 81 octets qui s'imprime à la
[base]#[num]
place dans le formulaire :Essayez-le en ligne!
la source
J , 67 octets
Essayez-le en ligne!
la source
Fusain , 38 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Saisissez l'entier.
Convertissez-le de la base 2 à la base 36 ...
... dédupliquer, concaténer et prendre la longueur.
Prenez l'indice de la complexité minimale et ajoutez 2 pour obtenir la base.
Imprime la base et l'entier converti en cette base en majuscules.
la source
Stax , 19 octets
Exécuter et déboguer
Aucun algorithme sophistiqué, juste une force brute simple. Environ un tiers du programme est en train de modifier le format des règles de sortie précises.
Programme bonus: sortie pour [1..1000]
la source
Gelée , 25 octets
Essayez-le en ligne!
Un lien monadique prenant un entier comme argument et renvoyant une chaîne Jelly du format souhaité. Si une liste de deux éléments était une sortie acceptable (selon la plupart des défis), elle pourrait économiser 2 octets. Si la base 1 était acceptable pour le cas de bord de 1 en entrée, cela pourrait économiser 2 octets supplémentaires.
la source
Brachylog , 44 octets
Essayez-le en ligne!
Cela faisait un peu mal à écrire.
la source
Perl 5 , 161 octets
Essayez-le en ligne!
la source
Python 2 ,
140135 octetsEssayez-le en ligne!
la source
Perl 5
-Minteger -MList::Util=uniq,first -ap
,123112 octetsEssayez-le en ligne!
la source
Wolfram Language (Mathematica) ,
109111 octets+2: fixe. Merci pour la capture @Roman
OrderingBy
a été introduit dans Mathematica 12.0, que TIO ne semble pas encore avoir mis à jour.la source
OrderingBy
N'est pas conforme à cette exigence.MinimalBy
, comme ça ?123
, votre solution s'imprime36 3F
au lieu de ce qui est requis12 A3
. DeOrderingBy[123~IntegerDigits~Range@36, Tr[1^#] + Tr[1^Union@#] &]
je reçois la réponse{36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 6, 5, 11, 10, 9, 8, 7, 4, 3, 2, 1}
, donc l'hypothèse habituelle de pas d' entrées équivalentes ré-commande semble être ignoré ici. Mon$Version
est "12.0.0 pour Mac OS X x86 (64 bits) (7 avril 2019)".C (clang) , 165 octets
Essayez-le en ligne!
n // entrée
, i = 2 // itérateur de la base 2 à 36
, j // complexité actuelle
, p = 99 // meilleure complexité
, r // resultat = itérateur
, m // copie temporaire de n
, x; // m% i
char * g // chaîne actuelle ptr
, * _ // meilleur str ptr
, b [74] [37]; // tampon
/ * [37 + 37] = [chaînes obtenues + test des caractères utilisés] * /
t (n) {
for (; g = b [i], // move ptr
pour (j = 0, m = n; m; m / = i, // extrait le chiffre
j + = b [i + 36] [x = m% i] ++? 1: 2; // incrémente l'octet par rapport au caractère
// et si c'était 0 incréments j de 2: 1 pour le nouveau caractère utilisé et 1 pour le nombre de chiffres
// else incr seulement les chiffres comptent + déplacer le pointeur
// printf ("% s -", g); // test
// printf ("r% ip% ij% i \ n", r, p, j); // test
}
printf ("% i,% s", r, _); // sortie
}
la source
Japt v2.0a0, 31 octets
Essayez-le
la source