Inspiré par le malheureux tri des chiffres sans utiliser de tableau , mais je pensais que cela faisait un meilleur code de golf que la question SO.
Étant donné un entier positif, triez les chiffres de cet entier.
Le score le plus bas gagne!
- Commencez avec 0 points.
- Ajoutez un point par caractère.
- Ajoutez 20 points pour chaque tableau que vous utilisez.
- Ajoutez 10 points pour chaque chaîne à plusieurs caractères de votre code. (Sauf l'entrée initiale tant qu'elle est convertie en entier sans aucune autre opération sur elle.)
- Ajoutez 32 points si le nombre maximum de chiffres que votre programme peut gérer est limité par votre programme (par opposition à la machine).
- Soustrayez 10 points si votre code peut changer la direction du tri en fonction d'un autre argument (tout ce que vous voulez, mais par exemple 0 pour le tri décroissant et 1 pour le croissant).
Chaque langue est différente, mais l'idée est d'éviter tout type de piratage à plusieurs chiffres.
Exemple:
Entrée : 52146729
Sortie : 97654221 ou 12245679
Remarques:
- Utilisez toutes les capacités de tri intégrées fournies par votre langage de programmation, mais si cette fonction de tri implique des chaînes ou des tableaux, prenez la peine!
- Vous pouvez écrire la solution en tant que fonction qui prend directement un entier ou en tant que programme qui prend un argument de argv, un fichier ou un flux et le convertit en entier. Tant que vous le convertissez immédiatement en entier et supprimez l'entrée char * d'origine sans effectuer d'autres opérations dessus, aucune pénalité ne s'applique.
- Les pénalités s'appliquent non seulement aux littéraux de chaîne dans le texte de votre programme, mais à toute partie de votre fonctionnalité de programme qui peut sans doute entrer ou sortir une chaîne ou itérable. Par exemple, JavaScript
String.prototype.split
a au moins une chaîne en entrée (this
) et un tableau en sortie, donc +30 pour l'utiliser. - J'ai essayé de faire en sorte que ces règles guident le principe de la conception de l'algorithme, pas les E / S initiales / finales (d'où la note # 2). Je ne pense pas que la pénalité devrait s'appliquer à
int(input())
même siinput
la signature indique qu'elle renvoie une chaîne, tant que cette expression est le point d'entrée initial du programme. De même, si la sortie finale du programme estprint(x)
etx
doit être une chaîne, la pénalité ne s'applique pas à l'opération de transtypage de chaîne de dernier fossé. Cela dit, je n'ai explicitement jamais dit qu'il fallait que ce soit un programme ou d'où les E / S devaient venir ou aller. Une fonction qui prend unint
et renvoie unint
servirait et ne souffrirait pas de ces ambiguïtés.
" "
compte comme une chaîne à plusieurs caractères? Un seul personnage ne serait pas considéré comme "multi" ...