Connexes: Programmer mon four à micro-ondes . Inspiré par Générer une entrée micro-ondes paresseux .
La valeur paresseuse de l'entier non négatif N est le plus petit des entiers les plus proches de N tandis que tous leurs chiffres sont identiques.
Renvoie (par tous les moyens) la valeur paresseuse d'un N donné (par tous les moyens) .
N ≤ le plus grand entier que votre langue représente sous forme non exposante par défaut. 1000000 (Beaucoup de solutions intéressantes sont perdues à cause de cette exigence trop élevée.)
Cas de test:
0 → 0
8 → 8
9 → 9
10 → 9
16 → 11
17 → 22
27 → 22
28 → 33
100 → 99
105 → 99
106 → 111
610 → 555
611 → 666
7221 → 6666
7222 → 7777
Le collègue en question a prouvé qu'il n'y aura pas de liens: à l'exception des 9/11, 99/111, etc. pour lesquels l'une est plus courte que l'autre, deux réponses valides consécutives sont toujours à une distance étrange, donc aucun entier ne peut être exactement à égale distance d'eux.
Number.MAX_SAFE_INTEGER
non plus car il8e16 - 1
est exprimé sous la forme8e16
. Malheureusement, il semble que la seule façon serait de coder en dur le résultat maximal. +1 néanmoins.Gelée, 16 octets
Essayez-le en ligne!
Comment ça marche
la source
Oracle SQL 11.2, 200 octets
Non golfé
la source
Pyth - 26 octets
Cette réponse ne renvoie pas toujours la plus petite valeur dans une égalité, mais ce n'est pas dans les spécifications, donc en attente de clarificationfixée pour 3 octets.Suite de tests .
la source
Pyth, 16 octets
Essayez-le en ligne: démonstration ou suite de tests
Explication:
la source
MATL , 25 octets
Utilise la force brute, cela peut donc prendre un certain temps pour les grands nombres.
Essayez-le en ligne!
la source
Perl, 32
Basé sur la belle solution JavaScript de Neil.
Commence à échouer à
5e15
la source
Mathematica, 122 octets
Fonction nommée x.
la source
JavaScript (ES6), 59 octets
Solution récursive (56 octets)
Ceci est un peu plus court mais ne fonctionne pas
n > 1111111110
car la taille maximale de la pile d'appels est dépassée, elle n'est donc pas techniquement valide.Explication
Itère à travers chaque nombre paresseux jusqu'à ce qu'il atteigne le premier qui est supérieur à
n
, puis le comparen
à celui-ci et au nombre précédent pour déterminer le résultat.la source
Japt , 18 octets
Essayez-le en ligne!
Basé sur la technique de Neil
Solution non concurrente :
la source
*9+4 h /9|0
:-)05AB1E , 20 octets
Essayez-le en ligne!
la source
Mathematica, 56 octets
Fonction pure avec premier argument
#
, fonctionne pour les entrées jusqu'à10^6
.Pour un entier non négatif
n
et un chiffred
,10^n-1 = 99...9
( fois9
répétésn
), doncd(10^n-1)/9 = dd...d
( foisd
répétésn
). Crée uneTable
des valeurs0 <= n <= 6
et0 <= d <= 9
, aplatit la table, trouve la liste des élémentsNearest
à#
et prend laMin
.Je crois que cette version fonctionnera pour des entiers arbitrairement grands:
la source