Definieren wir die a-Funktion für natürliche Zahlen , die als 10-stellige Basis wie folgt:
Solange es gleiche benachbarte Ziffern , ersetzen Sie sie durch ihre Summe von links nach rechts. Wenn solche Ziffern vorhanden sind, wiederholen Sie das gleiche Verfahren.
Mit anderen Worten, wir nehmen in jeder Iteration gierig alle Paare gleicher benachbarter Ziffern und ersetzen sie gleichzeitig durch ihre Summe (wobei wir das am weitesten links stehende Paar verwenden, wenn sie sich überlappen).
Beispiel
Nehmen wir zum Beispiel :
- Die ersten benachbarten Ziffern, die gleich sind, sind die beiden
- Also ersetzen wir sie durch , was uns
- Da wir noch in dem ersten Links-Rechts - Traversal und es gab noch zwei sind s müssen wir zuerst diese ersetzen
- So bekommen wir
- Etwas hat sich geändert, also müssen wir eine weitere Iteration durchführen
- Aber es gibt keine solchen Ziffern, also hören wir auf
Deshalb ist die Zahl in dieser Folge ist .
Herausforderung
Die ersten 200 Begriffe sind:
0,1,2,3,4,5,6,7,8,9,10,2,12,13,14,15,16,17,18,19,20,21,4,23,24,25,26,27,28,29,30,31,32,6,34,35,36,37,38,39,40,41,42,43,8,45,46,47,48,49,50,51,52,53,54,10,56,57,58,59,60,61,62,63,64,65,12,67,68,69,70,71,72,73,74,75,76,14,78,79,80,81,82,83,84,85,86,87,16,89,90,91,92,93,94,95,96,97,98,18,10,101,102,103,104,105,106,107,108,109,20,21,4,23,24,25,26,27,28,29,120,121,14,123,124,125,126,127,128,129,130,131,132,16,134,135,136,137,138,139,140,141,142,143,18,145,146,147,148,149,150,151,152,153,154,20,156,157,158,159,160,161,162,163,164,165,4,167,168,169,170,171,172,173,174,175,176,24,178,179,180,181,182,183,184,185,186,187,26,189,190,191,192,193,194,195,196,197,198,28
Ihre Aufgabe ist es auch, diese Sequenz zu generieren
- gegeben , kehrt die Nummer in dieser Reihenfolge,
- Mit werden die ersten Zahlen in dieser Reihenfolge zurückgegeben
- oder generieren Sie die Sequenz auf unbestimmte Zeit.
Sie können wählen, ob Sie eine oder eine Indizierung verwenden möchten. Bitte geben Sie jedoch an, welche.
Testfälle
Sie können die oben angegebenen Begriffe verwenden, hier sind jedoch einige größere:
222 -> 42
1633 -> 4
4488 -> 816
15519 -> 2019
19988 -> 2816
99999 -> 18189
119988 -> 21816
100001 -> 101
999999 -> 181818
Python 2 ,
979693 BytesProbieren Sie es online!
Nicht reguläre Version:
Python 2 ,
13313012211298 BytesProbieren Sie es online!
quelle
Jelly , 11 Bytes
Dies ist ein unnötig langsames, vollständiges Programm.
Probieren Sie es online!
Alternative Version, 12 Bytes
Ein Byte länger, aber viel schneller. Arbeitet als Programm oder Funktion.
Probieren Sie es online!
Wie es funktioniert
Die 11-Byte-Version macht dasselbe, außer dass sie den Link n- mal für den Eingang n aufruft, anstatt ihn aufzurufen, bis ein fester Punkt erreicht ist.
quelle
Haskell, 70 Bytes
Die Eingabe wird als Zeichenfolge verwendet.
Probieren Sie es online!
quelle
|x<-b:c=a:f x
oder sogar ersetzenf(a:c)=a:f c
, falls die eine oder andere tatsächlich zu einer Verbesserung führen könnte :)JavaScript,
484746 BytesEingabe und Ausgabe als Zeichenketten. Gibt den
nth
Term der Sequenz zurück.Probieren Sie es online aus
quelle
x[0]*2
->x/5.5
Perl 6 , 37 Bytes
Probieren Sie es online!
Dies ist eine Funktion, die den n-ten Term der Sequenz generiert, wobei n als Argument angegeben wird.
($_, { ... } ... * == *)
ist die Folge aufeinanderfolgender Änderungen an der Eingabenummer, die durch den in Klammern gesetzten Ausdruck (eine einfache Regex-Ersetzung) generiert wird und anhält* == *
, wenn die letzten beiden Zahlen in der Folge gleich sind. Dann[*-1]
nimmt the nur das letzte Element dieser Sequenz als Rückgabewert.quelle
==*
und ersetzen die*-1
mit$_
, da es immer weniger alsn
Ersatz für eine Reihen
. 33 BytesNetzhaut , 16 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Wiederholen, bis sich der Eingang nicht mehr ändert.
Ersetzen Sie Paare benachbarter Ziffern ...
... mit der doppelten Ziffer. (
$1*
Erzeugt eine Folge von$1
_
s,2*
dupliziert diese und$.(
nimmt die Länge an. Tatsächlich ist die Retina-Engine schlauer als diese und verdoppelt sich einfach$1
.)quelle
C # (.NET Core) ,
231,203,200,196, 192 BytesBEARBEITEN: Funktion ist jetzt bei 185 Bytes plus 18 für
using System.Linq;
Danke an BMO (für 1> 0 = true plus Newline Removal) und Mr. XCoder (für f =! F Statements)!
EDIT2: Bis zu 182 Bytes plus 18 für
using System.Linq
danke an dana für ein paar !EDIT3: Dank Verkörperung der Ignoranz für das int [] -> var, Entfernen des Kurzschlusses && -> & und Ändern von ToArray -> ToList! (178 bytes + 18 using)
EDIT4: Verkörperung der Ignoranz löschte 4 Bytes durch Ändern einer Zuordnung. Dummy ich hätte zählen sollen! Nochmals vielen Dank: D
Probieren Sie es online!
quelle
Perl 5
-p
, 21 BytesProbieren Sie es online!
quelle
Japt v2.0a0
-h
,1514 BytesGibt den
nth
Term der Sequenz zurück.Versuch es
Dies sollte für 10 Bytes funktionieren, aber es scheint einen Fehler in der rekursiven Ersetzungsmethode von Japt zu geben.
quelle
Groovy , 63 Bytes
Probieren Sie es online!
quelle
05AB1E , 11 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Wolfram Language 108 Bytes
Erläuterung
IntegerDigits
wandelt die eingegebene Nummer in eine Liste ihrer Ziffern um.Split
gruppiert aufeinanderfolgende wiederholte Ziffern.Partition[#, UpTo@2]&/@
Bricht Läufe von gleichen Ziffern in Listen von höchstens Längen von 2 auf.Flatten[...,1]
beseitigt gelegentlich übermäßig verschachtelte Klammern - z. B. wird {{2,2}} zu {2,2}Total/@
summiert die Summe der gepaarten Ziffern. Isolierte Ziffern müssen nicht summiert werden.ToString
wandelt die Summen (und die einzelnen Ziffern) in Zeichenfolgen um.""<>
Verbindet alle Zeichenfolgen in der Liste.ToExpression
konvertiert das Ergebnis in eine Ganzzahl....~FixedPoint~#&
Wendet die Funktion an, bis sich das Ergebnis nicht mehr ändert.quelle
C # (Visual C # Interactive Compiler) mit Flag
/u:System.Text.RegularExpressions.Regex
, 70 ByteAusgänge durch Ändern des Eingangs. Nimmt eine Liste mit einer Zeichenfolge zur Eingabe auf.
Vielen Dank an @dana für das Golfen mit 23 Bytes!
Probieren Sie es online!
quelle
Sauber , 118 Bytes
Probieren Sie es online!
Nimmt den ersten wiederholten Wert (
limit
) aus der unendlichen Liste der Anwendungen (iterate
) eines Lambdas, wobei ein einzelner Schritt des Zusammenlegens ausgeführt wird. Eingabe als[Char]
.quelle
Rot ,
848380 BytesProbieren Sie es online!
Gibt den
nth
Term der Sequenz zurück.Erläuterung:
quelle
Scala , 84 Bytes
Probieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 111 Byte
Probieren Sie es online!
RIESIGER Dank an @ASCIIOnly fürs Golfen ~ 30;) Zuerst haben wir beide Updates gleichzeitig gepostet, aber irgendwann ist er eindeutig in die Stadt gefahren!
-2 danke an @EmbodimentOfIgnorance!
Weniger Golf Code ...
quelle
(s[i++]-48)*2
=>s[i++]*2-96