Cetak semua angka yang meningkat secara leksikografis di bawah 10.000

32

Angka yang meningkat secara leksikografis adalah bilangan bulat yang angkanya benar-benar meningkat. Cetak semua angka yang meningkat secara leksikografis di bawah 10.000.

Berikut adalah garis-garis output yang diharapkan:

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

Ini adalah tantangan kode golf! Jawaban terpendek menang!

(PS mencari solusi python)

Varun Patro
sumber
3
apakah kita perlu mencetaknya pada garis yang terpisah atau dipisahkan oleh ruang OK?
Giuseppe
3
Selamat datang di PPCG! Tantangan pertama yang bagus. Untuk tantangan di masa depan, saya dapat merekomendasikan menggunakan Sandbox untuk menyaring tantangan dan mendapatkan umpan balik yang berarti sebelum mempostingnya ke utama.
AdmBorkBork
4
Untuk memperluas pada pertanyaan @ Giuseppe, dapatkah kita mengeluarkan dipisahkan dengan koma, spasi, dalam format array [0,1,...], dll. Atau haruskah kita mengeluarkan setiap angka pada baris yang berbeda?
ETHproduk
10
Apakah angkanya harus dalam urutan tertentu, atau hanya perlu ada semua?
Kamil Drakari
14
@ VarunPatro, harap perbarui tantangan untuk secara eksplisit menyatakan bahwa setiap nomor menggunakan jalur yang berbeda (meskipun saya akan merekomendasikan terhadap persyaratan itu) dan pastikan untuk menginformasikan solusi yang ada yang tidak melakukannya.
Shaggy

Jawaban:

30

Python 2 , 56 byte

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

Cobalah online!

Mengonversi setiap angka seperti 124ekspresi 1<2<4dan mengevaluasinya untuk memeriksa apakah digit diurutkan,

Cegukan terjadi untuk nomor satu digit yang memberikan ekspresi bahwa hanya nomor itu sendiri. Ini menyebabkan 0untuk mengevaluasi ke nilai Falsey meskipun harus dicetak. Ini diperbaiki oleh trik yang disarankan oleh Erik yang Outgolfer lakukan **n, yang memberikan nilai kebenaran 0**0untuk n=0dan tidak mempengaruhi nilai kebenaran sebaliknya.

Tidak
sumber
Apa yang `dilakukan di dalam `n`?
BruceWayne
1
@BruceWayne Dibutuhkan representasi string. Ini dihapus dengan Python 3.
xnor
5
@BruceWayne Perhatikan bahwa ini sama dengan repr()fungsi, bukan str()fungsi. Mereka tidak selalu sama. Ini sebuah contoh.
mbomb007
1
@ mbomb007 terima kasih atas komentar itu! Saya akan berpikir itu str()setara.
BruceWayne
2
Kita dapat menangani 0 case dengan sedikit tipu daya .
xsot
12

Python 2 , 55 byte

i=0
exec"print i\ni+=1\nif eval('<'.join(`i`)):1;"*7000

Cobalah online!

xsot
sumber
11

Haskell , 50 byte

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

Cobalah online!

Menghasilkan string multiline. Kami memeriksa bahwa angka sbertambah dengan menggunakan s==scanl1(max.succ)s, varian dari pemeriksaan pengurutan yang biasa s==scanl1 max syang memastikan pengurutan yang ketat dengan menambah setiap karakter digit sebelum mengambil maksimumnya dan digit berikutnya.

Ourous menyimpan byte dengan menggunakan 6^5sebagai batas atas untuk nomor 4 digit.

Tidak
sumber
8

Jelly , 7 byte

9ŒPḌḣ⁹Y

Cobalah online!

Bagaimana itu bekerja

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
sumber
2
Saya mencoba mencari tahu bagaimana 0disertakan di sini tapi saya tidak tahu Jelly. Apakah saya benar bahwa Jelly's powerset menyertakan larik kosong yang kemudian akan dikonversi 0ketika "tidak ditentukan"?
Shaggy
1
Ya, itulah yang terjadi.
Dennis
8

Japt -R, 12 11 8 byte

L²Ç¶ìüÃð

Menguji

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

* Atau, untuk menawarkan penjelasan yang lebih baik: ümetode mengurutkan array dan membaginya menjadi elemen yang sama (misalnya, [8,4,8,4].ü() -> [[4,4],[8,8]]) dan kemudian, dalam apa yang tampaknya menjadi kekhasan aneh dan mudah-mudahan bukan bug, ìmetode, ketika mengubah array kembali ke sebuah angka, mengambil elemen pertama dari setiap array bersarang, daripada pertama-tama meratakan array, itulah yang saya harapkan ketika saya mencoba trik ini (misalnya, [[4,4],[8,8]].ì() -> 48).

Shaggy
sumber
1
Bagus. Mirip dengan apa yang saya miliki:L²Ç¥ì ü ¬Ãð
Oliver
2
Saya harus mengatakan, ütrik yang Anda gunakan adalah jenius :-) @Oliver
ETHproduksi
1
@Liver, Anda pasti telah mempostingnya saat saya memperbarui; pikiran hebat ... :)
Shaggy
@ ETHproductions, seperti kebanyakan hal, saya mencobanya sambil lalu - kagum itu bekerja.
Shaggy
6

R , 62 49 byte

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

Cobalah online!

Karena combniterasi melalui inputnya dalam urutan yang diberikan, mudah untuk membuat semua bilangan bulat yang meningkat secara leksikografis, mencetaknya secara berurutan. writemencetaknya masing-masing i-digit dalam garis lebar i, dengan rapi memenuhi persyaratan baris baru juga.

Giuseppe
sumber
mengeksploitasi ide bagus combn!
digEmAll
Alias ​​yang sangat pintar!
J.Do
6

Perl 6 , 25 byte

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

-1 byte terima kasih kepada nwellnhof

Cobalah online!

.combmenghasilkan daftar digit masing-masing angka, dan [<]melakukan pengurangan kurang dari pada daftar itu, setara dengan: digit1 < digit2 <... < digitN .

Sean
sumber
2
[<](.comb)&&.saymenghemat satu byte.
nwellnhof
Ini mengejutkan dibaca. (Saya sudah tahu sedikit Perl 6, tapi masih ...)
JL
5

Haskell, 56 55 byte

Sunting: -1 byte berkat @Ourous

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

Cobalah online!

nimi
sumber
5

PowerShell , 42 40 byte

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

Cobalah online!

Loop dari 0ke 1e4(yaitu, 10000). Tarik keluar benda-benda di mana |?{...}jumlah sebagai string $_adalah -equal dengan jumlah pemain toCharArra ydan kemudian sorted dengan-u bendera nique. Dengan kata lain, hanya angka yang sama dengan string yang diurutkan dan dideduplikasi. Masing-masing dibiarkan di jalur pipa dan hasilnya tersirat.

AdmBorkBork
sumber
4

Pyth , 10 byte

jiRThc2yS9

Cobalah online!

Bagaimana itu bekerja

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
sumber
3

J, 26 byte

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

Cobalah online!

penjelasan

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

Common Lisp , 74 72 byte

(dotimes(i 7e3)(format(apply'char<(coerce(format()"~d"i)'list))"~d~%"i))

Cobalah online!

-2 byte terima kasih kepada @Shaggy!

Renzo
sumber
3

05AB1E (lawas) , 8 byte

4°ÝD€êû

Cobalah online!

Bekerja di versi baru 05AB1E juga tetapi sangat lambat untuk beberapa alasan.

Bagaimana?

4 ° ÝD € êà »- Program lengkap.
4 ° Ý - Tekan [0 ... 10000].
   D € ê - Dorong setiap bilangan bulat dalam [0 ... 10000] diurutkan dan dideduplikasi pada saat bersamaan.
      Ã »- Dan bergabunglah dengan persimpangan dua daftar dengan baris baru.
Tuan Xcoder
sumber
Jawaban bagus. Lebih baik daripada 9 byter yang saya miliki (yang hanya bekerja di warisan).
Kevin Cruijssen
2

Python 2 , 64 61 byte

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

Cobalah online!

Mendapat karakter unik dari representasi string integer, mengurutkannya, dan membandingkan hasilnya dengan angka asli.

Triggernometri
sumber
Anda dapat menyimpan byte dengan menggunakan range(9999)atau nomor lain antara 6790 dan 9999. Solusi kami hampir identik BTW :)
DJMcMayhem
@DJMcMayhem Tapi kemudian tidak akan memeriksa SEMUA angka di bawah 10.000 ....: P Terima kasih! Terkadang saya terlalu harfiah dengan tantangan-tantangan ini.
Triggernometri
2

V , 41 byte

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

Cobalah 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
DJMcMayhem
sumber
2

Arang , 19 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

   χ                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
sumber
2

Jelly , 13 9 8 byte

Disimpan 5 byte berkat @Dennis

9œcⱮ4ẎŻY

Cobalah online!

Penjelasan

Menghasilkan semua angka yang meningkat secara leksikografis di bawah 10.000 dengan mengambil digit [1 ... 9] dan menemukan semua kombinasi panjang ≤ 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.

Jelly , 11 10 9 byte

Menyimpan satu byte berkat @EriktheOutgolfer

ȷ4Ḷ<ƝẠ$ƇY

Cobalah online!

Penjelasan

Memfilter rentang, menjaga angka yang meningkat secara leksikografis.

ȷ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.
Produksi ETH
sumber
2

C # (Visual C # Interactive Compiler) , 102 101 ... 73 byte

-12 dan -4 terima kasih @Dennis!

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

Cobalah online!

Setiap integer dari 0 hingga 7k diuji dengan terlebih dahulu mengubahnya menjadi string. Memanfaatkan fakta bahwa C # memperlakukan string sebagai enumerables karakter dan LINQ, agregat dihitung untuk setiap karakter yang dapat dihitung sebagai berikut:

  • bandingkan nilai akumulasi dengan karakter saat ini
  • jika karakter saat ini lebih besar dari akumulasi, kembalikan karakter saat ini
  • jika tidak, kembalikan :yang lebih besar dari9

Jika hasil ini kurang dari :, maka angka tersebut memiliki angka leksikografis yang meningkat.

dana
sumber
Bukankah tantangannya menyatakan bahwa semua angka dari 0-10000 harus dicetak? Saya cukup yakin ini mencetak angka 0-7000
Perwujudan Ketidaktahuan
Saya percaya angka valid terbesar adalah 6789? Ini kurang dari 7000, jadi Anda tidak harus naik lebih tinggi.
dana
Oh begitu. Menipu saya
Perwujudan Ketidaktahuan
Sama sekali tidak bodoh :) Saya cukup yakin saya meminjamnya dari jawaban orang lain dan saya menggaruk-garuk kepala mengapa mereka melakukannya.
dana
2

Bahasa Wolfram (Mathematica) , 36 byte

Setelah saya menulis ini, diklarifikasi bahwa setiap angka harus berada pada baris baru, jadi +7 byte untuk Print/@ .

Metode ini mengambil keuntungan dari kenyataan bahwa Subsetsfungsi 1) tidak mereplikasi digit apa pun dan 2) mengurutkan output dengan mengatur ukuran dan mengatur konten.FromDigitsmerakit setiap daftar digit.

-1 byte terima kasih kepada @ Mr.Xcoder

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

Cobalah online!

Kelly Lowder
sumber
1
Print/@FromDigits/@Range@9~Subsets~4selama 36 byte.
Tn. Xcoder
Lucu, saya memikirkan itu dan tidak melakukannya karena saya pikir ~ memiliki prioritas lebih tinggi daripada @
Kelly Lowder
2

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

Larutan:

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

Cobalah online!

Penjelasan:

`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
sumber
2

JavaScript REPL, 64 byte

Sedikit pub golf jadi mungkin jauh dari optimal.

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

Cobalah online

Ya, melakukannya tanpa IIFE akan menjadi beberapa byte lebih pendek tetapi itu melempar kesalahan meluap ketika dipanggil, yang biasanya akan baik-baik saja karena kita dapat mengasumsikan memori tak terbatas untuk keperluan kode golf tetapi, bagi saya, tampaknya tidak menjadi dalam semangat tantangan KC.

Shaggy
sumber
Saya tidak mendapatkan kesalahan overflow tanpa IIFE.
Spitemaster
Apakah ini pengajuan fungsi atau program lengkap? Jika tidak, Anda harus menghitung console.logatau menandai ulang kiriman Anda sebagai JavaScript REPL .
Dennis
2

C (gcc) , 97 89 81 byte

Berkat ceilingcat untuk -8 byte.

Terima kasih -8 yang lain untuk 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));}

Cobalah online!

gastropner
sumber
81 byte
Dennis
tidak akan memperbarui ini?
ASCII
@ Hanya ASCII Selesai. Maaf jika kekhilafan ini membuat Anda kesal.
gastropner
1

Jelly , 7 byte

<ƝẠ$⁹#Y

Cobalah online!

Bagaimana?

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

MATLAB, 52 byte

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