Urutan angka mandiri

22

Mari kita definisikan bilangan mandiri sebagai bilangan bulat positif, yang digit-nya muncul dalam jangka panjang yang sama dengan diri mereka sendiri. Dengan kata lain, setiap angka desimal d (tidak termasuk 0 ) hanya terjadi dalam panjang yang berjalan tepat d .

Tugas

Anda dapat memilih salah satu dari tiga metode yang tercantum di bawah ini:

  • Mengingat integer n , output n th (0 atau 1-diindeks) nomor mandiri.
  • Dengan bilangan bulat n , hasilkan angka pertama n mandiri.
  • Cetak urutan tanpa batas.

Contohnya

  • 133322 adalah angka mandiri karena 3 muncul dalam rentetan tiga 3 's, 1 adalah tunggal dan 2 terjadi dalam rentetan dua 2 ' s.

  • Di sisi lain, 35553355 tidak, karena, meskipun 5 dan 3 masing-masing terjadi lima dan tiga kali, mereka tidak membentuk lintasan angka yang berdekatan.

  • 44422 tidak mandiri, karena 4 hanya terjadi tiga kali.

  • 12222333 juga tidak, karena 2 muncul dalam run of four 2 's, dan tidak dapat diperlakukan sebagai dua run yang terpisah dari two 2 's.

Tidak mengherankan, ini adalah OEIS A140057 , dan beberapa istilah pertamanya adalah:

1, 22, 122, 221, 333, 1221, 1333, 3331, 4444, 13331, 14444, 22122, 22333, 33322, 44441, 55555, 122122, 122333, 133322, 144441, 155555

Anda dapat mengambil input dan memberikan output melalui salah satu metode standar , dalam bahasa pemrograman apa pun , sambil mencatat bahwa celah ini dilarang secara default. Ini adalah kode golf, jadi kode terpendek dalam byte (dalam setiap bahasa) menang.

Tuan Xcoder
sumber

Jawaban:

8

Python 2 , 104 94 83 byte

-10 byte terima kasih kepada Tn. Xcoder
-11 byte terima kasih kepada Jonathan Allan

i=0
while 1:
 if`i`==''.join(d*int(d)for c,d in zip(`-i`,`i`)if d!=c):print i
 i+=1

Cobalah online!

ovs
sumber
... sebenarnya ini bisa diterima, karena akan rontok begitu imenjadi lama ? Mungkin perlu digunakanstr (saya tidak pernah benar-benar yakin akan hal-hal ini).
Jonathan Allan
1
@ Jonathan Allan, ini pertanyaan yang menarik. Biasanya kita diperbolehkan berasumsi bahwa itu dalam tipe integer standar , tidak lama , tetapi Python tidak membuat perbedaan ini sangat jelas ...
FlipTack
6

Mathematica, 66 byte

Mencetak urutan tanpa batas

Do[##&&Print@t&@@(#==Tr[1^{##}]&@@@Split@IntegerDigits@t),{t,∞}]

Cobalah online!

Di TIO Anda harus menghentikan eksekusi untuk melihat hasilnya tetapi di Mathematica berfungsi dengan baik.

-12 byte dari Martin Ender

J42161217
sumber
6

05AB1E , 9 byte

Mengembalikan istilah ke-n dari urutan, 1-diindeks.

µNÔNγ€gJQ

Cobalah online!

Penjelasan

µ           # loop over increasing N until counter equals input
 NÔ         # push N with consecutive equal elements deduplicated
   Nγ       # push N grouped into runs of consecutive equal elements
     €g     # get the length of each run
       J    # join to a number
        Q   # check for equality
            # if true, implicitly increment counter
Emigna
sumber
Sumber inspirasi yang mungkin dari pendekatan 10-byte saya:µNγD€gs€ÙQ
Mr. Xcoder
6

JavaScript (ES6), 76 71 68 byte

Mengembalikan istilah ke-n dari urutan, 0-diindeks.

f=(n,k)=>+(k+'').replace(/(.)\1*/g,s=>s.length^s[0])||n--?f(n,-~k):k

NB : Seperti biasa dengan fungsi rekursif, rentang input tergantung pada dukungan Optimasi Panggilan Ekor dan ukuran tumpukan mesin Anda.

Demo


Alt. versi, 65 byte

Tidak mengambil input dan mencetak hasilnya dengan alert(), satu per satu.

f=k=>f(-~k,+(k+'').replace(/(.)\1*/g,s=>s.length^s[0])||alert(k))

Cobalah online! (Berhenti segera setelah ukuran tumpukan maksimum terlampaui.)

Arnauld
sumber
2

CJam , 20 byte

1{_Abe`::=:*{_p}&)}h

Cobalah online!

Penjelasan:

1                       push 1
 {                }h    while TOS is truthy (i.e. forever):            example iteration: 14444
  _                       duplicate                                                       14444 14444       
   Ab                     convert to base 10 (get decimal digits)                         14444 [1 4 4 4 4]
     e`                   run-length encode (array of two-element arrays)                 14444 [[1 1] [4 4]]
       :                  map over the array:
        :                   fold between the two array elements with:
         =                    equality                                                    14444 [1 1]
          :               fold between the array elements with:
           *                multiplication (a.k.a. logical AND for 1 or 0)                14444 1
            {  }&         if this yields a result of 1:
             _              duplicate the number and                                      14444 14444
              p             print it                                                      14444 (output 14444)
                 )        increment the number                                            14445
Buah Esolanging
sumber
2

Haskell , 70 byte

import Data.List
filter(all(\s->read[s!!0]==length s).group.show)[1..]
Xiyng
sumber
1
Anda dapat melepaskan yang terdepan x=sesuai aturan golf kami .
Laikoni
2

Brachylog , 10 byte

≜ℕẹḅ⟨l=h⟩ᵐ

Cobalah online!

Menghasilkan elemen dari urutan secara tak terbatas melalui variabel inputnya. (Jika itu benar-benar harus melakukan pencetakan itu sendiri, tambahkan &ẉ⊥.) Ini pada dasarnya adalah kode untuk memecahkan masalah sesuai dengan yang diawali dengan kasar memaksa solusi terkecil terlebih dahulu:

        ᵐ    For every
  ḅ          run of
 ẹ           digits in
             the input variable
ℕ            (which is a non-negative integer),
   ⟨l  ⟩     its length
   ⟨  h⟩     and its first element
   ⟨ = ⟩     are equal.

Saya berharap ini hanya memakan waktu 9 byte, tetapi tampaknya membutuhkan eksplisit untuk memisahkan digit angka menjadi run.

String yang tidak terkait
sumber
1

JavaScript 4, 83 80 byte

for(i=0;;)+(++i+'').replace(/(.)\1*/g,function(x,y){return y^x.length})||alert(i)

for(i=0;i<1000;)+(++i+'').replace(/(.)\1*/g,function(x,y){return y^x.length})||alert(i)

l4m2
sumber
"Javascript 1"? Apakah ada nama bahasa seperti itu?
user202729
Maksud saya ini berfungsi sejak JavaScript muncul, tidak yakin apakah namanya benar
l4m2
maaf sepertinya tidak berfungsi di js1. Saya membaca dan tidak menemukan pengganti
l4m2
1

Perl 6 , 49 byte

{(grep /^((\d)$0*:<?{$/.comb==$0}>)+$/,^Inf)[$_]}

Cobalah online!

Mengembalikan nelemen -th dari urutan, diindeks-nol.

Sean
sumber
The \dhanya bisa.
Jo Raja
1

R , 56 byte

function(n)all((r=rle(el(strsplit(c(n,''),''))))$l==r$v)

Cobalah online!

Menggunakan pengodean run run pada nomor split. Mengembalikan nilai true jika semua panjang sama dengan nilai.

Catatan: Saya telah memuat methodsperpustakaan di TIO untuk mulai elbekerja.

MickyT
sumber
1

Stax , 10 byte

Ç≡∟Öz≈¢αV¢

Jalankan dan debug itu

Program ini memfilter semua bilangan bulat positif dengan filter. Digit dikode panjangnya. Untuk setiap proses, digit harus sama dengan panjang proses.

rekursif
sumber
0

Perl 5 -p , 48 byte

++$\=~s|(.)\1*|$1-length$&&&redo|gre for 1..$_}{

Cobalah online!

Mengembalikan elemen ke-n, 1 diindeks.

Xcali
sumber
0

Java 10, 121 byte

Seekor lambda dari intke int. Fungsi ini mengambil indeks n dan mengembalikan nilai urutan ke- n (1-diindeks).

n->{int x=0,m=1;for(;n>0;n-=m,m=1)for(var p:(++x+"").split("(?<=(.))(?!\\1)"))m=p.length()==p.charAt(0)-48?m:0;return x;}

Cobalah secara Online

Tidak disatukan

n -> {
    int x = 0, m = 1;
    for (; n > 0; n -= m, m = 1)
        for (var p : (++x + "").split("(?<=(.))(?!\\1)"))
            m = p.length() == p.charAt(0) - 48 ? m : 0;
    return x;
}
Jakob
sumber