Skaczące liczby

12

Liczba skokowa jest zdefiniowana jako liczba dodatnia n, której wszystkie pary kolejnych cyfr dziesiętnych różnią się o 1. Ponadto wszystkie liczby jednocyfrowe są uważane za liczby skokowe. na przykład. 3, 45676, 212 to numery skokowe, ale 414 i 13 nie. Różnicy między 9 a 0 nie uważa się za 1

Wyzwanie Utwórz program, który generuje jeden z następujących wyników:

  • Biorąc pod uwagę dane nwyjściowe, pierwsze nliczby skokowe.
  • Biorąc pod uwagę dane nwyjściowe, termin nth sekwencji.

Uwaga

  • Dowolny prawidłowy format we / wy jest dozwolony
  • 1-indeksowy lub 0-indeksowy jest dozwolony (proszę określić)

Oto kilka liczb skokowych:

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

To także jest A033075

Luis Felipe De Jesus Munoz
źródło
Czy to 0 lub 1 Indeksowane?
Taylor Scott
1
@TaylorScott Sekwencja składa się tylko z liczb dodatnich. Jeśli masz na myśli wejście n, to zależy od ciebie.
Luis felipe De jesus Munoz
Zgaduję, że „Dozwolony jest każdy prawidłowy format we / wy” obejmuje wyświetlanie liczb jako list cyfr dziesiętnych, ale chciałem tylko potwierdzić -?
Jonathan Allan
Tak @JonathanAllan
Luis

Odpowiedzi:

6

Galaretka , 8 bajtów

1DI*`ƑƊ#

Pełny program akceptujący liczbę całkowitą, nod STDIN, który wypisuje listę pierwszych ndodatnich liczb skokowych.

Wypróbuj online!

W jaki sposób?

Dopuszczalne różnice między przyrostowe cyfry 1i -1podczas gdy inni ze [-9,-2]+[2,9]nie. Wyrównuje się to do liczb całkowitych, które są niezmienne, gdy są wywoływane dla siebie. tj. xx=x ponieważ:

00=1
11=1
2)2)=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
Jonathan Allan
źródło
6

05AB1E (starsza wersja) , 5 bajtów

Dane wejściowe są indeksowane 1.

Kod:

µN¥ÄP

Wykorzystuje kodowanie 05AB1E . Wypróbuj online!


Wyjaśnienie

µ          # 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
źródło
Odpowiednie narzędzie do pracy.
lirtosiast
5

Python 2 , 79 75 bajtów

-4 bajty 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

Wypróbuj online!

Pochodzące z Chas Brown „s odpowiedź . Funkcja pomocnika g(i)zwraca, czy ijest liczbą skokową. Jeśli dwie ostatnie cyfry numeru nmają bezwzględną różnicę 1, to n%100%11będzie 1 lub 10, a więc n%100%11%91.

lirtosiast
źródło
Niezła sztuczka z %11. Możesz to zrobić, f=lambda n,i=1:n and-~f(n-g(i),i+1)jeśli przejdziesz na indeksowanie z jednym indeksem.
xnor
4

APL (Dyalog Unicode) , 36 bajtów SBCS

1-indeksowany. Dzięki dzaima za pomoc w grze w golfa.

Edycja: -15 bajtów z ngn.

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

Wypróbuj online!

Wyjaśnienie

Mamy f⍣g⍣h, gdzie, jako operator, APL tłumaczy to (f⍣g)⍣h. (W przeciwieństwie do funkcji, w których 2×3+1jest tłumaczony 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
źródło
10⊥⍣¯1⊢⍺->⍎¨⍕⍺
ngn
jest znacznie krótszy z zamiast rekurencji: {1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⍵⊢0}lub1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⎕⊢0
ngn
„⍣ jest operandem” - to „operator” (ja ten błąd na czacie i poprawiłem go, ale wygląda na to, że wybrałeś początkową wersję. Przepraszam)
ngn
3

C (gcc) , 90 bajtów

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;}

Wypróbuj online!

Jonathan Frech
źródło
3

Japt, 14 bajtów

Wysyła pierwszy ntermin, indeksowany 1.

_ì äa dÉ ªU´}f

Spróbuj

(Wiem, wiem, powinienem zrobić sobie przerwę, ale wycofuję się z gry w golfa!)

Kudłaty
źródło
Haha, może idź nauczyć się nowego języka golfa, aby wyleczyć swoją wypłatę. : P
Quintec
3

Python 2 , 88 87 bajtów

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)

Wypróbuj online!

Zwraca 0-indeksowaną liczbę skoków (tj. F (0) => 1 itd.).

Chas Brown
źródło
@lirtosiast: W porządku, przekaż swoją odpowiedź na swoją ulubioną działalność charytatywną :). Jest wystarczająco różny, aby zasługiwać na osobną odpowiedź (a także być odpowiedni dla różnych języków).
Chas Brown
3

Haskell , 69 bajtów

  • Podziękowania dla Josepha Sible za egzekwowanie zasad wyzwania i oszczędność trzech bajtów.
  • Zapisany dwa bajty dzięki Nimi .
(filter(all((==1).abs).(zipWith(-)<*>tail).map fromEnum.show)[1..]!!)

Wypróbuj online!

Jonathan Frech
źródło
1
To wydaje się odpowiadać na pytanie „czy to skacząca liczba?” dla danego numeru wejściowego, a nie tego wymagało wyzwanie.
Joseph Sible-Reinstate Monica
@JosephSible Masz rację. Dziękuję za uwagę.
Jonathan Frech
Ponadto, teraz, gdy jest to naprawione, możesz gskrócić 3 bajty, przepisując go tak, aby był bezcelowy, a następnie używając <*>:g=all((==1).abs).(zipWith(-)<*>tail).map(read.pure).show
Joseph Sible-Reinstate Monica
@JosephSible Dziękujemy.
Jonathan Frech
@nimi Gotowe. Dziękuję Ci.
Jonathan Frech
2

JavaScript (ES7), 60 bajtów

n

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

Wypróbuj online!

Arnauld
źródło
1

Szybki, 228 bajtów

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)

Wypróbuj online!

onnoweb
źródło
1

Python 3 , 122 121 bajtów

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

Wypróbuj online!

-1 bajt poprzez zmianę fz drukowania na funkcję generatora.

g to rekurencyjna funkcja pomocnicza, która określa, czy ciąg znaków s jest „łańcuchem skokowym” (działa, ponieważ kody znaków od 0 do 9 są w porządku i ciągłe).

fto funkcja generatora, która przyjmuje ni zwraca pierwsze nskaczące liczby.

pizzapanty184
źródło
1

R , 85 bajtów

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

Wypróbuj online!

Podejrzewam, że można bardziej grać w golfa. Odczytuje liczbę za pomocą scan()i wyświetla odpowiedni numer skoku.

Nick Kennedy
źródło
1

Perl 5 , 56 bajtów

map{1while++$n=~s|.(?=(.))|abs$&-$1!=1|ger>9}1..<>;say$n

Wypróbuj online!

1-indeksowany, zwraca n- liczbę skokową

Xcali
źródło
1

Współczynnik , 129 bajtów

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

Wypróbuj online!

Wysyła pierwsze nskaczące liczby

Galen Iwanow
źródło