Le défi consiste à identifier le nombre manquant dans une chaîne d'entiers non délimités.
Vous recevez une chaîne de chiffres (une entrée valide correspondra à l'expression régulière ^[1-9][0-9]+$
). La chaîne représente une séquence d'entiers. Par exemple 1234567891011
,. Tous les nombres de la séquence sont compris entre 1
et 2147483647
inclus.
La séquence est une série de nombres où chaque nombre est supérieur de un à son prédécesseur. Cependant, cette séquence peut contenir un et un seul numéro manquant dans la séquence. Il est possible qu'une chaîne donnée ne contienne également aucun nombre manquant dans la séquence. La chaîne contiendra toujours au moins deux nombres de la séquence.
Le code doit générer ou renvoyer la valeur manquante, ou 0
(il s'agit d'une valeur 0
- pas une valeur fausse) dans le cas où aucune valeur manquante n'a été trouvée.
Les entrées suivantes sont valides et leur sortie / retour:
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
Bien que tout cela soit décrit comme une `` chaîne '' en entrée, si la langue est capable de gérer des nombres arbitrairement grands ( dc
et mathematica
, je vous regarde tous les deux), l'entrée peut être un nombre arbitrairement grand au lieu d'une chaîne si cela fait le code plus facile.
Pour référence, cela a été inspiré par la question Programmers.SE: trouver le numéro manquant dans la séquence dans la chaîne
Réponses:
Haskell,
115112 octetsLa première ligne est une définition de fonction d'assistance, la seconde est la fonction anonyme principale. Vérifiez les cas de test (j'ai dû exécuter des tests plus courts en raison de contraintes de temps).
Explication
Il s'agit d'une solution de force brute: divisez la chaîne en mots de toutes les manières possibles, analysez les mots en nombres entiers, voyez s'il s'agit d'une plage avec un élément manquant (renvoyant cet élément, ou
0
autre), et prenez le maximum sur toutes les séparations. La vérification de la plage avec les éléments manquants est effectuée dans la fonction d'assistanceg
, qui prend une listeb
et renvoie le seul élément de la plage[head of b..last of b]
qui ne se trouve pasb
, ou0
s'il n'existe pas.la source
JavaScript (ES6), 117 octets
Explication
Approche assez efficace. Finit instantanément pour tous les cas de test.
Obtient chaque sous-chaîne depuis le début de la chaîne d'entrée sous forme de nombre
n
et initialise le nombre manquantm
à0
. Il supprime ensuite à plusieurs reprisesn
depuis le début de la chaîne, incrémenten
et recherche la chaîne. Siindex of n != 0
, il vérifiem
. Sim == 0
, définissezm = n
et continuez, sinon, il y a plusieurs nombres manquants, alors arrêtez de vérifier à partir de cette sous-chaîne. Ce processus se poursuit jusqu'à ce que la chaîne entière ait été supprimée.la source
JavaScript (ES6) 114
Moins golfé et expliqué
Tester
la source
C,
183168166163 163 octetsNon golfé
la source
891112
lorsque les nombres ont des longueurs différentes?sprintf
appel renvoie la longueur du numéro manquant, qu'il soit plus long que le précédent ou non.