Sekwencja samodzielnych liczb


22

Zdefiniujmy samowystarczalną liczbę jako dodatnią liczbę całkowitą, której cyfry pojawiają się w ciągach długości równych sobie. Innymi słowy, każda cyfra dziesiętna d (z wyłączeniem 0 ) występuje tylko w seriach o długości dokładnie d .

Zadanie

Możesz wybrać jedną z trzech poniższych metod:

  • Biorąc pod uwagę liczbę całkowitą n , wypisz n- tą (niezależną od 0 lub 1-indeksowanej) liczbę.
  • Biorąc pod uwagę liczbę całkowitą n , wypisz pierwsze n samodzielnych liczb.
  • Wydrukuj sekwencję w nieskończoność.

Przykłady

  • 133322 jest liczbą niezależną, ponieważ 3 pojawia się w szeregu trzech 3 , 1 jest pojedynczym, a 2 występuje w szeregu dwóch 2 .

  • Z drugiej strony 35553355 nie jest, ponieważ chociaż 5 i 3 występują odpowiednio pięć i trzy razy, nie tworzą ciągów sąsiednich cyfr.

  • 44422 nie jest samodzielny, ponieważ 4 występuje tylko trzy razy.

  • 12222333 też nie jest, ponieważ 2 pojawia się w szeregu czterech 2 i nie można go traktować jako dwóch oddzielnych serii dwóch 2 .

Nic dziwnego, że jest to OEIS A140057 , a jego kilka pierwszych warunków to:

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

Możesz pobierać dane wejściowe i dostarczać dane wyjściowe za pomocą dowolnej standardowej metody , w dowolnym języku programowania , zwracając uwagę, że te luki są domyślnie zabronione. To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach (w każdym języku).

Odpowiedzi:


8

Python 2 , 104 94 83 bajty

-10 bajtów dzięki Mr. Xcoder
-11 bajtów dzięki Jonathanowi Allanowi

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

Wypróbuj online!


... czy jest to do przyjęcia, skoro raz przewróci isię i stanie się długie ? Może być konieczne użyciestr (jednak nigdy nie jestem tego pewien).
Jonathan Allan,

1
@JonathanAllan to interesujące pytanie. Zwykle możemy założyć, że mieści się w standardowym typie liczb całkowitych , nie jest długi , ale Python nie czyni tego rozróżnienia bardzo wyraźnym ...
FlipTack

6

Mathematica, 66 bajtów

Drukuje sekwencję w nieskończoność

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

Wypróbuj online!

W TIO musisz zakończyć wykonywanie, aby zobaczyć wynik, ale w Mathematica działa dobrze.

-12 bajtów od Martina Endera


6

05AB1E , 9 bajtów

Zwraca n-ty ciąg sekwencji, indeksowany 1.

µNÔNγ€gJQ

Wypróbuj online!

Wyjaśnienie

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

Możliwe źródło inspiracji z mojego 10-bajtowego podejścia:µNγD€gs€ÙQ
Pan Xcoder,

6

JavaScript (ES6), 76 71 68 bajtów

Zwraca n-ty ciąg sekwencji, indeksowany 0.

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

Uwaga : Jak zawsze w przypadku funkcji rekurencyjnych, zakres wejściowy zależy od obsługi optymalizacji wywołania ogonowego i wielkości stosu silnika.

Próbny


Alt. wersja, 65 bajtów

Nie pobiera danych wejściowych i drukuje wyniki alert()pojedynczo.

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

Wypróbuj online! (Zatrzymuje się po przekroczeniu maksymalnego rozmiaru stosu).



2

CJam , 20 bajtów

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

Wypróbuj online!

Wyjaśnienie:

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 bajtów

≜ℕẹḅ⟨l=h⟩ᵐ

Wypróbuj online!

Nieskończenie generuje elementy sekwencji poprzez zmienną wejściową. (Jeśli rzeczywiście musi sam drukować, dołącz &ẉ⊥.) Jest to w zasadzie kod, który rozwiązuje odpowiedni z przygotowaniem do brutalnej siły najpierw najmniejszych rozwiązań:

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

Spodziewałem się, że zajmie to tylko 9 bajtów, ale wydaje się, że wymaga jawnego rozdzielenia cyfr liczby na przebiegi.


1

JavaScript 4, 83 80 bajtów

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”? Czy istnieje taka nazwa języka?
user202729,

Mam na myśli, że działa, ponieważ pojawia się JavaScript, nie jestem pewien, czy nazwa jest poprawna
l4m2

przepraszam, to nie działa w js1. Przeczytałem i nie znalazłem zamiennika
l4m2


1

R , 56 bajtów

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

Wypróbuj online!

Wykorzystuje kodowanie długości przebiegu dla podzielonego numeru. Zwraca true, jeśli wszystkie długości są równe wartościom.

Uwaga: Załadowałem methodsbibliotekę do TIO, aby zabrać się eldo pracy.


1

Stax , 10 bajtów

Ç≡∟Öz≈¢αV¢

Uruchom i debuguj

Ten program filtruje wszystkie dodatnie liczby całkowite za pomocą filtra. Cyfry są zakodowane na całej długości. Dla każdego przebiegu cyfra musi być równa długości cyklu.




0

Java 10, 121 bajtów

Lambda od intdo int. Funkcja przyjmuje indeks n i zwraca n- tą (1-indeksowaną) wartość sekwencji.

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

Wypróbuj online

Nie golfił

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;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.