Números saltantes


12

Un número de salto se define como un número positivo n en el que todos los pares de dígitos decimales consecutivos difieren en 1. Además, todos los números de un solo dígito se consideran números de salto. p.ej. 3, 45676, 212 son números saltantes, pero 414 y 13 no lo son. La diferencia entre 9 y 0 no se considera como 1

El desafío Cree un programa que genere uno de los siguientes resultados:

  • Dada una entrada de nsalida, los primeros nnúmeros de salto.
  • Dada una entrada de nsalida, el término nth de la secuencia.

Nota

  • Se permite cualquier formato de E / S válido.
  • Se permite 1 índice o 0 índice (especifique)

Aquí hay algunos 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, ...

Esto también es A033075


¿Es 0 o 1 indexado?
Taylor Scott

1
@TaylorScott La secuencia consiste solo en números positivos. Si te refieres a la entrada, nentonces depende de ti.
Luis felipe De jesus Munoz

Supongo que "se permite cualquier formato de E / S válido" incluye la salida de los números como listas de dígitos decimales, pero ¿solo quería confirmar?
Jonathan Allan

Sí @JonathanAllan
Luis felipe De jesus Munoz

Respuestas:



6

Jalea , 8 bytes

1DI*`ƑƊ#

Un programa completo que acepta un número entero, nde STDIN, que imprime una lista de los primeros nnúmeros de salto positivos.

Pruébalo en línea!

¿Cómo?

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

6

05AB1E (heredado) , 5 bytes

La entrada está indexada en 1.

Código:

µN¥ÄP

Utiliza la codificación 05AB1E . Pruébalo en línea!


Explicación

µ          # 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)

Herramienta adecuada para el trabajo.
lirtosiast el

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

Pruébalo en línea!

Derivado de la respuesta de Chas Brown . La función auxiliar devuelve si es un número de salto. Si los dos últimos dígitos de un número tienen una diferencia absoluta de 1, entonces será 1 o 10, entonces será 1.g(i)inn%100%11n%100%11%9


Buen truco con el %11. Puede hacerlo f=lambda n,i=1:n and-~f(n-g(i),i+1)si cambia a una indexación.
xnor

4

APL (Dyalog Unicode) , SBCS de 36 bytes

1 indexado. Gracias a dzaima por su ayuda con el golf.

Editar: -15 bytes de ngn.

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

Pruébalo en línea!

Explicación

Tenemos f⍣g⍣h, donde, como operador, APL traduce esto (f⍣g)⍣h. (En contraste con las funciones donde 2×3+1se traduce 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

es mucho más corto con en lugar de {1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⍵⊢0}1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⎕⊢0
recurrencia

"⍣ es un operando" - es un "operador" (cometí este error en el chat y lo corrigió, pero parece que recogió la versión inicial. Lo siento)
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)

Pruébalo en línea!

Devuelve el número de salto indexado 0 (es decir, f (0) => 1, etc.).


@lirtosiast: Está bien, por favor done su respuesta a su organización benéfica favorita :). Es lo suficientemente diferente como para merecer una respuesta separada (además de ser apropiado para varios idiomas).
Chas Brown el

3

Haskell , 69 bytes

  • Gracias a Joseph Sible por hacer cumplir las reglas de desafío y guardar tres bytes.
  • Guardado dos bytes gracias a nimi .
(filter(all((==1).abs).(zipWith(-)<*>tail).map fromEnum.show)[1..]!!)

Pruébalo en línea!


1
Esto parece responder a la pregunta "¿es este un número de salto?" para un número de entrada dado, que no es lo que pidió el desafío.
Joseph Sible-Reinstate Monica

@ JosephSible Estás en lo correcto. Gracias por señalar
Jonathan Frech

Además, ahora que está solucionado, puede gacortar 3 bytes al reescribirlo para que no tenga ningún punto y luego usar <*>:g=all((==1).abs).(zipWith(-)<*>tail).map(read.pure).show
Joseph Sible-Reinstate Monica

@ JosephSible Gracias.
Jonathan Frech

@nimi Hecho. Gracias.
Jonathan Frech



1

Swift, 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)

Pruébalo en línea!


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

Pruébalo en línea!

-1 byte cambiando fde impresión a una función de generador.

ges una función auxiliar recursiva que determina si una cadena ses una "cadena de salto" (esto funciona ya que los códigos de caracteres del 0 al 9 están en orden y son contiguos).

fes una función generadora que toma ny produce los primeros 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

Pruébalo en línea!

Sospeche que esto se puede jugar más al golf. Lee el número usando scan()y genera el número de salto apropiado.




1

Factor , 129 bytes

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

Pruébalo en línea!

Emite los primeros nnúmeros de salto


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.