Introduction et crédit
Nous connaissons et aimons tous nos règles géniales pour tester si un nombre est divisible par 11 ou 3, ce qui est juste une somme intelligente sur les chiffres du nombre. Maintenant, ce défi porte cela à un nouveau niveau, en vous obligeant à calculer la somme des chiffres, puis à vérifier si le résultat est un carré entier parfait, aucune des opérations ne pouvant généralement être effectuée très rapidement. Comme cette propriété est également très difficile à voir lorsque l'on regarde un nombre, nous voulons que cela soit fait pour des listes entières de nombres afin que nous puissions économiser du travail humain. C'est donc votre défi maintenant!
C'était une affectation à mon cours universitaire de programmation fonctionnelle. Ce devoir est maintenant fermé et a été discuté en classe et j'ai la permission de mon professeur de le poster ici (j'ai demandé explicitement).
spécification
Contribution
Votre entrée est une liste d'entiers non négatifs, dans n'importe quel format d'E / S standard.
Vous pouvez choisir le format de liste selon votre langue
Sortie
La sortie est une liste d'entiers, dans n'importe quel format d'E / S standard.
Que faire?
Filtrez chaque entier de la liste d'entrée pour lequel la somme des chiffres n'est pas un carré (d'un entier).
L'ordre des éléments ne peut pas être modifié, par exemple, si vous obtenez, [1,5,9]
vous ne pouvez pas revenir[9,1]
Boîtes de coin potentielles
0 est un entier non négatif et donc une entrée valide et 0 est également une racine entière valide, par exemple 0 compte comme un carré entier.
La liste vide est également une entrée et une sortie valides.
Qui gagne?
Il s'agit de code-golf, donc la réponse la plus courte en octets l'emporte!
Les règles standard s'appliquent bien sûr.
Cas de test
[1,4,9,16,25,1111] -> [1,4,9,1111]
[1431,2,0,22,999999999] -> [1431,0,22,999999999]
[22228,4,113125,22345] -> [22228,4,22345]
[] -> []
[421337,99,123456789,1133557799] -> []
Exemple pas à pas
Example input: [1337,4444]
Handling first number:
Sum of the digits of 1337: 1+3+3+7=14
14 is not an integer square, thus will be dropped!
Handling second number:
Sum of the digits of 4444: 4+4+4+4=16
16 is an integer square because 4*4=16, can get into the output list!
Example output: [4444]
Réponses:
Pyke, 6 octets
Essayez-le ici!
la source
Mathematica,
3936 octetsUne fonction anonyme:
LLlAMnYP a enregistré un octet. Merci!
Martin Ender a sauvé trois de plus en remplaçant
IntegerQ
parAtomQ
. Intelligent! (Le résultat de√
sera exact, il renvoie donc une expression composée commeSqrt[5]
si son argument n'est pas un carré.)la source
...Digits@#&
lieu de...Digits[#]&
Gelée,
87 octets1 octet grâce à @ Sp3000 .
Suite de tests.
Explication
la source
Brachylog v2, 8 octets
Essayez-le en ligne!
Explication
Les
&
moyens que la sortie des éléments sont les mêmes que ceux de la liste d'entrée, maisℤ
sera erreur si est pas un nombre carré l'entrée du bloc, donc nous obtenons la liste d'entrée avec des éléments avec des sommes de chiffres non carrés mis au rebut.Notez qu'il peut d'abord sembler y avoir un problème d'imprécision en virgule flottante (certains très grands entiers non carrés ont des racines carrées entières en raison de l'arrondissement). Cependant, Brachylog prend en charge l'arithmétique du bignum, et a en fait ce comportement pris en compte dans son implémentation de
√
: un nombre qui est un carré parfait verra sa racine carrée rapportée comme un entier, tandis qu'un nombre qui n'est pas un carré parfait (mais suffisamment proche pour que son racine carrée est intégrale) verra sa racine carrée rapportée comme un flottant avec une valeur intégrale. De façon pratique,ℤ
ne permet que le premier type de valeur de retour, ce qui donne un échec d'assertion pour le second.la source
Pyth, 10 octets
Suite de tests.
Explication
la source
CJam, 14 octets
Merci à @FryAmTheEggman d'avoir enregistré un octet!
Essayez-le en ligne!
Il s'agit d'un bloc sans nom qui attend la liste d'entrée sur la pile et laisse la liste filtrée dessus.
Explication
la source
Haskell -
706059 octetsUsage:
Assez simple; calcule la somme des chiffres et vérifie si le plancher (sqrt (y)) ^ 2 == y
Edit: A volé l'idée de vérifier la liste des carrés de C. Quilley
la source
f=
soit requis pour cette réponse.05AB1E,
1910 octetsExplication
Essayez-le en ligne
Edit: 9 octets enregistrés grâce à @Adnan
la source
vySO
et vérifier immédiatement s'il est carré ou non. Je suis arrivé ce à 5:tDï->
. Il existe également une fonction intégrée spéciale qui s'imprimey
lorsqu'elle est égale à1
, qui est (—
). Ce serait donc çavySOtDï->—
.R ,
5755 octetsUtiliser
Filter
sur le vecteur. Suppose des entiers de 32 bits, donc 10 chiffres max.Cas d'angle: renvoie
NULL
pour le vecteur vide etnumeric(0)
pour un vecteur sans nombre valide. Ils ont tous deux une longueur nulle et devraient donc être acceptables.-2 grâce à @Giuseppe
Essayez-le en ligne!
la source
PowerShell ,
6454 octetsEssayez-le en ligne!
-10 octets grâce à mazzy
Prend l'entrée comme arguments de ligne de commande (voir les exemples ci-dessous), qui sont traités dans PowerShell dans le tableau
$args
. Nous redirigeons cela vers?
un alias pourWhere-Object
(fonctions similaires àfilter
) afin de sélectionner notre sortie. Notre sélection est basée sur l'appel .NET[math]::Sqrt()
de la somme des chiffres du nombre est un entier avec!(...%1)
. Les entiers donneront 0, qui lorsquenot
ed devientTrue
alors que les racines non entières le deviennentFalse
.Comme mentionné ailleurs, «retourner» un tableau vide n'a pas de sens, car il est converti
$null
dès qu'il quitte la portée, donc la sortie pour une entrée vide n'est rien.Exemples
la source
$n%1
vérifie si uniquement$args|?{!([math]::Sqrt(([char[]]"$_"-join'+'|iex))%1)}
Python 2, 76 octets
Essayez-le ici!
Certains abus d'égalité pour vérifier un nombre carré, le reste est assez peu spectaculaire.
L'instruction eval est évaluée à
sum(map(int,
n))**.5==int(sum(map(int,
n))**.5)
la source
Oracle SQL 11.2, 213 octets
Non-golfé
la source
Brachylog , 26 octets
Exemple:
Explication
C'est une situation où quelque chose fonctionne un peu trop bien ... la
~^[X:2]
partie est vraie à la fois pour le positif et le négatifX
, donc pour éviter les doublons, je dois le préciserX > 0
.La
;.0
partie est ici en raison d'un bogue (l'énumération ne fonctionne pas sur l'entier 0).Prédicat principal
Prédicat 1
la source
Python 2, 53 octets
Testez-le sur Ideone .
la source
f([1111111111111111])
, il ressemble àrepr(n)
contient un'L'
etint('L')
jette unValueError
. J'ai l'impression que tu as besoinstr(n)
ici?J,
3327 octets6 octets grâce à @miles .
Dans les interprètes en ligne,
inv
n'est pas stocké. Remplacez-le par à la^:_1
place.Usage
Où
>>
est STDIN et<<
STDOUT.Légèrement non golfé
Version précédente de 33 octets
Usage
Où
>>
est STDIN et<<
STDOUT.Légèrement non golfé
la source
f&.g
pour appliquerg
, puisf
, puis l'inverse deg
pour raccourcir*:@<.@%:
à l'<.&.%:
enregistrement de 2 octets. Vous pouvez le réorganiser et utiliser uniquement floor pour obtenir#~[:(=<.)@%:+/"1@(10&#.inv)
27 octets où ilinv
est^:_1
et est déjà défini.Javascript 66 octets
Merci pour SergioFC d'avoir économisé 7 octets
la source
c+d
place dec-+-d
? De plus, vous pouvez utilisern%1==0
pour tester si le résultat est un entier, vous pouvez donc peut-être enregistrer quelques octets en utilisantb=>!(Math.sqrt((b+"").split``.reduce((c,d)=>c-+-d))%1)
pour filtrerPerl 5, 42 octets
41, plus 1 pour
-pe
au lieu de-e
Explication:
-p
obtient chaque entier d'entrée sur une nouvelle ligne et l'affecte$_
à cette chaîne.my$s
initialise la variable$s
à rien, à nouveau pour chaque entier d'entrée.map$s+=$_,/./g
saisit chaque caractère numérique et l'ajoute numériquement à$s
. (La nouvelle ligne devient 0 lorsqu'elle est numérotée.)sqrt$s==~~sqrt$s
teste si$s
a une racine carrée non intégrale, et$_ x=
se$_
transforme en lui-même ou la chaîne vide en fonction de ce test.-p
impressions$_
Merci à Brad Gilbert b2gills pour avoir économisé trois octets.
Aussi 41 plus 1:
s/./$s+=$&/ger
ajoute chaque caractère numérique à$s
(et la nouvelle ligne est 0 comme ci-dessus)la source
JavaScript (Node.js) , 48 octets
Essayez-le en ligne!
Explication
la source
MATL,
161413 octetsEssayez-le en ligne!
Explication
la source
Julia - 38 octets
C'est assez facile de voir ce que cela fait.
digits
convertit un nombre en une liste de ses chiffres,sum
calcule ainsi la somme des chiffres,√
produira alors un nombre entier si le nombre est un carré, sinon il y aura une partie fractionnaire.%1
ne renverra que la partie fractionnaire, et si elle est nulle (==0
), lafilter
gardera dans la liste, sinon elle sera filtrée.Utilisé comme
![22228,4,113125,22345]
la source
Jolf, 8 octets
Essayez-le ici!
Explication
la source
MATLAB,
524342 octetsCrée une fonction anonyme du nom
ans
qui peut être appelé avec un tableau en entrée:ans([22228,4,113125,22345])
.Démo en ligne . La démo en ligne est en Octave, ce qui ne fonctionne pas pour l'entrée vide, mais MATLAB le fait.
Explication
Nous convertissons chaque élément du tableau d'entrée en base 10, ce qui donnera un tableau de caractères 2D où chaque ligne contient les chiffres d'un nombre dans le tableau. Pour convertir ces caractères en nombres, nous soustrayons 48 (ASCII pour
'0'
). Nous additionnons ensuite les lignes, prenons la racine carrée et déterminons si chaque valeur est un carré parfait~mod 1
. Nous utilisons ensuite ce booléen pour filtrer le tableau d'entrée.la source
Clojure, 110 octets
Calcule la somme des chiffres, puis filtre ceux pour lesquels il n'existe pas de nombre au carré égal à la somme.
Vous pouvez voir le résultat ici - https://ideone.com/ciKOje
la source
Perl 6 ,
3835 octetsTester:
la source
C,
143141 octetsEssai non golfé en ligne
la source
Rétine , 69
Parce que tester des carrés parfaits dans la rétine. Ceci peut être modifié pour le calcul généralisé de la racine carrée entière .
L'entrée est une liste séparée par des sauts de ligne.
Essayez-le en ligne.
a
a
unaire exprimé enb
s, séparé par des espacesla source
%
configuration\G
et les références avancées. N'hésitez pas à le prendre: retina.tryitonline.net/… :)Python, 50 octets
Si n est une liste de nombres entrée
la source
Rubis , 39 octets
Essayez-le en ligne!
la source
K (oK) ,
191713 octetsSolution:
Essayez-le en ligne!
Explication:
Remarques:
la source
func#list
) ?MathGolf ,
54 octetsEssayez-le en ligne!
Explication:
MathGolf est toujours en développement,
donc je suppose que l'entrée implicite arrive bientôt pour raser ce premier octet.Yay!la source