Défi:
Étant donné un nombre, prenez le plus grand nombre premier strictement inférieur à celui-ci, soustrayez-le de ce nombre, recommencez avec ce nouveau nombre avec le plus grand nombre premier inférieur à celui-ci, et continuez jusqu'à ce qu'il soit inférieur à 3. S'il atteint 1, votre le programme devrait sortir une valeur véridique, sinon, le programme devrait sortir une valeur de falsey.
Exemples:
Tous ces éléments devraient donner une valeur véridique:
3
4
6
8
10
11
12
14
16
17
18
20
22
23
24
26
27
29
30
32
34
35
37
38
40
41
42
44
46
47
48
50
Tous ces éléments devraient donner des valeurs de falsey:
5
7
9
13
15
19
21
25
28
31
33
36
39
43
45
49
Règles:
- Vous pouvez soit écrire un programme ou une fonction.
- Vous pouvez supposer que l'entrée est supérieure à 2.
- Des échappatoires standard s'appliquent
- Il s'agit de code-golf, donc la réponse la plus courte l'emporte!
9/10
as2^(-1) 3^2 5^(-1)
pense en termes de ce dernier)Réponses:
Gelée ,
98 octetsEssayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
Rétine , 31 octets
Impressions
0
(fausses) ou1
(véridiques).Essayez-le en ligne! (La première ligne active une suite de tests séparés par un saut de ligne.)
Explication
Convertissez l'entrée en unaire en transformant l'entrée
N
enN
copies de1
.Supprimez à plusieurs reprises le plus grand nombre premier inférieur à l'entrée. Ceci est basé sur le test de primalité standard avec regex .
Vérifiez si le résultat est unique
1
.la source
Pyth,
181514 octetsMerci à @Maltysen pour -1 octet
Un programme qui prend des entrées sur STDIN et imprime
True
ouFalse
selon le cas.Essayez-le en ligne
Comment ça marche
Ancienne version avec réduction, 18 octets
Essayez-le en ligne
Comment ça marche
la source
St
est deU
15 caractèresJavaScript (ES6),
6463 octets1 octet enregistré grâce à @Neil
J'ai écrit ceci en 2 minutes ... et cela a parfaitement fonctionné la première fois. Le premier utilisateur à trouver l'inévitable bogue gagne ...
Essaye le
Afficher l'extrait de code
Comment ça marche
Nous définissons d'abord g (x) comme la fonction qui trouve le premier nombre premier p <= x . Cela se fait en utilisant le processus suivant:
La solution à ce défi, f (x) , est maintenant assez simple:
la source
too much recursion
à la console du navigateur dans Firefox 48, donc je suppose que la récursivité dépasse la limite de récursivité de FF.x%2
devrait vous faire économiser un octetx==1
.Pyke,
1511 octetsEssayez-le ici!
Renvoie
1
si vrai et déclenche une exception s'il est fauxla source
Julia, 32 octets
Bien que cela ne soit pas la solution la plus courte parmi les langues, cela pourrait être la plus courte des langues lisibles par l'homme ...
Ou, pour le dire en termes un peu plus clairs
Appelé avec, par exemple
!37
,.la source
Mathematica, 32 octets
Il s'agit d'une fonction sans nom qui prend un entier et renvoie un booléen.
Explication
Il y a beaucoup de syntaxe et d'ordre de lecture drôle ici, alors ...
la source
#+0~Min~NextPrime@-#&~FixedPoint~#==1&
(36 octets). Bonne utilisation de//.
!<2
à la fin.Python3,
102 92 90 8988 octetsSuggestions de golf bienvenues! Je vois que
gmpy
contient une fonctionnext_prime
, mais je ne peux pas encore la tester :(-2 octets, merci à @JonathanAllan !
-1 octet, merci à @Aaron !
Cas de test
La sortie est de 13 valeurs véridiques et 13 valeurs de falsey.
s
contient les cas véridiques eth
les faux.la source
if all(x%y for...
oeuvresn<3 else
->n<3else
pour avoir la même longueur que la mienne;)Python, avec sympy, 60 octets
Ma méthode précédente était de 83 octets sans sympy utilisant la récursivité, mais j'ai pris vérité / falsey pour signifier distinguable et cohérente, mais j'ai été informé que c'est une interprétation incorrecte. Je n'arrive pas à le récupérer à cause de la queue, mais je vais le laisser ici au cas où quelqu'un sait comment le faire:
la source
2
n'est pas une valeur de falsey.Vitsy,
2826 octetsCela peut certainement être raccourci.
La
Essayez-le en ligne!
la source
MATL , 13 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test à la fois .
Explication
la source
CJam ,
2116 octetsMerci à Dennis d'avoir économisé 4 octets.
Essayez-le en ligne!
Explication
la source
ri_{_1|{mp},W=-}*
devrait marcher.1|
c'est vraiment intelligent. :) (Et j'oublie toujours que cela{...},
fait une plage implicite ...)Perl, 42 octets
Comprend +1 pour
-p
Exécuter avec entrée sur STDIN
reach1.pl
:Utilise l'expression régulière de primalité
la source
.NET Regex, 38 octets
Juste pour montrer qu'il peut être vérifié en une seule expression régulière.
L'entrée est supposée être unaire.
Explication
Il implémente simplement l'exigence au mot, en supprimant à plusieurs reprises le plus grand nombre premier et vérifie s'il reste 1.
(?>(?<=(.*))..+(?<!^\1\2+(.+.)|$))+
: Le groupe sans retour arrière s'assure que le plus grand nombre premier que nous avons trouvé n'est pas annulé, et+
répète simplement le processus de correspondance avec le plus grand nombre premier.(?<=(.*))..+(?<!^\1\2+(.+.)|$)
: Correspondre au plus grand nombre premier inférieur au nombre restant(?<=(.*))
: Enregistrez combien nous avons soustrait pour établir un point d'ancrage pour l'assertion...+
: Cherchez le plus grand nombre ...(?<!^\1\2+(.+.)|$)
: ... qui est premier et inférieur au nombre restant.(?<!^\1\2+(.+.))
: La routine de test principale habituelle, avec^\1
clouée devant pour nous assurer que nous vérifions le montant correspondant à..+
(?!<$)
: Affirmer moins que le nombre restantla source
(?<=(.*))
partie est plutôt maladroite. Je ne sais pas s'il y a une meilleure façon. Aussi, je suis curieux de savoir s'il existe une solution dans PCRE.Perl 6 ,
54 53 5251 octetsExplication:
Exemple:
la source
Irrégulier , 63 octets
J'ai créé ce langage il y a deux jours, et les prémisses de base sont qu'il n'y a pas de boucles intégrées, les seules fonctionnalités sont l'arithmétique et la prise de décision de base, et l'évaluation du programme est basée sur des expressions régulières.
Explication
Cette partie convertit l'entrée en unaire. Il soustrait à plusieurs reprises 1 de l'entrée jusqu'à ce qu'il soit égal à 0, en ajoutant à
1_
chaque fois. Il supprime ensuite tous les par_
. Si je n'avais pas oublié unbreak
dans mon code cela pourrait s'écrire ainsi:La partie suivante supprime à plusieurs reprises le plus grand nombre premier de l'entrée jusqu'à ce qu'il soit égal à
1
ou11
, en11
étant remplacé par0
.J'ai utilisé l'expression régulière de la réponse de Martin Ender .
la source
Haskell, 79 octets
Pas vraiment court mais sans point :)
la source
PowerShell v2 +, 81 octets
Prend des informations
$n
. Entre dans unewhile
boucle tant qu'elle$n
est encore3
ou supérieure. Chaque itération, soustrait un nombre de$n
. Le nombre correspond aux résultats du test de primalité des expressions rationnelles appliqué à une plage($n-1)..2
via l' opérateurWhere-Object
(?
), puis au premier[0]
des résultats (puisque la plage diminue, cela entraîne la sélection de la plus grande). Après avoir conclu la boucle,$n
soit va être,1
soit2
, par définition, donc nous pré-décrémentons$n
(en la transformant en ou0
ou1
), et prenons le booléen-pas de!
celui - ci. Cela reste sur le pipeline et la sortie est implicite.Exemples
la source
Matlab, 51 octets
Ceci est TRÈS similaire à la solution JS6 par ETHProductions , mais a besoin que la variable soit dans l'espace de travail.
la source
Python 2.7:
8887 octetsThx @TuukkaX pour -1 octet de plus!
la source
n<2
place den==1
.Floroïde ,
45 3029 octetsla source
Clojure, 125 octets
Oui, c'est un long morceau de code. La langue la plus verbeuse frappe à nouveau!
Non golfé:
la source