Números de salto

12

Um número de salto é definido como um número positivo n, em que todos os pares de dígitos decimais consecutivos diferem por 1. Além disso, todos os números de um dígito são considerados números de salto. por exemplo. 3, 45676, 212 estão saltando números, mas 414 e 13 não. A diferença entre 9 e 0 não é considerada como 1

O desafio Crie um programa que produza um dos seguintes resultados:

  • Dada uma entrada, nos primeiros nnúmeros saltados.
  • Dada uma nsaída de entrada, o termo é nth da sequência.

Nota

  • Qualquer formato de E / S válido é permitido
  • Índice 1 ou 0 é permitido (especifique)

Aqui estão alguns números de salto:

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, ...

Este também é A033075

Luis felipe De jesus Munoz
fonte
É 0 ou 1 indexado?
Taylor Scott
1
@TaylorScott A sequência consiste apenas em números positivos. Se você quer dizer a entrada n, é com você.
Luis felipe De jesus Munoz
Estou supondo que "qualquer formato de E / S válido é permitido" inclui a saída dos números como listas de dígitos decimais, mas só queria confirmar -?
Jonathan Allan
Sim @JonathanAllan
Luis felipe De jesus Munoz

Respostas:

6

Geléia , 8 bytes

1DI*`ƑƊ#

Um programa completo que aceita um número inteiro n,, de STDIN, que imprime uma lista dos primeiros nnúmeros positivos de salto.

Experimente online!

Quão?

Diferenças incrementais aceitáveis ​​entre dígitos são 1e -1enquanto outras [-9,-2]+[2,9]não. Isso se alinha com números inteiros que são invariantes quando aumentados para si mesmos. ie desde que: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
Jonathan Allan
fonte
6

05AB1E (herdado) , 5 bytes

A entrada é indexada em 1.

Código:

µN¥ÄP

Usa a codificação 05AB1E . Experimente online!


Explicação

µ          # Get the nth number, starting from 0, such that...
   Ä       #   The absolute values
 N¥        #   Of the delta's of N
    P      #   Are all 1 (product function, basically acts as a reduce by AND)
Adnan
fonte
Ferramenta certa para o trabalho.
lirtosiast
5

Python 2 , 79 75 bytes

-4 bytes por xnor

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

Experimente online!

Derivado do Chas Brown 's resposta . A função auxiliar g(i)retorna se ié um número de salto. Se os dois últimos dígitos de um número ntiverem uma diferença absoluta 1, n%100%11será 1 ou 10, assim n%100%11%9será 1.

lirtosiast
fonte
Bom truque com o %11. Você pode fazer isso f=lambda n,i=1:n and-~f(n-g(i),i+1)se mudar para a indexação única.
Xnor
4

APL (Dyalog Unicode) , SBCS de 36 bytes

1 indexado. Agradecemos a dzaima por sua ajuda no golfe.

Editar: -15 bytes de ngn.

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

Experimente online!

Explicação

Temos f⍣g⍣h, onde, como operador, a APL traduz isso para (f⍣g)⍣h. (Em contraste com as funções onde 2×3+1é traduzido 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.
Sherlock9
fonte
10⊥⍣¯1⊢⍺->⍎¨⍕⍺
NGN
é muito mais curto com em vez de recursão: {1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⍵⊢0}ou1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⎕⊢0
ngn 06/03/19
"⍣ é um operando" - é um "operador" (i esse erro no chat e corrigiu-lo, mas parece que você pegou a versão inicial muito.)
NGN
3

C (gcc) , 90 bytes

f(n,K,b,k){for(K=0;n;b&&printf("%d,",K,n--))for(b=k=++K;k/10;)b*=abs(k%10-(k/=10)%10)==1;}

Experimente online!

Jonathan Frech
fonte
3

Japonês, 14 bytes

Produz o primeiro ntermo, indexado em 1.

_ì äa dÉ ªU´}f

Tente

(Eu sei, eu sei, eu deveria estar dando um tempo, mas estou em retirada de golfe!)

Shaggy
fonte
Haha, talvez vá aprender uma nova linguagem de golfe para curar sua retirada. : P
Quintec 01/01/19
3

Python 2 , 88 87 bytes

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)

Experimente online!

Retorna o número de salto indexado em 0 (ou seja, f (0) => 1, etc).

Chas Brown
fonte
@lirtosiast: Tudo bem, por favor, doe sua resposta para sua instituição de caridade favorita :). É suficientemente diferente para merecer uma resposta separada (além de ser apropriado em vários idiomas).
Chas Brown,
3

Haskell , 69 bytes

  • Agradecemos a Joseph Sible por aplicar as regras de desafio e salvar três bytes.
  • Economizou dois bytes graças a nimi .
(filter(all((==1).abs).(zipWith(-)<*>tail).map fromEnum.show)[1..]!!)

Experimente online!

Jonathan Frech
fonte
1
Isso parece responder à pergunta "este é um número saltador?" para um determinado número de entrada, que não é o que o desafio solicitou.
Joseph Sible-Reinstate Monica
@JosephSible Você está correto. Obrigado por observar.
Jonathan Frech
Além disso, agora que isso é fixo, você pode fazer g3 bytes mais curto, reescrevendo-a para ser pointfree, em seguida, usando <*>:g=all((==1).abs).(zipWith(-)<*>tail).map(read.pure).show
Joseph Sible-Reintegrar Monica
@JosephSible Obrigado.
Jonathan Frech
@nimi Done. Obrigado.
Jonathan Frech
2

JavaScript (ES7), 60 bytes

n

f=(n,k)=>[...k+''].some(p=x=>(p-(p=x))**2-1)||n--?f(n,-~k):k

Experimente online!

Arnauld
fonte
1

Rápido, 228 bytes

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)

Experimente online!

onnoweb
fonte
1

Python 3 , 122 121 bytes

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

Experimente online!

-1 byte, passando fde impressão para uma função de gerador.

gé uma função auxiliar recursiva que determina se uma string sé uma "string de salto" (isso funciona porque os códigos de caracteres de 0 a 9 estão em ordem e são contíguos).

fé uma função geradora que absorve ne produz os primeiros nnúmeros de salto.

pizzapants184
fonte
1

R , 85 bytes

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

Experimente online!

Suspeite que isso possa ser jogado mais. Lê o número usando scan()e gera o número de salto apropriado.

Nick Kennedy
fonte
1

Perl 5 , 56 bytes

map{1while++$n=~s|.(?=(.))|abs$&-$1!=1|ger>9}1..<>;say$n

Experimente online!

Indexado em 1, gera o enésimo número de salto

Xcali
fonte
1

Fator , 129 bytes

: f ( x -- ) 1 [ [ dup 10 >base >array differences [ abs 1 = ] all? ] [ 1 + ] until
dup . 1 + [ 1 - ] dip over 0 > ] loop 2drop ;

Experimente online!

Emite os primeiros nnúmeros de salto

Galen Ivanov
fonte