Kleinste unsichtbare, aber keine freigegebenen Ziffern!

28

Herausforderung

Hier bei PPCG mögen wir unsere Sequenzen, also hier ist ein lustiger anderer.

Nehmen wir definieren a(n)als die kleinste nicht-negative ganze Zahl ist, Xdie zu einem nicht gleich ist a(k)( 0 < k < n), und a(n-1)und Xhaben keine Dezimalziffern nicht teilen.a(0) = 0

Bei einer Eingabe n > 0, Ausgabe wie z a(n).

Für die Eingabe n = 13haben wir zum Beispiel, a(13) = 20da a(12) = 11und 20die kleinste nicht negative Ganzzahl ist, die wir noch nicht gesehen haben und mit der keine Dezimalstellen geteilt werden 11.

Sequenz

Hier sind die ersten 20 Begriffe, mit denen Sie beginnen können. Dies ist die Sequenz A067581 in OEIS.

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

Regeln

  • Es kann davon ausgegangen werden, dass die Eingabe und Ausgabe in den systemeigenen Ganzzahltyp Ihrer Sprache passen.
  • Die Ein- und Ausgabe kann in jedem beliebigen Format erfolgen .
  • Sie können zwischen 0-Index, wie ich es in meinen Beispielen sehe, und 1-Index für Ihre Einreichung wählen. Bitte geben Sie an, was Sie tun.
  • Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
  • Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
  • Standardlücken sind verboten.
  • Dies ist daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
AdmBorkBork
quelle
Können wir n > 1(oder n ≥ 2) als Input bekommen? (1-Indizierung)
Erik der Outgolfer
@EriktheOutgolfer Sicher, das ist in Ordnung. Ich habe diesen Aufzählungspunkt beim Einfügen von Kopien anscheinend übersehen, weil das ein Maßstab für meine Herausforderungen ist.
AdmBorkBork
5
Die Streudiagramm sieht sicher gut aus :)
Fehler

Antworten:

10

Python 2 , 85 Bytes

-1 Byte dank 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]

Probieren Sie es online!

Stange
quelle
n=0,für -1 Byte?
Dead Possum
@DeadPossum ja, danke c:
Rod
7

Japt , 18 Bytes

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

Online testen! Ich habe gerade das ghier verwendete Feature hinzugefügt , aber es ist etwas, das ich seit langem hinzufügen möchte (und das hat mich über den Rand gedrängt, weil meine Nicht- gLösung etwa 35 Byte groß war).

Erläuterung

@   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
ETHproductions
quelle
Das macht meinen Kopf weh! Aber dann habe ich kaum einen Blick auf eine der Funktionsmethoden in Japt geworfen.
Shaggy
Ist das nicht die Standardregel, dass Sie der Sprache nach der Beantwortung der Frage nichts hinzufügen können? Ansonsten wäre es trivial, einfach immer ein neues eingebautes Modul zu erstellen, das die Herausforderung löst und sie alle beliebig kurz macht.
trlkly
@trlkly Ich glaube, es ist nach gutem Ermessen erlaubt. Die von mir hinzugefügte integrierte Funktion ist viel allgemeiner als nur für diese eine Antwort. Ich denke, jemand könnte theoretisch ein eingebautes hinzufügen, das die Herausforderung vollständig löst, aber eine Antwort wie diese würde mit Sicherheit sehr schlecht aufgenommen werden.
ETHproductions
3

Haskell, 79 Bytes

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

Der Code ist schrecklich ineffizient. Um größere Werte zu berechnen, dh> 12, addieren Sie f x|x<11=xzwischen den beiden Zeilen (implementiert gin der TIO-Verknüpfung).

Probieren Sie es online!

nimi
quelle
1

JavaScript (ES6), 82 Byte

0-indiziert.

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

Demo

Arnauld
quelle
1

Schale , 18 Bytes

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

Eine 1-indizierte Lösung. Probieren Sie es online!

Edit: Fehler für +1 Byte behoben.

Erläuterung

Die integrierte Iterationsfunktion von Husk ¡hat viele Bedeutungen. Hier verwende ich "Unendliche Liste durch wiederholtes Anhängen neuer Elemente erstellen, die aus den vorhandenen berechnet wurden". Die zweite Zeile ist die Hilfsfunktion, die ein neues Element berechnet:

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

Die erste Zeile ist die Hauptfunktion:

!¡₁;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
quelle
Ich habe Husk zur Liste der Golfsprachen hinzugefügt . Bitte lassen Sie mich wissen, wenn ich irgendwelche Angaben falsch gemacht habe.
ETHproductions
1

Haskell, 78 Bytes

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

Es wäre noch effizienter, wenn das zweite Argument !nicht die Liste der gesehenen Zahlen, sondern der unsichtbaren Zahlen wäre. Aber ich kann das nicht tun, ohne mehr Bytes zu verwenden.

Probieren Sie es online!

Christian Sievers
quelle
0

Mathematica 115 Bytes

Noch Platz zum Golfspielen - und evtl. Rekursion nutzen (damit beschleunigen).

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

Ursprünglicher ausführlicher Code mit derselben Grundidee:

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
quelle