점프 번호


12

점프하는 숫자는 양의 숫자 n으로 정의되며, 연속되는 십진수의 모든 쌍은 1 씩 다릅니다. 또한 모든 한 자리 숫자는 점프하는 숫자로 간주됩니다. 예. 3, 45676, 212는 점프 숫자이지만 414와 13은 그렇지 않습니다. 9와 0의 차이는 1로 간주되지 않습니다

과제 다음 결과 중 하나를 출력하는 프로그램을 만드십시오.

  • 입력 n된 첫 번째 n점프 번호가 출력 됩니다.
  • 입력이 주어 n출력 n번째 시퀀스의 용어.

노트

  • 유효한 I / O 형식이 허용됩니다
  • 1- 색인 또는 0- 색인이 허용됩니다 (구체적으로 지정하십시오)

다음은 몇 가지 점프 번호입니다.

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 21, 23, 32, 34, 43, 45, 54, 56, 65, 67, 76, 78, 87, 89, 98, 101, 121, 123, 210, 212, 232, 234, 321, 323, 343, 345, 432, 434, 454, 456, 543, 545, 565, 567, 654, 656, 676, 678, 765, 767, 787, 789, 876, ...

이것은 또한 A033075입니다


이것이 0 또는 1입니까?
Taylor Scott

1
@TaylorScott 순서는 양수로만 구성됩니다. 당신이 입력 n을 의미한다면 그것은 당신에게 달려 있습니다.
Luis felipe De jesus Munoz

"모든 유효한 I / O 형식이 허용됩니다"는 숫자를 10 진수 목록으로 출력하는 것을 포함하지만 추측하고 싶습니까?
Jonathan Allan

네 @JonathanAllan
Luis felipe De jesus Munoz

답변:



6

젤리 , 8 바이트

1DI*`ƑƊ#

nSTDIN에서 정수를 받아들이는 전체 프로그램 으로, 첫 번째 n양수 점프 목록을 인쇄 합니다.

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

어떻게?

자리하는 사이 허용 증분 차이 1-1다른 사람 동안은 [-9,-2]+[2,9]없습니다. 이것은 스스로 발생했을 때 변하지 않는 정수로 정렬됩니다. 즉 :xx=x

00=1
11=1
22=4
11=1
22=14

1DI*`ƑƊ# - Main Link: no arguments (accepts a line of input from STDIN)
       # - count up keeping the first (input) n matches...
1        - ...start with n equal to: 1
      Ɗ  - ...match function: last three links as a monad:  e.g. 245       777      7656
 D       -   convert to a list of decimal digits                 [2,4,5]   [7,7,7]  [7,6,5,6]
  I      -   incremental differences                             [2,1]     [0,0]    [-1,-1,1]
     Ƒ   -   invariant under?:
    `    -     using left argument as both inputs of:
   *     -       exponentiation (vectorises)                     [4,1]     [1,1]    [-1,-1,1]
         -                                            --so we:   discard   discard  keep
         - implicitly print the list of collected values of n


5

파이썬 2 , 79 75 바이트

xnor에 의해 -4 바이트

f=lambda n,i=1:n and-~f(n-g(i),i+1)
g=lambda i:i<10or i%100%11%9==g(i/10)>0

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

Chas Brown답변 에서 파생되었습니다 . 도우미 함수 g(i)i점프 번호 인지 여부를 반환합니다 . 숫자의 마지막 두 자리 n가 절대 차이 1 인 n%100%11경우 1 또는 10 n%100%11%9이되므로 1이됩니다.


와 좋은 트릭 %11. f=lambda n,i=1:n and-~f(n-g(i),i+1)1 인덱싱으로 전환하면 할 수 있습니다 .
xnor

4

APL (Dyalog Unicode) , 36 바이트 SBCS

1- 색인. 골프를 치는 데 도움을 주신 dzaima에게 감사합니다.

편집 : ngn에서 -15 바이트.

1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⎕⊢0

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

설명

우리는이 f⍣g⍣h같은 경우, 운영자는, APL이이 변환 (f⍣g)⍣h. ( 2×3+1번역 되는 함수와 달리 2×(3+1))

1+⍣{...}⍣⎕⊢0  This is equivalent to 
               "do {check} we find the n-th integer that fulfils {check}"

1+⍣{...}   0  Start with 0 and keep adding 1s until the dfn 
               (our jumping number check in {}) returns true.
        ⍣⎕    We take input n (⎕) and repeat (⍣) the above n times 
               to get the n-th jumping number.

{∧/1=|2-/⍎¨⍕⍺}  The dfn that checks for jumping numbers.

         ⍎¨⍕⍺   We take the base-10 digits of our left argument
                 by evaluating each character of the string representation of ⍺.
     |2-/        Then we take the absolute value of the pairwise differences of the digits
 ∧/1=            and check if all of the differences are equal to 1.

10⊥⍣¯1⊢⍺->⍎¨⍕⍺
ngn

재귀 대신에 훨씬 짧습니다 . {1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⍵⊢0}또는1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⎕⊢0
ngn

"⍣는 피연산자"- "오퍼레이터"입니다 (이 실수는 채팅에서 수정했지만 초기 버전을 선택한 것 같습니다. 죄송합니다)
ngn



3

파이썬 2 , 88 87 바이트

f=lambda n,i=2:n and f(n-g(i),i+1)or~-i
g=lambda i:i<10or abs(i/10%10-i%10)==1==g(i/10)

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

0 인덱스 점프 번호를 반환합니다 (예 : f (0) => 1 등).


@lirtosiast : 괜찮습니다. 좋아하는 자선 단체에 대한 답변을 기부하십시오 :). 별도의 응답을 얻을 수있을뿐만 아니라 다른 언어를 사용하는 것도 충분히 다릅니다.
Chas Brown

3

하스켈 , 69 바이트

  • 챌린지 규칙을 시행하고 3 바이트를 절약 한 Joseph Sible 에게 감사 합니다.
  • nimi 덕분에 2 바이트를 절약했습니다 .
(filter(all((==1).abs).(zipWith(-)<*>tail).map fromEnum.show)[1..]!!)

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


1
이것은 "이것이 점프하는 숫자입니까?"라는 질문에 대답하는 것으로 보입니다. 주어진 입력 번호에 대해서는 도전이 요구 한 것이 아닙니다.
Joseph Sible-Reinstate Monica

@JosephSible 당신이 맞습니다. 주목 해 주셔서 감사합니다.
Jonathan Frech 2016 년

또한 이제 수정 g되었으므로 포인트없는 것으로 다시 작성하여 다음을 사용하여 3 바이트를 더 짧게 만들 수 있습니다 <*>.g=all((==1).abs).(zipWith(-)<*>tail).map(read.pure).show
Joseph Sible-Reinstate Monica

@JosephSible 감사합니다.
Jonathan Frech

@nimi 완료. 감사합니다.
Jonathan Frech



1

스위프트, 228 바이트

func j(n:Int){
var r:[Int]=[]
for x in 0...n{
if x<=10{r.append(x)}else{
let t=String(x).compactMap{Int(String($0))}
var b=true
for i in 1...t.count-1{if abs(t[i-1]-t[i]) != 1{b=false}}
if b{r.append(x)}
}
}
print(r)
}
j(n:1000)

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


1

파이썬 (3) , 122 (121) 바이트

g=lambda s:len(s)==1or 1==abs(ord(s[0])-ord(s[1]))and g(s[1:])
def f(n,i=1):
	while n:
		if g(str(i)):n-=1;yield i
		i+=1

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

f인쇄에서 생성기 기능 으로 변경 하여 -1 바이트 .

g문자열 s이 "점프 문자열" 인지 확인하는 재귀 도우미 함수입니다 (0-9의 문자 코드가 순서가 연속적이므로 작동합니다).

fn첫 번째 n점프 숫자를 받아서 생성하는 생성기 함수입니다 .


1

R , 85 바이트

i=scan();j=0;while(i)if((j=j+1)<10|all(abs(diff(j%/%10^(0:log10(j))%%10))==1))i=i-1;j

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

이것이 더 골프를 칠 수 있다고 생각합니다. 를 사용하여 숫자를 읽고 scan()적절한 점프 번호를 출력합니다.





당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.