Considérez le triangle suivant.
1 23 456 7891 01112 131415 1617181 92021222 324252627 2829303132 33343536373 839404142434 4454647484950 51525354555657 585960616263646 5666768697071727 37475767778798081
Comme vous l'avez probablement remarqué, la première ligne est de longueur 1, et chaque ligne par la suite est 1 chiffre plus longue que la précédente et qu'elle contient les chiffres des entiers positifs concaténés.
Vous recevrez un entier N . Votre tâche consiste à trouver la somme des chiffres qui se trouvent sur la N ème ligne du triangle ci-dessus.
Règles
Vous pouvez choisir l'indexation 0 ou 1. Veuillez préciser cela dans votre réponse.
Les échappatoires par défaut s'appliquent.
Vous pouvez prendre des entrées et fournir des sorties par tout moyen standard et dans tout format raisonnable.
Il s'agit d' OEIS A066548 , et cette séquence est le triangle lui-même (sauf que nous ne supprimons pas les zéros en tête).
Il s'agit de code-golf , donc le code le plus court en octets (dans toutes les langues) l'emporte. Amusez-vous au golf!
Cas de test
Input | Output
0 | 1
1 | 5
2 | 15
3 | 25
4 | 5
5 | 15
6 | 25
7 | 20
8 | 33
9 | 33
10 | 43
11 | 46
12 | 64
Notez que ce qui précède est indexé 0. Si vous recherchez des cas de test indexés 1, incrémentez l'entrée de 1.
Sur une note assez indépendante, j'ai récemment changé ma photo de profil et cela m'a inspiré pour écrire ce défi.
n**2
estn*n
.sum(range(n)) = ~-n*n/2 = (n - 1) * n / 2
Haskell , 57 octets
Essayez-le en ligne!
la source
05AB1E , 8 octets
Essayez-le en ligne!
-1 merci à Emigna .
1-indexation.
la source
S
si vous le remplacezJ
parS
.Perl 6 ,
474542 octetsEssayez-le en ligne!
1 indexé
la source
Mathematica, 96 octets
Essayez-le en ligne! (pour travailler en mathématiques, "Tr" doit être remplacé par "Total")
la source
Gelée , 11 octets
Essayez-le en ligne!
Utilise l'indexation basée sur 1.
Explication
la source
Haskell,
6964 octetsEssayez-le en ligne.
5 octets enregistrés grâce à Laikoni !
Voici la version la moins golfée:
la source
n%x=sum[read[d]|d<-take n x]:(n+1)%drop n x
est quelques octets plus court.splitOn
cela économiserait des octets.R,
119109108 1089388 octetscommencer à jouer au golf .... 1 index
merci @Zachary. votre présomption est correcte :) rasé 1 octet tnx à @Andrius et 15 autres tnx à @ user2390246
@Giuseppe - tnx pour le strtoi. nouveau pour moi. 5 octets vers le bas :)
la source
y=
ni des parensn*(n-1)/2+1
, et le nom de la langue ne l'est probablement pas[R]
.as.integer
avecas.double
x
utiliser,F
car cela est déjà initialisé à 0.1:n+a-1
donne le même quea:(a+n-1)
. Dans ce cas, vous n'avez pas besoin de définira
à l'avance, vous pouvez simplement le mettre directement dans l'for
expression. Cela vous permettra également d'annuler un + 1 / -1.substring
place desubstr
car en réalité c'est juste une somme sur les indices de la sous-chaîne. De plus, il est toujours bon d'inclure un lien TIO pour vos solutions :) +1, excellent travail.Emojicode , 182 octets
Définit une méthode appelée © qui prend un 🚂 et retourne un 🚂. 1 indexé.
Essayez-le en ligne!
Explication:
Remarque: beaucoup de choix d'emoji n'a pas beaucoup de sens dans Emojicode 0.5. C'est 0.x, après tout. 0.6 corrigera cela, donc si vous voulez apprendre cela (car qui ne voudrait pas), je vous recommande d'attendre un moment.
Emojicode est un langage de programmation orienté objet comprenant des génériques, des protocoles, des options et des fermetures, mais ce programme n'utilise aucune fermeture, et tous les génériques et protocoles peuvent être considérés comme implicites.
Le programme ne fonctionne que sur quelques types: 🚂 est le type entier et 🔡 est le type chaîne. De plus, les 👌 apparaissent dans les conditions, qui peuvent prendre une valeur de 👍 (vrai) ou 👎 (faux).
Il n'y a actuellement aucun opérateur dans Emojicode, donc l'addition, les comparaisons et d'autres opérations qui sont normalement des opérateurs sont implémentées en tant que fonctions, ce qui fait que les expressions utilisent la notation de préfixe . Des opérateurs sont également prévus en 0.6.
© prend un 🚂 appelé
a
et renvoie un 🚂.Déclarez un gelé ("constant")
l
égal au nombre triangulaire (formule en notation de préfixe). Cela représente la longueur de la chaîne de nombres que nous devons générer.Attribuez une chaîne vide à la variable
t
.Attribuer
i = 0
.Bien que le
l
soit supérieur à la longueur det
i += 1
Ajoutez la représentation textuelle de la
i
base 10 àt
.Boucle de fin
Attribuer
s = 0
Prenez une sous-chaîne de
t
départ àl - a
(a - 1
e nombre triangulaire) de longueur a, parcourez tous les caractèresConvertissez le caractère en chaîne, analysez l'entier en base-10, déballez l'option (rien est renvoyé si la chaîne n'est pas un nombre) et ajoutez à la
s
variable.Boucle de fin
Retour
Méthode de fin.
la source
PHP, 66 + 1 octets
Exécutez en tant que pipe avec
-nR
ou essayez-le en ligne .nécessite PHP 5.4 ou une version ultérieure pour l'indexation de l'expression.
la source
Pyth, 24 octets
Essayez-le ici: http://pyth.herokuapp.com/
la source
APL,
282625 octetsUtilise l'indexation basée sur 1
Essayez-le en ligne!
Comment?
⍳⍵×⍵
, 1 par l'entrée au carré⍕¨
, transformez chaque élément en chaîne∊,/
, les concaténer ensemble(+/⍳⍵)↑
, saisissez les lignes jusqu'à l'entrée⍵↑⌽
, prenez la ligne souhaitée⍎¨
, transformez chaque élément en nombre+/
, sommela source
Clojure v1.8, 154 octets
1 indexé
Essayez-le en ligne!
Explication
la source
Java 8,
11698 octets1 indexé
-18 octets grâce à @Nevay
Explication:
Essayez-le ici.
la source
n->{String r="";int i=0,x=0;for(;x++<n*n;r+=x);for(x=0;x<n;)i+=r.charAt(x+++~-n*n/2)-48;return i;}
.R,
99,105, 97 octets1 indexé
version non golfée
Essayez-le ici!
merci à @Giuseppe pour avoir économisé 8 octets
la source
strtoi
Perl 6 , 44 octets
Essaye-le
Étendu:
la source
Gelée , 16 octets
Essayez-le en ligne!
1 indexé.
la source
SOGL V0.12 ,
1513 octetsEssayez-le ici!
1 indexé.
En travaillant là-dessus, j'ai corrigé un bogue qui
∑
empêchait les tableaux de chiffres de fonctionner et quim
prenait incorrectement des entrées implicites.Explication:
la source
C ++, 180 octets
-17 octets grâce à Zacharý
L'index commence à 1
la source
int s(int n){++n;std::string t;int i=0,p=0;for(;i<=n;)p+=i++;for(i=0;t.size()<p;t+=std::to_string(++i));t=t.substr(0,p);t=t.substr(t.size()-n);i=0;for(auto&a:t)i+=a-48;return i;}
++n;
"0" identifier is unknown
dans Visual Studio. Même chose pourto_string
etsize
. Vous pouvez le voir si vous copiez-collez le code dans notepad ++ et convertissez l'encodage en ANSI, vous en verrez??
dans l'éditeurPyth ,
15 1413 octetsEssayez-le ici! ou Découvrez la suite de tests.
Alternatives à 13 octets :
Comment?
la source
> <>, 141 + 2 octets
1-indexé
+ 2b pour le drapeau -v
Tio.run ne semble vraiment pas aimer mes programmes <<> récemment ... Il peut cependant être vérifié sur https://fishlanguage.com . L'entrée va dans la «pile initiale».
Edit: Il s'avère que tio.run ne l'aime pas car il gère '[' et ']' différemment de fishlanguage.com. fishlanguage.com inverse la pile lors de la création ou de la suppression d'une nouvelle pile, mais pas tio.run.
la source
Perl 5 , 62 + 1 (-p) = 63 octets
Essayez-le en ligne!
Le résultat est 1 indexé.
Comment?
Concaténez plus de suffisamment de chiffres ensemble, puis sautez ceux qui ne sont pas pertinents au début (la longueur du saut est la somme des entiers de 1 à
n-1
). Prenez lesn
chiffres suivants , placez un+
devant chacun, puis évaluez cette équation.la source
JavaScript (ES6),
7865 octets1 indexé. Edit: 13 octets enregistrés grâce à @tsh.
la source
n=>eval([...(g=n=>n?g(n-1)+n:'')(n*n)].join<+>.substr(~-n*n-1,2*n))
join`+`
fin ...