Un nombre est-il premier ? en une ligne

Un collègue m’a soumis le code suivant :


<script type="text/javascript">
function prime (i){return /^(?!(11+)\1+$)/.test (Array.apply(null, new Array(i)).map(Number.prototype.valueOf,1).toString().replace (/,/g, ""));}
</script>

C’est très intelligent mais très obfuscant.
Imaginez que votre nombre n devienne 11..1 (n fois). (code réalisé par l’expression Array.apply(null, new Array(i)).map(Number.prototype.valueOf,1).toString().replace (/,/g, «  »));)
Le principe de la regex est de s’assurer que la chaîne passée en paramètre n’est pas précédée d’un 1 lors de son recoupage. L’algo de test de la regex va d’abord s’assurer que 11..1 n-1 fois ne soit pas capturé par le groupe \1 (vraisemblablement il y a peu de chance que ce soit le cas), sinon il va recouper avec n – 2, et ainsi de suite jusqu’à 2.

S’il y arrive, c’est que n est divisible par le nombre utilisé pour la recoupe. Si aucune recoupe n’a marché, l’expression régulière sera valide et en fait sa condition est nécessaire et suffisante pour prouver que n est premier.

Robin DR400/180

Petit essai de modeling d’avion en utilisant comme base des cercles et en utilisant la fonction ‘Loft’ de maya.
(Créer un solide NURBS en interpolant tous les cercles sélectionnés)

robinDR400/180
Je joins le modèle maya pour vous permettre de l’utiliser et de l’améliorer.
robinDR400Simple

FYI : J’utilise la version students de Maya, gratuite et disponible très facilement sur le site Autodesk. Je n’envisage aucune utilisation commerciale de mon travail.