Votre tâche consiste à analyser l'entrée et la sortie de la formule du n-ième terme s'il s'agit d'une séquence arithmétique, sinon il devrait afficher "NAAP".
Contribution
L'entrée (à partir de STDIN) se composera de quelques nombres, entre 4 et 10 nombres où chaque nombre sera compris entre -1000 et 1000 inclus, séparés par un délimiteur (un espace ou une virgule ou un point-virgule [selon le cas) votre préférence]). Voici quelques exemples d'entrées.
12,14,16,18 //valid
-3 4 5 1 -2 -4 //valid
45;35;-35 //invalid (only three numbers are present instead of the minimum of 4 numbers)
2,32;21,321 //invalid (it uses two different delimiters: `,` and `;`)
Production
Le programme doit d'abord vérifier si l'entrée est une progression arithmétique ou non.
Progressions arithmétiques (AP) en bref: chaque AP aura une différence commune. Il s'agit de la différence entre les termes $ n $ et $ {n-1} $ th (essentiellement $ a (n + 1) - a (n) $ où a
est la fonction pour la séquence). Cette différence reste la même pour toute valeur de $ n $ dans un AP. S'il n'y a pas de différence commune, ce n'est pas une séquence arithmétique. Pour calculer la valeur du n-ième terme, utilisez cette formule $ a (n) = a (1) + (n-1) d $ où $ a (1) $ est le premier terme et $ d $ est le commun différence.
S'il ne s'agit pas d' une progression arithmétique, le programme doit afficher le message d'erreur "NAAP" (abréviation de "Not An Arithmetic Progression").
S'il s'agit d' une progression arithmétique, le programme doit imprimer le nième terme simplifié de la séquence dans STDOUT.
Exemple:
> 1,3,5,7,9
2n-1
Explication: Il s'agit d'un point d'accès car il existe une différence commune (3 $ - 1 = 2 $). Ensuite, vous utilisez la formule $ a (n) = a (1) + (n-1) d $
Par conséquent, la sortie est 2n-1
(notez l'absence d'espaces)
Les failles standard sont interdites par défaut.
Vous êtes autorisé à créer une fonction si vous le souhaitez (avec le tableau de nombres comme paramètre). Sinon, vous devez créer un programme complet qui prend les entrées sous forme de chaîne ou de tableau et sort en conséquence.
Cas de test:
1.
1,3,5,7,9
2n-1
2.
1 3 12312 7 9
NAAP
3.
-6;8;22;36;50
14n-20
4.
5,1,-3,-7,-11,-15
-4n+9
5.
-5,-7,-9,-11,-13,-15
-2n-3
6.
3,3,3,3,3,3,3,3,3
0n+3
sept.
-4,-5,-6,-7
-1n-3
C'est du code-golf donc le code le plus court en octets gagne! (désolé pour mauvais math-jax)
Toutes les suggestions sont les bienvenues!
la source
0,0,0,0
et3,1,-1,-3,-5
progressions arithmétiques? Si c'est le cas, je pense que ce seraient de bons cas de test, car ils ont cassé une méthode que j'essayais.Réponses:
Pyth, 30 octets
Suite de tests
Pour vérifier s'il s'agit d'une procession arithmétique, celle-ci utilise une soustraction vectorisée entre chaque élément et le précédent
-VtQQ
,. Un ternaire vérifie s'il y a plusieurs valeurs dans le résultat (?tJ{
) et imprime leNAAP
cas échéant. Ensuite, pour obtenir le bon+
ou le-
meilleur, le mod-formatage%+d
est utilisé.la source
Haskell, 103 octets
Exemple d'utilisation:
Comme toujours dans Haskell, un formatage de sortie sophistiqué (par exemple, mélanger des nombres avec des chaînes) consomme beaucoup d'octets (environ 40). La logique du programme est assez compacte:
la source
TI-BASIC, 70 octets
Pour remédier au manque de conversion de nombre en chaîne de TI-BASIC, cela utilise la sortie sur le graphscreen (
Text(
) si la progression est arithmétique, qui concatène automatiquement les arguments ensemble.Cela suppose que les nombres négatifs sont entrés en utilisant le caractère haut négatif de TI-BASIC (qui ressemble un peu
⁻
), pas le signe moins binaire. Cependant, la sortie utilise le signe moins binaire.la source
Japt ,
605251 octetsEssayez-le en ligne!
L'entrée peut être donnée avec le séparateur que vous aimez, car c'est ainsi que l'interprète est conçu;)
Non golfé et explication
la source
Matlab, 103 octets
la source
CJam, 38 octets
Il s'agit d'une fonction anonyme qui prend un tableau sur la pile en entrée et laisse une chaîne sur la pile en sortie. Essayez-le en ligne avec du code d'E / S supplémentaire pour les tests.
Explication:
la source
JavaScript (ES6), 91 octets
Explication
Tester
la source
Perl 6,
123102101 101 octetsEDIT: Ne niez pas la différence
EDIT: utilisez des sous-opérateurs anonymes, des opérateurs logiques et une interpolation de chaînes. Merci Brad Gilbert b2gills
Programme de test (lit depuis stdin):
Explication:
la source
sub f
. De plus, si vous l'utilisiez@_
au lieu de@a
vous, vous économiseriez plusieurs octets.{my@b=@_.rotor...
. Aussi , vous ne devriez pas mettre parens autour de la condition d'uneif
déclaration, ce n'est pas Perl 5. Si vous avez changé queif
pour@b.end&&"NAAP"||$_=...
vous économiseriez quelques octets. Vous pouvez également supprimer cette dernièreif
instruction si vous l'avez utilisée à la"@b[0]n{'+'x($_>=0)}$_"
place, en économisant 4 octets.sub
au début, sans cela il devient un bloc anonyme. Juste pour que vous le sachiez, je n'aurais pas pensé à utiliser.map({[-] $_})
j'aurais probablement utilisé».map(*-*).flat
ce qui est plus long, maintenant je dois parcourir mes propres entrées pour voir si je peux le raccourcir avec votre astuce.Rubis,
957876 octets78 octets
95 octets
Non golfé:
Usage:
la source
Python 3, 92 octets
Basé sur ma réponse de Find the Sequence
def m(t):s=str;a=t[0];b=t[1];q=b-a;return((s(q)+'n'+'+'*(0<a-q)+s(a-q)),'NAAP')[t[2]/b==b/a]
la source