Imprima todos los números lexicográficamente crecientes por debajo de 10000

32

Un número lexicográficamente creciente es un número entero cuyos dígitos están en un orden estrictamente creciente. Imprima todos los números lexicográficamente crecientes por debajo de 10000.

Aquí hay líneas de la salida esperada:

0
1
2
3
4
5
6
7
8
9
12
13
14
15
16
17
18
19
23
24
25
26
27
28
29
34
35
36
37
38
39
45
46
47
48
49
56
57
58
59
67
68
69
78
79
89
123
124
125
126
127
128
129
134
135
136
137
138
139
145
146
147
148
149
156
157
158
159
167
168
169
178
179
189
234
235
236
237
238
239
245
246
247
248
249
256
257
258
259
267
268
269
278
279
289
345
346
347
348
349
356
357
358
359
367
368
369
378
379
389
456
457
458
459
467
468
469
478
479
489
567
568
569
578
579
589
678
679
689
789
1234
1235
1236
1237
1238
1239
1245
1246
1247
1248
1249
1256
1257
1258
1259
1267
1268
1269
1278
1279
1289
1345
1346
1347
1348
1349
1356
1357
1358
1359
1367
1368
1369
1378
1379
1389
1456
1457
1458
1459
1467
1468
1469
1478
1479
1489
1567
1568
1569
1578
1579
1589
1678
1679
1689
1789
2345
2346
2347
2348
2349
2356
2357
2358
2359
2367
2368
2369
2378
2379
2389
2456
2457
2458
2459
2467
2468
2469
2478
2479
2489
2567
2568
2569
2578
2579
2589
2678
2679
2689
2789
3456
3457
3458
3459
3467
3468
3469
3478
3479
3489
3567
3568
3569
3578
3579
3589
3678
3679
3689
3789
4567
4568
4569
4578
4579
4589
4678
4679
4689
4789
5678
5679
5689
5789
6789

Este es un desafío de golf de código! ¡La respuesta más corta gana!

(PS buscando una solución de Python)

Varun Patro
fuente
3
¿Necesitamos imprimirlos en líneas separadas o está bien separado por espacios?
Giuseppe
3
Bienvenido a PPCG! Bonito primer desafío. Para futuros desafíos, puedo recomendar el uso de Sandbox para refinar un desafío y obtener comentarios significativos antes de publicarlo en main.
AdmBorkBork
44
Para ampliar la pregunta de @ Giuseppe, ¿podemos generar una salida separada por comas, espacios, en formato de matriz [0,1,...], etc. o debemos generar cada número en una línea separada?
ETHproductions
10
¿Los números deben estar en un orden específico, o simplemente deben existir todos?
Kamil Drakari
14
@VarunPatro, actualice el desafío para indicar explícitamente cada número en una línea separada (aunque recomendaría contra ese requisito) y asegúrese de informar cualquier solución existente que no lo haga.
Shaggy

Respuestas:

30

Python 2 , 56 bytes

for n in range(9999):
 if eval('<'.join(`n`))**n:print n

Pruébalo en línea!

Convierte cada número como 124en una expresión1<2<4 y lo evalúa para verificar si los dígitos están ordenados,

Se produce un hipo para los números de un dígito que dan una expresión que simplemente es el número en sí. Esto hace 0que se evalúe a un valor de Falsey aunque debería imprimirse. Esto se soluciona con un truco sugerido por Erik the Outgolfer de hacer **n, que le da valor 0**0de n=0verdad y no afecta el valor de verdad de lo contrario.

xnor
fuente
¿Qué hace el `en `n`?
BruceWayne
1
@BruceWayne Toma la representación de cadena. Esto fue eliminado en Python 3.
xnor
55
@BruceWayne Tenga en cuenta que es lo mismo que la repr()función, no la str()función. No siempre son lo mismo. Aquí hay un ejemplo.
mbomb007
1
@ mbomb007 gracias por ese comentario! Hubiera pensado que era str()equivalente.
BruceWayne
2
Podemos manejar el caso 0 con un poco de truco .
xsot
11

Haskell , 50 bytes

unlines[s|s<-show<$>[0..6^5],s==scanl1(max.succ)s]

Pruébalo en línea!

Emite una cadena multilínea. Verificamos que el número saumente usando s==scanl1(max.succ)s, una variante de la verificación de clasificación habituals==scanl1 max s que asegura una clasificación estricta al incrementar cada carácter de dígito antes de tomar el máximo de él y el siguiente dígito.

Ourous guardó un byte al usarlo 6^5como límite superior en lugar de un número de 4 dígitos.

xnor
fuente
8

Jalea , 7 bytes

9ŒPḌḣ⁹Y

Pruébalo en línea!

Cómo funciona

9ŒPḌḣ⁹Y  Main link. No arguments.

9        Set the return value to 9.
 ŒP      Powerset; promote 9 to [1, ..., 9] and generate all subsets.
   Ḍ     Undecimal; map the subsets of digits to the integers they represent.
     ⁹   Yield 256.
    ḣ    Dyadic head; take the first 256 elements of the integer list.
      Y  Separate the result by linefeeds.
Dennis
fuente
2
Estoy tratando de averiguar cómo 0se incluye aquí, pero no conozco a Jelly. ¿Estoy en lo cierto de que el conjunto de poder de Jelly incluye la matriz vacía a la que luego se convierte 0cuando se "descuida"?
Shaggy
1
Sí, eso es exactamente lo que pasa.
Dennis
8

Japt -R, 12 11 8 bytes

L²Ç¶ìüÃð

Pruébalo

L            :100
 ²           :Squared
  Ç          :Map the range [0,L²)
    ì        :  Split to a digit array
     ü       :  For the sake of simplicity*, let's say: Sort & deduplicate
             :  Implicitly rejoin to an integer
   ¶         :  Test for equality with original number
      Ã      :End map
       ð     :Get 0-based indices of truthy elements
             :Implicitly join with newlines and output

* O, para ofrecer una mejor explicación: el ümétodo ordena una matriz y la divide en elementos iguales (por ejemplo, [8,4,8,4].ü() -> [[4,4],[8,8]]) y luego, en lo que parece ser una peculiaridad extraña y, con suerte, no es un error, el ìmétodo, al convertir la matriz nuevamente un número, toma el primer elemento de cada matriz anidada, en lugar de aplanar primero la matriz, que es lo que esperaba cuando probé este truco (por ejemplo, [[4,4],[8,8]].ì() -> 48).

Lanudo
fuente
1
Agradable. Similar a lo que tenía:L²Ç¥ì ü ¬Ãð
Oliver
2
Tengo que decir que ese ütruco que usaron es genial :-) @Oliver
ETHproductions
1
@ Oliver, debe haber publicado eso mientras estaba actualizando; grandes mentes ... :)
Shaggy
@ETHproductions, como la mayoría de las cosas, lo probé por capricho, sorprendido de que funcione.
Shaggy
6

R , 62 49 bytes

`[`=write;0[1];for(i in 1:4)combn(1:9,i)[1,i,,""]

Pruébalo en línea!

Debido a que combnitera a través de su entrada en el orden dado, es fácil crear todos los enteros que aumentan lexicográficamente, imprimiéndolos en orden. writelos imprime cada inúmero de dígitos en líneas de ancho i, cumpliendo perfectamente el requisito de nueva línea también.

Giuseppe
fuente
gran idea explotando combn!
digEmAll
Aliasing extremadamente inteligente!
J.Doe
6

Perl 6 , 25 bytes

[<](.comb)&&.say for ^1e4

-1 byte gracias a nwellnhof

Pruébalo en línea!

.combproduce una lista de los dígitos de cada número y [<]hace una reducción menor que esa lista, equivalente a: digit1 < digit2 <... < digitN .

Sean
fuente
2
[<](.comb)&&.sayguarda un byte.
nwellnhof
Esto es sorprendentemente legible. (Ya conozco un poco de Perl 6, pero aún así ...)
JL
5

Haskell 56 55 bytes

Editar: -1 byte gracias a @Ourous

mapM print$filter(and.(zipWith(<)<*>tail).show)[0..6^5]

Pruébalo en línea!

nimi
fuente
5

PowerShell , 42 40 bytes

0..1e4|?{-join("$_"|% t*y|sort -u)-eq$_}

Pruébalo en línea!

Bucle de 0a 1e4(es decir, 10000). Extraiga aquellos objetos donde |?{...}el número como una cadena $_es -equal al número emitido toCharArra yy luego edite sortcon la -ubandera de nique. En otras palabras, solo números que son iguales a sus cadenas ordenadas y deduplicadas. Cada uno de ellos se deja en la tubería y la salida es implícita.

AdmBorkBork
fuente
4

Pyth , 10 bytes

jiRThc2yS9

Pruébalo en línea!

Cómo funciona

jiRThc2yS9
        S9  Yield [1, 2, 3, 4, 5, 6, 7, 8, 9].
       y    Take all 512 subsets.
     c2     Split the array of subsets into 2 pieces (256 subsets each).
    h       Head; take the first piece.
 iRT        Convert each subset from base 10 to integer.
j           Separate by newlines.
Dennis
fuente
3

J 26 bytes

,.(#~(-:/:~@~.)@":"0)i.1e4

Pruébalo en línea!

explicación

,. (#~ (-: /:~@~.)@":"0) i.1e4
                         i.1e4  NB. list 0 to 9999
                     "0         NB. for each number in the input list
                  @":"0         NB. convert it to a string and
   (#~ (         )              NB. remove any not passing this test:
        -:                      NB. the string of digits matches
              @~.               NB. the nub of the digits (dups removed)
           /:~                  NB. sorted
,.                              NB. ravel items: take the result of all that
                                NB. and turn it into a big column
Jonás
fuente
3

05AB1E (heredado) , 8 bytes

4°ÝD€êû

Pruébalo en línea!

También funciona en la nueva versión de 05AB1E, pero es dolorosamente lento por alguna razón.

¿Cómo?

4 ° ÝD € êà »- Programa completo.
4 ° Ý - Presione [0 ... 10000].
   D € ê - Empuje cada entero en [0 ... 10000] ordenado y deduplicado al mismo tiempo.
      Ã »- Y unir la interacción de las dos listas por nuevas líneas.
Sr. Xcoder
fuente
Buena respuesta. Mejor que el 9 byter que tenía (que solo funciona en el legado).
Kevin Cruijssen
2

Python 2 , 64 61 bytes

lambda:[x for x in range(9999)if sorted(set(`x`))==list(`x`)]

Pruébalo en línea!

Obtiene los caracteres únicos de la representación de cadena del entero, los ordena y compara el resultado con el número original.

Triggernometry
fuente
Puede guardar un byte utilizando range(9999)o cualquier otro número entre 6790 y 9999. Nuestras soluciones son casi idénticas, por cierto :)
DJMcMayhem
@DJMcMayhem Pero entonces no comprobaría TODOS los números por debajo de 10,000 ...: P ¡Gracias! A veces me vuelvo demasiado literal con estos desafíos.
Triggernometry
2

V , 41 bytes

7000ïÎaÛ
Îy$úúP
Ç^¨ä*©±$/d
ÎãlD
爱/d
HO0

Pruébalo en línea!

Hexdump:

00000000: 3730 3030 efce 61db 0ace 7924 fafa 500a  7000..a...y$..P.
00000010: c75e a8e4 2aa9 b124 2f64 0ace e36c 440a  .^..*..$/d...lD.
00000020: e788 b12f 640a 484f 30                   .../d.HO0
DJMcMayhem
fuente
2

Carbón de leña , 19 bytes

ΦEXχ⁴Iι¬Φι∧쬋§ι⊖μλ

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

   χ                Predefined variable 10
  X                 To the power
    ⁴               Literal 4
 E                  Map over implicit range
      ι             Current value
     I              Cast to string
Φ                   Filter over strings where
         ι          Current string
        Φ           Filtered over characters
           μ        Character index (is nonzero)
          ∧         And
                 μ  Character index
                ⊖   Decremented
              §     Indexed into
               ι    Current string
            ¬       Is not
             ‹      Less than
                  λ Current character
       ¬            Results in an empty string
                    Implicitly print matches on separate lines
Neil
fuente
2

Jalea , 13 9 8 bytes

Guardado 5 bytes gracias a @Dennis

9œcⱮ4ẎŻY

Pruébalo en línea!

Explicación

Genera todos los números lexicográficamente crecientes por debajo de 10000 tomando los dígitos [1 ... 9] y encontrando todas las combinaciones de longitud ≤ 4.

9œcⱮ4ẎŻY    Main link. Arguments: none
9           Yield 9.
   Ɱ4       For each n in [1...4]:
 œc           Yield the combinations of the range [1...9] of length n.
     Ẏ      Tighten; dump each of the 4 lists generated into the main list.
      Ż     Prepend a 0 to the list.
       Y    Join on newlines.

Gelatina , 11 10 9 bytes

Guardado un byte gracias a @EriktheOutgolfer

ȷ4Ḷ<ƝẠ$ƇY

Pruébalo en línea!

Explicación

Filtra a través del rango, manteniendo los números que aumentan lexicográficamente.

ȷ4Ḷ<ƝẠ$ƇY    Main link. Arguments: none
ȷ4           Yield 10^4 (10000).
  Ḷ          Generate the range [0...10000).
       Ƈ     Filter; yield only the numbers where this link return a truthy value.
      $        Run these two links and yield the result.
    Ɲ            For each pair of items (digits) in the number:
   <               Check whether the left digit is less than the right digit.
     Ạ           All; check that every comparison yielded true.
               This yields whether the digits are strictly increasing.
        Y    Join the filtered list on newlines.
ETHproducciones
fuente
2

C # (Interactive compilador de Visual C #) , 102 101 ... 73 bytes

-12 y -4 gracias @Dennis!

for(var i=0;i<7e3;i++)if((i+"").Aggregate((a,b)=>a<b?b:':')<':')Print(i);

Pruébalo en línea!

Cada entero de 0 a 7k se probó al convertirlo primero en una cadena. Aprovechando el hecho de que C # trata las cadenas como caracteres enumerables y LINQ, se calcula un agregado para cada carácter enumerable de la siguiente manera:

  • compara el valor acumulado con el personaje actual
  • Si el carácter actual es mayor que la acumulación, devuelva el carácter actual
  • de lo contrario, devolver :que es mayor que9

Si el resultado de esto es menor que :, entonces el número tiene dígitos que aumentan lexicográficamente.

dana
fuente
¿No indica el desafío que se deben imprimir todos los números del 0 al 10000? Estoy bastante seguro de que esto imprime los números 0-7000
Encarnación de la ignorancia
Creo que el número válido más grande es 6789? Esto es menor que 7000, por lo que no tiene que ir más alto.
dana
Oh ya veo. Tócame
Encarnación de la ignorancia
No es tonto en absoluto :) Estoy bastante seguro de que lo tomé prestado de la respuesta de otra persona y me estaba rascando la cabeza por qué lo hicieron.
dana
2

Wolfram Language (Mathematica) , 36 bytes

Después de escribir esto, se aclaró que cada número debe estar en una nueva línea, por lo que +7 bytes para el Print/@.

This method takes advantage of the fact that the Subsets function 1) doesn't replicate any digits and 2) sorts the output by set size and set contents. FromDigits assembles each list of digits.

-1 byte thanks to @Mr.Xcoder

Print/@FromDigits/@Range@9~Subsets~4

Try it online!

Kelly Lowder
fuente
1
Print/@FromDigits/@Range@9~Subsets~4 for 36 bytes.
Mr. Xcoder
Funny, I thought of that and just didn't do it because I thought ~ had higher precedence than @
Kelly Lowder
2

K (ngn/k) / K (oK), 32 30 26 bytes

Solution:

`0:$&&/'1_'>':'" ",'$!9999

Try it online!

Explanation:

`0:$&&/'1_'>':'" ",'$!9999 / the solution
                     !9999 / range 0..9998 (could use !6890)
                    $      / string
               " ",'       / prepend " " to each (lower than "0" in ascii)
            >:'            / greater-than each-previous?
         1_'               / drop first result from each
      &/'                  / max (&) over (/)
    &                      / indices where true
   $                       / convert to string
`0:                        / print to stdout
streetster
fuente
2

JavaScript REPL, 64 bytes

A bit of pub golf so probably far from optimal.

(f=n=>n&&f(n-1)+([...n+``].every(x=>y<(y=x),y=0)?`
`+n:``))(7e3)

Try it online

Yes, doing it without an IIFE would be a few bytes shorter but that throws an overflow error when called, which would normally be fine as we can assume infinite memory for the purposes of code golf but, to me, doesn't seem to be in the spirit of KC challenges.

Shaggy
fuente
I don't get an overflow error without an IIFE.
Spitemaster
Is this a function submission or a full program? If not, you should either count the console.log or relabel your submission as JavaScript REPL.
Dennis
2

C (gcc), 97 89 81 bytes

Thanks to ceilingcat for -8 bytes.

Another -8 thanks to Dennis

g(n){n=!n||n/10%10<n%10&&g(n/10);}f(i){for(i=-1;++i<7e3;g(i)&&printf("%u\n",i));}

Try it online!

gastropner
fuente
81 bytes
Dennis
not gonna update this?
ASCII-only
@ASCII-only Done. Sorry if this oversight upset you.
gastropner
1

Clean, 90 bytes

import StdEnv
Start=(0,[('
',n)\\n<-[1..6^5]|(\l=removeDup l==sort l)[c\\c<-:toString n]])

Try it online!

Οurous
fuente
1

Jelly, 7 bytes

<ƝẠ$⁹#Y

Try it online!

How?

<ƝẠ$⁹#Y - Main Link: no arguments (implicit z=0)
    ⁹   - literal 256
     #  - count up from n=z (0) finding the first 256 for which this is truthy:
   $    -   last two links as a monad:
 Ɲ      -     neighbours (implicitly gets digits of n):
<       -       less than?
  Ạ     -     all truthy? (N.B. yields 1 for an empty list)
      Y - join with newlines
Jonathan Allan
fuente
1

MATLAB, 52 bytes

arrayfun(@(n)disp(n(all(diff(num2str(n))>0))),0:1e4)
Luis Mendo
fuente