독립적 인 숫자의 순서


22

자체 포함 숫자 를 양의 정수로 정의하고 숫자는 자신과 동일한 길이의 런으로 나타납니다. 다시 말해, 10 진수 d ( 0 제외 )는 정확히 d 길이의 런에서만 발생합니다 .

태스크

아래 나열된 세 가지 방법 중 하나를 선택할 수 있습니다.

  • 정수 주어 N , 출력 n 개의 제 (0 또는 1 인덱스) 급식 번호.
  • 정수 n이 주어지면 처음 n 개의 포함 된 숫자를 출력하십시오 .
  • 순서를 무기한으로 인쇄하십시오.

  • 133322이 있기 때문에 독립적 인 숫자 3 개 세의 실행에 나타납니다 3 의가, 1 단이고 2 두의 실행에서 발생 2 의.

  • 반면에 3555335553 이 각각 5와 3 번 발생 하지만 인접 숫자의 런을 형성하지 않기 때문에 그렇지 않습니다.

  • 444224 번만 3 번 발생 하기 때문에 독립적 입니다.

  • 12222333가 있기 때문에, 하나없는 이 개 네 가지의 실행에 나타납니다 2 의, 그리고이 두 개의 별도의 실행으로 처리 할 수없는 2 의 '.

당연히 이것은 OEIS A140057 이며 처음 몇 용어는 다음과 같습니다.

1, 22, 122, 221, 333, 1221, 1333, 3331, 4444, 13331, 14444, 22122, 22333, 33322, 44441, 55555, 122122, 122333, 133322, 144441, 155555

이러한 허점 은 기본적으로 금지되어 있지만 모든 프로그래밍 언어 에서 표준 방법을 통해 입력을 받고 출력을 제공 할 수 있습니다 . 이것은 코드 골프이므로 모든 언어에서 바이트 단위의 가장 짧은 코드가 이깁니다.

답변:


8

파이썬 2 , 104 94 83 바이트

Xcoder 덕분에 -10 바이트,
Jonathan Allan 덕분에 -11 바이트

i=0
while 1:
 if`i`==''.join(d*int(d)for c,d in zip(`-i`,`i`)if d!=c):print i
 i+=1

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


... 이것은 한 번 넘어져서 i길어 지기 때문에 실제로 수용 가능 합니까? 사용해야str 할 수도 있습니다 (정말 확실하지는 않습니다).
Jonathan Allan

1
@JonathanAllan 흥미로운 질문입니다. 일반적으로 우리는 그것이 표준 정수 타입 안에 있다고 가정 할 수 있지만 길지 않다 . 그러나 파이썬은이 구별을 매우 명확하게하지 않는다 ...
FlipTack

6

매스 매 티카, 66 바이트

시퀀스를 무기한으로 인쇄합니다

Do[##&&Print@t&@@(#==Tr[1^{##}]&@@@Split@IntegerDigits@t),{t,∞}]

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

TIO에서는 결과를 보려면 실행을 종료해야하지만 Mathematica에서는 정상적으로 작동합니다.

Martin Ender에서 -12 바이트


6

05AB1E , 9 바이트

시퀀스의 n 번째 항을 1- 인덱스로 반환합니다.

µNÔNγ€gJQ

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

설명

µ           # loop over increasing N until counter equals input
 NÔ         # push N with consecutive equal elements deduplicated
   Nγ       # push N grouped into runs of consecutive equal elements
     €g     # get the length of each run
       J    # join to a number
        Q   # check for equality
            # if true, implicitly increment counter

내 10 바이트 접근법에서 영감을 얻을 수있는 소스 :µNγD€gs€ÙQ
Mr. Xcoder

6

자바 스크립트 (ES6), 76 71 68 바이트

시퀀스 의 n 번째 항을 0- 인덱스로 반환합니다 .

f=(n,k)=>+(k+'').replace(/(.)\1*/g,s=>s.length^s[0])||n--?f(n,-~k):k

주의 : 항상 재귀 함수와 마찬가지로 입력 범위는 Tail Call Optimization 지원 및 엔진의 스택 크기에 따라 다릅니다.

데모


Alt. 버전, 65 바이트

입력하지 않고 alert()한 번에 하나씩로 결과를 인쇄합니다 .

f=k=>f(-~k,+(k+'').replace(/(.)\1*/g,s=>s.length^s[0])||alert(k))

온라인으로 사용해보십시오! 최대 스택 크기를 초과하면 중지됩니다.



2

CJam , 20 바이트

1{_Abe`::=:*{_p}&)}h

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

설명:

1                       push 1
 {                }h    while TOS is truthy (i.e. forever):            example iteration: 14444
  _                       duplicate                                                       14444 14444       
   Ab                     convert to base 10 (get decimal digits)                         14444 [1 4 4 4 4]
     e`                   run-length encode (array of two-element arrays)                 14444 [[1 1] [4 4]]
       :                  map over the array:
        :                   fold between the two array elements with:
         =                    equality                                                    14444 [1 1]
          :               fold between the array elements with:
           *                multiplication (a.k.a. logical AND for 1 or 0)                14444 1
            {  }&         if this yields a result of 1:
             _              duplicate the number and                                      14444 14444
              p             print it                                                      14444 (output 14444)
                 )        increment the number                                            14445


2

Brachylog , 10 바이트

≜ℕẹḅ⟨l=h⟩ᵐ

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

입력 변수를 통해 시퀀스 요소를 무한대로 생성 합니다. (실제로 추가] 자체를 인쇄 할있는 경우 &ẉ⊥).이 본질적으로 대응 해결 코드 로모그래퍼 앞에 추가 먼저 작은 용액을 무차별 :

        ᵐ    For every
  ḅ          run of
 ẹ           digits in
             the input variable
ℕ            (which is a non-negative integer),
   ⟨l  ⟩     its length
   ⟨  h⟩     and its first element
   ⟨ = ⟩     are equal.

나는 이것이 9 바이트 만 취할 것으로 예상했지만 숫자의 숫자를 런으로 분리하려면 명시 적이 필요합니다 .


1

자바 스크립트 4, 83 80 바이트

for(i=0;;)+(++i+'').replace(/(.)\1*/g,function(x,y){return y^x.length})||alert(i)

for(i=0;i<1000;)+(++i+'').replace(/(.)\1*/g,function(x,y){return y^x.length})||alert(i)


"자바 스크립트 1"? 그런 언어 이름이 있습니까?
user202729

JavaScript가 나타난 이후로 작동한다는 의미입니다. 이름이 정확한지 확실하지 않습니다
l4m2

죄송합니다. js1에서 작동하지 않는 것 같습니다. 나는 읽고 교체하지 않았다
l4m2


1

R , 56 바이트

function(n)all((r=rle(el(strsplit(c(n,''),''))))$l==r$v)

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

분할 번호에서 런 길이 인코딩을 사용합니다. 모든 길이가 값과 같으면 true를 리턴합니다.

참고 : 작업 methods하기 위해 라이브러리를 TIO에 로드 el했습니다.


1

Stax , 10 바이트

Ç≡∟Öz≈¢αV¢

실행 및 디버깅

이 프로그램은 모든 양의 정수를 필터로 필터링합니다. 숫자는 런 길이로 인코딩됩니다. 각 런에 대해 숫자는 런 길이와 같아야합니다.




0

자바 10, 121 바이트

발 람다 intint. 이 함수는 인덱스 n을 가져 와서 n 번째 (1 인덱스) 시퀀스 값을 반환합니다 .

n->{int x=0,m=1;for(;n>0;n-=m,m=1)for(var p:(++x+"").split("(?<=(.))(?!\\1)"))m=p.length()==p.charAt(0)-48?m:0;return x;}

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

언 골프

n -> {
    int x = 0, m = 1;
    for (; n > 0; n -= m, m = 1)
        for (var p : (++x + "").split("(?<=(.))(?!\\1)"))
            m = p.length() == p.charAt(0) - 48 ? m : 0;
    return x;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.