L'année 2013 avait une propriété intéressante: les chiffres sont consécutifs lorsqu'ils sont triés (0123). Appelons ce type de nombre un nombre triable: un entier non négatif dont les chiffres de base 10 sont consécutifs après le tri. Malheureusement, cela ne se reproduira pas avant 2031, et après cela, pas avant 2103. Votre défi est d'écrire un programme ou une fonction qui, lorsqu'il reçoit un entier non négatif par le biais d'une méthode standard, génère ou renvoie le numéro triable suivant.
Règles
- L'entrée et la sortie doivent être en base 10.
- La sortie peut être dans n'importe quel format raisonnable (littéral nombre, littéral chaîne, tableau à un seul élément, ...).
- Votre code doit produire la sortie appropriée en 1 minute pour toutes les entrées jusqu'à 98764.
Cas de test
0 -> 1
1 -> 2
9 -> 10
10 -> 12
11 -> 12
99 -> 102
233 -> 234
234 -> 243
243 -> 312
2016 -> 2031
2031 -> 2103
2103 -> 2130
2130 -> 2134
2134 -> 2143
9876 -> 10234
98764 -> 98765
Les nombres triables forment A215014 . Une liste de toutes les entrées jusqu'à 98765 peut être trouvée ici .
Notation
Il s'agit de code-golf , donc le code le plus court en octets l'emporte.
Réponses:
Python 2 , 61 octets
Essayez-le en ligne!
la source
'0123456789'
être quelque chose comme ça1./81
, mais ça ne marche pas tout à fait.1./81.0000001
qui ne fonctionne toujours pas correctement et qui est plus long1./81-1e-10
mais c'est toujours 10 octets et vous auriez encore à le tronquer.Gelée ,
11109 octetsRenvoie un tableau singleton. Essayez-le en ligne!
Comment ça marche
la source
MATL , 8 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
JavaScript (ES6),
6454 octetsA sauvé un énorme 10 octets, grâce à Neil
Cas de test
Afficher l'extrait de code
la source
map
rappel est le tableau lui-même, mais vous pouvez continuer à faire beaucoup mieux:f=n=>[...++n+''].sort().some((v,i,a)=>v-i-a[0])?f(n):n
Pyth -
1110 octetsSuite de tests
la source
PowerShell v2 +,
716867 octetsEssayez-le en ligne!
Une solution itérative qui s'exécute pratiquement instantanément sur ma machine.
Oui, c'est une boucle
do
/until
dans un code-golf. Désolé, pas désolé. Fondamentalement, nous bouclons vers le haut à partir de notre entrée$n
jusqu'à ce que les$n|sort
expressions rationnelles soient-match
contre0123456789
. Ensuite, nous plaçons$n
sur le pipeline, et la sortie est implicite.Enregistré un octet en réalisant qu'il
-join(0..9)
est un octet plus court que la chaîne littérale0123456789
.la source
Mathematica, 63 octets
Remplace
#+1
par la valeur suivante tant queDifferences@Sort@IntegerDigits@x~MatchQ~{1...}
est fausse, condition à laquelle la valeur actuelle peut être triée.Voici une autre idée amusante, qui a malheureusement fini par être trop longue:
Dans celui-ci, je génère d'abord toutes les années triables, puis je sélectionne la première qui est supérieure à l'entrée.
Quelques idées supplémentaires qui ne se sont pas avérées plus courtes que la première tentative:
la source
PHP,
10510389 bytesNouvelle version de 89 octets grâce à Titus:
Usage:
Version précédente de 103 octets grâce à Xanderhall:
Version précédente de 105 octets:
Utilisation:
sortable-years.php?n=9000
sorties9678
.Version non golfée avec cas de test:
Testez en ligne! (Nouvelle version de 89 octets)
Testez en ligne! (Version précédente de 103 octets)
Testez en ligne! (Version précédente de 105 octets)
Le temps d'exécution peut être <= 1 seconde pour tous les cas de test.
la source
break
(exit
sur la version golfée), vous l'avez trouvé! Génial.$i=0
est inutile (-4).join
est un alias pourimplode
(-3).echo$n
est une sortie suffisante (-5).$argv[1]
au lieu de$_GET[n]
permet-r
ce qui vous permet d'omettre la<?
balise (-2).join
alias deimplode
! À propos duphp -r
paramètre, j'ai utilisé dans le passé mais récemment je ne l'utilise pas parce que (je ne sais pas pourquoi) parfois je ne peux pas le faire fonctionner correctement dans certains cas.Perl 6 , 49 octets
Explication
Tester:
la source
C #,
153130101 octets (1229983 hors déclarations d'espace de noms)-23 octets grâce à pinkfloydx33
un autre -29 grâce à Link Ng (j'aurais vraiment dû savoir que je n'ai pas besoin de le convertir en tableau)
Putain de conversions.
(Bonus ajouté, c'est étonnamment rapide)
la source
$"{n}".ToCharArray()
ou(""+n).ToCharArray()
et vous n'avez pas besoin des crochets après le temps:while(!s.Contains...)n++;
ou mieux encore de les combiner et de laisser un corps de boucle vide:while(!s.Contains(.....$"{n++}".ToCharArray()....);return n;
déclarez s avecvar s="... "
ou supprimez-le entièrement:while(!"0123456789".Contains(...
n++
et le combiner avec ce qui précède et faire$"{++n}".ToCharArray()
use System;
et utilisezstring
au lieu deString
pour 11 octets. Utilisezstring.Concat
au lieu destring.Join
et ne conservez que le 2e paramètre pendant 1 octet. Passez""+ ++n
à++n+""
1 octet. Laissé à vous comme exercice: 14 octets supplémentaires peuvent être supprimés.Befunge , 117 octets
Essayez-le en ligne!
La façon dont nous testons si une année est triée consiste à créer un "tableau" (écrit dans le littéral de chaîne à la ligne cinq) et pour chaque chiffre de l'année, nous définissons cet index dans le tableau à 1. Une fois que tous les chiffres ont été traitées, nous comptons le nombre de 1 dans l'ordre, et si ce nombre est égal à la durée de l'année, nous pouvons supposer que l'année est triée.
Explication détaillée
la source
Rubis, 51 octets
la source
Python 2, 68 octets
Bien battu par @Dennis mais vient tout de même d'être affiché comme méthode alternative.
la source
C #, 127 octets
Battre la soumission C # actuelle de 3 octets: pDéjà repousséJe sais que cette réponse sera repoussée facilement ...
repoussée repl.it demo
Non golfé
la source
05AB1E ,
109 octets-1 merci à Emigna.
Essayez-le en ligne!
Nouvelle description à venir quand j'aurai le temps.
la source
[>D{žhså#
pour 9 octets.Python 2,
118117114108octetsMODIFIER:
-1 octet grâce à @ Gábor Fekete
-6 octets grâce à @Zachary T
la source
sorted
fonction.PHP,
908988 octetsune approche complètement différente:
Courez avec
-r
.panne
la source
Clojure,
1049691 octetsLes noms de méthode longs ne rendent pas cela si court ... Au moins
map-indexed
et-
faites les calculs principaux de manière ordonnée.Modifier 1 : soigné, j'ai oublié que je
=
peux également prendre plusieurs arguments, donc je n'ai pas besoin de vérifier si le nombre de valeurs distinctes est égal à 1.Edit 2 : Pas besoin de courir
(sort(seq(str %)))
,(sort(str %))
fonctionne aussi bien.Non golfé:
la source
R, 87 octets
Comme d'habitude quand il s'agit de diviser des nombres en chiffres, R n'a pas de manière native de le faire. Par conséquent, nous devons contraindre l'entrée en un caractère, la diviser en un vecteur de caractères et la reconvertir ensuite en n'importe quel type numérique.
Essayez-le en ligne
la source