Wydrukuj wszystkie rosnące leksykograficznie liczby poniżej 10000

32

Liczba leksykograficznie rosnąca jest liczbą całkowitą, której cyfry są w ściśle rosnącej kolejności. Wydrukuj wszystkie rosnące leksykograficznie liczby poniżej 10000.

Oto wiersze oczekiwanego wyniku:

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

To wyzwanie dla golfa! Najkrótsza odpowiedź wygrywa!

(PS szuka rozwiązania w języku Python)

Varun Patro
źródło
3
czy musimy je wydrukować w osobnych wierszach, czy też separacja spacji jest OK?
Giuseppe,
3
Witamy w PPCG! Ładne pierwsze wyzwanie. W przypadku przyszłych wyzwań mogę polecić użycie piaskownicy, aby ulepszyć wyzwanie i uzyskać znaczącą informację zwrotną przed opublikowaniem go na głównej.
AdmBorkBork
4
Aby rozwinąć pytanie @ Giuseppe, czy możemy wypisywać dane oddzielone przecinkami, spacjami, w formacie tablicy [0,1,...]itp., Czy też musimy wypisywać każdą liczbę w osobnym wierszu?
ETHprodukcje
10
Czy liczby muszą być w określonej kolejności, czy po prostu muszą istnieć?
Kamil Drakari
14
@ VarunPatro, proszę zaktualizować wyzwanie, aby jednoznacznie stwierdzić, że każdy numer w osobnym wierszu (chociaż odradzam to wymaganie) i upewnij się, że poinformował o wszelkich istniejących rozwiązaniach, które tego nie robią.
Kudłaty

Odpowiedzi:

30

Python 2 , 56 bajtów

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

Wypróbuj online!

Konwertuje każdą liczbę jak 124na wyrażenie 1<2<4i ocenia je, aby sprawdzić, czy cyfry są posortowane,

Czkawka występuje w przypadku liczb jednocyfrowych, co daje wyrażenie, które jest samą liczbą. Powoduje 0to oszacowanie wartości Falsey, nawet jeśli powinna zostać wydrukowana. To jest ustalana przez trick sugerowanym przez Eryka Outgolfer robić **n, co daje wartość truthy 0**0za n=0i nie ma wpływu na wartość logiczną inaczej.

xnor
źródło
Co to `robi `n`?
BruceWayne
1
@BruceWayne Bierze reprezentację ciągu. Zostało to usunięte w Pythonie 3.
xnor
5
@BruceWayne Pamiętaj, że to samo co repr()funkcja, a nie str()funkcja. Nie zawsze są takie same. Oto przykład.
mbomb007
1
@ mbomb007 dzięki za ten komentarz! Myślałbym, że to str()równoważne.
BruceWayne
2
Możemy poradzić sobie z przypadkiem 0 z odrobiną oszustwa .
xsot
11

Haskell , 50 bajtów

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

Wypróbuj online!

Wysyła ciąg multilinii. Sprawdzamy, czy liczba srośnie s==scanl1(max.succ)s, wariant zwykłego sprawdzania sortowania, s==scanl1 max sktóry zapewnia ścisłe sortowanie, zwiększając każdy znak cyfry przed pobraniem jej maksimum i następnej cyfry.

Ourous uratował bajt, używając 6^5jako górnej granicy zamiast 4-cyfrowej liczby.

xnor
źródło
8

Galaretka , 7 bajtów

9ŒPḌḣ⁹Y

Wypróbuj online!

Jak to działa

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
źródło
2
Próbuję dowiedzieć się, jak 0się tu włączyć, ale nie znam Jelly. Czy mam rację, że zestaw zasilający Jelly zawiera pustą tablicę, która następnie jest konwertowana na 0„nieokreśloną”?
Shaggy
1
Tak, dokładnie tak się dzieje.
Dennis,
8

Japt -R, 12 11 8 bajtów

L²Ç¶ìüÃð

Sprawdź to

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

* Lub, aby zaoferować lepsze wyjaśnienie: ümetoda sortuje tablicę i dzieli ją na równe elementy (np. [8,4,8,4].ü() -> [[4,4],[8,8]]), A następnie, w czymś, co wydaje się dziwnym dziwactwem i mam nadzieję, że nie jest błędem, ìmetoda, przy konwersji tablicy z powrotem na liczba, bierze pierwszy element z każdej zagnieżdżonej tablicy, zamiast spłaszczać tablicę, czego się spodziewałem po wypróbowaniu tej sztuczki (np [[4,4],[8,8]].ì() -> 48.).

Kudłaty
źródło
1
Miły. Podobnie do tego, co miałem:L²Ç¥ì ü ¬Ãð
Oliver
2
Muszę powiedzieć, że üsztuczka, której użyliście, jest genialna :-) @Oliver
ETHproductions
1
@Oliver, musiałeś to opublikować podczas aktualizacji; wielkie umysły ... :)
Kudłaty
@ETHproductions, jak większość rzeczy, wypróbowałem to na kaprysu - zdumiony, że działa.
Shaggy
6

R , 62 49 bajtów

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

Wypróbuj online!

Ponieważ combniteruje po danych wejściowych w podanej kolejności, łatwo jest utworzyć wszystkie rosnące leksykograficznie liczby całkowite, drukując je w kolejności. writewypisuje każdą icyfrę cyfr w liniach szerokości i, starannie spełniając również wymagania nowej linii.

Giuseppe
źródło
świetny pomysł do wykorzystania combn!
digEmAll
Niezwykle sprytne aliasing!
J.Doe,
6

Perl 6 , 25 bajtów

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

-1 bajt dzięki nwellnhof

Wypróbuj online!

.combtworzy listę cyfr każdego numeru, a [<]nie mniej niż redukcja na tej liście, co odpowiada: digit1 < digit2 <... < digitN .

Sean
źródło
2
[<](.comb)&&.sayzapisuje bajt.
nwellnhof,
Jest to zaskakująco czytelne. (Znam już trochę Perla 6, ale nadal ...)
JL
5

Haskell, 56 55 bajtów

Edycja: -1 bajt dzięki @Ourous

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

Wypróbuj online!

nimi
źródło
5

PowerShell , 42 40 bajtów

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

Wypróbuj online!

Pętla od 0do 1e4(tj 10000.). Wyciągnij te obiekty, gdzie |?{...}numer jako ciąg $_jest -eqseksualnego na numer odlewu toCharArra ya następnie sorted z -unique flagi. Innymi słowy, tylko liczby, które są takie same jak ich posortowane i deduplikowane ciągi. Każdy z nich pozostaje w potoku, a dane wyjściowe są niejawne.

AdmBorkBork
źródło
4

Pyth , 10 bajtów

jiRThc2yS9

Wypróbuj online!

Jak to działa

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
źródło
3

J, 26 bajtów

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

Wypróbuj online!

wyjaśnienie

,. (#~ (-: /:~@~.)@":"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
Jonasz
źródło
3

Common Lisp , 74 72 bajty

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

Wypróbuj online!

-2 bajty dzięki @Shaggy!

Renzo
źródło
3

05AB1E (starsza wersja) , 8 bajtów

4°ÝD€êû

Wypróbuj online!

Działa również w nowej wersji 05AB1E, ale z jakiegoś powodu jest boleśnie powolny.

W jaki sposób?

4 ° ÝD € êà »- Pełny program.
4 ° Ý - Naciśnij [0 ... 10000].
   D € ê - Wciśnij każdą liczbę całkowitą w [0 ... 10000] posortowane i deduplikowane jednocześnie.
      Ã »- Dołącz do interection dwóch list przez nowe linie.
Pan Xcoder
źródło
Niezła odpowiedź. Lepsze niż 9 bajtów, które miałem (co działa tylko w starszych wersjach ).
Kevin Cruijssen
2

Python 2 , 64 61 bajtów

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

Wypróbuj online!

Pobiera unikalne znaki reprezentujące ciąg liczb całkowitych, sortuje je i porównuje wynik z liczbą oryginalną.

Triggernometria
źródło
Możesz zapisać bajt, używając range(9999)dowolnego innego numeru od 6790 do 9999. Nasze rozwiązania są prawie identyczne BTW :)
DJMcMayhem
@DJMcMayhem Ale to nie sprawdziłoby WSZYSTKICH liczb poniżej 10 000 ....: P Dzięki! Czasami podchodzę zbyt dosłownie do tych wyzwań.
Triggernometry
2

V , 41 bajtów

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

Wypróbuj 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
źródło
2

Węgiel drzewny , 19 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

   χ                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
źródło
2

Galaretka , 13 9 8 bajtów

Zaoszczędź 5 bajtów dzięki @Dennis

9œcⱮ4ẎŻY

Wypróbuj online!

Wyjaśnienie

Generuje wszystkie liczby rosnące leksykograficznie poniżej 10000, biorąc cyfry [1 ... 9] i znajdując wszystkie kombinacje długości ≤ 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.

Galaretka , 11 10 9 bajtów

Zapisano bajt dzięki @EriktheOutgolfer

ȷ4Ḷ<ƝẠ$ƇY

Wypróbuj online!

Wyjaśnienie

Filtruje przez zakres, utrzymując liczby, które rosną leksykograficznie.

ȷ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.
ETHprodukcje
źródło
2

C # (interaktywny kompilator Visual C #) , 102 101 ... 73 bajty

-12 i -4 dzięki @Dennis!

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

Wypróbuj online!

Każda liczba całkowita od 0 do 7k testowana przez konwersję najpierw na ciąg. Wykorzystując fakt, że C # traktuje ciągi znaków jako wyliczalne znaki i LINQ, agregacja jest obliczana dla każdego wyliczalnego znaku w następujący sposób:

  • porównaj skumulowaną wartość z bieżącym znakiem
  • jeśli bieżący znak jest większy niż akumulacja, zwróć bieżący znak
  • w przeciwnym razie zwróci wartość :większą niż9

Jeśli wynik tego jest mniejszy niż :, liczba ma leksykograficznie rosnące cyfry.

dana
źródło
Czy wyzwanie nie stanowi, że wszystkie liczby od 0-10000 muszą zostać wydrukowane? Jestem prawie pewien, że wypisuje cyfry 0–7000
of Ignorance
Uważam, że największa poprawna liczba to 6789? To mniej niż 7000, więc nie musisz iść wyżej.
dana
Rozumiem. Głupiec mnie
ucieleśnienie ignorancji
Wcale nie głupie :) Jestem pewien, że pożyczyłem to od odpowiedzi kogoś innego i drapałem się po głowie, dlaczego to zrobili.
dana
2

Wolfram Language (Mathematica) , 36 bajtów

Po tym, jak to napisałem, wyjaśniono, że każda liczba musi znajdować się w nowej linii, więc +7 bajtów dla Print/@.

Ta metoda wykorzystuje fakt, że Subsetsfunkcja 1) nie powiela żadnych cyfr, a 2) sortuje dane wyjściowe według ustawionego rozmiaru i ustawionej zawartości. FromDigitszestawia każdą listę cyfr.

-1 bajt dzięki @ Mr.Xcoder

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

Wypróbuj online!

Kelly Lowder
źródło
1
Print/@FromDigits/@Range@9~Subsets~4przez 36 bajtów.
Pan Xcoder,
Zabawne, myślałem o tym i po prostu tego nie zrobiłem, ponieważ myślałem, że ~ ma wyższy priorytet niż @
Kelly Lowder
2

K (ngn / k) / K (oK) , 32 30 26 bajtów

Rozwiązanie:

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

Wypróbuj online!

Wyjaśnienie:

`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
źródło
2

JavaScript REPL, 64 bajty

Trochę golfa w pubie jak na razie dalekie od optymalnego.

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

Wypróbuj online

Tak, zrobienie tego bez IIFE byłoby kilka bajtów krótsze, ale wywołuje to błąd przepełnienia po wywołaniu, co normalnie byłoby w porządku, ponieważ możemy założyć nieskończoną pamięć dla celów golfa, ale moim zdaniem nie wydaje się w duchu wyzwań KC.

Kudłaty
źródło
Nie dostaję błędu przepełnienia bez IIFE.
Spitemaster,
Czy jest to przesłanie funkcji czy pełny program? Jeśli nie, należy policzyć console.loglub ponownie oznaczyć zgłoszenie jako JavaScript REPL .
Dennis
2

C (gcc) , 97 89 81 bajtów

Dzięki pułapowi cat na 8 bajtów.

Kolejne -8 dzięki Dennisowi

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));}

Wypróbuj online!

gastropner
źródło
81 bajtów
Dennis
nie zaktualizujesz tego?
Tylko ASCII,
@ Tylko ASCII Gotowe. Przepraszam, jeśli ten nadzór cię zdenerwował.
gastropner
1

Galaretka , 7 bajtów

<ƝẠ$⁹#Y

Wypróbuj online!

W jaki sposób?

<ƝẠ$⁹#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
źródło
1

MATLAB, 52 bajty

arrayfun(@(n)disp(n(all(diff(num2str(n))>0))),0:1e4)
Luis Mendo
źródło