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

Pan Xcoder
źródło

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!

ovs
źródło
... 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

J42161217
źródło
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
Emigna
źródło
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).

Arnauld
źródło
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
Esolanging Fruit
źródło
2

Haskell , 70 bajtów

import Data.List
filter(all(\s->read[s!!0]==length s).group.show)[1..]
Xiyng
źródło
1
Możesz zrezygnować z prowadzenia x=zgodnie z naszymi zasadami gry w golfa .
Laikoni,
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.

Niepowiązany ciąg
źródło
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)

l4m2
źródło
„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

Perl 6 , 49 bajtów

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

Wypróbuj online!

Zwraca n-ty element sekwencji, indeksowany od zera.

Sean
źródło
\dMoże po prostu być.
Jo króla
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.

MickyT
źródło
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.

rekurencyjny
źródło
0

Perl 5 -p , 48 bajtów

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

Wypróbuj online!

Zwraca n-ty element, indeksowany 1.

Xcali
źródło
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;
}
Jakob
źródło