Die Folge von in sich geschlossenen Zahlen

22

Definieren wir eine in sich geschlossene Zahl als eine positive Ganzzahl, deren Ziffern nur in sich selbst entsprechenden Längenreihen erscheinen. Mit anderen Worten, jede Dezimalstelle d (ohne 0 ) kommt nur in Reihen mit der Länge d vor .

Aufgabe

Sie können eine der drei folgenden Methoden auswählen:

  • Geben Sie bei einer Ganzzahl n die n- te (entweder 0- oder 1-indizierte) in sich geschlossene Zahl aus.
  • Geben Sie bei einer Ganzzahl n die ersten n in sich geschlossenen Zahlen aus.
  • Drucken Sie die Sequenz auf unbestimmte Zeit.

Beispiele

  • 133.322 ist eine in sich geschlossene Reihe , weil 3 erscheint in einem Durchlauf von drei 3 ‚s, 1 Einzel- und 2 erfolgt in einem Durchlauf von zwei 2 ‘ s.

  • Auf der anderen Seite ist 35553355 nicht, weil, obwohl 5 und 3 fünf- bzw. dreimal vorkommen, sie keine Reihen benachbarter Ziffern bilden.

  • 44422 ist nicht eigenständig, da 4 nur dreimal vorkommt.

  • 12222333 ist es auch nicht, da 2 in einem Durchlauf von vier 2 angezeigt wird und es nicht als zwei separate Durchläufe von zwei 2 behandelt werden kann .

Es überrascht nicht, dass dies OEIS A140057 ist. Die ersten Begriffe sind:

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

Sie können Eingaben und Ausgaben über eine der Standardmethoden in einer beliebigen Programmiersprache vornehmen und dabei beachten, dass diese Lücken standardmäßig verboten sind. Dies ist Codegolf, daher gewinnt der kürzeste Code in Bytes (in jeder Sprache).

Mr. Xcoder
quelle

Antworten:

8

Python 2 , 104 94 83 Bytes

-10 Bytes dank Mr. Xcoder
-11 Bytes dank Jonathan Allan

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

Probieren Sie es online!

ovs
quelle
... ist das eigentlich akzeptabel, da es dann mal ilang wird ? Möglicherweise muss es verwendet werdenstr (da bin ich mir allerdings nie ganz sicher).
Jonathan Allan
1
@ JonathanAllan es ist eine interessante Frage. Normalerweise dürfen wir davon ausgehen , dass es innerhalb der Norm ist integer - Typ, nicht lange , aber Python nicht diese Unterscheidung sehr klar ...
FlipTack
6

Mathematica, 66 Bytes

Druckt die Sequenz auf unbestimmte Zeit

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

Probieren Sie es online!

In TIO müssen Sie die Ausführung beenden, um das Ergebnis zu sehen, in Mathematica funktioniert dies jedoch einwandfrei.

-12 Bytes von Martin Ender

J42161217
quelle
6

05AB1E , 9 Bytes

Gibt den n-ten Term der Sequenz mit einem Index zurück.

µNÔNγ€gJQ

Probieren Sie es online!

Erläuterung

µ           # 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
quelle
Eine mögliche Inspirationsquelle für meinen 10-Byte-Ansatz:µNγD€gs€ÙQ
Mr. Xcoder
6

JavaScript (ES6), 76 71 68 Bytes

Gibt den n-ten Term der Sequenz mit dem Index 0 zurück.

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

Hinweis : Wie immer bei rekursiven Funktionen hängt der Eingabebereich von der Unterstützung der Tail Call-Optimierung und der Stapelgröße Ihrer Engine ab.

Demo


Alt. Version, 65 Bytes

Nimmt keine Eingabe vor und druckt die Ergebnisse einzeln mit alert().

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

Probieren Sie es online! (Stoppt, sobald die maximale Stapelgröße überschritten wird.)

Arnauld
quelle
2

CJam , 20 Bytes

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

Probieren Sie es online!

Erläuterung:

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
quelle
2

Haskell , 70 Bytes

import Data.List
filter(all(\s->read[s!!0]==length s).group.show)[1..]
Xiyng
quelle
1
Sie können die Führung x=nach unseren Golfregeln ablegen .
Laikoni
2

Brachylog , 10 Bytes

≜ℕẹḅ⟨l=h⟩ᵐ

Probieren Sie es online!

Erzeugt durch seine Eingabevariable unendlich viele Elemente der Sequenz. (Wenn es tatsächlich der Druck selbst zu tun hat, append &ẉ⊥) . Dies ist im Wesentlichen Code die entsprechenden lösen mit einem zu voran zuerst die kleinsten Lösungen Brute-Force:

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

Ich habe erwartet, dass dies nur 9 Bytes dauert, aber es scheint explizit erforderlich zu sein, die Ziffern einer Zahl in Läufe zu trennen.

Nicht verwandte Zeichenfolge
quelle
1

JavaScript 4, 83 80 Bytes

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
quelle
"Javascript 1"? Gibt es so einen Sprachnamen?
user202729
Ich meine, es funktioniert, seit JavaScript angezeigt wird, nicht sicher, ob der Name richtig ist
l4m2
sorry es scheint nicht in js1 zu funktionieren. Ich las und fand keinen Ersatz
l4m2
1

Perl 6 , 49 Bytes

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

Probieren Sie es online!

Gibt das n-te Element der Sequenz mit dem Index Null zurück.

Sean
quelle
Das \dkann nur sein.
Jo King
1

R , 56 Bytes

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

Probieren Sie es online!

Verwendet die Lauflängencodierung für die Teilungsnummer. Gibt true zurück, wenn alle Längen den Werten entsprechen.

Hinweis: Ich habe die methodsBibliothek in TIO geladen , um elmit der Arbeit zu beginnen.

MickyT
quelle
1

Stax , 10 Bytes

Ç≡∟Öz≈¢αV¢

Führen Sie es aus und debuggen Sie es

Dieses Programm filtert alle positiven ganzen Zahlen mit einem Filter. Die Ziffern sind lauflängencodiert. Für jeden Lauf muss die Ziffer der Lauflänge entsprechen.

rekursiv
quelle
0

Perl 5 -p , 48 Bytes

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

Probieren Sie es online!

Gibt das n-te Element zurück, 1 indiziert.

Xcali
quelle
0

Java 10, 121 Bytes

Ein Lambda von intbis int. Die Funktion nimmt einen Index n und gibt den n- ten (1-indizierten) Sequenzwert zurück.

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

Probieren Sie es online

Ungolfed

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
quelle