Stampa tutti i numeri che aumentano lessicograficamente meno di 10000


32

Un numero in aumento lessicografico è un numero intero le cui cifre sono in ordine strettamente crescente. Stampa tutti i numeri che aumentano lessicograficamente meno di 10000.

Ecco le righe dell'output previsto:

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

Questa è una sfida di golf di codice! Vince la risposta più breve!

(PS alla ricerca di una soluzione Python)


3
dobbiamo stamparli su righe separate o lo spazio separato è OK?
Giuseppe,

3
Benvenuti in PPCG! Bella prima sfida. Per le sfide future, posso consigliare di utilizzare Sandbox per perfezionare una sfida e ottenere un feedback significativo prima di pubblicarla in main.
AdmBorkBork,

4
Per espandere la domanda di @ Giuseppe, possiamo generare output separati da virgole, spazi, in formato array [0,1,...], ecc. O dobbiamo generare ciascun numero su una riga separata?
ETHproductions

10
I numeri devono essere in un ordine specifico o devono semplicemente esistere tutti?
Kamil Drakari,

14
@VarunPatro, si prega di aggiornare la sfida per dichiarare esplicitamente che ciascun numero su una riga separata (anche se raccomanderei contro tale requisito) e assicurarsi di informare eventuali soluzioni esistenti che non lo fanno.
Shaggy,

Risposte:


30

Python 2 , 56 byte

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

Provalo online!

Converte ogni numero come 124in un'espressione 1<2<4e lo valuta per verificare se le cifre sono ordinate,

Si verifica un singhiozzo per i numeri a una cifra che danno un'espressione che è solo il numero stesso. Questo fa sì 0che valuti un valore Falsey anche se dovrebbe essere stampato. Questo è fissato da un trucco suggerito da Erik l'Outgolfer di fare **n, che dà un valore truthy 0**0per n=0e non influenza il valore di verità altrimenti.


Che cosa il `fare `n`?
BruceWayne,

1
@BruceWayne Prende la rappresentazione di stringa. Questo è stato rimosso in Python 3.
xnor

5
@BruceWayne Nota che è uguale al repr() funzione, non alla str()funzione. Non sono sempre gli stessi. Ecco un esempio
mbomb007,

1
@ mbomb007 grazie per quel commento! Avrei pensato che fosse str()equivalente.
BruceWayne,

2
Siamo in grado di gestire il caso 0 con un po 'di inganno .
xsot,


11

Haskell , 50 byte

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

Provalo online!

Emette una stringa multilinea. Controlliamo che il numero saumenti usando s==scanl1(max.succ)s, una variante del solito controllo di ordinamento s==scanl1 max sche garantisce una rigorosa ordinamento incrementando ogni carattere di cifra prima di prendere il massimo di esso e la cifra successiva.

Ourous ha salvato un byte usando 6^5come limite superiore al posto di un numero di 4 cifre.


8

Gelatina , 7 byte

9ŒPḌḣ⁹Y

Provalo online!

Come funziona

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.

2
Sto cercando di capire come 0viene incluso qui ma non conosco Jelly. Sono corretto nel fatto che il powerset di Jelly includa l'array vuoto che viene convertito in 0"non decimale"?
Shaggy,

1
Sì, è esattamente quello che succede.
Dennis,

8

Japt -R, 12 11 8 byte

L²Ç¶ìüÃð

Provalo

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

* Oppure, per offrire una spiegazione migliore: il ümetodo ordina un array e lo divide in elementi uguali (ad esempio, [8,4,8,4].ü() -> [[4,4],[8,8]]) e quindi, in quello che sembra essere uno strano bizzarro e, si spera, non un bug, il ìmetodo, quando si converte l'array in un numero, accetta il primo elemento di ogni array nidificato, anziché appiattire prima l'array, che è quello che mi aspettavo quando ho provato questo trucco (ad es [[4,4],[8,8]].ì() -> 48.).


1
Bello. Simile a quello che avevo:L²Ç¥ì ü ¬Ãð
Oliver,

2
Devo dire che il ütrucco che avete usato è geniale :-) @Oliver
ETHproductions

1
@Oliver, devi averlo pubblicato mentre stavo aggiornando; grandi menti ... :)
Shaggy,

@ETHproductions, come la maggior parte delle cose, l'ho provato per un capriccio - stupito che funzioni.
Shaggy,

6

R , 62 49 byte

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

Provalo online!

Dato che combnscorre attraverso il suo input nell'ordine dato, è facile creare tutti gli interi che aumentano lessicograficamente, stampandoli in ordine. writeli stampa ogni inumero di cifra in righe di larghezza i, soddisfacendo perfettamente anche il requisito newline.


ottima idea da sfruttare combn!
digEmAll

Aliasing estremamente intelligente!
J.Doe,

6

Perl 6 , 25 byte

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

-1 byte grazie a nwellnhof

Provalo online!

.combproduce un elenco delle cifre di ciascun numero e [<]fa una riduzione inferiore a quella lista, equivalente a: digit1 < digit2 <... < digitN .


2
[<](.comb)&&.saysalva un byte.
nwellnhof,

Questo è sorprendentemente leggibile. (Conosco già un po 'di Perl 6, ma comunque ...)
JL


5

PowerShell , 42 40 byte

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

Provalo online!

Passa da 0a 1e4(cioè, 10000). Estrarre quegli oggetti in cui |?{...}il numero come stringa $_è uguale -eqal numero cast di toCharArra ye quindi editato sortcon il -uflag nique. In altre parole, solo numeri uguali alle stringhe ordinate e deduplicate. Ognuno di questi viene lasciato in cantiere e l'output è implicito.


4

Pyth , 10 byte

jiRThc2yS9

Provalo online!

Come funziona

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.

3

J, 26 byte

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

Provalo online!

spiegazione

,. (#~ (-: /:~@~.)@":"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


3

05AB1E (legacy) , 8 byte

4°ÝD€êû

Provalo online!

Funziona anche con la nuova versione di 05AB1E ma è dolorosamente lento per qualche motivo.

Come?

4 ° ÝD € êà »- Programma completo.
4 ° Ý - Premere [0 ... 10000].
   D € ê - Inserisci ciascun numero intero in [0 ... 10000] ordinato e deduplicato allo stesso tempo.
      Ã »- Unisciti all'intersezione delle due liste con le nuove righe.

Bella risposta. Meglio del 9 byter che avevo (che funziona solo in eredità).
Kevin Cruijssen,



2

Python 2 , 64 61 byte

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

Provalo online!

Ottiene i caratteri univoci della rappresentazione di stringa dell'intero, li ordina e confronta il risultato con il numero originale.


Puoi salvare un byte utilizzando range(9999)o qualsiasi altro numero compreso tra 6790 e 9999. Le nostre soluzioni sono quasi identiche BTW :)
DJMcMayhem

@DJMcMayhem Ma poi non controllerebbe TUTTI i numeri inferiori a 10.000 ....: P Grazie! A volte divento troppo letterale con queste sfide.
Triggernometria

2

V , 41 byte

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

Provalo online!

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

2

Carbone , 19 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

   χ                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

2

Jelly , 13 9 8 byte

5 byte salvati grazie a @Dennis

9œcⱮ4ẎŻY

Provalo online!

Spiegazione

Genera tutti i numeri che aumentano lessicograficamente al di sotto di 10000 prendendo le cifre [1 ... 9] e trovando tutte le combinazioni di lunghezza ≤ 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 byte

Salvataggio di un byte grazie a @EriktheOutgolfer

ȷ4Ḷ<ƝẠ$ƇY

Provalo online!

Spiegazione

Filtra attraverso l'intervallo, mantenendo i numeri che stanno aumentando lessicograficamente.

ȷ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.

2

C # (compilatore interattivo Visual C #) , 102 101 ... 73 byte

-12 e -4 grazie @Dennis!

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

Provalo online!

Ogni numero intero compreso tra 0 e 7k è stato testato convertendolo prima in una stringa. Sfruttando il fatto che C # tratta le stringhe come enumerabili caratteri e LINQ, viene calcolato un aggregato per ogni carattere enumerabile come segue:

  • confrontare il valore accumulato con il carattere corrente
  • se il personaggio corrente è maggiore dell'accumulazione, restituisce il personaggio corrente
  • altrimenti restituisce :che è maggiore di9

Se il risultato è inferiore a :, il numero ha cifre che aumentano lessicograficamente.


La sfida non afferma che tutti i numeri da 0 a 10000 devono essere stampati? Sono abbastanza sicuro che questo stampa i numeri 0-7000
Incarnazione dell'ignoranza il

Credo che il maggior numero valido sia 6789? Questo è inferiore a 7000, quindi non devi andare più in alto.
dana,

Oh, capisco. Foolish me
Embodiment of Ignorance

Non è affatto sciocco :) Sono abbastanza sicuro di averlo preso in prestito dalla risposta di qualcun altro e mi stavo grattando la testa sul perché l'hanno fatto.
dana,

2

Wolfram Language (Mathematica) , 36 byte

Dopo che ho scritto questo, è stato chiarito che ogni numero deve essere su una nuova riga, quindi +7 byte per il Print/@ .

Questo metodo sfrutta il fatto che la Subsetsfunzione 1) non replica alcuna cifra e 2) ordina l'output in base alle dimensioni e ai contenuti impostati. FromDigitsassembla ogni elenco di cifre.

-1 byte grazie a @ Mr.Xcoder

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

Provalo online!


1
Print/@FromDigits/@Range@9~Subsets~4per 36 byte.
Mr. Xcoder,

Divertente, ci ho pensato e non l'ho fatto perché pensavo che ~ avesse una precedenza maggiore rispetto a @
Kelly Lowder,

2

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

Soluzione:

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

Provalo online!

Spiegazione:

`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

2

REPL JavaScript, 64 byte

Un po 'di pub golf così probabilmente tutt'altro che ottimale.

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

Provalo online

Sì, farlo senza un IIFE sarebbe più corto di qualche byte ma ciò genera un errore di overflow quando viene chiamato, il che andrebbe normalmente bene dato che possiamo assumere memoria infinita ai fini del code golf ma, per me, non sembra essere nello spirito delle sfide del KC.


Non ottengo un errore di overflow senza un IIFE.
Spitemaster,

Si tratta di un invio di una funzione o di un programma completo? In caso contrario, è necessario conteggiare console.logo rietichettare l'invio come REPL JavaScript .
Dennis,






1

Gelatina , 7 byte

<ƝẠ$⁹#Y

Provalo online!

Come?

<ƝẠ$⁹#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

1

MATLAB, 52 byte

arrayfun(@(n)disp(n(all(diff(num2str(n))>0))),0:1e4)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.