Dans ce défi, nous essayons de résoudre deux problèmes importants à la fois. Elles sont:
- Étant donné les entiers a et b , dites si a b -1 est un nombre premier.
- Étant donné les entiers a et b , retournez nCr (a, b).
Plus précisément, vous devez écrire deux programmes, l'un qui effectue la première tâche et l'autre qui effectue l'autre. Comme nous voulons résoudre les deux problèmes en même temps, il est encouragé d'utiliser un même morceau de code dans les deux programmes.
Notation
Le score d'une réponse est la distance Levenshtein entre les deux programmes. Un score plus bas est meilleur. En cas d'égalité, la réponse avec le code combiné le plus court des deux programmes l'emporte. Vous pouvez utiliser ce script pour calculer le score de votre solution.
Règles
- Vous devez écrire deux programmes dans la même langue pour résoudre les tâches décrites ci-dessus. Vous pouvez utiliser toutes les méthodes d'E / S que vous souhaitez. Pour la tâche 1, vous pouvez renvoyer une valeur vérité / fausse ou choisir deux valeurs pour signifier vrai et faux et les renvoyer en conséquence. Par exemple. vous pouvez choisir cela
"prime"
signifie vrai et"not prime"
faux. - Les algorithmes que vous utilisez doivent fonctionner pour toutes les entrées possibles, mais cela ne pose aucun problème si le code échoue pour les grands nombres en raison des limitations du type de numéro utilisé. Vous pouvez supposer que l'entrée est valide.
Aucun sous-ensemble du programme ne doit résoudre le problème, c'est-à-dire. le code ne doit pas fonctionner si des caractères sont supprimés. Par exemple, le code suivant n'est pas valide, car il est possible de supprimer le bloc else inutilisé sans interrompre le programme:
if (1) { /* change to 0 to get the second program*/ ... } else { ... }
Les échappatoires standard ne sont pas autorisées.
Cas de test
a b -1 est premier?
a b
1 1 false
2 3 true
5 2 false
2 5 true
4 3 false
2 7 true
nCr
a b nCr(a,b)
1 1 1
5 2 10
4 3 4
10 7 120
12 5 792
Réponses:
MATLAB, distance 10
Primalité:
nCr:
la source
PHP, distance 29
a^b-1
affiche 0 pour vrai et toute valeur entière> 0 pour fauxnCr(a,b)
PHP, distance 36
a^b-1
imprime 1 pour vrai rien pour fauxnCr(a,b)
la source
Rubis, distance 1, longueur combinée 194
Vérification principale:
Essayez-le en ligne!
nCr:
Essayez-le en ligne!
Comme prévu dans les commentaires, certains crétins doivent toujours aller à l'encontre de l'esprit du problème. C'était amusant de trouver un moyen de contourner cela, cependant! Voici comment cela fonctionne: nous avons deux solutions distinctes aux problèmes. Nous exécutons les deux, les mettons dans un tableau, puis choisissons le 0ème élément ou le 1er, pour une distance d'édition de 1. Ce serait normalement illégal, car vous pouvez simplement tout supprimer, mais le calcul que vous vouliez et cela fonctionnerait toujours . Cependant, chaque extrait de code est écrit pour s'appuyer sur le chargement de la même bibliothèque standard
'mathn'
:prime?
mathn
modification du fonctionnement de la division - avant de la charger,3/4
évalue à0
, puis après, elle évalue à la fraction(3/4)
. Étant donné que le résultat intermédiaire de(a+1-i)/i
n'est pas toujours un nombre entier, le résultat global est incorrect sans la bibliothèque.Il ne nous reste plus qu'à subordonner le chargement de la bibliothèque au reste du code non modifié. Nous faisons cela en générant le nom mathn en utilisant la longueur de caractère du reste du code principal: le calcul combiné a une longueur de 55, qui a doublé pour atteindre 110 est la valeur ASCII de 'n'. Donc concaténer ceci sur la chaîne 'math' donne la bibliothèque désirée.
En prime, l'introduction des dépendances de bibliothèque permet également au code de s'exécuter dans un délai raisonnable. En particulier, l'approche naïve du nCr ne générerait pas de résultats intermédiaires fractionnaires.
la source
05AB1E , distance 3
nCr
Essayez-le en ligne!
isPrime (a ^ b-1)
Essayez-le en ligne!
la source
Empilé , distance 13
Essayez-le en ligne! La première calcule nCr, la seconde primalité, en utilisant le théorème de Wilson.
(f g h) fork!
popsN
args de la pile (appelez-lesa0 ... aN
) et appliquea0 ... aN f a0 ... aN h g
.Pour le premier programme:
Et pour le second:
la source
Python 2 , distance 15 , longueur 172
Tache 1
Tâche 2
Essayez-le en ligne!
la source
Mathematica, distance 10
Tache 1:
PrimeQ[#2^#-1]&
Tâche 2:
Binomial[#2,#]&
Les deux fonctions prennent les entrées dans l'ordre
b,a
.la source
Javascript ES7, distance 14
Merci à @Conor O'Brien d'avoir réduit la distance de 7
Primalité:
Renvoie 1 si premier renvoie 0 sinon premier.
Vérification de prime incroyablement inefficace, vérifie le nombre modulo chaque nombre plus petit que lui et supérieur à 1 ...
nCr:
Multiplie 1 par chaque nombre de y + 1 à x et divise par chaque nombre de 1 à xy (x! / Y!) / (Xy)!
la source
f=x=>y=>{t=x+1;s=1;for(i=1;i<t;i++){if(y<i)s*=i/(i-y)}return s}
donner une distance d'édition 14. Essayez-le en ligne!Octave, distance
171615nCr
Essayez-le en ligne!
isprime(a^b-1)
Essayez-le en ligne!
Je ne parle pas très bien Octave, donc je ne sais pas s'il y a une fonction intégrée pour calculer nCr.
la source
MATL , distance 4, longueur 6
Dites si
a^b-1
est premier:Essayez-le en ligne!
Calculer
nCr(a,b)
:Essayez-le en ligne!
Comment ça marche
Dites si
a^b-1
est premier:Calculer
nCr(a,b)
:la source
Pyth, distance 4, longueur totale 8
Primality of
a^b-1
Essayez-le en ligne!
nCr (a, b)
Essayez-le en ligne!
Les deux prennent les entrées sous forme de tuples / listes d'entiers (par exemple
(1,2)
).la source
PHP, distance 14
Écrire un programme avec deux fonctions et n'en appeler qu'une seule entraînerait une distance de 1, mais ce serait trop boiteux.
Premier test, 100 octets:
nCr, 98 octets:
la source
Gelée , distance 4, longueur 5
Tache 1
Tâche 2
Essayez-le en ligne!
Comment ça marche
Tache 1
Tâche 2
la source
JavaScript Score: 1, longueur:
144142126117fonction (a, b) {s = "a = Math.pow (a, b) -s.length + 79; for (b = 2; a% b ++;); b> a1for (t = s.length-79 ; b;) t = t * a - / b - "; return eval (s.split (1) [1])}Les deux sous-programmes utilisent la longueur de l'autre pour calculer sa propre constante, donc aucun caractère ne peut être suppriméla source