Роздрукуйте всі лексикографічно збільшувані цифри під 10000


32

Лексикографічно зростаюче число - це ціле число, цифри якого знаходяться в строго зростаючому порядку. Роздрукуйте всі лексикографічно збільшувані цифри під 10000.

Ось рядки очікуваного випуску:

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

Це виклик для гольфу з кодом! Найкоротша відповідь виграє!

(PS шукає рішення пітона)


3
чи потрібно друкувати їх окремими рядками або з пробілом розділено ОК?
Джузеппе

3
Ласкаво просимо до PPCG! Гарний перший виклик. Для майбутніх проблем я можу рекомендувати використовувати « Пісочницю», щоб уточнити виклик та отримати змістовний зворотній зв'язок перед тим, як опублікувати його в основному.
AdmBorkBork

4
Щоб розширити питання @ Giuseppe, чи можемо ми виводити розділені комами, пробілами, у форматі масиву [0,1,...]тощо, чи потрібно виводити кожне число в окремий рядок?
ETHproductions

10
Чи повинні цифри бути в певному порядку, чи вони просто повинні існувати?
Каміль Дракарі

14
@VarunPatro, будь ласка, оновіть виклик, щоб чітко вказати, що кожне число в окремому рядку (хоча я б рекомендував проти цієї вимоги) та обов'язково повідомте про будь-які існуючі рішення, які цього не роблять.
Кудлатий

Відповіді:


30

Python 2 , 56 байт

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

Спробуйте в Інтернеті!

Перетворює кожне число, як-от 124вираз, 1<2<4і оцінює його, щоб перевірити, чи впорядковані цифри,

Гіка відбувається для одноцифрових чисел, даючи вираз, що саме є саме число. Це змушує 0оцінити значення Falsey, навіть якщо воно має бути надруковано. Це фіксується трюк , запропонований Еріком Outgolfer робити **n, що дає truthy значення 0**0для n=0і не впливає на значення істинності інакше.


Що означає `робити в `n`?
BruceWayne

1
@BruceWayne Потрібно представити рядок. Це було знято в Python 3.
xnor

5
@BruceWayne Зауважте, що це те саме, що і repr()функція, а не str()функція. Вони не завжди однакові. Ось приклад.
mbomb007

1
@ mbomb007 дякую за цей коментар! Я б подумав, що це str()рівнозначно.
BruceWayne

2
Ми можемо розібратися з випадком 0 з невеликою хитрістю .
xsot


11

Haskell , 50 байт

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

Спробуйте в Інтернеті!

Виводить рядковий рядок. Ми перевіряємо, чи sзбільшується число, використовуючи s==scanl1(max.succ)sваріант звичайної перевірки сортування, s==scanl1 max sщо забезпечує суворе упорядкування шляхом збільшення кожного знака цифри перед тим, як взяти максимум його та наступної цифри.

Ourous врятував байт, використовуючи 6^5в якості верхньої межі замість чотиризначного числа.


8

Желе , 7 байт

9ŒPḌḣ⁹Y

Спробуйте в Інтернеті!

Як це працює

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
Я намагаюся розібратися, як 0сюди потрапляєш, але я не знаю желе. Чи я правда, що в комплект живлення Jelly входить порожній масив, який потім перетворюється в 0"undecimaled"?
Кудлатий

1
Так, саме так і відбувається.
Денніс

8

Japt -R, 12 11 8 байт

L²Ç¶ìüÃð

Перевірте це

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

* Або, щоб запропонувати краще пояснення: üметод сортує масив і розбиває його на рівні елементи (наприклад, [8,4,8,4].ü() -> [[4,4],[8,8]]), а потім, у тому, що здається дивним вигадкою і, сподіваємось, не помилкою ì, при перетворенні масиву назад в число, займає перший елемент кожного вкладеного масиву, а не спочатку вирівнювання масиву, що я очікував, коли спробував цей трюк (наприклад, [[4,4],[8,8]].ì() -> 48).


1
Приємно. Схожий на те, що я мав:L²Ç¥ì ü ¬Ãð
Олівер

2
Я мушу сказати, що üтрюк , який ви використали, геніальний :-) @Oliver
ETHproductions

1
@Oliver, ви, мабуть, опублікували це, коли я оновлювався; великі уми ... :)
Shaggy

@ETHproductions, як і більшість речей, я спробував це на примху - вражений, що це працює.
Кудлатий

6

R , 62 49 байт

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

Спробуйте в Інтернеті!

Оскільки combnвоно вводиться за допомогою введення в заданому порядку, легко створити всі лексикографічно зростаючі цілі числа, роздруковуючи їх у порядку. writeдрукує їх кожне i-значне число у рядках шириною i, акуратно виконуючи також вимогу нового рядка.


чудова ідея експлуатації combn!
digEmAll

Надзвичайно розумний псевдонім!
J.Doe

6

Perl 6 , 25 байт

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

-1 байт завдяки nwellnhof

Спробуйте в Інтернеті!

.combстворює список цифр кожного числа і [<]робить зменшення менше, ніж у цьому списку, що еквівалентно: цифра1 < цифра2 <... < цифраN .


2
[<](.comb)&&.sayзберігає байт.
nwellnhof

Це дивно читабельно. (Я вже знаю трохи Perl 6, але все ж ...)
JL


5

PowerShell , 42 40 байт

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

Спробуйте в Інтернеті!

Цикл від 0до 1e4(тобто 10000). Витягнути ті об'єкти , де |?{...}число як рядок $_є -eqUAL на номер литого toCharArra , yа потім sortéd з -uNique прапором. Іншими словами, лише числа, які є такими ж, як їх відсортовані та дедуплені рядки. Кожен з них залишається на конвеєрі, а вихід неявний.


4

Pyth , 10 байт

jiRThc2yS9

Спробуйте в Інтернеті!

Як це працює

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 байт

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

Спробуйте в Інтернеті!

пояснення

,. (#~ (-: /:~@~.)@":"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 (спадщина) , 8 байт

4°ÝD€êû

Спробуйте в Інтернеті!

Працює і в новій версії 05AB1E, але болісно повільна чомусь.

Як?

4 ° ÝD € êà »- Повна програма.
4 ° Ý - Натисніть [0 ... 10000].
   D € ê - натисніть на кожне ціле число в [0 ... 10000] відсортованому та дедупльованому одночасно.
      Ã »- І з'єднайте взаємодію двох списків за новими рядками.

Гарна відповідь. Краще, ніж у мене був 9 байт (який працює лише у спадщині).
Kevin Cruijssen



2

Python 2 , 64 61 байт

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

Спробуйте в Інтернеті!

Отримує унікальні символи цілого представлення рядка, сортує їх і порівнює результат з вихідним числом.


Ви можете зберегти байт, використовуючи range(9999)або будь-яке інше число між 6790 і 9999. Наші рішення майже однакові BTW :)
DJMcMayhem

@DJMcMayhem Але тоді він не перевірив ВСІ числа під 10 000 ....: P Дякую! Іноді з цими викликами я буваю занадто буквальним.
Тригернометрія


2

Деревне вугілля , 19 байт

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення:

   χ                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

Желе , 13 9 8 байт

Збережено 5 байт завдяки @Dennis

9œcⱮ4ẎŻY

Спробуйте в Інтернеті!

Пояснення

Створює всі лексикографічно зростаючі числа нижче 10000, беручи цифри [1 ... 9] і знаходячи всі комбінації довжини ≤ 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.

Желе , 11 10 9 байт

Збережено байт завдяки @EriktheOutgolfer

ȷ4Ḷ<ƝẠ$ƇY

Спробуйте в Інтернеті!

Пояснення

Фільтрує через діапазон, зберігаючи числа, які лексикографічно збільшуються.

ȷ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 # (Visual C # Interactive Compiler) , 102 101 ... 73 байт

-12 і -4 спасибі @Dennis!

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

Спробуйте в Інтернеті!

Кожне ціле число від 0 до 7k тестується, попередньо перетворивши його в рядок. Використовуючи той факт, що C # розглядає рядки як перелічувачі символів та LINQ, для кожного символу, що перераховується, обчислюється сукупність:

  • порівняти накопичене значення з поточним символом
  • якщо поточний символ більший за накопичення, поверніть поточний символ
  • інакше повернення, :яке більше, ніж9

Якщо результат цього менший :, то число має лексикографічно зростаючі цифри.


Чи не вказано в виклику, що всі цифри від 0-10000 повинні бути надруковані? Я впевнений, що це друкує цифри 0-7000
Втілення

Я вважаю, найбільше дійсне число 6789? Це менше 7000, тому не потрібно підніматися вище.
дата

О Я бачу. Дурний мене
Втілення Невігластва

Зовсім не дурно :) Я майже впевнений, що я запозичив це з чужої відповіді, і я чухав голову, чому вони це зробили.
дата

2

Мова Вольфрама (Mathematica) , 36 байт

Після того як я написав це, було уточнено, що кожне число повинно бути в новому рядку, тому +7 байт для Print/@ .

Цей метод використовує той факт, що Subsetsфункція 1) не повторює жодних цифр і 2) сортує вихід за розміром і заданим вмістом.FromDigitsзбирає кожен список цифр.

-1 байт завдяки @ Mr.Xcoder

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

Спробуйте в Інтернеті!


1
Print/@FromDigits/@Range@9~Subsets~4на 36 байт.
Містер Xcoder

Смішно, я думав про це і просто не робив цього, бо думав, що ~ має вищий пріоритет ніж @
Келлі Лоудер

2

K (ngn / k) / K (oK) , 32 30 26 байт

Рішення:

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

Спробуйте в Інтернеті!

Пояснення:

`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

JavaScript REPL, 64 байти

Трохи паб-гольфу, напевно, далеко не оптимального.

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

Спробуйте в Інтернеті

Так, зробити це без IIFE було б на кілька байт коротше, але це викликає помилку переповнення при виклику, що, як правило, буде добре, оскільки ми можемо вважати нескінченну пам'ять для цілей коду гольфу, але, на мій погляд, це не здається в дусі викликів KC.


Я не отримую помилку переповнення без IIFE.
Шпітемастер

Це подання функції або повна програма? Якщо ні, то слід порахувати console.logабо відновити свою заявку як JavaScript REPL .
Денніс

2

C (gcc) , 97 89 81 байт

Завдяки стельовій коті на -8 байт.

Ще -8 завдяки Деннісу

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

Спробуйте в Інтернеті!



не збираєтесь оновлювати це?
Лише ASCII

@ ASCII Тільки зроблено. Вибачте, якщо цей нагляд засмутив вас.
гастропнер






Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.