Die Herausforderung besteht darin, die fehlende Zahl in einer Folge von nicht begrenzten ganzen Zahlen zu identifizieren.
Sie erhalten eine Ziffernfolge (gültige Eingabe entspricht dem regulären Ausdruck ^[1-9][0-9]+$
). Die Zeichenfolge repräsentiert eine Folge von ganzen Zahlen. Zum Beispiel 1234567891011
. Alle Zahlen in der Sequenz liegen im Bereich von 1
und 2147483647
einschließlich.
Die Folge besteht aus einer Reihe von Zahlen, wobei jede Zahl eine Nummer größer ist als ihre Vorgängerin. Diese Sequenz kann jedoch eine und nur eine fehlende Nummer aus der Sequenz enthalten. Es ist möglich, dass eine bestimmte Zeichenfolge auch keine fehlenden Zahlen aus der Sequenz enthält. Die Zeichenfolge enthält immer mindestens zwei Zahlen aus der Sequenz.
Der Code muss den fehlenden Wert ausgeben oder zurückgeben 0
(dies ist ein 0
- kein falscher Wert), falls keine fehlenden Werte gefunden wurden.
Folgendes sind gültige Eingaben und deren Ausgabe / Rückgabe:
input output actual sequence (for refrence)
123467 5 1 2 3 4 _ 6 7
911 10 9 __ 11
123125126 124 123 ___ 125 126
8632456863245786324598632460 8632458 8632456 8632457 _______ 8632459 8632460
123 0 1 2 3
8632456863245786324588632459 0 8632456 8632457 8632458 8632459
Während all dies als 'Zeichenkette' als Eingabe beschrieben wird, kann die Eingabe, wenn die Sprache willkürlich große Zahlen verarbeiten kann ( dc
und mathematica
ich sehe euch beide), eine willkürlich große Zahl anstelle einer Zeichenkette sein, wenn dies der Fall ist der Code einfacher.
Als Referenz wurde dies von der Programmers.SE-Frage inspiriert: Finden Sie die fehlende Zahl in der Reihenfolge in der Zeichenfolge
Antworten:
Haskell,
115112 BytesDie erste Zeile ist eine Hilfsfunktionsdefinition, die zweite ist die anonyme Hauptfunktion. Überprüfen Sie die Testfälle (ich musste aus zeitlichen Gründen kürzere Tests durchführen).
Erläuterung
Dies ist eine Brute-Force-Lösung: Teilen Sie die Zeichenfolge auf alle möglichen Arten in Wörter auf, analysieren Sie die Wörter in Ganzzahlen, prüfen Sie, ob ein Bereich mit einem fehlenden Element vorliegt (und geben Sie dieses Element
0
ansonsten zurück), und nehmen Sie das Maximum über alle Teilungen. Die Überprüfung des Bereichs mit fehlenden Elementen wird in der Hilfsfunktion durchgeführtg
, die eine Liste erstelltb
und das einzige Element in dem Bereich zurückgibt, in dem[head of b..last of b]
es nichtb
oder0
nicht vorhanden ist.quelle
JavaScript (ES6), 117 Byte
Erläuterung
Ziemlich effizienter Ansatz. Beendet sofort alle Testfälle.
Ruft jede Teilzeichenfolge vom Anfang der Eingabezeichenfolge als Zahl ab
n
und initialisiert die fehlende Zahlm
auf0
. Anschließend wirdn
der Anfang der Zeichenfolge wiederholt entfernt, die Zeichenfolge erhöhtn
und danach gesucht. Wennindex of n != 0
ja, wird geprüftm
. Wennm == 0
, setzem = n
und fahre fort, wenn nicht, gibt es mehrere fehlende Zahlen, also hör auf, diese Teilzeichenfolge zu überprüfen. Dieser Vorgang wird fortgesetzt, bis die gesamte Zeichenfolge entfernt wurde.quelle
JavaScript (ES6) 114
Weniger golfen und erklärt
Prüfung
quelle
C
183168166163 BytesUngolfed
quelle
891112
denen die Zahlen unterschiedlich lang sind?sprintf
Anruf gibt die Länge der fehlenden Nummer zurück, unabhängig davon, ob sie länger als die vorherige ist oder nicht.