Soit (entrée)
Alors les diviseurs sont: 1, 2, 3, 6, 7, 14, 21, 42
Équerrage de chaque diviseur: 1, 4, 9, 36, 49, 196, 441, 1764
Prise de somme (addition): 2500
Puisque nous retournons donc une valeur véridique. S'il ne s'agit pas d'un carré parfait, renvoyez une valeur fausse.
Exemples :
42 ---> true
1 ---> true
246 ---> true
10 ---> false
16 ---> false
C'est du code-golf donc le code le plus court en octets pour chaque langue gagne
Merci à @Arnauld d'avoir souligné la séquence: A046655
code-golf
math
number
decision-problem
Utilisateur Any3nymous
la source
la source
Réponses:
R ,
3937 octetsEssayez-le en ligne!
Utilise l'approche classique "tester si carré parfait", en prenant la partie non intégrale de la racine carrée
S^.5%%1
et en prenant la négation logique de celle-ci, car elle mappe zéro (carré parfait) àTRUE
et non nul àFALSE
.Merci à Robert S d' avoir économisé quelques octets!
la source
scan()
pour enregistrer quelques octets?JavaScript (ES7),
46 4442 octets1 octet enregistré grâce à @Hedi
Essayez-le en ligne!
Commenté
la source
d
allantn
au0
lieu de2
àn
comme ceci:n=>!((g=d=>d?d*d*!(n%d)+g(d-1):0)(n)**.5%1)
05AB1E , 5 octets
Essayez-le en ligne!
Comment?
la source
Langage de programmation Shakespeare ,
434428415 octetsEssayez-le en ligne!
-13 octets grâce à Jo King!
Sorties
1
pour vrai résultat, sorties0
pour faux résultat.la source
Python 2 , 55 octets
Essayez-le en ligne!
la source
Neim , 5 octets
Explication:
Essayez-le en ligne!
la source
C (gcc) ,
67636059 octets-1 octets grâce à @JonathanFrech
Essayez-le en ligne!
la source
++i<=n
êtrei++<n
?Brachylog ,
128 octets-4 octets grâce à Fatelize car je ne savais pas que le brachylog a un facteur fonctions
explication
Essayez-le en ligne!
la source
f^₂ᵐ
est de 4 octets plus court queḋ{⊇×^₂}ᵘ
MathGolf ,
54 octetsEssayez-le en ligne!
Explication
Très similaire aux autres réponses, par rapport à 05AB1E je gagne un octet pour mon opérateur "is perfect square".
la source
MATL , 9 octets
Essayez-le en ligne!
Aussi simple que possible
la source
PowerShell ,
6856 octetsEssayez-le en ligne!
Semble long ...-12 octets grâce à mazzy
Est-ce exactement ce qu'il dit sur l'étain. Prend la plage de
1
à l'entrée$n
et multiplie les$_*$_
temps carrés , que ce soit un diviseur ou non!($n%$_)
. Cela rend les diviseurs égaux à un nombre différent de zéro et les non-diviseurs égaux à zéro. Nous en prenons ensuite la somme avec notre accumulateur$a
. Ensuite, on boucle à nouveau de1
jusqu'à$a
et retirer ces chiffres où|?{...}
il est carré-eq
uel à$a
. Cela reste sur le pipeline et la sortie est implicite.Génère un entier positif pour true, et rien pour falsey.
la source
$args[0]
est plus court :)1..$args[0]|%{$a+=$_*$_*!($n%$_)};1..$a|?{$_*$_-eq$a}
$n
intérieur de la boucle pour!($n%$_)
. Mais, votre réécriture de la somme a permis d'économiser 12 octets, alors merci!$args[0]
est plus court :)Japt ,
1197 octets-2 octets de @Giuseppe et un autre -2 de @Shaggy
Essayez-le en ligne!
la source
APL (Dyalog Unicode) , 18 octets
Essayez-le en ligne!
Lambda anonyme. Renvoie 1 pour la vérité et 0 pour la fausse (les cas de test dans TIO sont prettifiés).
Shoutouts à @ H.PWiz pour 4 octets!
Comment:
la source
not
plutôt que0=
d'enregistrer un octet?not
opérateur APL (~
), lorsqu'il est utilisé de manière monadique, ne fonctionne qu'avec des booléens (0 ou 1). Étant donné que tout nombre modulo 1 n'est jamais égal à 1, si j'utilisais à la~
place de0=
, j'obtiendrais undomain error
sur n'importe quel nombre qui n'est pas un carré parfait, car les valeurs décimales sont hors du~
domaine de. De plus, je ne peux pas simplement omettre le0=
, car la valeur véridique d'APL est 1, pas 0, et elle n'aurait pas de sortie cohérente pour les valeurs de falsification.K (oK) ,
262522 octetsSolution:
Essayez-le en ligne!
Explication:
Remarques:
la source
Pari / GP , 23 octets
Essayez-le en ligne!
la source
Matlab,
3937 octetsMalheureusement, cela ne fonctionne pas sur Octave (sur tio) donc pas de lien tio.
Remarque Comme @LuisMendo l'a indiqué,
divisors()
appartient à Symbolic Toolbox.la source
divisors
appartenir à la boîte à outils symbolique. Vous devez l'indiquer dans le titre. En outre, vous pouvez utiliser à la~···
place de···==0
sum(...)^.5
au lieu desqrt(sum(...))
Haskell ,
786453 octets-14 octets grâce à Ørjan Johansen . -11 octets grâce aux ovs .
Essayez-le en ligne!
Hé, ça fait un moment que je n'ai ... écrit aucun code, donc mon Haskell et mon golf pourraient être un peu rouillés. J'ai oublié les types numériques Haskell gênants. : P
la source
Pyt , 7 octets
Essayez-le en ligne!
Explication
Essayez-le en ligne!
Explication
Essayez-le en ligne!
Explication
la source
Husk , 6 octets
Essayez-le en ligne!
Explication
la source
Gelée , 6 octets
Essayez-le en ligne! Ou consultez la suite de tests .
Comment?
la source
Proton , 41 octets
Essayez-le en ligne!
Approche similaire à la réponse Python.
la source
Mathematica, 32 octets
Fonction pure. Prend un nombre en entrée et retourne
True
ouFalse
en sortie. Je ne sais pas exactement s'il existe une méthode plus courte pour vérifier les carrés parfaits.la source
Octave / MATLAB, 43 octets
Essayez-le en ligne!
la source
Rouge , 67 octets
Essayez-le en ligne!
la source
Scala ,
6867 octetsEssayez-le en ligne!
la source
Perl 6 , 34 octets
-1 octet grâce à nwellnhof
Essayez-le en ligne!
la source
**.5
est un octet plus court que.sqrt
.F #, 111 octets
Essayez-le en ligne!
Obtient donc
d
les diviseurs pour tous les nombres entre 1 etn
inclus. Dans la fonction principaleu
, la première ligne affecte la somme de tous les diviseurs carrés àm
. La deuxième ligne obtient les diviseurs pourm
et détermine si l'un d'eux est égal au carrém
.la source
Perl 5, 47 octets
Renvoie 1 pour vrai et rien pour faux.
Explication:
la source
Sensationnel , 47 octets
Un lambda acceptant un argument numérique.
Explication
(1..n)
crée un tableau des valeurs 1 à nn%i
est faux (comme 0 est faux) sii
divisen
sans resten%i ? 0 : i*i
est la somme du carré de la valeuri
si elle se divisen
sans reste, sinon est 0sum{ i-> n%i ? 0 : i*i }
additionne le résultat précédent sur l'ensemblei
du tableau.s%Math.sqrt(s)
est faux (comme 0 est faux) si le sqrt des
divises
sans reste!(s%Math.sqrt(s))
retourne du lambda (return
implicite sur la dernière instruction)!false
lorsque le sqrt des
divises
sans resteEssayez-le en ligne!
la source
Java 8,
7570 octets-5 octets grâce à @ archangel.mjj .
Essayez-le en ligne.
Explication:
la source
n->{int s=0,i=0;for(;++i<=n;)s+=n%i<1?i*i:0;return Math.sqrt(s)%1==0;}