In tất cả các số tăng từ vựng dưới 10000


32

Số tăng theo từ vựng là một số nguyên có các chữ số theo thứ tự tăng nghiêm ngặt. In tất cả các số tăng từ vựng dưới 10000.

Dưới đây là các dòng của đầu ra dự kiến:

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

Đây là một thử thách golf mã! Câu trả lời ngắn nhất sẽ thắng!

(PS đang tìm giải pháp trăn)


3
chúng ta cần in chúng trên các dòng riêng biệt hay được phân tách không gian OK?
Giuseppe

3
Chào mừng đến với PPCG! Thử thách đầu tiên tốt đẹp. Đối với các thử thách trong tương lai, tôi có thể khuyên bạn nên sử dụng Hộp cát để tinh chỉnh thử thách và nhận phản hồi có ý nghĩa trước khi đăng lên chính.
admBorkBork

4
Để mở rộng câu hỏi của @ Giuseppe, chúng ta có thể xuất ra được phân tách bằng dấu phẩy, dấu cách, ở định dạng mảng [0,1,...], v.v. hoặc chúng ta phải xuất mỗi số trên một dòng riêng biệt?
Sản xuất ETH

10
Các con số cần phải theo một thứ tự cụ thể, hay chúng chỉ cần tồn tại?
Kamil Drakari

14
@VarunPatro, vui lòng cập nhật thử thách để tuyên bố rõ ràng rằng mỗi số trên một dòng riêng biệt (mặc dù tôi khuyên bạn nên chống lại yêu cầu đó) và đảm bảo thông báo cho bất kỳ giải pháp hiện có nào không làm như vậy.
Xù xì

Câu trả lời:


30

Python 2 , 56 byte

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

Hãy thử trực tuyến!

Chuyển đổi từng số như 124một biểu thức 1<2<4và đánh giá nó để kiểm tra xem các chữ số có được sắp xếp không,

Một trục trặc xảy ra đối với các số có một chữ số cho một biểu thức chỉ là chính số đó. Điều này gây ra 0việc đánh giá giá trị Falsey mặc dù nó phải được in. Điều này được khắc phục bằng một mẹo được đề xuất bởi Erik, Outgolfer thực hiện**n , điều này mang lại giá trị trung 0**0thực n=0và không ảnh hưởng đến giá trị thật.


Làm gì `trong `n`?
BruceWayne

1
@BruceWayne Nó đại diện cho chuỗi. Điều này đã bị xóa trong Python 3.
xnor 16/11/18

5
@BruceWayne Lưu ý rằng nó giống như repr()chức năng, không phải str()chức năng. Chúng không phải lúc nào cũng giống nhau. Đây là một ví dụ.
mbomb007

1
@ mbomb007 cảm ơn vì nhận xét đó! Tôi đã có thể nghĩ rằng nó là str()tương đương.
BruceWayne

2
Chúng tôi có thể xử lý trường hợp 0 ​​với một chút mánh khóe .
xsot


11

Haskell , 50 byte

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

Hãy thử trực tuyến!

Xuất ra một chuỗi nhiều dòng. Chúng tôi kiểm tra xem việc stăng số lượng bằng cách sử dụng s==scanl1(max.succ)s, một biến thể của kiểm tra sắp xếp thông thường s==scanl1 max sđể đảm bảo sắp xếp nghiêm ngặt bằng cách tăng từng ký tự chữ số trước khi lấy tối đa của nó và chữ số tiếp theo.

Ourous đã lưu một byte bằng cách sử dụng 6^5làm giới hạn trên thay cho số có 4 chữ số.


8

Thạch , 7 byte

9ŒPḌḣ⁹Y

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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
Tôi đang cố gắng tìm hiểu làm thế nào để 0được bao gồm ở đây nhưng tôi không biết Jelly. Tôi có đúng rằng bộ quyền hạn của Jelly bao gồm mảng trống sau đó được chuyển đổi thành 0khi "không xác định" không?
Shaggy

1
Vâng, đó chính xác là những gì xảy ra.
Dennis

8

Japt -R, 12 11 8 byte

L²Ç¶ìüÃð

Kiểm tra nó

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

* Hoặc, để đưa ra một lời giải thích tốt hơn: üphương thức sắp xếp một mảng và chia nó thành các phần tử bằng nhau (ví dụ, [8,4,8,4].ü() -> [[4,4],[8,8]]) và sau đó, trong một điều có vẻ là một sự giải quyết kỳ lạ và hy vọng không phải là một lỗi, ìphương thức, khi chuyển đổi mảng trở lại một số, lấy phần tử đầu tiên của mỗi mảng lồng nhau, thay vì làm phẳng mảng đầu tiên, đó là những gì tôi mong đợi khi tôi thử thủ thuật này (ví dụ [[4,4],[8,8]].ì() -> 48:).


1
Tốt đẹp. Tương tự như những gì tôi đã có:L²Ç¥ì ü ¬Ãð
Oliver

2
Tôi phải nói rằng, ümánh khóe mà các bạn đã sử dụng là thiên tài :-)
@Oliver

1
@Oliver, bạn phải đăng nó khi tôi đang cập nhật; những bộ óc vĩ đại ... :)
Shaggy

@ETHproductions, giống như hầu hết mọi thứ, tôi đã thử nó một cách bất ngờ - thật ngạc nhiên khi nó hoạt động.
Xù xì

6

R , 62 49 byte

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

Hãy thử trực tuyến!

Bởi vì combnlặp đi lặp lại thông qua đầu vào của nó theo thứ tự cho trước, thật dễ dàng để tạo ra tất cả các số nguyên tăng theo từ vựng, in chúng theo thứ tự. writein cho chúng mỗi isố kỹ thuật số theo dòng có chiều rộng i, đáp ứng gọn gàng yêu cầu dòng mới.


khai thác ý tưởng tuyệt vời combn!
digEmAll

Bí danh cực kỳ thông minh!
J.Doe

6

Perl 6 , 25 byte

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

-1 byte nhờ nwellnhof

Hãy thử trực tuyến!

.combtạo ra một danh sách các chữ số của mỗi số và [<]thực hiện giảm ít hơn trong danh sách đó, tương đương với: chữ số1 < chữ số 2 <... < chữ sốN .


2
[<](.comb)&&.saytiết kiệm một byte.
nwellnhof

Điều này là đáng ngạc nhiên có thể đọc được. (Tôi đã biết một chút Perl 6, nhưng vẫn ...)
JL


5

PowerShell , 42 40 byte

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

Hãy thử trực tuyến!

Vòng lặp từ 0đến 1e4(nghĩa là 10000). Kéo ra các đối tượng trong đó |?{...}số dưới dạng chuỗi $_-equal với số được đúc toCharArra yvà sau đó sorted với -ucờ nique. Nói cách khác, chỉ các số giống với các chuỗi được sắp xếp và lặp lại của chúng. Mỗi cái còn lại trên đường ống và đầu ra là ẩn.


4

Bình , 10 byte

jiRThc2yS9

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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

Hãy thử trực tuyến!

giải trình

,. (#~ (-: /:~@~.)@":"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 (di sản) , 8 byte

4°ÝD€êû

Hãy thử trực tuyến!

Cũng hoạt động trong phiên bản mới của 05AB1E nhưng rất chậm vì một số lý do.

Làm sao?

4 ° Ý € êà »- Chương trình đầy đủ.
4 ° Ý - Đẩy [0 ... 10000].
   D € ê - Đẩy từng số nguyên trong [0 ... 10000] được sắp xếp và sao chép cùng một lúc.
      Ã »- Và tham gia xen kẽ của hai danh sách theo dòng mới.

Câu trả lời tốt đẹp. Tốt hơn so với 9 byter tôi đã có (chỉ hoạt động trong di sản).
Kevin Cruijssen



2

Python 2 , 64 61 byte

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

Hãy thử trực tuyến!

Lấy các ký tự duy nhất của biểu diễn chuỗi số nguyên, sắp xếp chúng và so sánh kết quả với số ban đầu.


Bạn có thể lưu một byte bằng cách sử dụng range(9999)hoặc bất kỳ số nào khác trong khoảng từ 6790 đến 9999. Các giải pháp của chúng tôi gần như giống hệt BTW :)
DJMcMayhem

@DJMcMayhem Nhưng sau đó nó sẽ không kiểm tra TẤT CẢ các số dưới 10.000 ....: P Cảm ơn! Đôi khi tôi trở nên quá hiểu biết với những thách thức này.
Triggernometry 16/11/18

2

V , 41 byte

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

Hãy thử trực tuyến!

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

Than , 19 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

   χ                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

Thạch , 13 9 8 byte

Đã lưu 5 byte nhờ @Dennis

9œcⱮ4ẎŻY

Hãy thử trực tuyến!

Giải trình

Tạo tất cả các số tăng từ vựng dưới 10000 bằng cách lấy các chữ số [1 ... 9] và tìm tất cả các kết hợp độ dài 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.

Thạch , 11 10 9 byte

Đã lưu một byte nhờ @EriktheOutgolfer

ȷ4Ḷ<ƝẠ$ƇY

Hãy thử trực tuyến!

Giải trình

Lọc qua phạm vi, giữ cho các số đang tăng theo từ vựng.

ȷ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 # (Trình biên dịch tương tác Visual C #) , 102 101 ... 73 byte

-12 -4 cảm ơn @Dennis!

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

Hãy thử trực tuyến!

Mỗi số nguyên từ 0 đến 7k được kiểm tra bằng cách trước tiên chuyển đổi nó thành một chuỗi. Tận dụng thực tế là C # coi các chuỗi là liệt kê ký tự và LINQ, tổng hợp được tính cho mỗi ký tự liệt kê như sau:

  • so sánh giá trị tích lũy với ký tự hiện tại
  • nếu ký tự hiện tại lớn hơn tích lũy, trả về ký tự hiện tại
  • mặt khác trả lại :lớn hơn9

Nếu kết quả của điều này nhỏ hơn :, thì số đó có các chữ số tăng theo từ vựng.


Không phải là thách thức nói rằng tất cả các số từ 0-10000 phải được in? Tôi khá chắc chắn điều này in số 0-7000
Hiện thân của sự thiếu hiểu biết

Tôi tin rằng số hợp lệ lớn nhất là 6789? Điều này ít hơn 7000, vì vậy bạn không cần phải đi cao hơn.
dana

Ồ, tôi hiểu rồi. Đánh lừa tôi
Hiện thân của sự thiếu hiểu biết

Không ngu ngốc chút nào :) Tôi khá chắc chắn rằng tôi đã mượn nó từ câu trả lời của người khác và tôi đã gãi đầu về lý do tại sao họ làm điều đó.
dana

2

Ngôn ngữ Wolfram (Mathicala) , 36 byte

Sau khi tôi viết bài này, nó đã được làm rõ rằng mỗi số phải nằm trên một dòng mới, vì vậy, 7 byte cho Print/@.

Phương pháp này lợi dụng thực tế là Subsetshàm 1) không sao chép bất kỳ chữ số nào và 2) sắp xếp đầu ra theo kích thước được đặt và đặt nội dung. FromDigitstập hợp từng danh sách các chữ số.

-1 byte nhờ @ Mr.Xcoder

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

Hãy thử trực tuyến!


1
Print/@FromDigits/@Range@9~Subsets~4cho 36 byte.
Ông Xcoder

Thật buồn cười, tôi đã nghĩ về điều đó và chỉ không làm điều đó bởi vì tôi nghĩ ~ có quyền ưu tiên cao hơn @
Kelly Lowder

2

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

Dung dịch:

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

Hãy thử trực tuyến!

Giải trình:

`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 byte

Một chút của quán rượu golf có lẽ là xa tối ưu.

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

Dùng thử trực tuyến

Đúng, làm điều đó mà không có IIFE sẽ ngắn hơn vài byte nhưng sẽ gây ra lỗi tràn khi được gọi, điều này thường sẽ ổn vì chúng ta có thể sử dụng bộ nhớ vô hạn cho các mục đích của môn đánh gôn, nhưng đối với tôi, dường như không phải vậy trong tinh thần của những thách thức KC.


Tôi không gặp lỗi tràn mà không có IIFE.
Spitemaster 17/11/18

Đây là một đệ trình chức năng hoặc một chương trình đầy đủ? Nếu không, bạn nên tính console.loghoặc đặt lại tên cho bài đăng của mình dưới dạng JavaScript REPL .
Dennis






1

Thạch , 7 byte

<ƝẠ$⁹#Y

Hãy thử trực tuyến!

Làm sao?

<ƝẠ$⁹#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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.