พิมพ์ตัวเลขที่เพิ่มขึ้นตามพจนานุกรมทั้งหมดใต้ 10,000


32

ตัวเลขที่เพิ่มขึ้นของพจนานุกรมคือจำนวนเต็มซึ่งตัวเลขอยู่ในลำดับที่เพิ่มขึ้นอย่างเคร่งครัด พิมพ์ตัวเลขที่เพิ่มขึ้นตามพจนานุกรมทั้งหมดใต้ 10,000

นี่คือบรรทัดของเอาต์พุตที่คาดไว้:

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
เราจำเป็นต้องพิมพ์มันออกมาเป็นเส้นแยกหรือไม่ก็เว้นวรรคด้วยกัน?
Giuseppe

3
ยินดีต้อนรับสู่ PPCG! ความท้าทายแรกที่ดี สำหรับความท้าทายในอนาคตฉันสามารถแนะนำให้ใช้Sandboxเพื่อปรับแต่งความท้าทายและรับข้อเสนอแนะที่มีความหมายก่อนโพสต์ไว้ที่หน้าหลัก
AdmBorkBork

4
หากต้องการขยายคำถามของ @ Giuseppe เราสามารถส่งออกโดยคั่นด้วยเครื่องหมายจุลภาคช่องว่างในรูปแบบอาร์เรย์[0,1,...]ฯลฯ หรือเราต้องส่งออกแต่ละหมายเลขในบรรทัดแยกต่างหากหรือไม่
ETHproductions

10
ตัวเลขจำเป็นต้องอยู่ในลำดับที่เฉพาะเจาะจงหรือพวกเขาเพียงแค่ต้องมีอยู่ทั้งหมด?
Kamil Drakari

14
@VarunPatro โปรดอัปเดตความท้าทายเพื่อระบุอย่างชัดเจนว่าแต่ละหมายเลขโดยแยกบรรทัด (แม้ว่าฉันจะแนะนำตามข้อกำหนดนั้น) และตรวจสอบให้แน่ใจว่าได้แจ้งโซลูชั่นที่มีอยู่ที่ไม่ได้ทำไว้
Shaggy

คำตอบ:


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เป็นขอบเขตบนแทนที่ตัวเลข 4 หลัก


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ไหมว่าชุดพลังของเจลลี่นั้นรวมอาเรย์ที่ว่างเปล่าซึ่งจะถูกแปลงเป็น"ไม่มีค่า"?
Shaggy

1
ใช่นั่นคือสิ่งที่เกิดขึ้น
Dennis

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 เหมือนกับสิ่งส่วนใหญ่ฉันลองด้วยความตั้งใจ - มันทำให้มันประหลาดใจ
Shaggy

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สร้างรายการของตัวเลขของแต่ละหมายเลขและ[<]ทำรายการลดลงน้อยกว่าเทียบเท่ากับ: digit1 < digit2 < ... < digitN


2
[<](.comb)&&.sayบันทึกเป็นไบต์
nwellnhof

สิ่งนี้สามารถอ่านได้อย่างน่าประหลาดใจ (ฉันรู้แล้วว่า Perl 6 ตัวเล็ก ๆ แต่ยัง ... )
JL


5

PowerShell , 42 40 ไบต์

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

ลองออนไลน์!

วนซ้ำจาก0ถึง1e4(เช่น10000) ดึงวัตถุเหล่านั้นออกมาโดยที่|?{...}ตัวเลขในรูปของสตริง$_นั้นเป็น-equal ไปยังหมายเลข cast toCharArra yจากนั้นทำการsorted ด้วย-uแฟลก nique กล่าวอีกนัยหนึ่งเฉพาะตัวเลขที่เหมือนกับสตริงที่เรียงลำดับและขจัดข้อมูลซ้ำซ้อน แต่ละรายการจะถูกทิ้งไว้บนไพพ์ไลน์



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 ... 10,000]
   D €ê - ดันแต่ละจำนวนเต็มใน [0 ... 10,000] เรียงลำดับและขจัดข้อมูลซ้ำซ้อนในเวลาเดียวกัน
      »» - และเข้าร่วมรายการทั้งสองรายการด้วยการขึ้นบรรทัดใหม่

คำตอบที่ดี ดีกว่า9 byter ที่ฉันมี (ซึ่งใช้ได้เฉพาะในมรดก)
Kevin Cruijssen



2

Python 2 , 64 61 ไบต์

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

ลองออนไลน์!

รับอักขระที่ไม่ซ้ำกันของการแทนค่าสตริงของจำนวนเต็มเรียงลำดับและเปรียบเทียบผลลัพธ์กับหมายเลขเดิม


You can save a byte by using range(9999) or any other number between 6790 and 9999. Our solutions are almost identical BTW :)
DJMcMayhem

@DJMcMayhem But then it wouldn't check ALL numbers under 10,000....:P Thanks! Sometimes I get too literal with these challenges.
Triggernometry

2

V, 41 bytes

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

Try it 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

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

ลองออนไลน์!

คำอธิบาย

สร้างตัวเลขที่เพิ่มขึ้นต่ำกว่า 10,000 โดยใช้ตัวเลข [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

หากผลลัพธ์ของสิ่งนี้น้อยกว่า:จำนวนนั้นจะมีตัวเลขที่เพิ่มขึ้นทางพจนานุกรม


Doesn't the challenge state that all numbers from 0-10000 must be printed? I'm pretty sure this prints numbers 0-7000
Embodiment of Ignorance

I believe the largest valid number is 6789? This is less than 7000, so you don't have to go any higher.
dana

Oh, I see. Foolish me
Embodiment of Ignorance

Not foolish at all :) I'm pretty sure I borrowed it from someone else's answer and I was scratching my head as to why they did it.
dana

2

Wolfram Language (Mathematica), 36 bytes

After I wrote this, it was clarified that each number must be on a new line, so +7 bytes for the Print/@.

This method takes advantage of the fact that the Subsets function 1) doesn't replicate any digits and 2) sorts the output by set size and set contents. FromDigits assembles each list of digits.

-1 byte thanks to @Mr.Xcoder

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

Try it online!


1
Print/@FromDigits/@Range@9~Subsets~4 for 36 bytes.
Mr. Xcoder

Funny, I thought of that and just didn't do it because I thought ~ had higher precedence than @
Kelly Lowder

2

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

Solution:

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

Try it online!

Explanation:

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

A bit of pub golf so probably far from optimal.

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

Try it online

Yes, doing it without an IIFE would be a few bytes shorter but that throws an overflow error when called, which would normally be fine as we can assume infinite memory for the purposes of code golf but, to me, doesn't seem to be in the spirit of KC challenges.


I don't get an overflow error without an IIFE.
Spitemaster

Is this a function submission or a full program? If not, you should either count the console.log or relabel your submission as JavaScript REPL.
Dennis






1

Jelly, 7 bytes

<ƝẠ$⁹#Y

Try it online!

How?

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.