Étant donné un entier positif en entrée, déterminez s'il s'agit d'un nombre magnanime.
Un nombre magnanime est un nombre tel que toute insertion d'un +
signe entre deux chiffres quelconques dans la base 10 entraîne l'expression d'un entier premier.
Par exemple, 40427 est magnanime car
4+0427 = 431 is prime
40+427 = 467 is prime
404+27 = 431 is prime
4042+7 = 4049 is prime
Sortie
Vous devez sortir deux valeurs distinctes, une lorsque l'entrée est magnanime et une lorsque l'entrée ne l'est pas.
Notation
Le but de ce concours sera de rendre la taille du code source écrit pour résoudre cette tâche, donnée en octets, aussi petite que possible.
Cas de test
1 -> True
2 -> True
4 -> True
10 -> False
98 -> True
101 -> True
109 -> False
819 -> False
4063 -> True
40427 -> True
2000221 -> True
1
qu'avec un signe plus inséré entre deux caractères quelconques (pas d'insertion), il ne peut en résulter que ce1
qui n'est pas lui-même premier.1
et2
n'ayant pas deux chiffres l'ensemble d'expressions est vide. Tous les membres de l'ensemble vide sont premiers. De plus, aucun d'entre eux ne l'est, mais c'est en dehors du point. C'est un peu déroutant, je vais vous donner cela, mais je pense que cela a plus de sens que les alternatives.Réponses:
05AB1E , 10 octets
Code
Utilise l' encodage 05AB1E . Essayez-le en ligne! ou Vérifiez tous les cas de test!
Explication
la source
1 - 9
? Le produit d'un ensemble vide est 1? Pourquoi?1
et le multiplier par chaque élément de l'ensemble, donc ...sum
le[]
est équivalent à0
, en utilisant la propriété d'induction lors de la mise en œuvre était assez intelligent.C (gcc) , 83
848583848675111octetsToutes les optimisations désactivées et uniquement sur GCC 32 bits.
-1 octet grâce à @ceilingcat
+ quelques octets pour le
1
cas.+ quelques octets pour les fonctions réutilisables.
Prend l'entrée comme un entier. Renvoie 1 pour les faux cas, 0 pour les vrais cas.
Essayez-le en ligne!
Voir ma autre réponse pour le code Mathematica (55 octets).
la source
1
,98
et4063
.Rétine , 38 octets
Essayez-le en ligne!
Imprime
1
pour les nombres magnanimes et0
autres.Explication
Nous commençons par faire correspondre chaque position entre deux chiffres (positions qui ne sont pas des limites de mot) et en insérant le préfixe et le suffixe de cette correspondance en unaire, en utilisant
_
comme chiffre unaire. Ainsi, au lieu d'insérer+
s, nous y insérons directement le résultat unaire de la somme.Maintenant, nous séparons la chaîne autour des chiffres, de sorte que chaque somme va sur sa propre ligne et nous nous débarrassons de ces chiffres (il y aura également une ligne de début et de fin vide, mais ce n'est pas important).
Il s'agit de l'expression rationnelle standard pour faire correspondre les nombres non premiers en unaire. L'utilisation d'une
G
étape de représentation signifie ici que nous gardons simplement toutes les lignes qui contiennent des non-nombres positifs (en éliminant les lignes vides).Enfin, nous vérifions si la chaîne est vide. Si l'entrée était magnanime, l'étape précédente aura supprimé toutes les lignes (car elles étaient toutes des nombres premiers), et cela nous donne
1
. Sinon, si une ligne n'était pas un nombre premier, elle restera dans la chaîne et l'expression régulière échouera, donnant0
.la source
Python 2 ,
827978 octetsCeci est lent et ne peut faire face qu'aux cas de test avec mémorisation.
Essayez-le en ligne!
Version alternative, 79 octets
Accéléré au prix d'un octet.
Essayez-le en ligne!
la source
Gelée , 12 octets
Essayez-le en ligne!
Vérifiez tous les cas de test.
la source
d
!Java 8,
1751719488 octets-77 grâce à @PeterTaylor en utilisant une arithmétique (au lieu de String with
.substring
) et en supprimant la méthode séparée pour vérifier si l'entier est un nombre premier.-6 octets en utilisant la méthode de vérification principale de @SaraJ , alors assurez-vous de lui donner un vote positif!
Essayez-le ici.
Explication:
la source
p
par récursivité; deuxièmement, accumulez les résultats de telle sorte que la fonction principale ne nécessite qu'une seulereturn
instruction en créant la valeur sentinelle dep
be-1
et en utilisant&
pour vérifier que toutes les valeurs renvoyées le sont-1
.n->{for(long d=10,m=1;d<n;d*=10)m|=p(n/d+n%d,2)-2;return m>0;}long p(long n,int i){return i<n?p(n%i<1?1:n,i+1):n;}
d<=n
à gérer10
. Le débordement de pile n'est pas un problème (la spécification ne donne pas une plage d'entrée qui doit être gérée), mais peut être corrigée et plus d'économies peuvent être obtenues en revenant à une boucle et en insérant .Pyth , 14 octets
Essayez-le en ligne! S'affichera
True
si le nombre est magnanime,False
sinon. Prend le nombre sous forme de chaîne.Explications
la source
Python 2 ,
104 102 102 98 96103 octetsi
complètement anonyme car il n'est appelé qu'une seule fois.x-1
justex
pour le rarnge de vérification principal.x=10
, ajoutant ainsi 7 octets, grâce à @Dennis et @Wheat Wizard pour l'avoir repéré: ma version précédente considérait 1 comme un premierEssayez-le en ligne!
la source
x-1
à la fin de la plage; la gamme est exclusive à droite.Japt ,
2416 octetsC'était à peu près une collaboration entre @Shaggy, @ETHproduction et moi-même.
Essayez-le en ligne!
Prend l'entrée sous forme de chaîne.
la source
x
convertit automatiquement les éléments du tableau en nombres ;-)XîU
génie. Je pense que çaU¯X
marche pour la même durée, mais quand mêmePip ,
2524 octetsEssayez-le en ligne!
Explication
a
est le premier argument de ligne de commande.1,#a
génère une plage contenant des nombres à1
traverslen(a)-1
. Pour cela, nous mappons une fonction lambda:Ensuite, nous mappons une autre fonction lambda,
0N_%,_=1
qui teste la primalité. Je l'ai pris de cette réponse ; vous pouvez y lire l'explication. Enfin, nous replions la liste sur AND logique ($&
). Le résultat est1
ssi toutes les sommes étaient importantes,0
si aucune ne l'était.Exemple, avec entrée de
4063
:la source
CJam , 22 octets
Essayez-le en ligne!
Imprime un entier positif pour la vérité, zéro pour la fausse.
-1 grâce à un astucieux tour de Peter Taylor .
-3 grâce à une autre astuce de Peter Taylor.
la source
0&!
est plus court que1+:*
!
renvoie une intersection booléenne et utilisée avec la valeur falsifiée0
afin que vous puissiez faire0&!
en 3 au lieu de1&!!
...,
opérateur de filtre à la place def
.!
pour convertir en booléen: c'était standard dans GolfScript et c'est standard dans CJam. Et1&!!
serait incorrect:0&!
c'est le test évident car l'exigence est forall, n'existe pas.Japt , 23 octets
Prend l'entrée sous forme de chaîne.
Dang it; battu au poinçon sur une alternative beaucoup plus courte sur laquelle je travaillais.
Essaye-le
la source
¬£i+YÄÃe@OxX j
4063
(devrait être vrai, est faux). L'astuce ici est que JS pense qu'un leader0
signifie que vous voulez octal ...40043
par exemple) Ajoutez simplement un+
après le0
pour résoudre ce problème.Mathematica, 75 octets
Function
qui attend aString
.PrimeQ@ToExpression@StringInsert[#,"+",n]
renvoie si l'insertion d'un+
après len
e chiffre donne un nombre premier.Table[...,{n,2,StringLength@#}]
donne la liste de ces valeurs sous forme den
plages allant2
de la longueur de la chaîne. Nous prenons ensuiteAnd
chacun des éléments de cette liste. Idéalement, siStringLength@#<2
, alorsTable[...]
est la liste vide, pour laquelleAnd@@{}==True
la source
Mathematica, 55
504549505462octetsIl semble que je devrais le poster séparément.
+6 octets pour la longueur de code remesurée.
+5 octets grâce à ngenisis.
Prend l'entrée comme un entier et retourne régulier
True
etFalse
. L'
entre-deux est unicode 0xF4A1, abréviation deFunction[,]
. La longueur du code est mesurée sur la taille du fichier (UTF-8 sans nomenclature), commentez s'il n'est pas correct.PowerRange[x]
renvoie 1, 10, 100 ... pas plus grand quex
, qui est introduit dans Mathematica 10.la source
Plain English
4204341315251241240 octets(Re-) incorporé le test de primalité dans la bibliothèque de Plain English, en déplaçant 3 863 octets dans la bibliothèque de Plain English. Suppression de 26 octets d'espace blanc. 64 octets enregistrés en abrégeant les variables locales. 10 octets enregistrés en abrégeant l'interface. Selon la suggestion de RosLuP , sauvé 1 octet en changeant la façon dont m est initialisé et incrémenté.
Version non golfée du code final:
Remarques: L'IDE en anglais simple est disponible sur github.com/Folds/english . L'IDE s'exécute sur Windows. Il se compile en code x86 32 bits.
La fourche dynamique de l'anglais simple de l' Osmosian Order avait déjà des tests de primalité dans la version 4700, mais elle utilisait un algorithme très inefficace (de janvier à juin 2017). Les versions 4001 à 4011 de la fourche dynamique du site GitHub ont omis les tests de primalité. La version 4013 de la fourche dynamique du site GitHub inclut des tests de primalité. Le code pour effectuer le test de primalité a été développé dans le cadre des révisions précédentes de cette réponse.
la source
Perl 6 , 58 octets
Essayez-le en ligne!
10, 10 * * ...^ * > $_
est la séquence géométrique de multiples de dix, prise jusqu'à un avant l'élément qui dépasse le paramètre d'entrée$_
. Ensuite, nous vérifions simplement que pour chaque puissance de dix, la somme du paramètre d'entrée pris div et mod cette puissance est première.la source
Haskell,
114110 octetsNon golfé avec explication:
la source
p x=[x]==[i|i<-[2..x],x`mod`i<1]
comme chèque principal, vous pouvez économiser 2 octets.divMod x$10^i
place dex`divMod`(10^i)
Axiome, 88 octets
test et résultats
la source
Brachylog , 11 octets
Essayez-le en ligne!
la source
Perl 6 , 35 octets
Essayez-le en ligne!
Explication:
la source
Empilé , 51 octets
Essayez-le en ligne!
Ceci est une fonction. Il fonctionne en convertissant son argument en une chaîne (
tostr
), en le dupliquant et en obtenant sa longueur (:#'
), en soustrayant 1 (1-
), en faisant une plage de 1 à ce nombre (~>
). La pile ressemble à ceci, pour l'entrée40427
:Nous effectuons une vectorisation
splitat
, ce qui fait que le tableau suivant se trouve en haut de la pile:En transposant cela avec
tr
, on obtient:Ensuite, nous mappons la fonction
['+',' '#
# ~ prime](with
map`). Cette fonction:Ensuite, après la carte, nous concaténons
1
. Ceci est depuisall
retourneundef
pour une liste vide.la source
JavaScript (ES6), 70 octets
Échoue sur le dernier cas dans mon navigateur en raison d'une erreur "trop de récursivité" lors du calcul
P(200023)
. Espérons que cela ne l'invalide pas.la source
QBIC , 38 octets
Explication
la source
CJam (21 octets)
Démo en ligne en ligne, suite de tests en ligne
Dissection
la source
Pyth,
1514 octetsSuite de tests
Enregistré un octet en utilisant la dernière modification de Pyth.
la source
APL (NARS), caractères 35, octets 70
tester:
Ce serait la traduction en APL d'Axiom post algo ici ...
la source
PHP, 100 octets
s'imprime
1
si l'entrée est magnanime, la sortie vide sinon. Exécuter en tant que pipe avec-nR
ou l' essayer en ligne .la source
Perl 5
-p
, 42 octetsEssayez-le en ligne!
la source