호핑 번호


14

직무

정수 n을 인쇄하십시오. 여기서 n의 12 <= n <= 123456789모든 연속 자릿수 쌍은 동일한 양의 차이를 갖습니다 (예 : 2468이지만 2469는 아님).

입력이 없습니다.

산출:

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
135
147
159
234
246
258
345
357
369
456
468
567
579
678
789
1234
1357
2345
2468
3456
3579
4567
5678
6789
12345
13579
23456
34567
45678
56789
123456
234567
345678
456789
1234567
2345678
3456789
12345678
23456789
123456789

규칙

  1. 표준 허점이 적용됩니다.
  2. 입력이 없습니다

가장 짧은 코드가 승리합니다.

크레딧 무정부 골프


8
이 문제는 무정부 상태의 골프 에서 비롯된 것 입니다. 신용장을 제출해야합니다 (제출자 인 경우에도 해당)
xnor

5
순서대로 인쇄해야합니까?
H.PWiz

11
나는 anagol에이 문제를 제출했다 :)
Lynn

2
이 목록의 모든 정수가 0≤n <100이 아닌 이유는 무엇입니까?
DonielF

3
@DonielF 정수가 12보다 크거나 같아야하고 앞으로 차이가 양수 여야하기 때문입니다.
Dennis

답변:


11

젤리 , 12 11 바이트

9œcḊẎIE$ÐfY

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

작동 원리

9œcḊẎIE$ÐfY  Main link. No arguments.

9            Set the argument and return value to 9.
   Ḋ         Dequeue; yield [2, ..., 9].
 œc          Take all k-combinations of [1, ..., 9], for each k in [2, ..., 9].
    Ẏ        Concatenate the arrays of k-combinations.
        Ðf   Filter the result by the link to the left.
     IE$         Compute the increments (I) of the combination / digit list and
                 tests if all are equal (E).
          Y  Join the results, separating by linefeeds.

ìà Find fastest route between two points using Dykstra's Algorithm
Neil

7

파이썬 2 , 81 바이트

k=71
exec"k+=1;r=range(k/8%9+1,10,k%8+1)\nif r[k/72:]:print`r`[1:k/24+2:3]\n"*576

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

무정부 상태 골프에서 내 솔루션 . 아이디어는 가능한 모든 삼중 길이, 시작 값 및 단계를 반복하여 정렬 된 출력을 제공하는 것입니다. 트리플은 값으로 부호화 r에서 72647및 성분으로서 추출되고 k/72, k/8%9k%8. 시작k충분히 높이 하면 한 자리 숫자가 출력되지 않습니다.

xsot 는 하드 코딩 된 문자열 로 대체하여 2 바이트를 절약했습니다.range'123456789' .

이것은 2 초의 런타임 제한의 제약으로 작성되었습니다. 숫자를 생성하는 대신 숫자를 필터링하는 느린 전략은 더 짧을 수 있습니다.


1
재미있는 사실 :이 문제는 실제로 무질서한 골프 런타임 한도를“설계”한 것이므로 PPCG에 제출하지 않은 이유입니다. 에서 (으) 1로 반복되는 제출물을 실격 처리하고 싶은 123456789대신 올바른 (정렬 된) 순서로 올바른 숫자를 생성하는 영리한 방법을 제시했습니다.
Lynn

6

C, 166152 바이트

p,l,d,i=11;main(){for(char s[10];i<=1e9;){sprintf(s,"%d",++i);p=0;for(l=strlen(s);--l>0;){d=s[l]-s[l-1];if(!p)p=d;if(p^d|d<1)break;p=d;}if(!l)puts(s);}}

@KevinCruijssen 덕분에 6 바이트가 절약되었습니다!

@JonathanFrech 덕분에 8 바이트가 절약되었습니다!

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

위 코드의 전체 형식 버전은 아래에서 확인할 수 있습니다.

#include <string.h>
#include <stdio.h>

int main( void )
{
int prev_diff, diff, len;
int num = 11;
char str[10];

while(num<123456789)
    {
    prev_diff = 0;
    sprintf(str,"%d",++num);
    len = strlen(str)-1;
    for( ; len > 0; len-- )
        {
        diff = str[len] - str[len-1];
        if( prev_diff == 0 )
            {
            prev_diff = diff;
            }
        if( prev_diff != diff || diff < 1 )
            {
            break;
            }
        prev_diff = diff;
        }
    if ( len == 0 )
        {
        puts(str);
        }
    }
}

내가 뭔가를 누락하지 않는 한, 안 while(i<123456789)while(i<=123456789)도전의 범위에 따라 대신? 또한 6 바이트로 골프를하실 수 있습니다.p,l,d,i=11;main(){for(char s[10];i<=123456789;){sprintf(s,"%d",++i);p=0;for(l=strlen(s);--l>0;){d=s[l]-s[l-1];if(p<1)p=d;if(p^d|d<1)break;p=d;}if(l<1)puts(s);}}
Kevin Cruijssen

@KevinCruijssen 나는 더 높은 값을 선택하여 1 바이트 비교를 계속 사용할 수 있지만 동의 할 것입니다. i<1e9.
Jonathan Frech

내가 착각하고 있지 않다 경우, 또한 @KevinCruijssen l<1에 golfed 수 !l로, l음의 값에 도달하지 않습니다.
Jonathan Frech

@JonathanFrech에 대한 좋은 지적 i<1e9. 그리고 CI 추측에 항상 합당한 것처럼 들릴 !l때 (나는 C에서 직접 프로그래밍 한 적이 없다). l>=0
Kevin Cruijssen '10

@KevinCruijssen "i"는 sprintf ()에서 증가하여 i == 123456788 일 때 루프에 들어가서 123456789로 남겨 둘 수 있도록합니다. 다목적 for 루프와 (l == 0)를 추가하겠습니다. )-> (l <1) 최적화, 감사합니다 :)
Jacobinski

5

젤리 , 14 , 13 바이트

DIµEȧ>0Ȧ
Ç77#

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

@MrXcoder 덕분에 1 바이트가 절약되었습니다!

이것은 매우 비효율적이므로 TIO에서 시간 초과되지만 완료되면 올바른 출력을 생성합니다. 더 작은 숫자로 시도해 볼 수 있습니다 : 온라인으로 사용해보십시오!

설명:

            # Helper link:
            #
D           # The Digits of 'n'
 I          # The increments (deltas, differences) between digits
  µ         # Give that array as an argument to the rest of this link:
   E        # Are all elements equal?
    ȧ       #   AND
     >0     # Are all elements greater then 0?
       Ȧ    # And is there at least one element?
            # (in the differences, so that numbers < 10 are false)
            #
            # Main link:
            #
 77#        # Return the first 77 'n's for which
Ç           #   The helper link is truthy

1
어. 나를 이길. +1
caird coinheringaahing

$헬퍼 링크의 끝에는 필요하지 않습니다 .
Mr. Xcoder

더 명확한 방법은 다음과 같습니다DIµ>0ȦȧE¶Ç77#
Erik the Outgolfer

4

05AB1E , 23 바이트

•7=›ζ•FNS¥DËs0›PN11›&&–

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


•7=›ζ•7000으로 교체 하여 TIO에서 완료하거나 시간 종료 전에 "종료"단추를 누르면 해당 시점까지 숫자가 인쇄됩니다.


이것을 사용해보십시오 :žh
Okx

내가 그 일 것이라고 생각하지 않습니다 @Okx, 그것은 단지 문자열이 아니다 '0123456789', 1357예는 또한 출력에 필요한 유효한 숫자 때문이다.
Outgolfer Erik

@EriktheOutgolfer 교체를 의미했습니다•7=›ζ•
Okx

@Okx 그게 내가 원래 가지고 있었지만 이상한 물건 (?)을 유발합니다. 왜 그런지 모르겠다. 그래서 나는 일관되게 일했다.
매직 문어 Urn

@MagicOctopusUrn 처음에 0을 제거해 보지 않겠습니까?
Okx

4

수학, 79 바이트

Select[Range@123456789,Min[s=Union@Differences@IntegerDigits@#]>0&&Tr[1^s]==1&]

온라인으로 사용해보십시오! 매우 느리기 때문에 낮은 숫자

여기에 1 초에 모든 숫자를 구성하는 또 다른 접근법이 있습니다.

Mathematica, 123 바이트

Union[FromDigits/@(F=Flatten)[Table[Partition[#,i,1],{i,2,9}]&/@Select[F[Table[Range[j,9,k],{j,9},{k,9}],1],Tr[1^#]>1&],2]]   


온라인으로 사용해보십시오! 초의 모든 숫자


4

껍질 , 14 13 바이트

ÖifȯεuẊ≠Ṗ…"19

줄 바꿈으로 구분 된 숫자를 STDOUT에 인쇄합니다. 온라인으로 사용해보십시오!

H.PWiz의 영감으로 인한 -1 바이트.

설명

ÖifȯεuẊ≠Ṗ…"19
         …"19  The string "19" rangified: "123456789"
        Ṗ      Powerset: ["","1","2","12","3",...,"123456789"]
  fȯ           Filter by function: (input is sublist, say "2469")
      Ẋ≠        Consecutive codepoint differences: [2,2,3]
     u          Remove duplicates: [2,3]
    ε           Is it a one-element list? No, so "2469" is dropped.
Öi             Sort the result by integer value, implicitly print separated by newlines.


3

APL (Dyalog) , 37 28 바이트

x/⍨{1=≢∪2-/⍎¨⍕⍵}¨x11+⍳1E9

온라인으로 사용해보십시오!(시간 초과로 인해 범위가 짧음)

어떻게?

x←11+⍳123456789- 11, 12... 1e9안으로x

¨ - 각각

    ⍎¨⍕⍵ -숫자로 나누기

    2-/ -차이 목록을 가져옵니다

     -독특한 요소를 얻을

    1=≢ -길이 == 1?

x/⍨ -생성 된 범위의 마스크로 사용

-그리고 컬럼 화



3

배치, 210 바이트

최적화가 없으므로 매우 느리다-12345까지 약 25 초가 걸리므로 전체 출력을 위해서는 약 3 일을 기다려야합니다.

@set z=@set/a
%z%c=12
:a
@echo %c%
:c
%z%c+=1&if %c%==123456790 exit/b
%z%n=c
%z%d=n%%10-n/10%%10
@if %d% leq 0 goto c
:d
%z%n=n/10
@if %n% leq 9 goto a
%z%e=n%%10-n/10%%10
@if %e%==%d% goto d
@goto c

3

자바 (8) 169 168 145 바이트

v->{byte[]a;for(int i=9,d,l;++i<1e9;System.out.print(l<1?i+"\n":""))for(a=(i+"").getBytes(),d=0,l=a.length;--l>0&&d*(d^(d=a[l]-a[l-1]))<1&d>0;);}

@Jacobinski C 포트 포트 ( 골프 후 약간). @Nevay
덕분에 -23 바이트 .

설명:

여기에서 시도하십시오. (끝 부분이 너무 느리므로 TIO에 최종 숫자를 인쇄하지 않습니다. 그러나 최종 숫자를 약 20 초 안에 로컬로 인쇄합니다.)

v->{                         // Method with empty unused parameter and no return-type
  byte[]a;                   //  Byte-array
  for(int i=9,               //  Index integer, starting at 9
          d,                 //  Difference-integer
          l;                 //  Length integer
      ++i<1e9;               //  Loop (1) from 10 to 1,000,000,000 (exclusive)
      System.out.print(      //    After every iteration: print:
        l<1?                 //     If `l` is 0:
         i+"\n"              //      The current integer + a new-line
        :                    //     Else:
         ""))                //      Nothing
    for(a=(i+"").getBytes(), //   Convert the current item as String to a byte-array
        d=0,                 //   Reset the previous integer to 0
        l=a.length;          //   Set `l` to the length of the byte-array
        --l>0                //   Inner loop (2) from `l-1` down to 0 (exclusive)
        &&d*(d^(d=a[l]-a[l-1]))<1
                             //    As long as the previous difference is either 0
                             //    or the current diff is not equal to the previous diff
        &d>0;                //    and the current diff is larger than 0
    );                       //   End of inner loop (2)
                             //  End of loop (1) (implicit / single-line body)
}                            // End of method

1
145 바이트 :v->{byte[]a;for(int i=9,p,l;++i<1e9;System.out.print(l<1?i+"\n":""))for(a=(i+"").getBytes(),p=0,l=a.length;--l>0&&p*(p^(p=a[l]-a[l-1]))<1&p>0;);}
Nevay

@ Nevay 나는 break어떻게 든 그것을 떨어 뜨리고 for-loop 검사에 추가 할 수 있어야한다는 것을 알고 있었지만 이것은 나 자신을 생각해 낼 수 없었습니다. ;) 감사!
Kevin Cruijssen '10

2

05AB1E , 14 바이트

TžhŸʒS¥D0›PsË&

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


그것이 내가 가지고있는 것을 제외하고는 원래 가지고 있었던 것입니다. 나는 12žhŸʒS¥D0›PsË&로컬에서 실행할 수 없습니다. 이것을 실제로 실행할 수 있습니까?
Magic Octopus Urn

@MagicOctopusUrn 이전 Ÿ에 숫자를 바꾸려고하면 정상적으로 작동합니다.
Okx

숫자를 바꾸지 않고 로컬로 실행할 다른 것을 얻었지만 여전히 할 수는 없습니다. Idk 왜, 정말 다른 점을 알고 싶습니다.
매직 문어 Urn



2

자바 스크립트 (Firefox 30-57), 105 바이트

document.write(`<pre>`+(

_=>[for(x of s=`123456789`)for(y of s)for(z of s)if(x*z<10-y)s.replace(/./g,c=>c<y|(c-y)%z|c-y>x*z?``:c)]

)().join`\n`+`</pre>`);

2에서 10까지의 길이 (x는 마지막 문자의 색인이므로 길이보다 1보다 작음)를 반복하여 1에서 9까지의 숫자를 시작하고 1에서 9까지의 단계를 반복 한 다음 끝 자리의 필터는 10보다 작으며 숫자 문자열에서 숫자를 필터링하여 결과를 생성합니다.


"코드 조각 실행"오류가 발생합니다.Uncaught SyntaxError: Unexpected token for
schnaader

2
@schnaader Firefox 30 이상에서 실행하고 있습니까? 이 답변은 Firefox에서만 지원하는 비표준 배열 이해 구문을 사용합니다.
Birjolaxew

아, 그 말을 보지 못했습니다. 죄송합니다. 크롬에서 실행되었으며, 파이어 폭스에서 잘 실행
schnaader



1

JavaScript (ES6), 121 bytes

Not nearly as short as Neil's answer, but I thought it was still worth posting.

Works by building a powerset of '123456789' where all non-matching entries are truncated and prefixed with 0, sorting the results in numerical order and keeping only the 77 relevant ones.

_=>[...'123456789'].reduce((a,x)=>[...a,...a.map(y=>y[1]-y[0]+(y.slice(-1)-x)?'0':y+x)],['']).sort((a,b)=>a-b).slice(-77)

Demo


1

C (gcc), 106 bytes

main(i,j,k,l){for(i=1;i<9;i++)for(j=8;j;j--)for(k=0;k<j/i;puts(""))for(l=0*k++;l<=i;)putchar(57-j+k*l++);}

Try it online!

The ungolfed (prettified) version:

int main() {
  int length, start_with, max_step, step, nth;
  for (length = 2; length <= 9; length++) {
    for (start_with = 1; start_with < 9; start_with++) {
      max_step = (9 - start_with) / (length - 1);
      for (step = 1; step <= max_step; step++) {
        for (nth = 0; nth < length; nth++) {
          putchar('0' + start_with + step * nth);
        }
        puts("");
      }
    }
  }
  return 0;
}

1

JavaScript (ES6), 109 104 bytes

Works by generating all possible numbers: loops through each increment from 8 to 1 (variable i), loops through each starting digit from 8 to 1 (variable j), loops through each digit between j and 10-i (variable k) and generates a string t by appending k to the current t. At each step t is added to the output array.

(o=[],i=9)=>{while(--i){j=9;while(k=--j){t=""+k;while(k<10-i)o.push(t+=k+=i)}}return o.sort((a,b)=>a-b)}

Try it online!

f=

(o=[],i=9)=>{while(--i){j=9;while(k=--j){t=""+k;while(k<10-i)o.push(t+=k+=i)}}return o.sort((a,b)=>a-b)}

;
console.log(f().join("\n"))




0

JavaScript (ES6), 145 bytes

A straight-forward approach with little magic.

Array(123456790).fill().map((x,i)=>(''+i).split('')).map((a,i,d) => {d=a[1]-a[0];d>0&a.every((n,j)=>j<1||n-a[j-1]==d)?console.log(a.join('')):0})

Running the snippet will consume a lot of memory...


0

PHP, 85 84 bytes

for(;++$d<9||++$a<9*$d=1;sort($r))for($x=$y=$a+1;10>$y+=$d;)$r[]=$x.=$y;print_r($r);

try it online.

sorting cost 17 bytes. This version prints the results ordered differently:

while(++$d<9||++$a<9*$d=1)for($x=$y=$a+1;10>$y+=$d;)echo"
",$x.=$y;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.