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


É 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

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)

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.


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.

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

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


@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!


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



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!


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.


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.




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


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.