Description du défi
Un nombre Smith est un nombre composite dont la somme des chiffres est égale à la somme des sommes des chiffres de ses facteurs premiers. Étant donné un entier N
, déterminez s'il s'agit d'un nombre de Smith ou non.
Les premiers numéros Smith sont 4
, 22
, 27
, 58
, 85
, 94
, 121
, 166
, 202
, 265
, 274
, 319
, 346
, 355
, 378
, 382
, 391
, 438
(séquence A006753 en OEIS).
Exemple d'entrée / sortie
18: False (sum of digits: 1 + 8 = 9; factors: 2, 3, 3; sum of digits of factors: 2 + 3 + 3 = 8)
22: True
13: False (meets the digit requirement, but is prime)
666: True (sum of digits: 6 + 6 + 6 = 18; factors: 2, 3, 3, 37; sum of digits of factors: 2 + 3 + 3 + 3 + 7 = 18)
-265: False (negative numbers can't be composite)
0: False (not composite)
1: False (not composite)
4937775: True
Remarques
- Votre code peut être une fonction (méthode) ou un programme de travail complet,
- Au lieu de mots comme
True
etFalse
, vous pouvez utiliser toutes les valeurs véridiques et fausses, tant qu'elles sont claires, - C'est un défi de code-golf , alors faites votre code aussi court que possible!
Réponses:
Gelée ,
1211 octetsRenvoie 1 pour les nombres de Smith et 0 sinon. Essayez-le en ligne! ou vérifiez tous les cas de test .
Contexte
Æf
(factorisation principale) etD
(entier à décimal) sont implémentés de sorte queP
(produit) etḌ
(décimal à entier) constituent des inverses gauches.Pour les entiers -4 à 4 ,
Æf
renvoie ce qui suit.Pour les nombres -10, -1, -0,5, 0, 0,5, 1, 10 ,
D
renvoie ce qui suit.Comment ça marche
la source
Python 2,
122115110106 106 octetsEnregistré 4 octets grâce à Dennis
Essayez-le sur ideone.com
Explication
Lit un nombre sur stdin et affiche
True
si le nombre est un nombre Smith ouFalse
s'il ne l'est pas.la source
print n<m>s==sum(map(int,`m`))
.Brachylog , 19 octets
Essayez-le en ligne!
Explication
la source
_
(appelé moins bas ).05AB1E ,
1117 octetsExplication
Essayez-le en ligne!
la source
PowerShell v3 +, 183 octets
Pas de vérification principale intégrée. Pas d'affacturage intégré. Pas de somme de chiffres intégrée. Tout est fait à la main. :RÉ
Prend l'entrée
$n
comme un entier, définit$b
égal à un tableau vide. Voici$b
notre collection de facteurs premiers.Vient ensuite une
for
boucle. Nous fixons d'abord$a
égal à notre nombre d'entrée, et le conditionnel est jusqu'à ce qu'il$a
soit inférieur ou égal à 1. Cette boucle va trouver nos facteurs premiers.Nous bouclons de
2
jusqu'à$a
, utiliseWhere-Object
(|?{...}
) pour extraire des nombres premiers qui sont également des facteurs!($a%$_)
. Ceux-ci sont introduits dans une boucle interne|%{...}
qui place le facteur dans$b
et se divise$a
(ainsi nous finirons par arriver à1
).Donc, maintenant, nous avons tous nos facteurs premiers dans
$b
. Il est temps de formuler notre sortie booléenne. Nous devons vérifier que$n
c'est le cas-notin
$b
, car si c'est le cas, cela signifie que$n
c'est premier, et donc ce n'est pas un nombre Smith. De plus, (-and
) nous devons nous assurer que nos deux ensembles de chiffres sont-eq
uaux. Le booléen résultant est laissé sur le pipeline et la sortie est implicite.NB - Nécessite la version 3 ou plus récente pour l'
-notin
opérateur.J'exécute toujours l'entrée pourAprès plus de 3 heures, j'ai eu une erreur de stackoverflow. Donc, il y a une limite supérieure quelque part. Tant pis.4937775
(c'est lent à calculer), donc je mettrai à jour cela quand cela se terminera.Cela fonctionnera pour une entrée négative, zéro ou un, car la droite de la
-and
va éliminer une erreur pendant qu'elle essaie de calculer les sommes des chiffres (illustrées ci-dessous), ce qui entraînera le passage de cette moitié$false
lors de l'évaluation. Étant donné que STDERR est ignoré par défaut et que la sortie correcte est toujours affichée, c'est très bien.Cas de test
la source
MATL, 17 octets
Sorties truthy ou Falsey tableaux où une sortie truthy exige que tous les éléments non nul.
Essayez-le en ligne
la source
Gelée ,
27 2523 octets(le golf est
probablementdéfinitivement possible)Renvoie
0
pour False ou1
pour TrueTous les cas de test sur TryItOnline
Comment?
la source
En fait, 18 octets
Malheureusement, en fait, il n'y a pas de factorisation intégrée qui donne les facteurs premiers d'un nombre à la multiplicité, j'ai donc dû en pirater un ensemble. Suggestions de golf bienvenues. Essayez-le en ligne!
Ungolfing
la source
Haskell,
120105 octetsla source
Octave,
8078 octetsExplication:
Essayez-le en ligne .
la source
any(t<0)
pour la non-primalité est très intelligentPyth, 21 octets
Un programme qui prend l'entrée d'un entier et imprime
True
ouFalse
selon le cas.Essayez-le en ligne
Comment ça marche
la source
Perl 6 ,
928887 octetsUne fonction anonyme qui renvoie un Bool.
( essayez-le en ligne )
EDIT: -1 octet grâce à b2gills
la source
2..i-1
est mieux orthographié comme2..^i
.Java 7,
509506435426419230 octetsJ'aurais dû écouter @BasicallyAlanTuring le commentaire de ..
Ah bien .. Certains langages de programmation utilisent un seul octet pour les facteurs premiers ou prime-check, mais Java n'en fait certainement pas partie.
EDIT: Réduit de moitié le nombre d'octets maintenant que j'ai eu le temps d'y penser.
Cas non testés (triés ..) et de test:
Essayez-le ici.
Sortie:
la source
Brachylog (plus récent) , 11 octets
Essayez-le en ligne!
Le prédicat réussit si l'entrée est un nombre Smith et échoue s'il ne l'est pas.
la source
Japt ,
1411 octets-3 octets grâce à @Shaggy
Essayez-le en ligne!
la source
JavaScript (ES6),
87 8684 octetsEssayez-le en ligne!
la source
Pyke, 16 octets
Essayez-le ici!
la source
2
Perl 6 , 80 octets
Essayez-le en ligne!
Bloc de code anonyme qui prend un entier et renvoie un booléen.
la source
APL (Dyalog Extended) ,
3629 octets SBCSCette réponse doit son golfe à la
⍭
monade d'Extended pour avoir renvoyé les facteurs premiers d'un nombre, et que⊤
mieux à la conversion de base qu'en Dyalog Unicode.Edit: -7 octets grâce à dzaima.
Essayez-le en ligne!
Explication
la source
{2>⍵:0⋄(⊃=+/-⊃×2<≢)+⌿10⊤⍵,⍭⍵}
J ,
3130 octetsEssayez-le en ligne!
la source
C (gcc) ,
139136 octetsEssayez-le en ligne!
-3 octets grâce au plafond
Explication:
la source
t-h&&i==_
place det-h?i==_:0
Raquette 176 octets
Renvoie 1 si vrai et 0 si faux:
Version détaillée:
la source
Rouille - 143 octets
solution python empruntée par @levitatinglion ... au moins c'est plus court que Java ...
dégouliné sur play.rust-lang.org
la source
APL (NARS), 33 caractères, 66 octets
"π⍵" renvoie les facteurs de liste de ⍵, supposons que l'entrée soit un entier positif> = 1; tester:
la source
C (gcc), 177 octets
Définit une fonction
Q
qui renvoie 0 pour les nombres de forgerons et différente de zéro pour les nombres non forgésEssayez-le en ligne!
Explication:
la source
C # (Visual C # Interactive Compiler) , 122 octets
Essayez-le en ligne!
la source