Écrivez un programme ou une fonction pour sortir la somme des nombres carrés impairs (OEIS # A016754) moins qu'une entrée n
.
Les 44 premiers numéros de la séquence sont:
1, 9, 25, 49, 81, 121, 169, 225, 289, 361, 441, 529, 625, 729, 841, 961, 1089,
1225, 1369, 1521, 1681, 1849, 2025, 2209, 2401, 2601, 2809, 3025, 3249, 3481,
3721, 3969, 4225, 4489, 4761, 5041, 5329, 5625, 5929, 6241, 6561, 6889, 7225, 7569
La formule de la séquence est a(n) = ( 2n + 1 ) ^ 2
.
Remarques
- Le comportement de votre programme peut être indéfini
n < 1
(c'est-à-dire que toutes les entrées valides le sont>= 1
.)
Cas de test
1 => 0
2 => 1
9 => 1
10 => 10
9801 => 156849
9802 => 166650
10000 => 166650
code-golf
arithmetic
Thomas
la source
la source
Réponses:
Gelée, 6 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Contexte
Pour tous les entiers positifs k , nous avons 1² + 3² + ⋯ + (2k - 1) ² = k (2k - 1) (2k +1) ÷ 3 .
Puisqu'il y a m C r = m! ÷ ((mr)! R!) R -combinaisons d'un ensemble de m éléments, ce qui précède peut être calculé comme (2k + 1) C 3 = (2k + 1) 2k (2k - 1) ÷ 6 = k (2k - 1) (2k + 1) ÷ 3.
Pour appliquer la formule, il faut trouver les 2k + 1 les plus élevés tels que (2k - 1) ² <n . En ignorant la parité pendant un moment, nous pouvons calculer le plus haut m tel que (m - 1) ² <n comme m = ceil (srqt (n)) . Pour incrémenter conditionnellement m s'il est pair, il suffit de calculer m | 1 (OR au niveau du bit avec 1 ).
Comment ça fonctionne
la source
JavaScript (ES6), 30 octets
31 octets si
f(1)
doit retourner zéro au lieu de faux:la source
05AB1E ,
108 octetsCode:
Explication:
Peut - être pratique:
t;L·<nO
.Utilise l' encodage CP-1252 . Essayez-le en ligne! .
la source
Haskell, 30 octets
Étonnamment normal.
la source
C #,
126131 octetsVersion éditée pour se conformer à la nouvelle question:
Utilisation d'une limite codée en dur:
la source
# Language name, number bytes
pour la cohérence.Console.Read
à la fin?namespace
s ne sont pas requis pour les fichiers uniques.System.Console.Write(s);
si cela fonctionne, et si vous n'en avez pas besoinConsole.Read
.Gelée, 7
Essayez-le en ligne ou essayez une version modifiée pour plusieurs valeurs
Chut ... Dennis dort ...
Merci à Sp3000 dans le chat pour leur aide!
Explication:
la source
R,
3836 octets@Giuseppe a enregistré deux octets en se déplaçant
x
dans la liste des arguments pour enregistrer les accolades. Idée sympa!Non golfé
Essayez-le en ligne!
la source
x
dans un argument de fonction par défaut, puis vous pouvez supprimer les accolades.C,
51, 5048 octetsParce que pourquoi ne pas jouer au golf dans l'une des langues les plus verbeuses? (Hé, au moins ce n'est pas Java!)
Essayez-le en ligne!
Programme complet non golfé, avec test E / S:
la source
most verbose languages
Plus golfique que Python, C #, LISP, Forth, etc., C est en fait assez bon pour le golf< 50 bytes
. En outre, il existe un méta-post pertinent ici .En fait, 7 octets
Essayez-le en ligne!
Aussi pour 7 octets:
Essayez-le en ligne!
Cela utilise la même formule que dans la réponse Jelly de Dennis.
Explication:
la source
Literally
t-il appelé ?Octave, 23 octets
Essai:
la source
CJam, 15 octets
Essayez-le en ligne!
Solutions 10000 codées en dur:
Solution de 12 octets de Martin:
Ma solution originale de 13 octets:
Essayez-le en ligne!
la source
Pyth, 10 octets
Suite de tests
Explication:
la source
s<#Q%2t^R2
Mathcad, 31 "octets"
Notez que Mathcad utilise des raccourcis clavier pour entrer plusieurs opérateurs, y compris la définition et tous les opérateurs de programmation. Par exemple, ctl-] entre dans une boucle while - elle ne peut pas être saisie et ne peut être saisie qu'à l'aide du raccourci clavier ou de la barre d'outils de programmation. Les "octets" sont considérés comme le nombre d'opérations au clavier nécessaires pour entrer un élément Mathcad (par exemple, le nom de la variable ou l'opérateur).
Comme je n'ai aucune chance de gagner ce concours, j'ai pensé ajouter un peu de variété avec une version formule directe.
la source
Raquette, 57 octets
la source
MATL , 10 octets
EDIT (30 juillet 2016): le code lié remplace
9L
par1L
pour s'adapter aux évolutions récentes de la langue.Essayez-le en ligne!
la source
Python, 39 octets
Si, pour
n=1
, il est valide de sortirFalse
plutôt que0
, alors nous pouvons éviter la conversion du cas de base pour obtenir 37 octetsIl est étrange que je ne l' ai pas trouvé un moyen plus court pour obtenir
0
pouri*i>=n
et non nulle par ailleurs. En Python 2, on obtient toujours 39 octets avecla source
bool
est une sous-classe deint
Python, ce qui signifie queFalse
c'est une valeur acceptable pour0
.Python,
4238 octetsla source
Python 2, 38 octets
Basé sur la formule de Dennis , avec
s==-2*k
. Sort un flottant. En effet, l'entrée est enracinée au carré, décrémentée, puis arrondie au nombre pair suivant.la source
PARI / GP ,
333226 octetsAdapté du code de Dennis :
Ma première idée (30 octets), en utilisant une formule polynomiale simple:
Il s'agit d'une implémentation efficace, en fait pas très différente de la version non golfée que j'écrirais:
Une implémentation alternative (37 octets) qui fait une boucle sur chacun des carrés:
Une autre solution alternative (35 octets) démontrant la sommation sans variable temporaire:
Encore une autre solution, pas particulièrement compétitive (40 octets), utilisant la norme L 2 . Ce serait mieux s'il y avait un support pour les vecteurs avec des indices de taille de pas. (On pourrait imaginer la syntaxe
n->norml2([1..((n-1)^.5+1)\2..2])
qui laisserait tomber 8 octets.)la source
Haskell,
3231 octetsExemple d'utilisation:
(#1) 9802
->166650
.Edit: @xnor a enregistré un octet, avec une compréhension de liste intelligente. Merci!
la source
n#x=sum[x^2+n#(x+2)|x^2<n]
Julia, 29 octets
Il s'agit d'une fonction récursive qui accepte un entier et renvoie un entier.
Nous commençons un index à 1 et si son carré est inférieur à l'entrée, nous prenons le carré et ajoutons le résultat de la récusation sur l'index + 2, ce qui garantit que les nombres pairs sont ignorés, sinon nous retournons 0.
la source
Oracle SQL 11.2, 97 octets
la source
Julia, 26 octets
Ceci construit la plage de tous les entiers impairs positifs ci-dessous n et le tableau des carrés des entiers dans cette plage, puis calcule la somme des entiers dans les deux itérables.
Essayez-le en ligne!
la source
Reng v.3.3, 36 octets
Essayez-le ici!
Explication
1: initialisation
Définit
c
sur0
(le compteur) et l'entréeI
sur lam
hache.1ø
passe à la ligne suivante.2: boucle
:
duplique la valeur actuelle (le nombre impair au carré) et [jem
metsm
hache vers le bas. J'ai utilisé l'astuce moins que dans une autre réponse , que j'utilise ici.%:1,e
vérifie si le STOS <TOS. Si c'est le cas,q^
monte et sort de la boucle. Autrement:c
pose le compteur, le2*
double, en1+
ajoute un et le met au²
carré.c1+#C
incrémentsc
, et la boucle recommence.3: finale
$
supprime la dernière valeur (supérieure à celle souhaitée),a+¡
ajoute jusqu'à ce que la longueur de la pile soit 1,n~
sort et se termine.la source
Clojure, 53 octets
Vous pouvez le vérifier ici: https://ideone.com/WKS4DA
la source
Mathematica 30 octets
Cette fonction sans nom met au carré tous les nombres impairs de moins que l'entrée (
Range[1,Sqrt[#-1],2]
) et les ajoute.la source
PHP, 64 octets
Étendu:
À chaque itération de la
for
boucle, il ajoutera 2 à k et vérifiera si k 2 est inférieur à$i
, s'il ajoute k 2 à$a
.la source
R, 60 octets
Fait exactement comme décrit dans le défi, y compris retourner 0 pour le cas n = 1. Dégolfé, ';' représente un saut de ligne dans R, ignoré ci-dessous:
la source
Java 8,
128119117 11711149 octetsBasé sur la solution C # de @Thomas .
Explication:
Essayez-le en ligne.
la source
Python 2, 49 octets
Cela a fini par être plus court qu'un
lambda
.Essayez-le en ligne
Mon plus court
lambda
, 53 octets :la source