Kendi kendine yeten sayıların sırası


22

Kendi kendine yeten bir sayıyı, haneleri yalnızca kendilerine eşit uzunluktaki uzunluklarda görünen pozitif bir tamsayı olarak tanımlayalım . Başka bir deyişle, herhangi bir ondalık basamağı d ( 0 hariç ) yalnızca tam olarak d uzunluğunda çalışır .

Görev

Aşağıda listelenen üç yöntemden birini seçebilirsiniz:

  • Bir tamsayıdır verilen n , çıkış N inci (0 ya da 1 endeksli) kendi kendine yeten bir sayı.
  • N bir tamsayı verildiğinde , ilk n bağımsız sayıları verir.
  • Diziyi süresiz olarak yazdırın.

Örnekler

  • 133322 kendi kendine yeten bir sayıdır, çünkü 3 üç 3 ' lük bir çalışmada görünür , 1 tekdir ve 2 iki 2'lik bir çalışmada oluşur .

  • Öte yandan, 35553355 , 5 ve 3 sırasıyla beş ve üç kez meydana gelmesine rağmen , bitişik basamakların dizilerini oluşturmazlar.

  • 44422 kendi kendine yetmez , çünkü 4 sadece üç kez meydana gelir.

  • 12222333 , çünkü ya değildir 2 dört bir vadede görünür 2 's ve iki iki ayrı çalışma olarak kabul edilemez 2 s'.

Beklendiği gibi, bu OEIS A140057 ve ilk birkaç terimi:

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

Bu boşlukların varsayılan olarak yasak olduğunu not ederek, herhangi bir programlama dilinde standart yöntemlerden herhangi biri ile girdi alabilir ve çıktı alabilirsiniz . Bu kod golf, yani bayt cinsinden en kısa kod (her dilde) kazanır.

Yanıtlar:


8

Python 2 , 104 94 83 bayt

Bay Xcoder sayesinde -10 bayt
, Jonathan Allan ile -11 bayt

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

Çevrimiçi deneyin!


... aslında bu kabul edilebilir, çünkü bir kerede düşecek iuzun sürecek mi? Gerekebilir kullanmakstr (gerçekten emin bunları olsa asla değilim).
— Jonathan Allan,

1
@ JonathanAllan ilginç bir soru. Normalde , uzun süredir standart tamsayı tipinin içinde olduğunu kabul
— etmemize

6

Mathematica, 66 bayt

Diziyi süresiz olarak yazdırır

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

Çevrimiçi deneyin!

TIO'da sonucu görmek için yürütmeyi sonlandırmanız gerekir, ancak Mathematica'da iyi çalışıyor.

-12 Martin Ender gelen bayt


6

05AB1E , 9 bayt

1 indeksli dizinin nt terimini döndürür.

µNÔNγ€gJQ

Çevrimiçi deneyin!

açıklama

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

10 baytlık yaklaşımımdan olası bir ilham kaynağı:µNγD€gs€ÙQ
— Bay Xcoder

6

JavaScript (ES6), 76 71 68 bayt

0 indeksli dizinin n. Terimini döndürür .

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

Not : Her zaman olduğu gibi özyinelemeli işlevlerde, giriş aralığı Kuyruk Çağrı Optimizasyonu desteğine ve motorunuzun yığın boyutuna bağlıdır.

gösteri


Alt. sürüm, 65 bayt

Giriş yapmaz ve sonuçları alert()tek tek yazdırır .

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

Çevrimiçi deneyin! (Maksimum yığın boyutu aşıldığı anda durur.)



2

CJam , 20 bayt

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

Çevrimiçi deneyin!

Açıklama:

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


2

Brachylog , 10 bayt

≜ℕẹḅ⟨l=h⟩ᵐ

Çevrimiçi deneyin!

Sınırsız olarak dizinin öğelerini girdi değişkeni aracılığıyla oluşturur . (Eğer gerçekten baskıyı kendisi yapmak zorundaysa, onu ekleyiniz &ẉ⊥.) Bu, esas olarak , en küçük çözümleri ilk önce kaba bir şekilde zorlamak için hazırlanmış bir ilgili çözmek için kullanılan koddur ≜:

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

Bunun yalnızca 9 bayt almasını bekledim, ancak sayının basamaklarını satırlara ayırmak için ḅaçık bir şekilde ẹçalışmak gerekiyor.


1

JavaScript 4, 83 80 bayt

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)


"Javascript 1"? Böyle bir dil adı var mı?
— user202729

JavaScript göründüğü için işe yarıyor, adın correwct olup olmadığından emin değilim
— l4m2

Üzgünüm, js1'de işe yaramadı. Okudum ve hiçbir yerini bulamadım
— l4m2


1

R , 56 bayt

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

Çevrimiçi deneyin!

Bölünmüş numaradaki çalışma uzunluğu kodlamasını kullanır. Tüm uzunluklar değerleri eşit ise true değerini döndürür.

Not: Çalışmak için methodskütüphaneyi TIO'ya yükledim el.


1

Stax , 10 bayt

Ç≡∟Öz≈¢αV¢

Koş ve hata ayıkla

Bu program tüm pozitif tamsayıları bir filtre ile filtreler. Rakamlar çalışma boyu kodlanmıştır. Her işlem için rakam, koşu boyuna eşit olmalıdır.




0

Java 10, 121 bayt

A lambda intiçin int. İşlev n indeksini alır ve n. (1 indeksli) sekans değerini döndürür .

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

Çevrimiçi Deneyin

Ungolfed

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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.