Numeri saltanti


12

Un numero di salto è definito come un numero positivo n che tutte le coppie di cifre decimali consecutive differiscono di 1. Inoltre, tutti i numeri a cifra singola sono considerati numeri di salto. per esempio. 3, 45676, 212 stanno saltando i numeri ma 414 e 13 no. La differenza tra 9 e 0 non è considerata come 1

La sfida Creare un programma che ha prodotto uno dei seguenti risultati:

  • Dato un input input ni primi nnumeri saltanti.
  • Dato un input input nil nth termine della sequenza.

Nota

  • È consentito qualsiasi formato I / O valido
  • È consentito 1 indice o 0 indice (specificare)

Ecco alcuni numeri saltanti:

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

Questo è anche A033075


Questo 0 o 1 è indicizzato?
Taylor Scott

1
@TaylorScott La sequenza consiste solo in numeri positivi. Se intendi l'input n, dipende da te.
Luis felipe De jesus Munoz

Sto indovinando "È consentito qualsiasi formato I / O valido" include l'output dei numeri come elenchi di cifre decimali, ma volevo solo confermare -?
Jonathan Allan

Sì @JonathanAllan
Luis felipe De jesus Munoz

Risposte:



6

Gelatina , 8 byte

1DI*`ƑƊ#

Un programma completo che accetta un numero intero, nda STDIN che stampa un elenco dei primi nnumeri saltanti positivi.

Provalo online!

Come?

Le differenze incrementali accettabili tra le cifre sono 1e -1mentre gli altri [-9,-2]+[2,9]non lo sono. Questo si allinea con numeri interi che sono invarianti se elevati a se stessi. cioè XX=X poiché:

00=1
11=1
22=4
-1-1=-1
-2-2=-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 (legacy) , 5 byte

L'ingresso è 1 indicizzato.

Codice:

µN¥ÄP

Utilizza la codifica 05AB1E . Provalo online!


Spiegazione

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

Strumento giusto per il lavoro.
lirtosiast,

5

Python 2 , 79 75 byte

-4 byte di 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

Provalo online!

Derivato da Chas Brown 's risposta . La funzione helper g(i)restituisce se si itratta di un numero saltato. Se le ultime due cifre di un numero nhanno la differenza assoluta 1, allora n%100%11saranno 1 o 10, quindi n%100%11%9sarà 1.


Bel trucco con il %11. Puoi farlo f=lambda n,i=1:n and-~f(n-g(i),i+1)se passi a uno-indicizzazione.
xnor

4

APL (Dyalog Unicode) , 36 byte SBCS

1-indicizzati. Grazie a dzaima per il loro aiuto nel giocare a golf.

Modifica: -15 byte da ngn.

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

Provalo online!

Spiegazione

Abbiamo f⍣g⍣h, come è un operatore, APL traduce questo in (f⍣g)⍣h. (Contrariamente alle funzioni in cui 2×3+1è tradotto 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

è molto più breve con invece di ricorsione: {1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⍵⊢0}oppure1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⎕⊢0
ngn

"⍣ è un operando" - è un "operatore" (ho sbagliato questo errore in chat e l'ho corretto, ma sembra che tu abbia preso la versione iniziale. Scusa)
ngn


3

Japt, 14 byte

Emette il primo nth, 1 indicizzato.

_ì äa dÉ ªU´}f

Provalo

(Lo so, lo so, dovrei fare una pausa ma sono in ritiro dal golf!)


Haha, forse vai a imparare una nuova lingua per giocare a golf per curare il tuo ritiro. : P
Quintec,

3

Python 2 , 88 87 byte

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)

Provalo online!

Restituisce il numero di salto indicizzato 0 (ovvero, f (0) => 1, ecc.).


@lirtosiast: Va bene, per favore dona la tua risposta alla tua organizzazione benefica preferita :). È sufficientemente diverso da meritare una risposta separata (oltre ad essere appropriato per le diverse lingue).
Chas Brown

3

Haskell , 69 byte

  • Grazie a Joseph Sible per aver applicato le regole della sfida e aver salvato tre byte.
  • Salvato due byte grazie a nimi .
(filter(all((==1).abs).(zipWith(-)<*>tail).map fromEnum.show)[1..]!!)

Provalo online!


1
Questo sembra rispondere alla domanda "è questo un numero che salta?" per un determinato numero di input, che non è quello che la sfida ha richiesto.
Joseph Sible-Ripristina Monica il

@JosephSible Hai ragione. Grazie per averlo notato.
Jonathan Frech

Inoltre, ora che è stato corretto, è possibile ridurre i g3 byte riscrivendolo in modo che sia privo di punti, quindi utilizzando <*>:g=all((==1).abs).(zipWith(-)<*>tail).map(read.pure).show
Joseph Sible-Reinstate Monica

@JosephSible Grazie.
Jonathan Frech

@nimi Fatto. Grazie.
Jonathan Frech



1

Rapido, 228 byte

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)

Provalo online!


1

Python 3 , 122 121 byte

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

Provalo online!

-1 byte passando fdalla stampa alla funzione generatore.

g è una funzione helper ricorsiva che determina se una stringa s è una "stringa saltante" (funziona poiché i codici carattere da 0 a 9 sono in ordine e contigui).

fè una funzione del generatore che accetta ne produce i primi nnumeri saltanti.


1

R , 85 byte

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

Provalo online!

Sospetto che questo possa essere giocato di più. Legge il numero usando scan()ed emette il numero di salto appropriato.




1

Fattore , 129 byte

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

Provalo online!

Emette i primi nnumeri saltanti


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.