Zahlen springen

12

Eine Sprungzahl ist definiert als eine positive Zahl n, bei der sich alle Paare aufeinanderfolgender Dezimalstellen um 1 unterscheiden. Außerdem werden alle einstelligen Zahlen als Sprungzahlen betrachtet. z.B. 3, 45676, 212 sind Sprungzahlen, 414 und 13 jedoch nicht. Die Differenz zwischen 9 und 0 wird nicht als 1 betrachtet

Die Herausforderung Erstellen Sie ein Programm, das eines der folgenden Ergebnisse ausgibt:

  • Bei einer Eingabe nwerden die ersten Sprungzahlen ausgegeben n.
  • Bei einer Eingabe nwird der ndritte Term der Sequenz ausgegeben .

Hinweis

  • Jedes gültige E / A-Format ist zulässig
  • 1-Index oder 0-Index ist erlaubt (bitte angeben)

Hier sind einige springende Zahlen:

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

Dies ist auch A033075

Luis Felipe De Jesus Munoz
quelle
Ist diese 0 oder 1 indiziert?
Taylor Scott
1
@TaylorScott Die Sequenz besteht nur aus positiven Zahlen. Wenn Sie den Input meinen, ndann liegt es an Ihnen.
Luis Felipe De Jesus Munoz
Ich vermute, "Jedes gültige E / A-Format ist zulässig" beinhaltet die Ausgabe der Zahlen als Listen mit Dezimalstellen, wollte aber nur bestätigen -?
Jonathan Allan
Yes @JonathanAllan
Luis Felipe De Jesus Munoz

Antworten:

6

Gelee , 8 Bytes

1DI*`ƑƊ#

Ein vollständiges Programm, das eine Ganzzahl nvon STDIN akzeptiert und eine Liste der ersten npositiven Sprungzahlen druckt .

Probieren Sie es online!

Wie?

Akzeptable inkrementelle Unterschiede zwischen den Ziffern sind 1und -1während andere [-9,-2]+[2,9]nicht sind. Dies stimmt mit ganzen Zahlen überein, die unveränderlich sind, wenn sie zu sich selbst erhoben werden. dh xx=x seit:

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
quelle
6

05AB1E (Legacy) , 5 Byte

Die Eingabe ist 1-indiziert.

Code:

µN¥ÄP

Verwendet die 05AB1E- Codierung. Probieren Sie es online!


Erläuterung

µ          # 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
quelle
Richtiges Werkzeug für den Job.
Lirtosiast
5

Python 2 , 79 75 Bytes

-4 Bytes von 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

Probieren Sie es online!

Abgeleitet von Chas Brown ‚s Antwort . Die Hilfsfunktion gibt g(i)zurück, ob ies sich um eine springende Zahl handelt. Aus den letzten beiden Ziffern einer Zahln die absolute Differenz 1 haben, ist n%100%11sie entweder 1 oder 10, also n%100%11%91.

Lirtosiast
quelle
Netter Trick mit dem %11. Sie können dies tun, f=lambda n,i=1:n and-~f(n-g(i),i+1)wenn Sie auf eine Indizierung umstellen.
Xnor
4

APL (Dyalog Unicode) , 36 Byte SBCS

1-indiziert. Vielen Dank an dzaima für ihre Hilfe beim Golfen.

Edit: -15 Bytes von ngn.

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

Probieren Sie es online!

Erläuterung

Wir haben f⍣g⍣h, wo, wie ein Betreiber, APL dies übersetzt (f⍣g)⍣h. (Im Gegensatz zu Funktionen, bei denen 2×3+1übersetzt wird 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
quelle
10⊥⍣¯1⊢⍺->⍎¨⍕⍺
ngn
Es ist viel kürzer mit statt Rekursion: {1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⍵⊢0}oder1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⎕⊢0
ngn
"⍣ ist ein Operand" - es ist ein "Operator" (ich habe diesen Fehler im Chat korrigiert, aber anscheinend haben Sie die ursprüngliche Version übernommen. Entschuldigung)
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;}

Probieren Sie es online!

Jonathan Frech
quelle
3

Japt, 14 Bytes

Gibt den ersten nTerm 1-indiziert aus.

_ì äa dÉ ªU´}f

Versuch es

(Ich weiß, ich weiß, ich soll eine Pause machen, aber ich bin im Golf-Rückzug!)

Zottelig
quelle
Haha, vielleicht lernen Sie eine neue Golfsprache, um Ihren Rückzug zu heilen. : P
Quintec
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)

Probieren Sie es online!

Gibt die 0-indizierte Sprungzahl zurück (dh f (0) => 1 usw.).

Chas Brown
quelle
@lirtosiast: Das ist OK, bitte spende deine Antwort an deine Lieblings-Wohltätigkeitsorganisation :). Es ist ausreichend anders, um eine separate Antwort zu verdienen (und auch sprachübergreifend).
Chas Brown
3

Haskell , 69 Bytes

  • Vielen Dank an Joseph Sible für die Durchsetzung der Herausforderungsregeln und das Speichern von drei Bytes.
  • Zwei Bytes dank nimi gespart .
(filter(all((==1).abs).(zipWith(-)<*>tail).map fromEnum.show)[1..]!!)

Probieren Sie es online!

Jonathan Frech
quelle
1
Dies scheint die Frage zu beantworten "Ist dies eine springende Zahl?" für eine gegebene Eingabenummer, was nicht das ist, wonach die Herausforderung gefragt hat.
Joseph Sible-Reinstate Monica
@ JosephSible Sie sind richtig. Vielen Dank für die Kenntnisnahme.
Jonathan Frech
gNachdem dies behoben wurde, können Sie 3 Bytes kürzer machen, indem Sie es so umschreiben, dass es keine Punkte enthält, und dann Folgendes verwenden <*>:g=all((==1).abs).(zipWith(-)<*>tail).map(read.pure).show
Joseph Sible-Reinstate Monica
@ JosephSible Vielen Dank.
Jonathan Frech
@nimi Fertig. Vielen Dank.
Jonathan Frech
2

JavaScript (ES7), 60 Byte

n

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

Probieren Sie es online!

Arnauld
quelle
1

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

Probieren Sie es online!

onnoweb
quelle
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

Probieren Sie es online!

-1 Byte durch Umschalten fvom Drucken auf eine Generatorfunktion.

g ist eine rekursive Hilfsfunktion, die feststellt, ob eine Zeichenfolge vorhanden ist s eine "springende Zeichenfolge" ist (dies funktioniert, da die Zeichencodes für 0 bis 9 in Reihenfolge und zusammenhängend sind).

fist eine Generatorfunktion, die ndie ersten nSprungzahlen aufnimmt und liefert .

Pizzapants184
quelle
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

Probieren Sie es online!

Ich vermute, das kann mehr golfen werden. Liest die Nummer mit scan()und gibt die entsprechende Sprungnummer aus.

Nick Kennedy
quelle
1

Faktor 129 Bytes

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

Probieren Sie es online!

Gibt die ersten nSprungzahlen aus

Galen Ivanov
quelle