El año 2013 tuvo una propiedad interesante: los dígitos son consecutivos cuando se ordenan (0123). Llamemos a este tipo de número un número ordenable: un número entero no negativo cuyos dígitos de base 10 son consecutivos después de la clasificación. Desafortunadamente, esto no volverá a suceder hasta 2031, y después de eso, no hasta 2103. Su desafío es escribir un programa o función que, cuando se le da un número entero no negativo a través de cualquier método estándar, genera o devuelve el siguiente número ordenable.
Reglas
- La entrada y la salida deben estar en la base 10.
- La salida puede tener cualquier formato razonable (número literal, literal de cadena, matriz de un solo elemento, ...)
- Su código debe producir la salida adecuada en 1 minuto para todas las entradas hasta 98764.
Casos de prueba
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
Los números ordenables forman A215014 . Una lista de todas las entradas de hasta 98765 se puede encontrar aquí .
Tanteo
Este es el código de golf , por lo que gana el código más corto en bytes.
Respuestas:
Python 2 , 61 bytes
Pruébalo en línea!
fuente
'0123456789'
ser algo así1./81
, pero no funciona del todo.1./81.0000001
que todavía no funcionaría correctamente y es más largo1./81-1e-10
pero aún son 10 bytes y aún tendrías que truncarlo .Gelatina ,
11109 bytesDevuelve una matriz singleton. Pruébalo en línea!
Cómo funciona
fuente
MATL , 8 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
JavaScript (ES6),
6454 bytesAhorró 10 bytes masivos, gracias a Neil
Casos de prueba
Mostrar fragmento de código
fuente
map
devolución de llamada es la matriz en sí, pero puede hacerlo mucho mejor:f=n=>[...++n+''].sort().some((v,i,a)=>v-i-a[0])?f(n):n
Pyth -
1110 bytesBanco de pruebas
fuente
PowerShell v2 +,
716867 bytesPruébalo en línea!
Una solución iterativa que se ejecuta casi instantáneamente en mi máquina.
Sí, eso es un bucle
do
/until
en un código de golf. Lo siento no lo siento. Básicamente, hacia arriba de nuestro bucle de entrada$n
hasta$n|sort
ed expresión regular-match
es en contra0123456789
. Luego colocamos$n
en la tubería, y la salida es implícita.Se guardó un byte al darse cuenta de que
-join(0..9)
es un byte más corto que la cadena literal0123456789
.fuente
Mathematica, 63 bytes
Reemplaza
#+1
con el siguiente valor siempre queDifferences@Sort@IntegerDigits@x~MatchQ~{1...}
sea falso, que es la condición de que el valor actual sea ordenable.Aquí hay otra idea divertida, que desafortunadamente terminó siendo demasiado larga:
En este, primero estoy generando todos los años clasificables y luego selecciono el primero que es mayor que la entrada.
Algunas ideas más que no resultaron ser más cortas que el primer intento:
fuente
PHP,
10510389 bytesNueva versión de 89 bytes gracias a Titus:
Uso:
Versión anterior de 103 bytes gracias a Xanderhall:
Versión anterior de 105 bytes:
Uso:
sortable-years.php?n=9000
salidas9678
.Versión sin golf con casos de prueba:
Prueba en línea! (Nueva versión de 89 bytes)
Prueba en línea! (Versión anterior de 103 bytes)
Prueba en línea! (Versión anterior de 105 bytes)
El tiempo de ejecución puede ser <= 1 segundo para todos los casos de prueba.
fuente
break
(exit
en la versión de golf), ¡lo encontraste! Excelente.$i=0
es innecesario (-4).join
es un alias paraimplode
(-3).echo$n
es suficiente salida (-5).$argv[1]
en lugar de$_GET[n]
permite-r
que le permite omitir la<?
etiqueta (-2).join
como aliasimplode
! Sobre elphp -r
parámetro, lo usé en el pasado pero últimamente no lo estoy usando porque (no sé por qué) a veces no puedo hacer que funcione correctamente en algunos casos.Perl 6 , 49 bytes
Explicación
Prueba:
fuente
C #,
153130101 bytes (1229983 excluyendo declaraciones de espacio de nombres)-23 bytes gracias a pinkfloydx33
otro -29 gracias a Link Ng (realmente debería haber sabido que no necesito convertirlo en una matriz)
Malditas conversiones.
(Bono adicional esto es sorprendentemente rápido)
fuente
$"{n}".ToCharArray()
o(""+n).ToCharArray()
y no necesita los corchetes después de un tiempo:while(!s.Contains...)n++;
o mejor aún combinarlos y dejar un cuerpo de bucle vacío:while(!s.Contains(.....$"{n++}".ToCharArray()....);return n;
declarar s convar s="... "
o eliminarlo por completo:while(!"0123456789".Contains(...
n++
y combinarlo con lo anterior y hacer$"{++n}".ToCharArray()
use System;
y usar enstring
lugar deString
por 11 bytes. Use enstring.Concat
lugar destring.Join
y mantenga solo el segundo parámetro para 1 byte. Cambie""+ ++n
a++n+""
por 1 byte. Dejado a usted como ejercicio: se pueden eliminar 14 bytes más.Befunge , 117 bytes
Pruébalo en línea!
La forma en que probamos si un año está ordenado es creando una "matriz" (escrita en el literal de cadena en la línea cinco) y para cada dígito en el año, establecemos ese índice en la matriz en 1. Una vez que todos los dígitos han sido procesados, contamos cuántos 1 hay en secuencia, y si ese recuento es igual a la duración del año, podemos suponer que el año está ordenado.
Explicación detallada
fuente
Ruby, 51 bytes
fuente
Python 2, 68 bytes
Bien golpeado por @Dennis pero publicado de todos modos como un método alternativo.
fuente
C #, 127 bytes
Batir el envío actual de C # por 3 bytes: pRetrocedido yasé que esta respuesta se revertirá fácilmente ...
repl.it demo
Sin golf
fuente
05AB1E ,
109 bytes-1 gracias a Emigna.
Pruébalo en línea!
Nueva descripción viene cuando tengo tiempo.
fuente
[>D{žhså#
por 9 bytes.Python 2,
118117114108BytesEDITAR:
-1 Byte gracias a @ Gábor Fekete
-6 Bytes gracias a @Zachary T
fuente
sorted
función.PHP,
908988 bytesUn enfoque completamente diferente:
Corre con
-r
.Descompostura
fuente
Clojure,
1049691 bytesLos nombres largos de métodos no hacen que esto sea tan corto ... Al menos,
map-indexed
y-
haga los cálculos principales de forma ordenada.Edición 1 : ordenado, olvidé que también
=
puede tomar varios argumentos, por lo que no necesito verificar si el recuento de valores distintos es 1.Edición 2 : no es necesario ejecutar
(sort(seq(str %)))
,(sort(str %))
funciona igual de bien.Sin golf:
fuente
R, 87 bytes
Como de costumbre cuando se trata de dividir números en dígitos, R no tiene una forma nativa de hacerlo. En consecuencia, tenemos que forzar la entrada en un carácter, dividirlo en un vector de caracteres y posteriormente convertirlo de nuevo a cualquier tipo numérico.
Pruébalo en línea
fuente