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

これはコードゴルフチャレンジです!最短回答が勝ちます!

(Pythonソリューションを探しているPS)


3
別の行に印刷する必要がありますか、それともスペースで区切っても大丈夫ですか?
ジュゼッペ

3
PPCGへようこそ!素敵な最初の挑戦。将来の課題については、Sandboxを使用して課題を改良し、メインに投稿する前に意味のあるフィードバックを取得することをお勧めします。
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、評価して数字がソートされているかどうかを確認します。

しゃっくりは、1桁の数字に対して発生し、その数字そのものである式を与えます。これにより0、印刷する必要がある場合でもFalsey値に評価されます。これはやってのOutgolferエリックによって提案されたトリックによって固定されている**ntruthy値を与える、0**0ためn=0、それ以外の真理値には影響を与えません。


何をしない`でください`n`
ブルースウェイン

1
@BruceWayne文字列表現を取ります。これはPython 3で削除されました
。– xnor

5
@BruceWayne repr()関数ではなく関数と同じであることに注意してくださいstr()。それらは常に同じではありません。以下に例を示します。
mbomb007

1
@ mbomb007そのコメントをありがとう!私はそれがstr()同等だと思っていただろう。
ブルースウェイン

2
0の場合は、ちょっとした策略で処理できます。
-xsot


11

Haskell、50バイト

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

オンラインでお試しください!

複数行の文字列を出力します。を使用して、数字の最大数と次の数字を取得する前に各数字をインクリメントすることで厳密なソートを保証する通常のソート済みチェックのバリアントをs使用して、数値が増加することをチェックします。s==scanl1(max.succ)ss==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のpowersetに空の配列が含まれていることを修正します。空の配列は0「undecimaled」のときに変換されますか?
シャギー

1
はい、それはまさに起こることです。
デニス

8

Japt -R12 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、あなたは私が更新していたときにそれを投稿したに違いありません。偉大な心... :)
シャギー

@ETHproductions、ほとんどのものと同様に、私は気まぐれでそれを試してみました-それが動作することを驚かせました。
シャギー

6

R62 49バイト

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

オンラインでお試しください!

combn入力を指定された順序で繰り返し処理するため、辞書式に増加する整数をすべて簡単に作成し、順番に出力します。幅の行でwritei桁の数字を印刷しi、改行の要件もきちんと満たします。


素晴らしいアイデアの活用combn
digEmAll

非常に賢いエイリアシング!
-J.Doe

6

Perl 6、25バイト

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

nwellnhofのおかげで-1バイト

オンラインでお試しください!

.comb各数値の数字のリストを作成し、そのリストに対して[<]以下の縮小を行います。これは、digit1 < digit2 <... < digitNに相当します。


2
[<](.comb)&&.sayバイトを保存します。
nwellnhof

これは驚くほど読みやすいです。(私はすでに少しのPerl 6を知っていますが、それでも...)
JL


5

PowerShell42 40バイト

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

オンラインでお試しください!

から(01e4)ループし10000ます。これらのオブジェクトを引き出し|?{...}た文字列として数が$_ある-eq数キャストにUALをtoCharArra yし、その後sortでエド-u niqueフラグ。言い換えると、並べ替えられて重複排除された文字列と同じ番号のみです。これらはそれぞれパイプラインに残り、出力は暗黙的です。


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]の各整数をソートおよび重複排除と同時にプッシュします。
      ×–そして、改行で2つのリストの交差点に参加します。

いい答えだ。私が持っていた9バイトよりも優れています(レガシーでのみ機能します)。
ケビンクルーッセン



2

パイソン264の 61バイト

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

オンラインでお試しください!

整数の文字列表現の一意の文字を取得し、並べ替え、結果を元の数値と比較します。


range(9999)
6790〜9999

@DJMcMayhemしかし、それでは10,000未満のすべての数字をチェックしません。...:Pありがとう!時々、私はこれらの挑戦で文字通り過ぎます。
トリガー測定

2

V、41バイト

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

オンラインでお試しください!

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バイト

@Dennisのおかげで5バイト節約

9œcⱮ4ẎŻY

オンラインでお試しください!

説明

数字[1 ... 9]を取得し、長さ≤4のすべての組み合わせを見つけることにより、10000未満の辞書式に増加するすべての数値を生成します。

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のおかげで1バイト節約できた

ȷ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のすべての数字を印刷する必要があると記載されていませんか?これ
により、

最大の有効な数字は6789?これはより小さいため7000、これ以上高くする必要はありません。
ダナ

ああなるほど。愚か者
無知の体現

まったく愚かではありません:)他の誰かの答えからそれを借りたと確信しています。
ダナ

2

Wolfram言語(Mathematica)、36バイト

これを書いた後、各番号は新しい行にある必要があることが明らかになったので、 Print/@

この方法は、Subsets関数1)数字を複製せず、2)出力を設定サイズと設定内容でソートするという事実を利用しています。FromDigits数字の各リストを組み立てます。

@ Mr.Xcoderのおかげで-1バイト

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

オンラインでお試しください!


1
Print/@FromDigits/@Range@9~Subsets~436バイトの場合。
ミスターXcoder

おかしい、私はそれを考えて、私はそれをしなかった
ケリー・ロウ


2

JavaScript REPL、64バイト

おそらく最適とはほど遠いパブゴルフのビット。

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

オンラインで試す

はい、IIFEなしでそれを行うことは数バイト短くなりますが、呼び出されるとオーバーフローエラーがスローされます。これは通常、コードゴルフの目的のために無限のメモリを想定できるので問題ありませんが、 KCチャレンジの精神で。


IIFEなしではオーバーフローエラーは発生しません。
-Spitemaster

これは機能の提出ですか、それとも完全なプログラムですか?そうでない場合は、カウントする必要がありますconsole.log提出物をか、JavaScript REPLとしてラベルを付け。
デニス







弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.