Écrivez une expression régulière qui correspond à une chaîne donnée composée de trois entiers non négatifs séparés par des espaces si et seulement si le dernier entier est la somme des deux précédents. Les réponses peuvent être pour des nombres entiers de n'importe quel système numérique avec une radix entre 2 et 10.
Cas de test
Ceux-ci devraient échouer:
0 1 2
10 20 1000
Ceux-ci doivent correspondre:
10 20 30
28657 46368 75025
0 0 0
Règles
Votre réponse doit consister en une seule expression régulière, sans code supplémentaire (sauf, éventuellement, une liste de modificateurs d'expression régulière requis pour faire fonctionner votre solution). Vous ne devez pas utiliser les fonctionnalités de l'argument regex de votre langue qui vous permettent d'invoquer du code dans la langue d'hébergement (par exemple le modificateur e de Perl).
Veuillez spécifier votre saveur regex dans votre réponse.
C'est le golf regex, donc le regex le plus court en octets gagne. Si votre langue nécessite des délimiteurs (généralement /.../) pour désigner les expressions régulières, ne comptez pas les délimiteurs eux-mêmes. Si votre solution nécessite des modificateurs, ajoutez un octet par modificateur.
Crédits à Martin Ender et jaytea pour les règles du regex-golf.
J'ai des raisons de croire que c'est possible sur la base de la solution de Martin Ender pour trouver et incrémenter des entiers avec regex .
/e
modificateur de Perl 5 ne s'applique qu'aux substitutions et n'est pas le seul moyen d'exécuter du code externe. De plus, cela disqualifie entièrement Perl 6 car une expression régulière n'est qu'une méthode avec une syntaxe supplémentaire. (La raison en est que cela rend les expressions rationnelles plus faciles à lire et à écrire) Par conséquent, toutes les fonctionnalités nécessaires dans les expressions régulières archaïques ne sont pas nécessaires (ou incluses) comme vous venez de le mettre en code Perl 6. (ce qui signifie qu'il n'est probablement pas possible de relever ce défi si vous vous limitez au code spécifique regex) /^(\d+)**3%' '$ <?{$0[2]==[+] $0[0,1]}>/
ou /^(\d+)' '(\d+)' '(\d+)$ <?{$2==$0+$1}>/
ou/^(\d+)' '(\d+){}" {$0+$1}"$/