En küçük görünmeyen fakat paylaşım rakamı yok!


28

Meydan okuma

Burada PPCG'de dizilerimizi seviyoruz, işte bir başkası eğlenceli .

En tanımlayalım a(n)olarak en küçük negatif olmayan tamsayı Xherhangi eşit değildir a(k)( 0 < k < n) ve a(n-1)ve Xherhangi bir ondalık basamak paylaşmayın.a(0) = 0

Bir giriş verildiğinde n > 0, böyle bir çıktı a(n).

Örneğin, giriş için n = 13, elimizdeki a(13) = 20beri, a(12) = 11ve 20herhangi bir ondalık basamak paylaşmaz henüz görmedik tamsayı en küçük negatif olmayan bir 11.

Sıra

İşte başlamanız için ilk 20 terim. Bu, OEIS üzerindeki A067581 dizisidir .

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 22, 11, 20, 13, 24, 15, 23, 14, 25

kurallar

  • Giriş ve çıktının, dilinizin yerel tamsayı tipine uyacağı varsayılabilir.
  • Giriş ve çıkış herhangi bir uygun formatta verilebilir .
  • Örneklerimde burada olduğum gibi 0 dizinini veya gönderiminiz için 1 dizini seçebilirsiniz. Lütfen hangisini yaptığını belirt.
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine geri gönderebilirsiniz.
  • Mümkünse, lütfen başkalarının kodunuzu deneyebilmesi için çevrimiçi bir test ortamına bir bağlantı ekleyin!
  • Standart boşluklar yasaktır.
  • Bu olduğundan, tüm normal golf kuralları geçerlidir ve en kısa kod (bayt cinsinden) kazanır.

Alabileceğimiz n > 1(veya n ≥ 2girdi olarak)? (1-indeksleme)
Outgolfer Erik,

@EriktheOutgolfer Tabii, sorun değil. Görünüşe göre kopyalamayı yapıştırırken bu kurşun noktasını kaçırdım, çünkü bu benim zorlukların bir standardı.
AdmBorkBork,

5
Dağılım grafiği emin güzel :) görünüyor
flawr

Yanıtlar:



7

Japt , 18 bayt

@A{!ZøA «As oX}a}g

Çevrimiçi test edin! gBurada kullanılan özelliği yeni ekledim , ancak uzun zamandır eklemek istediğim bir şeydi (ve bu benim gçözümüm yaklaşık 35 bayt olduğu için beni zorluyordu ).

açıklama

@   A{!ZøA «  As oX}a}g
XYZ{A{!ZøA &&!As oX}a}gU
                           Implicit: U = input integer
   {                 }gU   Starting with [0, 1], return the U'th item generated by
XYZ{                 }     this function: (X = previous item, Y = index, Z = full array)
    A{             }a        Return the smallest non-negative integer A where
      !ZøA &&                  Z does not contain A (A is not yet in the sequence), and
             !As oX            A.toString() does not contain any of the same chars as X.
                           Implicit: output result of last expression

Bu başımı ağrıtıyor! Ancak, Japt'teki fonksiyon yöntemlerinden herhangi birine zar zor baktım.
Shaggy

Varsayılan kural, soru verildikten sonra dile bir şey ekleyemez misiniz? Aksi halde, her zaman keyfi kısa süren, zorluğu çözen yeni bir yerleşik oluşturmak her zaman önemsiz olacaktır.
trlkly

@ trlkly Ben iyi yargı içinde izin olduğuna inanıyorum. Eklediğim yerleşik, bu cevap için değil, genel amaçlıdır. Birinin düşünüyorum olabilir teorik olarak tamamen yerleşik bir o çözer meydan ekleyebilirsiniz, ancak böyle bir cevap emin çok kötü alınacak olacaktır.
ETHproductions


3

Haskell, 79 bayt

f 0=0
f x=[i|i<-[1..],all((/=i).f)[1..x-1],all(`notElem`show(f$x-1))$show i]!!0

Kod çok verimsiz. Daha büyük değerleri hesaplamak için, yani> 12, f x|x<11=xiki satır arasına ekleyin (bir gTIO bağlantısında uygulanmıştır ).

Çevrimiçi deneyin!


1

JavaScript (ES6), 82 bayt

0 endeksli.

f=(n,x=[1,p=0])=>n--?f(x[(g=k=>x[k]||(k+'').match(`[${p}]`)?g(k+1):p=k)(0)]=n,x):p

gösteri


1

Kabuğu , 18 bayt

!¡₁;0
ḟȯ¬V€d→⁰d-⁰N

1 indeksli bir çözüm. Çevrimiçi deneyin!

Düzenleme: +1 bayt için sabit hata.

açıklama

Husk'un yerleşik yineleme işlevinin ¡birçok anlamı vardır. Burada, "mevcut olanlardan hesaplanan yeni öğeleri tekrar tekrar ekleyerek sonsuz yapı oluştur" kullanıyorum. İkinci satır, yeni bir eleman hesaplayan yardımcı fonksiyondur:

ḟȯ¬V€d→⁰d-⁰N  Takes a list of existing elements, e.g. x = [0,1,...,10]
           N  The positive integers
         -⁰   with elements of x removed:        [11,12,13,...
ḟȯ            Find an element n of this list that satisfies:
        d     Digits of n.
   V          Is any of them
    €         an element of
     d        the digits of
      →⁰      the last element of x?
  ¬           Negate.
              Returns 22.

İlk satır ana işlevdir:

!¡₁;0  Takes an integer k.
 ¡     Iterate adding new elements to the list
   ;0  [0]
  ₁    using the helper function,
!      take k'th element of result.

Husk'u golf dili listesine ekledim ; yanlış bir şey varsa lütfen bana bildirin.
ETHProductions

1

Haskell, 78 bayt

n!k|r:_<-[j|j<-[1..],all(/=j)k,all(`notElem`show n)$show j]=n:r!(r:k)
(0![]!!)

İkinci argümanın !görülen sayılar listesi değil, görünmeyen sayılar listesi olması daha da etkili olacaktır. Ama daha fazla bayt kullanmadan bunu yapamam.

Çevrimiçi deneyin!


0

Mathematica 115 Bayt

Yine de bu golf oynamak için oda - ve belki de özyineleme kullanın (böylece hızlandırmak).

(For[z={0};i=1,Length@z<#,
For[i=1,!FreeQ[z,i]||!DisjointQ@@IntegerDigits/@{l,i},i++];
z~AppendTo~i;l=Last@z;
];l)&

Aynı temel fikirle orijinal ayrıntılı kod:

MakeSequenceA067581[n_]:=Module[{list={0}, innerCounter=1},

While[Length@list<n,
innerCounter=1;
(* inner loop *)While[Or[MemberQ[list,innerCounter],Intersection[IntegerDigits[Last@list],IntegerDigits[innerCounter]]!={}],innerCounter++];
AppendTo[list,innerCounter];
];
list
]
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.