Numéros de saut


12

Un nombre sautant est défini comme un nombre positif n dont toutes les paires de chiffres décimaux consécutifs diffèrent de 1. De plus, tous les nombres à un seul chiffre sont considérés comme des nombres sautants. par exemple. 3, 45676, 212 sont des numéros sautants mais 414 et 13 ne le sont pas. La différence entre 9 et 0 n'est pas considérée comme 1

Le défi Créer un programme qui génère l'un des résultats suivants:

  • Étant donné une nsortie d' entrée, les premiers nnombres sautants.
  • Étant donné une nsortie d' entrée, le ne terme de la séquence.

Remarque

  • Tout format d'E / S valide est autorisé
  • 1 index ou 0 index est autorisé (veuillez préciser)

Voici quelques chiffres sautants:

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

C'est aussi A033075


Est-ce 0 ou 1 indexé?
Taylor Scott

1
@TaylorScott La séquence se compose uniquement de nombres positifs. Si vous voulez dire l'entrée, nc'est à vous de décider.
Luis felipe De jesus Munoz

Je suppose que "Tout format d'E / S valide est autorisé" comprend la sortie des nombres sous forme de listes de chiffres décimaux, mais je voulais juste confirmer -?
Jonathan Allan

Oui @JonathanAllan
Luis felipe De jesus Munoz

Réponses:



6

Gelée , 8 octets

1DI*`ƑƊ#

Un programme complet acceptant un entier n,, de STDIN qui imprime une liste des premiers nnombres sautants positifs.

Essayez-le en ligne!

Comment?

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 (hérité) , 5 octets

L'entrée est indexée sur 1.

Code:

µN¥ÄP

Utilise l' encodage 05AB1E . Essayez-le en ligne!


Explication

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

Le bon outil pour le travail.
lirtosiast

5

Python 2 , 79 75 octets

-4 octets par 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

Essayez-le en ligne!

Dérivé de la réponse de Chas Brown . La fonction d'assistance renvoie s'il s'agit d'un nombre sautant. Si les deux derniers chiffres d'un nombre ont la différence absolue 1, ils seront alors 1 ou 10, donc 1.g(i)inn%100%11n%100%11%9


Belle astuce avec le %11. Vous pouvez le faire f=lambda n,i=1:n and-~f(n-g(i),i+1)si vous passez à une seule indexation.
xnor

4

APL (Dyalog Unicode) , 36 octets SBCS

1 indexé. Merci à dzaima pour son aide à jouer au golf.

Edit: -15 octets de ngn.

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

Essayez-le en ligne!

Explication

Nous avons f⍣g⍣h, où, comme c'est un opérateur, APL traduit cela (f⍣g)⍣h. (Contrairement aux fonctions où 2×3+1est traduit 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

c'est beaucoup plus court avec au lieu de récursivité: {1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⍵⊢0}ou1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⎕⊢0
ngn

"⍣ est un opérande" - c'est un "opérateur" (j'ai cette erreur dans le chat et je l'ai corrigée, mais il semble que vous ayez récupéré la version initiale. Désolé)
ngn



3

Python 2 , 88 87 octets

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)

Essayez-le en ligne!

Renvoie le numéro de saut indexé 0 (c.-à-d. F (0) => 1, etc.).


@lirtosiast: C'est OK, veuillez faire don de votre réponse à votre organisme de bienfaisance préféré :). C'est suffisamment différent pour mériter une réponse distincte (tout en étant approprié dans plusieurs langues).
Chas Brown

3

Haskell , 69 octets

  • Merci à Joseph Sible d' avoir appliqué les règles du défi et d'avoir économisé trois octets.
  • Enregistré deux octets grâce à nimi .
(filter(all((==1).abs).(zipWith(-)<*>tail).map fromEnum.show)[1..]!!)

Essayez-le en ligne!


1
Cela semble répondre à la question "est-ce un numéro sautant?" pour un numéro d'entrée donné, ce qui n'est pas ce que le défi demandait.
Joseph Sible-Reinstate Monica

@JosephSible Vous avez raison. Merci de noter.
Jonathan Frech

En outre, maintenant que cela est résolu, vous pouvez graccourcir de 3 octets en le réécrivant sans point, puis en utilisant <*>:g=all((==1).abs).(zipWith(-)<*>tail).map(read.pure).show
Joseph Sible-Reinstate Monica

@JosephSible Merci.
Jonathan Frech

@nimi Done. Je vous remercie.
Jonathan Frech



1

Swift, 228 octets

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)

Essayez-le en ligne!


1

Python 3 , 122 121 octets

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

Essayez-le en ligne!

-1 octet en passant fde l'impression à une fonction de générateur.

gest une fonction d'aide récursive qui détermine si une chaîne sest une "chaîne sautante" (cela fonctionne puisque les codes de caractères de 0 à 9 sont en ordre et contigus).

fest une fonction de générateur qui prend net donne les premiers nnombres sautants.


1

R , 85 octets

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

Essayez-le en ligne!

Je soupçonne que cela peut être joué plus. Lit le nombre en utilisant scan()et sort le numéro de saut approprié.




1

Facteur , 129 octets

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

Essayez-le en ligne!

Sort les premiers nnombres sautants


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.