Nous sommes habitués au terme "quadrature" n pour désigner le calcul de n 2 . Nous sommes également habitués au terme "cubing" n pour signifier n 3 . Cela étant dit, pourquoi ne pourrions-nous pas également trianguler un nombre?
Comment trianguler un nombre?
Tout d'abord, choisissons un nombre
53716
,.Placez-le dans un parallélogramme, dont la longueur du côté est égale au nombre de chiffres du nombre, et a deux côtés positionnés en diagonale, comme indiqué ci-dessous.
53716 53716 53716 53716 53716
Maintenant, nous voulons le faire, non? Pour ce faire, recadrez les côtés qui ne rentrent pas dans un triangle rectangle:
5 53 537 5371 53716
Prenez les sommes de chaque ligne, pour cet exemple résultant en
[5, 8, 15, 16, 22]
:5 -> 5 53 -> 8 537 -> 15 5371 -> 16 53716 -> 22
Additionnez la liste
[5, 8, 15, 16, 22]
, résultant en66
. Ceci est le triangle de ce nombre!
Spécifications et règles
L'entrée sera un entier non négatif n ( n ≥ 0, n ∈ Z ).
Vous pouvez prendre des entrées et fournir des sorties par tout moyen autorisé .
L'entrée peut être formatée sous la forme d'un entier, d'une représentation sous forme de chaîne de l'entier ou d'une liste de chiffres.
Les failles par défaut ne sont pas autorisées.
C'est le code-golf , donc le code le plus court en octets gagne!
Plus de cas de test
Entrée -> Sortie 0 -> 0 1 -> 1 12 -> 4 123 -> 10 999 -> 54 100000 -> 6 654321 -> 91
Inspiration. Les explications sont encouragées!
la source
645321 -> 91
?645321
au lieu de654321
.Réponses:
Haskell , 13 octets
Essayez-le en ligne!
Prend la saisie sous forme de liste de chiffres. Calcule les sommes cumulées puis les additionne.
la source
Husk ,
4̷2 octetsMerci @ H.PWiz pour les
-2
octets!Essayez-le en ligne!
"Ungolfed" / Expliqué
la source
Brain-Flak ,
65, 50,36 octetsEssayez-le en ligne!
Après de nombreuses révisions, je suis maintenant très fier de cette réponse. J'aime l'algorithme, et à quel point il peut être exprimé en brain-flak.
La plupart du nombre d'octets provient de la gestion des 0 en entrée. En fait, si nous pouvions supposer qu'il n'y avait pas de 0 dans l'entrée, ce serait une réponse magnifiquement courte de 20 octets:
Essayez-le en ligne!
Mais malheureusement, brain-flak est connu pour une mauvaise gestion des cas marginaux.
Explication
Tout d'abord, une de mes observations:
Si l'entrée comporte n chiffres, le premier chiffre apparaîtra dans le triangle n fois, le deuxième chiffre n-1 fois, et ainsi de suite sur le dernier chiffre, qui apparaîtra une fois. Nous pouvons en profiter, car il est très facile de calculer combien de chiffres d'entrée sont laissés dans brain-flak, à savoir
Voici donc comment fonctionne le code.
la source
Pyth -
64 octetsEssayez-le en ligne ici .
Un joli 6 octets qui n'utilise pas de préfixe intégré:
la source
s.e*bhk_
MATL , 3 octets
Essayez-le en ligne!
Prend l'entrée comme une liste de chiffres.
la source
Gelée , 3 octets
Essayez-le en ligne! Utilise la même technique que ma réponse Japt: addition cumulative, puis somme.
la source
Haskell , 25 octets
Prend la saisie sous forme de liste de chiffres
Essayez-le en ligne!
Haskell , 41 octets
Prend l'entrée comme représentation de chaîne
Essayez-le en ligne!
la source
Japt ,
764 octetsEssayez-le en ligne!
Explication
Ancienne solution:
Essayez-le en ligne!
Explication
la source
Brain-Flak , 28 octets
Essayez-le en ligne!
14 octets si nous n'avons pas besoin de prendre en charge les zéros (ce que nous faisons)
Essayez-le en ligne!
DJMcMayhem a une réponse intéressante ici, vous devriez vérifier. Malheureusement pour lui, je n'allais pas le laisser gagner dans sa propre langue: P
Comment ça marche?
Commençons par la version simple.
L'action principale ici est
({}<>{})<>
, qui prend le haut de la pile de gauche et s'ajoute au haut de la pile de droite. En bouclant cette opération, nous résumons la pile actuelle (jusqu'à ce qu'elle atteigne un zéro) en plaçant la somme sur la pile désactivée. C'est assez banal, la partie intéressante est que nous résumons les résultats de toutes ces courses comme notre résultat. Cela calculera la valeur souhaitée. Pourquoi? Jetons un coup d'œil à un exemple123
,. Lors de la première prise, nous obtenons juste 1, donc notre valeur est 1Lors de la prochaine prise, nous retournons 1 plus le 2
Lors de la dernière manche, nous avons tous les trois ensemble
Voyez-vous le triangle? La somme de toutes les courses est le "triangle" de la liste.
Ok mais maintenant nous en avons besoin pour travailler avec des zéros, ici j'ai utilisé la même astuce que DJMcMayhem, plus quelques jeux de jambes fantaisistes. Au lieu de boucler jusqu'à ce que nous atteignions un zéro, nous bouclons jusqu'à ce que la pile soit vide.
J'ai ensuite utilisé cette astuce , écrite par nul autre que le vôtre, pour jouer au golf sur 2 autres octets.
Et nous l'avons. Je serais surpris s'il y avait une solution plus courte, mais là encore, des choses plus étranges se sont produites.
la source
Unfortunately for him I wasn't about to let him win at his own language :P
Je n'attends rien de moins de toi. : DJavaScript (ES6), 28 octets
Prend la saisie sous forme de liste de chiffres.
la source
Python 3 , 37 octets
Essayez-le en ligne!
la source
len
àsum
aussi bien, mais je ne crois pas que quoi que ce soit aide.sum([])
c'est 0, mais rien ne se passait vraiment bien ... il pourrait y avoir un moyen cependantC # (.NET Core) , 59 octets
Essayez-le en ligne!
Substantiellement différent des autres réponses C #. L'entrée est une liste de chiffres. Tous les cas de test inclus dans le lien TIO.
Pourrait enregistrer un tas d'octets s'il était autorisé à prendre l'entrée comme une liste de chiffres en arrière avec 0 en tête.
la source
number
, pas comme une liste de chiffres?Python 3 , 35 octets
Je viens de remarquer que ce n'est vraiment qu'un léger golf de la réponse de Business Cat à la fin!
Essayez-le en ligne!
la source
J , 7 octets
Essayez-le en ligne! Prend une liste de chiffres, tels que
f 6 5 4 3 2 1
.Explication
Un peu plus fidèle au problème d'origine serait
[:+/@,]/
, qui est "somme" (+/
) les,
préfixes aplatis ( ) de l'entrée (]\
).la source
Vim ,
605932 touchesMerci beaucoup @CowsQuack pour l'astuce avec la macro récursive et l'
h
astuce, cela m'a fait gagner 27 octets!Essayez-le en ligne!
Non golfé / expliqué
Cela va construire le triangle comme décrit (seulement qu'il le maintient aligné à gauche):
Le tampon ressemble maintenant à ceci:
Joignez toutes les lignes en une et créez une expression évaluable à partir de celle-ci:
Le
"
registre contient maintenant la chaîne suivante (note 0 manquante):Il nous suffit donc d'ajouter un zéro et de l'évaluer:
la source
&
(tout le match) au lieu de\1
dans la commande de remplacementqqYp$xq:exe"norm".col('.')."@q"⏎
peut devenirqqYp$xh@qq@q
. Cette macro récursive rencontrera une erreur de rupture lorsqu'il y aura un caractère sur la ligne, après quoi elle s'arrêtera.:s/./&+/g
.:%j⏎
Peut aussi devenirV{J
. Et,Di
peut devenirC
(j'ai déjà commenté cela dans une autre de vos réponses Vim). Essayez-le en ligne!Python 2 ,
4945 octets-4 octets grâce à M. Xcoder.
Essayez-le en ligne!
Prend la saisie sous forme de liste de chiffres.
la source
Utilitaires Bash + GNU,
3224Entrée lue depuis STDIN.
Mise à jour: je vois que l'entrée peut être donnée sous la forme d'une liste de chiffres. Ma liste d'entrées est délimitée par des sauts de ligne.
Essayez-le en ligne .
Explication
la source
APL, 4 octets
Cela prend l'entrée comme une liste de chiffres, par exemple:
Explication
la source
Taxi , 1478 octets
Essayez-le en ligne!
Non-golfé:
la source
Perl 5 , 19 + 1 (
-p
) = 20 octetsEssayez-le en ligne!
Comment?
$ \ contient le total cumulé, $ p contient le total des chiffres de la ligne courante. Chaque ligne du parallélogramme est simplement la ligne précédente avec le chiffre suivant du numéro ajouté. C'est donc la somme de la ligne précédente plus le nouveau chiffre. Cela itère sur tous les chiffres, calculant les sommes au fur et à mesure. La substitution réelle n'est pas pertinente; c'est juste un moyen de parcourir les chiffres sans créer de boucle réelle. À la fin, $ \ est imprimé implicitement par le
-p
option.la source
Python 2 , 56 octets
Essayez-le en ligne!
la source
Gelée ,
54 octetsUn lien monadique prenant une liste de chiffres décimaux et renvoyant le triangle du nombre que cette liste représente.
Essayez-le en ligne!
Comment?
la source
€
fonctionnerait toujours. Dommage ...Rétine , 13 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication: la première étape génère tous les préfixes du numéro d'origine, la deuxième étape convertit chaque chiffre en unaire et la troisième étape prend le total.
la source
Mathematica, 49 octets
la source
#.Range[Length@#,1,-1]&
#.Range[Tr[1^#],1,-1]&
Tr@*Accumulate
Neim , 3 octets
Explication:
Essayez-le en ligne!
Réponse alternative:
Explication:
Essayez-le en ligne!
la source
Java 8, 53 octets
J'ai implémenté un lambda pour chaque type d'entrée acceptable. Ils parcourent chacun les chiffres du nombre, ajoutant le multiple approprié de chacun à un accumulateur.
Entier en entrée (53 octets)
Lambda de
Integer
àInteger
:Représentation de chaîne en entrée (72 octets)
Lambda de
String
àInteger
:Tableau de chiffres en entrée (54 octets)
Lambda de
int[]
(des chiffres, la plus grande valeur de position en premier) àInteger
:la source
Pyt ,
96 octetsExplication:
la source
Python 3,
945854 octetsMerci à M. Xcoder de m'avoir aidé à économiser pas mal d'octets!
Essayez-le en ligne!
Prend l'entrée sous forme de chaîne. Il multiplie simplement chaque chiffre par le nombre de fois qu'il doit être ajouté et renvoie leur somme.
la source
0
. Sip
doit toujours l'être0
, vous devez remplacer lep
parp=0
dans lalambda
déclaration. Cependant, vous pouvez simplement supprimerp
entièrement pour obtenir 54 octetsSNOBOL4 (CSNOBOL4) , 79 octets
Essayez-le en ligne!
Entrée depuis stdin, sortie vers stdout.
la source
Lisp commun,
5352 octetsSaisie sous forme de liste de chiffres.
Essayez-le en ligne!
-1 octet grâce à @ceilingcat.
la source
apply
sont appliqués à des listes très longues en raison decall-arguments-limit
.