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에 오신 것을 환영합니다! 좋은 첫 번째 도전. 향후 과제에 대해서는 샌드 박스 를 사용하여 문제를 수정하고 중요한 의견을 주체에 게시하기 전에 제안하는 것이 좋습니다 .
AdmBorkBork

4
@Giuseppe의 질문을 확장하기 위해 쉼표, 공백, 배열 형식 [0,1,...]등으로 구분하여 출력 할 수 있습니까? 아니면 각 숫자를 별도의 행에 출력해야합니까?
ETHproductions

10
숫자가 특정 순서로되어 있어야합니까, 아니면 모두 존재해야합니까?
카밀 드라 카리

14
@VarunPatro, 각 번호를 별도의 줄로 명시 적으로 명시하도록 도전 과제를 업데이트하고 (요구 사항에 대해 권장 할지라도) 그렇지 않은 기존 솔루션에 알려주십시오.
Shaggy

답변:


30

파이썬 2 , 56 바이트

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

온라인으로 사용해보십시오!

각 숫자 124를 표현식 처럼 변환 1<2<4하고 숫자가 정렬되어 있는지 확인하기 위해 평가합니다.

딸꾹질은 숫자 자체만으로 표현되는 한 자리 숫자의 경우 발생합니다. 이 원인 0이 인쇄되어야에도 Falsey 값으로 평가. 이것은 일의 Outgolfer 에릭 제안 트릭에 의해 고정되어 **ntruthy 값을 제공 0**0하기위한 n=0그렇지 않으면 진리 값에 영향을주지 않습니다.


무엇 ``n`합니까?
BruceWayne

1
@BruceWayne 문자열 표현이 필요합니다. 이것은 파이썬 3에서 제거되었습니다.
xnor

5
@BruceWayne repr()함수가 아니라 함수 와 동일 str()합니다. 항상 같은 것은 아닙니다. 다음은 예입니다.
mbomb007

1
그 의견에 감사드립니다! 나는 그것이 str()동등 하다고 생각했을 것 입니다.
BruceWayne

2
약간의 속임수로 0 사례를 처리 할 수 ​​있습니다 .
xsot


11

하스켈 , 50 바이트

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

온라인으로 사용해보십시오!

여러 줄 문자열을 출력합니다. 최대 자릿수와 다음 자릿수를 가져 오기 전에 각 숫자를 증분하여 엄격한 정렬을 보장 하는 일반적인 정렬 검사의 변형 인을 s사용하여 숫자가 증가 s==scanl1(max.succ)s하는지 확인 s==scanl1 max s합니다.

우리 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여기에 포함 되는지 알아 내려고 노력하고 있지만 젤리를 모른다. 젤리의 전원 세트에 빈 배열이 포함되어 있고 0"배치되지 않은"경우 변환되는 것이 맞 습니까?
얽히고 설킨

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

1
@Oliver, 업데이트 할 때 게시해야합니다. great minds ... :)
얽히고 설킨

@ETHproductions는 대부분의 것들과 마찬가지로 변덕스럽게 시도해 보았습니다.
Shaggy

6

R , 62 49 바이트

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

온라인으로 사용해보십시오!

combn주어진 순서대로 입력을 반복 하기 때문에 사 전적으로 증가하는 모든 정수를 쉽게 생성하고 순서대로 인쇄 할 수 있습니다. writei줄 번호를 너비 줄로 인쇄 i하여 줄 바꿈 요구 사항을 깔끔하게 충족시킵니다.


착한 아이디어 착취 combn!
digEmAll

매우 영리한 앨리어싱!
J.Doe

6

펄 6 , 25 바이트

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

nwellnhof 덕분에 -1 바이트

온라인으로 사용해보십시오!

.combdigit1 < digit2 <... < digitN[<] 에 해당하는 각 숫자의 자릿수 목록을 생성하고 해당 목록에서 줄어 듭니다 .


2
[<](.comb)&&.say바이트를 저장합니다.
nwellnhof

이것은 놀랍게도 읽을 수 있습니다. (나는 이미 작은 Perl 6을 알고 있지만 여전히 ...)
JL


5

PowerShell , 42 40 바이트

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

온라인으로 사용해보십시오!

에서 루프 01e4(즉, 10000). 이러한 개체 당겨 |?{...}문자열로 숫자 $_입니다 -eq수 캐스트에 연간를 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]의 각 정수를 동시에 누릅니다.
      û– 그리고 개행으로 두 목록의 상호 작용에 참여하십시오.

좋은 대답입니다. 더 나은보다 9 byter 나는 (단지 기존에 작동하는)했다.
케빈 크루이 ssen



2

파이썬 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 감사합니다! 때때로 나는 이러한 도전에 너무 문자 그대로 나타납니다.
Triggernometry

2

V , 41 바이트

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

온라인으로 사용해보십시오!

16 진 덤프 :

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 덕분에 바이트를 절약했습니다.

ȷ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의 # (C # 카메라 인터랙티브 컴파일러) , 102 (101) ... (73) 바이트

@Dennis -12 -4 감사합니다!

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으므로 더 이상 올라갈 필요가 없습니다.
dana

아, 알겠습니다 어리석은 날
무지의 구현

전혀 어리석지 않습니다 :) 나는 다른 사람의 대답에서 빌린 것을 확신하며 왜 그렇게했는지에 대해 머리를 긁고있었습니다.
dana

2

Wolfram Language (Mathematica) , 36 바이트

이 글을 쓴 후에는 각 숫자가 줄 바꿈이되어야하므로 +7 바이트입니다 Print/@.

이 방법은 Subsets함수 1) 숫자를 복제하지 않고 2) 설정된 크기 및 설정된 내용으로 출력을 정렬 한다는 사실을 이용합니다 . FromDigits각 자릿수 목록을 구성합니다.

@ Mr.Xcoder 덕분에 -1 바이트

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

온라인으로 사용해보십시오!


1
Print/@FromDigits/@Range@9~Subsets~436 바이트
Mr. Xcoder

웃긴, 나는 그것을 생각하고 그냥 @보다 높은 우선 순위를 가지고 있다고 생각했기 때문에 그것을하지 않았다
Kelly Lowder

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

자바 스크립트 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 로 계산 하거나 레이블을 다시 지정해야합니다 .
데니스






1

젤리 , 7 바이트

<ƝẠ$⁹#Y

온라인으로 사용해보십시오!

방법?

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