Contexte:
Le défi actuel de Perfect Numbers est plutôt imparfait et compliqué, car il vous demande de produire dans un format complexe impliquant les facteurs du nombre. Il s'agit d'un repostage purement décisionnel du défi.
Défi
Étant donné un entier positif à travers n'importe quel format d'entrée standard , faites la distinction entre s'il est parfait ou non.
Un nombre parfait est un nombre égal à la somme de tous ses diviseurs stricts (ses diviseurs positifs inférieurs à lui-même). Par exemple, est un nombre parfait, puisque ses diviseurs sont , qui totalisent , tandis que n'est pas un nombre parfait puisque ses diviseurs ( ) totalisent , pas .
Cas de test:
Imperfect:
1,12,13,18,20,1000,33550335
Perfect:
6,28,496,8128,33550336,8589869056
Règles
- Votre programme n'a pas à terminer les cas de test plus volumineux, s'il y a des contraintes de mémoire ou de temps, mais il devrait théoriquement être capable de lui donner plus de mémoire / temps.
- La sortie peut être deux valeurs distinctes et cohérentes à travers format de sortie autorisé . S'il n'est pas immédiatement évident de savoir ce qui représente parfait / imparfait, veuillez vous assurer de le préciser dans votre réponse.
1
serait parfait, car chaque nombre est divisible par1
lui-même. La somme des diviseurs propres de1
est0
Réponses:
Brachylog , 4 octets
Essayez-le en ligne!
Le prédicat réussit pour les entrées parfaites et échoue pour les entrées imparfaites, l'impression
true.
oufalse.
s'il est exécuté comme un programme complet (sauf sur le dernier cas de test qui prend plus d'une minute sur TIO).la source
fk
: xNeim , 3 octets
Essayez-le en ligne!
(Je ne sais pas comment exécuter tous les cas de test en même temps, car j'ai commencé à apprendre Neim il y a une quinzaine de minutes, mais je les ai vérifiés individuellement.)
Imprime 0 pour imparfait, 1 pour parfait.
la source
𝔼
1 octet? Neim n'utilise-t-il que 128 de ces personnages non standard?R ,
3329 octetsEssayez-le en ligne!
Retourne
TRUE
pour les nombres parfaits etFALSE
pour les imparfaits.la source
0
(parfait)FALSE
et différent de zéro,TRUE
mais j'ai supprimé l'un d'eux pour inverser le mappage. C'est une astuce de golf utile pour lancer denumeric
àlogical
, souvent en conjonction avecwhich
ou[
.Gelée , 3 octets
Essayez-le en ligne!
la source
Japt
-!
, 4 octetsPour une raison quelconque, ne
¦
fonctionne pas sur tio, je dois donc utiliser le-!
drapeau et à la¥
placeEssayez-le en ligne!
la source
U
n'est pas inséré automatiquement auparavant!
.Python 3 , 46 octets
Essayez-le en ligne!
Force brute, additionne les facteurs et vérifie l'égalité.
la source
lambda x:sum(i for i in range(1,x)if x%i<1)^x
devrait également fonctionner.Python , 45 octets
True
pour parfait;False
pour les autres (changez ceci avec==
->!=
)Essayez-le en ligne!
44 4241 octets (-2 grâce aux ovs) si nous pouvons sortir en utilisant "truey vs falsey":(falsey (
0
)) pour parfait; véridique (un entier non nul) sinonla source
Octave , 25 octets
Essayez-le en ligne!
Explication
la source
JavaScript, 38 octets
Essayez-le en ligne!
(Délai d'expiration du dernier test sur TIO.)
la source
f=
conversion après une fonction récursive.C # (Visual C # Interactive Compiler) , 46 octets
Retourne 0 si parfait, sinon retourne un nombre positif. Je ne sais pas si la sortie de différents types d'entiers est autorisée à la place de deux valeurs distinctes de vérité et de fausse, et je n'ai trouvé aucune discussion sur les méta à ce sujet. Si ce n'est pas valide, je le supprimerai.
Essayez-le en ligne!
C # (Visual C # Interactive Compiler) ,
4947 octetsEssayez-le en ligne!
la source
Rubis , 33 octets
Essayez-le en ligne!
la source
TI-BASIC (TI-84),
3023 octetsHorriblement inefficace, mais ça marche.La réduction du nombre de bytec a accéléré le programme de beaucoup.
L'entrée est en
Ans
.La sortie est
Ans
entrée et est automatiquement imprimée à la fin du programme.Explication:
(TI-BASIC n'a pas de commentaires, alors supposez simplement que cela
;
fait un commentaire)Exemple:
Remarque: Le nombre d'octets d'un programme est évalué en utilisant la valeur dans [MEM] > [2] > [7] (36 octets) puis en soustrayant la longueur du nom du programme,
CDGF2
(5 octets) et 8 octets supplémentaires utilisés pour stockage du programme:36 - 5 - 8 = 23 octets
la source
Java (JDK) , 54 octets
Essayez-le en ligne!
Bien que pour une correspondance stricte nombre par nombre, ce qui suit renverra les mêmes valeurs, mais ne fait que 40 octets.
Essayez-le en ligne!
la source
Your program doesn't have to complete the larger test cases, if there's memory or time constraints, but it should be theoretically able to if it were given more memory/time.
int
, mais plutôt unBigInteger
? Parce que Java aBigIntegers
, mais il n'aura jamaisint
plus de 31 bits comme signé, qui ne peut avoir aucune autre valeur que celles représentées ici ...int
type n'était pas bornéAssemblage x86,
4543 octets.Explication (Intel Syntax):
L'entrée doit être fournie
EAX
.La fonction se définit
EAX
sur1
pour parfait et sur0
pour imparfait.EDIT : nombre d'octets réduit de deux en remplaçant
MOV EAX, $1
parXOR EAX, EAX
etINC EAX
la source
Labyrinthe , 80 octets
Les caractères latins ne
perfect puts zero else neg I
sont en fait que des commentaires *.c'est-à-dire que si l'entrée est parfaite, un
0
est imprimé, sinon-1
.Essayez-le en ligne!
* donc ceci ou ce travail aussi ...
Comment?
Prend en entrée un entier positif
n
et place une variable d'accumulateur de-n
sur la pile auxiliaire, puis effectue un test de divisibilité pour chaque entier den-1
bas en haut, y compris,1
en ajoutant tout ce qui se divisen
dans l'accumulateur. Une fois cette opération terminée, si la variable accumulateur est non nulle, a-1
est émis, sinon a0
est.Le
?::`}:(
n'est exécuté qu'une seule fois, au début de l'exécution:La prochaine instruction,
"
est un no-op, mais nous avons trois instructions voisines, donc nous nous branchons en fonction de la valeur en haut de Main, zéro nous fait avancer, tandis que non zéro nous mène à droite.Si l'entrée était,
1
nous allons de l'avant parce que le haut de Main est zéro:Mais si l'entrée était supérieure à
1
ce que nous tournons à droite parce que le haut de Main est différent de zéro:À ce stade, nous avons une branche à trois voisins, mais nous savons qu'elle
n-1
est non nulle, nous tournons donc à droite ...Nous sommes maintenant à une autre succursale à trois voisins à
%
.Si le résultat de
%
était non nul, nous allons à gauche pour décrémenter notre diviseur potentielp=p-1
, et quittons l'accumulateura
, tel qu'il est:... mais si le résultat de
%
était égal à zéro (pour la première passe que lorsquen=2
) nous allons tout droit sur Both Ajouter le diviseur à notre accumulateur,a=a+p
ET décrémenter notre potentiel diviseur,p=p-1
:À ce stade, si
p-1
est toujours non nul, nous tournons à gauche:... mais si
p-1
frappé à zéro, nous allons directement à la:
deuxième ligne du labyrinthe (vous avez déjà vu toutes les instructions, donc je laisse leurs descriptions et je donne juste leur effet):Maintenant, cela
{
a trois instructions voisines, donc ...... si
a
est zéro, ce qui sera parfaitn
, alors nous allons tout droit:... si
a
est non nul, ce qu'il sera pour non parfaitn
, alors nous tournons à gauche:la source
CJam , 17 octets
Essayez-le en ligne!
la source
Javascript, 62
Explication (bien que ce soit assez simple)
Merci à Jo King pour l'amélioration!
la source
05AB1E , 4 octets
Essayez-le en ligne!
Explication
la source
Powershell,
46 octets43 octetsEssayez-le en ligne!
Edit: -3 octets grâce à @AdmBorkBork
la source
2*$i
pour éliminer les parens de soustraction.C (gcc) , 41 octets
Essayez-le en ligne!
Faites-moi savoir si cet échec pour le cas final est un problème.
la source
n=!s;
au lieu d'return!s;
économiser 5 octets.s=s
ce qui a probablement été optimisé.Smalltalk, 34 octets
la source
Forth (gforth) , 45 octets
Essayez-le en ligne!
Explication
Boucle sur chaque nombre de 1 à n-1, sommant toutes les valeurs qui divisent n parfaitement. Renvoie vrai si la somme est égale à n
Explication du code
la source
Pyth , 9
13octetsEssayez-le en ligne!
Merci aux commentateurs pour l'aide au golf
Recherche tous les facteurs de l'entrée, les additionne et les compare à l'entrée d'origine.
la source
q0
peuvent être remplacés par!
etSQ
produisent la gamme[1-Q]
, de sorte que la gamme[1-Q)
peut être générée à l'aideStQ
. Comme lesQ
s sont maintenant à la fin du programme, ils peuvent tous les deux être omis. Version effilée, 9 octets -qsf!%QTSt
Lot, 81 octets
Prend
n
comme paramètre de ligne de commande et sort1
s'il s'agit d'un nombre parfait. Méthode de force brute, démarre la somme à-n
afin qu'elle puisse s'incluren
dans la boucle.la source
Fusain , 13 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Sorties
-
pour des nombres parfaits. Utilise la force brute. Explication:la source
Wolfram Language (Mathematica) , 14 octets
Essayez-le en ligne!
la source
Pyth, 8 octets
Essayez-le en ligne ici .
la source
Retina 0.8.2 , 44 octets
Essayez-le en ligne! Utilise la force brute, donc le lien inclut uniquement les cas de test les plus rapides. Explication:
Convertissez en unaire.
Faites correspondre tous les facteurs de l'entrée. Cela utilise le mode de chevauchement, qui dans Retina 0.8.2 nécessite que toutes les correspondances commencent à des positions différentes, de sorte que les correspondances sont en fait retournées dans l'ordre décroissant, en commençant par l'entrée d'origine.
Soustrayez les facteurs appropriés de l'entrée.
Testez si le résultat est nul.
la source
Java 8, 66 octets
Quelqu'un doit utiliser l'API Stream à un moment donné, même s'il existe un moyen plus court de le faire
Essayez-le en ligne!
la source
cQuents , 8 octets
Essayez-le en ligne!
Explication
la source