Angka Melompat

12

Nomor lompatan didefinisikan sebagai angka positif n yang semua pasangan angka desimal berurutannya berbeda dengan 1. Selain itu, semua angka tunggal dianggap sebagai nomor lompat. misalnya. 3, 45676, 212 adalah angka melompat tetapi 414 dan 13 tidak. Perbedaan antara 9 dan 0 tidak dianggap sebagai 1

Tantangannya Buat program yang menampilkan salah satu dari hasil berikut:

  • Diberikan input noutput nnomor lompatan pertama .
  • Diberikan input noutput istilah nth urutan.

Catatan

  • Setiap format I / O yang valid diizinkan
  • 1-indeks atau 0-indeks diizinkan (harap sebutkan)

Berikut ini beberapa nomor lompat:

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

Ini juga A033075

Luis felipe De jesus Munoz
sumber
Apakah ini 0 atau 1 Diindeks?
Taylor Scott
1
@TaylorScott Urutan ini hanya terdiri dari angka positif. Jika Anda maksud input nmaka terserah Anda.
Luis felipe De jesus Munoz
Saya menduga "Setiap format I / O yang valid diizinkan" termasuk mengeluarkan angka sebagai daftar angka desimal, tetapi hanya ingin mengonfirmasi -?
Jonathan Allan
Ya @JonathanAllan
Luis felipe De jesus Munoz

Jawaban:

6

Jelly , 8 byte

1DI*`ƑƊ#

Program lengkap yang menerima bilangan bulat,, ndari STDIN yang mencetak daftar nnomor lompatan positif pertama .

Cobalah online!

Bagaimana?

Perbedaan inkremental yang dapat diterima antara digit adalah 1dan -1sementara yang lain dari [-9,-2]+[2,9]tidak. Ini sejalan dengan bilangan bulat yang tidak berubah ketika dinaikkan ke diri mereka sendiri. yaitu sejak: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
Jonathan Allan
sumber
6

05AB1E (warisan) , 5 byte

Input diindeks 1.

Kode:

µN¥ÄP

Menggunakan penyandian 05AB1E . Cobalah online!


Penjelasan

µ          # 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
sumber
Alat yang tepat untuk pekerjaan itu.
lirtosiast
5

Python 2 , 79 75 byte

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

Cobalah online!

Berasal dari Chas Brown 's jawaban . Fungsi helper g(i)mengembalikan apakah inomor lompatan. Jika dua digit terakhir dari angka nmemiliki selisih absolut 1, maka n%100%11akan menjadi 1 atau 10, jadi n%100%11%9akan menjadi 1.

lirtosiast
sumber
Trik yang bagus dengan %11. Anda dapat melakukannya f=lambda n,i=1:n and-~f(n-g(i),i+1)jika Anda beralih ke pengindeksan satu.
xnor
4

APL (Dyalog Unicode) , 36 byte SBCS

1-diindeks. Terima kasih kepada dzaima atas bantuan mereka dalam bermain golf ini.

Edit: -15 byte dari ngn.

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

Cobalah online!

Penjelasan

Kami memiliki f⍣g⍣h, di mana, seperti operator, APL menerjemahkannya ke (f⍣g)⍣h. (Berbeda dengan fungsi di mana 2×3+1diterjemahkan 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
sumber
10⊥⍣¯1⊢⍺->⍎¨⍕⍺
ngn
itu jauh lebih pendek dengan bukannya rekursi: {1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⍵⊢0}atau1+⍣{∧/1=|2-/⍎¨⍕⍺}⍣⎕⊢0
ngn
"⍣ adalah operan" - ini adalah "operator" (saya kesalahan ini dalam obrolan dan memperbaikinya, tetapi tampaknya Anda mengambil versi awal. Maaf)
ngn
3

C (gcc) , 90 byte

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

Cobalah online!

Jonathan Frech
sumber
3

Japt, 14 byte

Menghasilkan nistilah th pertama , 1-diindeks.

_ì äa dÉ ªU´}f

Cobalah

(Aku tahu, aku tahu, aku seharusnya istirahat tapi aku dalam penarikan golf!)

Shaggy
sumber
Haha, mungkin belajar bahasa golf baru untuk menyembuhkan penarikan Anda. : 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)

Cobalah online!

Mengembalikan nomor lompatan 0-diindeks (yaitu, f (0) => 1, dll).

Chas Brown
sumber
@ lirtosiast: Tidak apa-apa, tolong donasikan jawaban Anda ke badan amal favorit Anda :). Cukup berbeda untuk mendapatkan respons yang terpisah (serta sesuai lintas bahasa).
Chas Brown
3

Haskell , 69 byte

  • Terima kasih kepada Joseph Sible karena menegakkan aturan tantangan dan menghemat tiga byte.
  • Disimpan dua byte berkat nimi .
(filter(all((==1).abs).(zipWith(-)<*>tail).map fromEnum.show)[1..]!!)

Cobalah online!

Jonathan Frech
sumber
1
Ini muncul untuk menjawab pertanyaan "apakah ini nomor lompat?" untuk nomor input yang diberikan, yang bukan merupakan tantangan yang diminta.
Joseph Sible-Reinstate Monica
@JosephSible Anda benar. Terima kasih atas perhatiannya.
Jonathan Frech
Juga, sekarang setelah diperbaiki, Anda dapat membuat g3 byte lebih pendek dengan menulis ulangnya menjadi pointfree, lalu menggunakan <*>:g=all((==1).abs).(zipWith(-)<*>tail).map(read.pure).show
Joseph Sible-Reinstate Monica
@JosephSible Terima kasih.
Jonathan Frech
@nimi Selesai. Terima kasih.
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

Cobalah online!

Arnauld
sumber
1

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

Cobalah online!

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

Cobalah online!

-1 byte dengan mengubah fdari pencetakan, ke fungsi generator.

gadalah fungsi pembantu rekursif yang menentukan apakah string sadalah "string lompat" (ini berfungsi karena kode karakter untuk 0 hingga 9 berurutan dan berdampingan).

fadalah fungsi generator yang mengambil ndan menghasilkan nangka lompatan pertama .

pizzapants184
sumber
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

Cobalah online!

Curiga ini bisa lebih banyak golf. Membaca nomor menggunakan scan()dan menampilkan nomor lompatan yang sesuai.

Nick Kennedy
sumber
1

Perl 5 , 56 byte

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

Cobalah online!

1-diindeks, menampilkan nomor lompat ke- n

Xcali
sumber
1

Faktor , 129 byte

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

Cobalah online!

Menghasilkan nangka melompat pertama

Galen Ivanov
sumber