Inspiré par ce post sur Puzzling. Les spoilers pour ce puzzle sont ci-dessous.
Étant donné trois entiers positifs en entrée, (x, y, z)
construisez la plage inclusive [x, y]
, concaténez cette plage ensemble, puis supprimez z
les chiffres non nécessairement consécutifs pour produire les entiers positifs les plus grands et les plus petits possibles. Les zéros non significatifs ne sont pas autorisés (c'est-à-dire que les nombres doivent commencer par [1-9]
). Sortez ces deux nombres dans l'un ou l'autre ordre.
Pour l'exemple du post Puzzling, pour la saisie (1, 100, 100)
, le plus grand nombre possible est 99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
et le plus petit nombre est 10000012340616263646566676869707172737475767778798081828384858687888990919293949596979899100
,
suivant la logique ci-dessous de la réponse de jafe postée ici:
- Nous ne pouvons pas influencer la longueur du numéro (il y a un nombre fixe de chiffres), donc pour maximiser la valeur, nous prenons le premier chiffre maximal, puis le deuxième chiffre, etc.
- Supprimez les 84 premiers non-neuf (il reste 16 chiffres à supprimer):
999995051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Le plus grand nombre parmi les 17 chiffres suivants est 7, donc à partir d'ici, le chiffre suivant dans la réponse peut être au plus 7 (nous ne pouvons pas supprimer plus de 16 chiffres). Donc, supprimez 15 non-7 ... (1 chiffre à gauche pour supprimer):
999997585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- À partir d'ici, le chiffre suivant peut être au plus 8, alors supprimez un non-8 du milieu:
99999785960616263646566676869707172737475767778798081828384858687888990919293949596979899100
- Logique similaire, mais inversée (c'est-à-dire que nous voulons des
1
s au lieu de s au début9
) pour le plus petit nombre.
Voici un petit exemple: (1, 10, 5)
.
Nous construisons la plage 12345678910
et déterminons quels 5
chiffres nous pouvons supprimer en laissant le plus grand nombre possible. Évidemment, cela signifie que nous voulons maximiser le premier chiffre, car nous ne pouvons pas influencer la longueur de la sortie. Donc, si nous supprimons 12345
, nous nous retrouvons avec 678910
, et c'est le plus grand que nous puissions faire. Faire le plus petit est un peu plus délicat, car nous pouvons plutôt extraire les nombres du milieu, en laissant 123410
le plus petit possible.
Car (20, 25, 11)
, le résultat est plutôt ennuyeux, au fur 5
et à mesure 1
.
Enfin, pour exclure les réponses qui essaient de mettre des zéros en tête, (9, 11, 3)
donne 91011
qui à son tour donne 91
et 10
comme le plus grand et le plus petit.
E / S et règles
- Si c'est plus facile / plus court, vous pouvez coder deux programmes / fonctions - un pour le plus grand et un pour le plus petit - auquel cas votre score est la somme des deux parties.
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
- L'entrée peut être supposée correspondre au type de numéro natif de votre langue, mais ni le numéro concaténé ni la sortie ne peuvent être supposés le faire.
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
9, 11, 3
serait le cas.