Drucken Sie alle lexikografisch aufsteigenden Zahlen unter 10000 aus

32

Eine lexikographisch aufsteigende Zahl ist eine Ganzzahl, deren Ziffern in streng aufsteigender Reihenfolge angegeben sind. Drucken Sie alle lexikografisch aufsteigenden Zahlen unter 10000 aus.

Hier sind Zeilen der erwarteten Ausgabe:

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

Dies ist eine Code Golf Challenge! Kürzeste Antwort gewinnt!

(PS auf der Suche nach einer Python-Lösung)

Varun Patro
quelle
3
Müssen wir sie in separaten Zeilen drucken oder ist ein Leerzeichen in Ordnung?
Giuseppe
3
Willkommen bei PPCG! Schöne erste Herausforderung. Für zukünftige Herausforderungen kann ich empfehlen, die Sandbox zu verwenden, um eine Herausforderung zu verfeinern und aussagekräftiges Feedback zu erhalten, bevor Sie sie an main senden.
AdmBorkBork
4
Können wir, um die Frage von @ Giuseppe zu erweitern, durch Kommas, Leerzeichen, im Array-Format [0,1,...]usw. getrennt ausgeben, oder müssen wir jede Zahl in einer separaten Zeile ausgeben?
ETHproductions
10
Müssen die Nummern in einer bestimmten Reihenfolge sein oder müssen sie nur alle existieren?
Kamil Drakari
14
@VarunPatro, bitte aktualisieren Sie die Abfrage, um jede Nummer explizit in einer separaten Zeile anzugeben (obwohl ich dies nicht empfehlen würde), und stellen Sie sicher, dass Sie alle vorhandenen Lösungen informieren, die dies nicht tun.
Shaggy

Antworten:

30

Python 2 , 56 Bytes

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

Probieren Sie es online!

Wandelt jede Zahl wie 124in einen Ausdruck um 1<2<4und wertet ihn aus, um zu prüfen, ob die Ziffern sortiert sind.

Ein Schluckauf passiert bei einstelligen Zahlen, die einen Ausdruck ergeben, der nur die Zahl selbst ist. Dies führt 0dazu, dass ein falscher Wert ausgewertet wird, obwohl er gedruckt werden sollte. Dies wird durch einen Trick von Erik die Outgolfer tun vorgeschlagen festgelegt **n, die truthy Wert gibt 0**0für n=0und wirkt sich nicht auf den Wahrheitswert anders.

xnor
quelle
Was macht der `in `n`?
BruceWayne
1
@BruceWayne Es wird die Zeichenfolgendarstellung verwendet. Dies wurde in Python 3.
16.
5
@BruceWayne Beachten Sie, dass es die gleiche repr()Funktion wie die Funktion ist, nicht die str()Funktion. Sie sind nicht immer gleich. Hier ist ein Beispiel.
mbomb007
1
@ mbomb007 danke für diesen Kommentar! Ich hätte gedacht, dass es str()gleichwertig ist.
BruceWayne
2
Wir können den Fall 0 mit ein wenig Trick behandeln .
Xsot
11

Haskell , 50 Bytes

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

Probieren Sie es online!

Gibt eine mehrzeilige Zeichenfolge aus. Wir überprüfen die sErhöhung der Anzahl anhand s==scanl1(max.succ)seiner Variante der üblichen Sortierbarkeitsprüfungs==scanl1 max s die eine strikte Sortierung durch Inkrementieren jedes sicherstellt, bevor das Maximum davon und die nächste Ziffer genommen werden.

Ourous sparte ein Byte, indem es 6^5anstelle einer 4-stelligen Zahl die Obergrenze verwendete.

xnor
quelle
8

Gelee , 7 Bytes

9ŒPḌḣ⁹Y

Probieren Sie es online!

Wie es funktioniert

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
quelle
2
Ich versuche herauszufinden, wie 0es hier aufgenommen wird, aber ich kenne Jelly nicht. Stimmt es, dass Jellys Powerset das leere Array enthält, das dann konvertiert wird, 0wenn es "undecimaled" ist?
Shaggy
1
Ja, genau das passiert.
Dennis
8

Japt -R, 12 11 8 Bytes

L²Ç¶ìüÃð

Probier es aus

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

* Oder, um eine bessere Erklärung zu bieten: Die üMethode sortiert ein Array und teilt es in gleiche Elemente auf (z. B. [8,4,8,4].ü() -> [[4,4],[8,8]]) und dann, was seltsam und hoffentlich kein Fehler zu sein scheint, die ìMethode, wenn das Array zurück in konvertiert wird Bei einer Zahl wird das erste Element jedes verschachtelten Arrays verwendet, anstatt das Array zuerst zu reduzieren. Dies habe ich erwartet, als ich diesen Trick ausprobiert habe (z [[4,4],[8,8]].ì() -> 48. B. ).

Zottelig
quelle
1
Nett. Ähnlich wie das, was ich hatte:L²Ç¥ì ü ¬Ãð
Oliver
2
Ich muss sagen, dieser üTrick, den ihr verwendet habt, ist genial :-) @Oliver
ETHproductions
1
@ Oliver, du musst das gepostet haben, als ich aktualisiert habe. Großartige Köpfe ... :)
Shaggy
@ETHproductions, wie die meisten Dinge, habe ich es aus einer Laune heraus versucht - erstaunt, dass es funktioniert.
Shaggy
6

R , 62 49 Bytes

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

Probieren Sie es online!

Da combndie Eingabe in der angegebenen Reihenfolge durchlaufen wird, ist es einfach, alle lexikografisch aufsteigenden Ganzzahlen zu erstellen und in der angegebenen Reihenfolge auszudrucken. writedruckt jede izweistellige Zahl in Zeilenbreite aus iund erfüllt damit auch die Zeilenumbruch-Anforderung.

Giuseppe
quelle
tolle idee ausnutzen combn!
digEmAll
Extrem cleveres Aliasing!
J.Doe
6

Perl 6 , 25 Bytes

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

-1 byte dank nwellnhof

Probieren Sie es online!

.combErzeugt eine Liste der Ziffern jeder Zahl und [<]reduziert diese weniger als, entsprechend: digit1 < digit2 <... < digitN .

Sean
quelle
2
[<](.comb)&&.saySpeichert ein Byte.
Nwellnhof
Das ist überraschend gut lesbar. (Ich kenne schon ein wenig Perl 6, aber immer noch ...)
JL
5

Haskell, 56 Bytes

Edit: -1 Byte dank @Ourous

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

Probieren Sie es online!

nimi
quelle
5

Power Shell , 42 bis 40 Byte

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

Probieren Sie es online!

Schleife von 0nach 1e4(dh 10000). Ziehen Sie die Objekte aus , wo |?{...}die Zahl als String $_ist -equal der Anzahl Guss toCharArra yund dann sortmit der ed-u nique Flagge. Mit anderen Worten, nur Zahlen, die den sortierten und deduplizierten Zeichenfolgen entsprechen. Jedes davon verbleibt in der Pipeline und die Ausgabe ist implizit.

AdmBorkBork
quelle
4

Pyth , 10 Bytes

jiRThc2yS9

Probieren Sie es online!

Wie es funktioniert

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

J, 26 Bytes

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

Probieren Sie es online!

Erläuterung

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

Common Lisp , 74 72 Bytes

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

Probieren Sie es online!

-2 Bytes danke an @Shaggy!

Renzo
quelle
3

05AB1E (Legacy) , 8 Byte

4°ÝD€êû

Probieren Sie es online!

Funktioniert auch in der neuen Version von 05AB1E, ist aber aus irgendeinem Grund schmerzhaft langsam.

Wie?

4 ° ÝD € êê »- Volles Programm.
4 ° Ý - [0 ... 10000] drücken.
   D € ê - Schieben Sie jede Ganzzahl gleichzeitig sortiert und dedupliziert in [0 ... 10000].
      Ã »- Und verbinden Sie die beiden Listen durch Zeilenumbrüche.
Mr. Xcoder
quelle
Gute Antwort. Besser als das 9-Byte, das ich hatte (was nur im Legacy funktioniert).
Kevin Cruijssen
2

Python 2 , 64 61 Bytes

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

Probieren Sie es online!

Ruft die eindeutigen Zeichen der Zeichenfolgendarstellung der Ganzzahl ab, sortiert sie und vergleicht das Ergebnis mit der ursprünglichen Zahl.

Triggernometrie
quelle
Sie können ein Byte mit range(9999)oder einer anderen Nummer zwischen 6790 und 9999 speichern . Unsere Lösungen sind im
Übrigen
@DJMcMayhem Aber dann würde es nicht ALLE Zahlen unter 10.000 überprüfen ....: P Danke! Manchmal werde ich mit diesen Herausforderungen zu wörtlich.
Triggernometrie
2

V , 41 Bytes

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

Probieren Sie es 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
quelle
2

Holzkohle , 19 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

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

Jelly , 13 9 8 Bytes

5 Bytes gespart dank @Dennis

9œcⱮ4ẎŻY

Probieren Sie es online!

Erläuterung

Erzeugt alle lexikographisch aufsteigenden Zahlen unter 10000, indem die Ziffern [1 ... 9] genommen und alle Kombinationen mit einer Länge ≤ 4 gefunden werden.

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 Bytes

Dank @EriktheOutgolfer ein Byte gespeichert

ȷ4Ḷ<ƝẠ$ƇY

Probieren Sie es online!

Erläuterung

Filtert durch den Bereich und behält die lexikografisch ansteigenden Zahlen bei.

ȷ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.
ETHproductions
quelle
2

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

-12 und -4 danke @Dennis!

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

Probieren Sie es online!

Jede Ganzzahl von 0 bis 7k wurde getestet, indem sie zuerst in eine Zeichenfolge konvertiert wurde. Unter Ausnutzung der Tatsache, dass C # Zeichenfolgen als Zeichenaufzählungen und LINQ behandelt, wird für jedes aufzählbare Zeichen ein Aggregat wie folgt berechnet:

  • Vergleichen Sie den akkumulierten Wert mit dem aktuellen Zeichen
  • Wenn das aktuelle Zeichen größer als die Ansammlung ist, geben Sie das aktuelle Zeichen zurück
  • sonst return :was größer ist als9

Wenn das Ergebnis kleiner als ist :, hat die Zahl lexikographisch ansteigende Ziffern.

Dana
quelle
Gibt die Aufforderung nicht an, dass alle Zahlen von 0-10000 gedruckt werden müssen? Ich bin mir ziemlich sicher, dass dies die Zahlen 0-7000
Verkörperung der Ignoranz
Ich glaube die größte gültige Nummer ist 6789? Dies ist weniger als 7000, so dass Sie nicht höher gehen müssen.
Dana
Oh, ich verstehe. Verrückt nach mir
Verkörperung der Ignoranz
Gar nicht dumm :) Ich bin mir ziemlich sicher, dass ich es mir von einer anderen Antwort geliehen habe und mir den Kopf zerkratzt habe, warum sie es getan haben.
Dana
2

Wolfram Language (Mathematica) , 36 Byte

Nachdem ich dies geschrieben hatte, wurde klargestellt, dass jede Nummer in einer neuen Zeile stehen muss, also +7 Bytes für die Print/@.

Diese Methode nutzt die Tatsache, dass die SubsetsFunktion 1) keine Ziffern repliziert und 2) die Ausgabe nach eingestellter Größe und eingestelltem Inhalt sortiert.FromDigitsstellt jede Ziffernliste zusammen.

-1 Byte dank @ Mr.Xcoder

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

Probieren Sie es online!

Kelly Lowder
quelle
1
Print/@FromDigits/@Range@9~Subsets~4für 36 Bytes.
Mr. Xcoder
Komisch, ich habe darüber nachgedacht und es einfach nicht getan, weil ich dachte, ~ hätte eine höhere Priorität als @
Kelly Lowder
2

K (NGN / K) / K (OK) , 32 30 26 Bytes

Lösung:

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

Probieren Sie es online!

Erläuterung:

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

JavaScript REPL, 64 Bytes

Ein bisschen Kneipengolf also wohl alles andere als optimal.

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

Probieren Sie es online aus

Ja, es ohne IIFE zu machen, wäre ein paar Bytes kürzer, aber das führt beim Aufruf zu einem Überlauffehler, was normalerweise in Ordnung ist, da wir für die Zwecke des Codegolfs einen unendlichen Speicher annehmen können, aber für mich nicht zu sein scheint im Geiste der KC Herausforderungen.

Zottelig
quelle
Ohne IIFE bekomme ich keinen Überlauffehler.
Spitemaster
Handelt es sich um eine Funktionsübermittlung oder ein vollständiges Programm? Wenn nicht, sollten Sie entweder das JavaScript REPLconsole.log als Ihren Beitrag zählen oder ihn neu kennzeichnen .
Dennis
2

C (GCC) , 97 89 81 Bytes

Vielen Dank an Ceilingcat für -8 Bytes.

Nochmals -8 danke an 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));}

Probieren Sie es online!

Gastropner
quelle
81 Bytes
Dennis
Wird das nicht aktualisiert?
Nur ASCII
@ Nur ASCII Fertig. Tut mir leid, wenn Sie dieses Versehen verärgert hat.
Gastropner
1

Gelee , 7 Bytes

<ƝẠ$⁹#Y

Probieren Sie es online!

Wie?

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

MATLAB, 52 Bytes

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