Najmniejszy niewidoczny, ale brak dzielących cyfr!

28

Wyzwanie

Tutaj w PPCG, z pewnością lubimy nasze sekwencje, więc tutaj jest kolejna zabawa .

Zdefiniujmy a(n)jako najmniejszą nieujemną liczbę całkowitą, Xktóra nie jest równa żadnej a(k)( 0 < k < n) a(n-1)i Xnie dzielimy żadnych cyfr dziesiętnych.a(0) = 0

Biorąc pod uwagę wejście n > 0, wyjście takie a(n).

Na przykład, dla danych wejściowych n = 13mamy a(13) = 20, ponieważ a(12) = 11i 20jest najmniejszą nieujemną liczbą całkowitą, której jeszcze nie widzieliśmy, która nie dzieli żadnych cyfr dziesiętnych 11.

Sekwencja

Oto pierwsze 20 warunków na początek. Jest to sekwencja A067581 w OEIS.

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

Zasady

  • Można założyć, że dane wejściowe i wyjściowe pasują do rodzimej liczby całkowitej twojego języka.
  • Dane wejściowe i wyjściowe można podawać w dowolnym dogodnym formacie .
  • Możesz wybrać albo indeks 0, jak tu jestem w moich przykładach, albo indeks 1 dla twojego zgłoszenia. Proszę podać, co robisz.
  • Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
  • Jeśli to możliwe, dołącz link do internetowego środowiska testowego, aby inni mogli wypróbować Twój kod!
  • Standardowe luki są zabronione.
  • To jest więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
AdmBorkBork
źródło
Czy możemy uzyskać n > 1(lub n ≥ 2) jako dane wejściowe? (1-indeksowanie)
Erik the Outgolfer
@EriktheOutgolfer Pewnie, w porządku. Najwyraźniej tęskniłem za wklejaniem kopii, ponieważ to standard moich wyzwań.
AdmBorkBork,
5
Wykres punktowy na pewno wygląda ładnie :)
flawr

Odpowiedzi:

10

Python 2 , 85 bajtów

-1 bajt dzięki Dead Possum

n=0,
exec"i=0\nwhile set(`i`)&set(`n[-1]`)or i in n:i+=1\nn+=i,;"*input()
print n[-1]

Wypróbuj online!

Pręt
źródło
n=0,dla -1 bajtu?
Dead Possum,
@DeadPossum tak, dzięki c:
Rod
7

Japt , 18 bajtów

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

Przetestuj online! Właśnie dodałem gużytą tutaj funkcję, ale zamierzałem ją dodać od dłuższego czasu (i to zepchnęło mnie na brzeg, ponieważ moje nierozwiązanie gmiało około 35 bajtów).

Wyjaśnienie

@   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
ETHprodukcje
źródło
To mnie boli! Ale wtedy ledwo rzuciłem okiem na którąkolwiek z metod funkcji w Japt.
Shaggy,
Czy nie jest domyślną zasadą, że po zadaniu pytania nie można dodać czegoś do języka? W przeciwnym razie byłoby po prostu zawsze tworzyć nowe wbudowane rozwiązanie, które rozwiązuje problem, czyniąc je wszystkie arbitralnie krótkimi.
trlkly
@trlkly Uważam, że jest to dozwolone w granicach rozsądku. Wbudowane, które dodałem, jest znacznie bardziej ogólne niż tylko dla tej jednej odpowiedzi. Myślę, że ktoś mógłby teoretycznie dodać wbudowane rozwiązanie, które całkowicie rozwiązuje wyzwanie, ale taka odpowiedź na pewno byłaby bardzo słabo odebrana.
ETHproductions
3

Haskell, 79 bajtów

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

Kod jest strasznie nieefektywny. Aby obliczyć większe wartości, tj.> 12, dodaj f x|x<11=xmiędzy dwiema liniami (zaimplementowane gw łączu TIO).

Wypróbuj online!

nimi
źródło
1

JavaScript (ES6), 82 bajty

0-indeksowane.

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

Próbny

Arnauld
źródło
1

Łuska , 18 bajtów

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

Rozwiązanie 1-indeksowane. Wypróbuj online!

Edycja: naprawiono błąd dla +1 bajtu.

Wyjaśnienie

Wbudowana funkcja iteracji Husky ¡ma wiele znaczeń. Używam tutaj „konstruuj nieskończoną listę, wielokrotnie dodając nowe elementy obliczone z istniejących”. Druga linia to funkcja pomocnicza, która oblicza nowy element:

ḟȯ¬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.

Pierwszy wiersz to główna funkcja:

!¡₁;0  Takes an integer k.
 ¡     Iterate adding new elements to the list
   ;0  [0]
  ₁    using the helper function,
!      take k'th element of result.
Zgarb
źródło
Dodałem Husk do listy języków golfowych ; daj mi znać, jeśli popełniłem błąd.
ETHproductions
1

Haskell, 78 bajtów

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

Byłoby jeszcze bardziej efektywne, gdyby drugim argumentem !nie była lista liczb widzialnych, ale liczb niewidocznych. Ale nie mogę tego zrobić bez użycia większej ilości bajtów.

Wypróbuj online!

Christian Sievers
źródło
0

Mathematica 115 bajtów

Jest jeszcze miejsce na golfa - i może skorzystaj z rekurencji (przyspieszając to).

(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)&

Oryginalny pełny kod, z tym samym podstawowym pomysłem:

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
]
Kelly Lowder
źródło